提交 35a37e39 authored 作者: Nicolas Bouchard's avatar Nicolas Bouchard

Wrap arccosh from numpy, elemwise.

上级 d3479239
...@@ -2116,6 +2116,25 @@ class Cosh(UnaryScalarOp): ...@@ -2116,6 +2116,25 @@ class Cosh(UnaryScalarOp):
cosh = Cosh(upgrade_to_float, name='cosh') cosh = Cosh(upgrade_to_float, name='cosh')
class ArcCosh(UnaryScalarOp):
def impl(self, x):
return numpy.arccosh(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
if x.type in float_types:
return gz / sqrt(sqr(x) - numpy.cast[x.type](1)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = acosh(%(x)s);" % locals()
arccosh = ArcCosh(upgrade_to_float, name='arccosh')
class Sinh(UnaryScalarOp): class Sinh(UnaryScalarOp):
""" """
sinh(x) = (exp(x) - exp(-x)) / 2 sinh(x) = (exp(x) - exp(-x)) / 2
......
...@@ -2585,6 +2585,7 @@ def arcsin(a): ...@@ -2585,6 +2585,7 @@ def arcsin(a):
def tan(a): def tan(a):
"""tangent of a""" """tangent of a"""
@_scal_elemwise_with_nfunc('arctan', 1, 1) @_scal_elemwise_with_nfunc('arctan', 1, 1)
def arctan(a): def arctan(a):
"""arctangent of a""" """arctangent of a"""
...@@ -2595,6 +2596,11 @@ def cosh(a): ...@@ -2595,6 +2596,11 @@ def cosh(a):
"""hyperbolic cosine of a""" """hyperbolic cosine of a"""
@_scal_elemwise_with_nfunc('arccosh', 1, 1)
def arccosh(a):
"""hyperbolic arc cosine of a"""
@_scal_elemwise_with_nfunc('sinh', 1, 1) @_scal_elemwise_with_nfunc('sinh', 1, 1)
def sinh(a): def sinh(a):
"""hyperbolic sine of a""" """hyperbolic sine of a"""
......
...@@ -167,6 +167,10 @@ def arctan_inplace(a): ...@@ -167,6 +167,10 @@ def arctan_inplace(a):
def cosh_inplace(a): def cosh_inplace(a):
"""hyperbolic cosine of `a` (inplace on `a`)""" """hyperbolic cosine of `a` (inplace on `a`)"""
@_scal_inplace
def arccosh_inplace(a):
"""hyperbolic arc cosine of `a` (inplace on `a`)"""
@_scal_inplace @_scal_inplace
def sinh_inplace(a): def sinh_inplace(a):
"""hyperbolic sine of `a` (inplace on `a`)""" """hyperbolic sine of `a` (inplace on `a`)"""
......
...@@ -1069,6 +1069,8 @@ CosInplaceTester = makeBroadcastTester(op = inplace.cos_inplace, ...@@ -1069,6 +1069,8 @@ CosInplaceTester = makeBroadcastTester(op = inplace.cos_inplace,
good = _good_broadcast_unary_wide, good = _good_broadcast_unary_wide,
grad = _grad_broadcast_unary_wide, grad = _grad_broadcast_unary_wide,
inplace = True) inplace = True)
ArccosTester = makeBroadcastTester(op = tensor.arccos, ArccosTester = makeBroadcastTester(op = tensor.arccos,
expected = numpy.arccos, expected = numpy.arccos,
good = _good_broadcast_unary_arccos, good = _good_broadcast_unary_arccos,
...@@ -1107,8 +1109,6 @@ ArctanTester = makeBroadcastTester(op = tensor.tan, ...@@ -1107,8 +1109,6 @@ ArctanTester = makeBroadcastTester(op = tensor.tan,
good = _good_broadcast_unary_wide, good = _good_broadcast_unary_wide,
grad = _grad_broadcast_unary_wide, grad = _grad_broadcast_unary_wide,
grad_rtol=tan_grad_rtol) grad_rtol=tan_grad_rtol)
ArctanInplaceTester = makeBroadcastTester(op = inplace.tan_inplace, ArctanInplaceTester = makeBroadcastTester(op = inplace.tan_inplace,
expected = numpy.tan, expected = numpy.tan,
good = _good_broadcast_unary_wide, good = _good_broadcast_unary_wide,
...@@ -1127,6 +1127,25 @@ CoshInplaceTester = makeBroadcastTester(op = inplace.cosh_inplace, ...@@ -1127,6 +1127,25 @@ CoshInplaceTester = makeBroadcastTester(op = inplace.cosh_inplace,
grad = _grad_broadcast_unary_normal, grad = _grad_broadcast_unary_normal,
inplace = True) inplace = True)
_good_broadcast_unary_arccosh = dict(normal = (rand_ranged(1, 1000, (2, 3)),),
integers = (randint_ranged(1, 1000, (2, 3)),),
complex = (randc128_ranged(1, 1000, (2, 3)),),
empty = (numpy.asarray([]),),)
_grad_broadcast_unary_arccosh = dict(normal = (rand_ranged(1, 1000, (2, 3)),),)
ArccoshTester = makeBroadcastTester(op = tensor.arccosh,
expected = numpy.arccosh,
good = _good_broadcast_unary_arccosh,
grad = _grad_broadcast_unary_arccosh)
ArccoshInplaceTester = makeBroadcastTester(op = inplace.arccosh_inplace,
expected = numpy.arccosh,
good = _good_broadcast_unary_arccosh,
grad = _grad_broadcast_unary_arccosh,
inplace = True)
SinhTester = makeBroadcastTester(op = tensor.sinh, SinhTester = makeBroadcastTester(op = tensor.sinh,
expected = numpy.sinh, expected = numpy.sinh,
good = _good_broadcast_unary_normal, good = _good_broadcast_unary_normal,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论