提交 455ce72d authored 作者: Nicolas Bouchard's avatar Nicolas Bouchard

Add trunc.

上级 3b4c7213
...@@ -1719,6 +1719,18 @@ class Floor(UnaryScalarOp): ...@@ -1719,6 +1719,18 @@ class Floor(UnaryScalarOp):
floor = Floor(same_out_nocomplex, name='floor') floor = Floor(same_out_nocomplex, name='floor')
class Trunc(UnaryScalarOp):
def impl(self, x):
return numpy.trunc(x)
def grad(self, (x,), (gz,)):
return None,
def c_code(self, node, name, (x,), (z,), sub):
return "%(z)s = %(x)s >= 0? floor(%(x)s): -floor(-%(x)s);" % locals()
trunc = Trunc(same_out_nocomplex, name='trunc')
class RoundHalfToEven(UnaryScalarOp): class RoundHalfToEven(UnaryScalarOp):
""" """
This function implement the same rounding than numpy: Round half to even This function implement the same rounding than numpy: Round half to even
......
...@@ -2630,6 +2630,11 @@ def floor(a): ...@@ -2630,6 +2630,11 @@ def floor(a):
"""floor of a""" """floor of a"""
@_scal_elemwise_with_nfunc('trunc', 1, 1)
def trunc(a):
"""trunc of a"""
@constructor @constructor
def iround(a, mode="half_away_from_zero"): def iround(a, mode="half_away_from_zero"):
"""cast(round(a,mode),'int64')""" """cast(round(a,mode),'int64')"""
......
...@@ -131,6 +131,10 @@ def ceil_inplace(a): ...@@ -131,6 +131,10 @@ def ceil_inplace(a):
def floor_inplace(a): def floor_inplace(a):
"""floor of `a` (inplace on `a`)""" """floor of `a` (inplace on `a`)"""
@_scal_inplace
def trunc_inplace(a):
"""trunc of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def round_half_to_even_inplace(a): def round_half_to_even_inplace(a):
"""round_half_to_even_inplace(a) (inplace on `a`)""" """round_half_to_even_inplace(a) (inplace on `a`)"""
......
...@@ -909,6 +909,16 @@ FloorTester = makeBroadcastTester(op=tensor.floor, ...@@ -909,6 +909,16 @@ FloorTester = makeBroadcastTester(op=tensor.floor,
# yet it does not... # yet it does not...
grad=_grad_broadcast_unary_normal) grad=_grad_broadcast_unary_normal)
TruncInplaceTester = makeBroadcastTester(
op=inplace.floor_inplace,
expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype),
good=_good_broadcast_unary_normal_no_complex,
inplace=True)
TruncTester = makeBroadcastTester(
op=tensor.floor,
expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype),
good=_good_broadcast_unary_normal_no_complex)
FloorInplaceTester = makeBroadcastTester(op=inplace.floor_inplace, FloorInplaceTester = makeBroadcastTester(op=inplace.floor_inplace,
expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype), expected=lambda a: numpy.asarray(numpy.floor(a), a.dtype),
good=_good_broadcast_unary_normal_no_complex, good=_good_broadcast_unary_normal_no_complex,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论