Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r47807:755ade32727d
Date: 2011-10-03 16:23 -0400
http://bitbucket.org/pypy/pypy/changeset/755ade32727d/
Log: added numpy.arctanh.
diff --git a/pypy/module/micronumpy/__init__.py
b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -24,6 +24,7 @@
("arcsin", "arcsin"),
("arctan", "arctan"),
("arcsinh", "arcsinh"),
+ ("arctanh", "arctanh"),
("copysign", "copysign"),
("cos", "cos"),
("divide", "divide"),
diff --git a/pypy/module/micronumpy/interp_dtype.py
b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -260,12 +260,12 @@
return math.tan(v)
@unaryop
def arcsin(self, v):
- if v < -1.0 or v > 1.0:
+ if not -1.0 <= v <= 1.0:
return rfloat.NAN
return math.asin(v)
@unaryop
def arccos(self, v):
- if v < -1.0 or v > 1.0:
+ if not -1.0 <= v <= 1.0:
return rfloat.NAN
return math.acos(v)
@unaryop
@@ -274,6 +274,13 @@
@unaryop
def arcsinh(self, v):
return math.asinh(v)
+ @unaryop
+ def arctanh(self, v):
+ if v == 1.0 or v == -1.0:
+ return math.copysign(rfloat.INFINITY, v)
+ if not -1.0 < v < 1.0:
+ return rfloat.NAN
+ return math.atanh(v)
class IntegerArithmeticDtype(ArithmeticTypeMixin):
_mixin_ = True
diff --git a/pypy/module/micronumpy/interp_ufuncs.py
b/pypy/module/micronumpy/interp_ufuncs.py
--- a/pypy/module/micronumpy/interp_ufuncs.py
+++ b/pypy/module/micronumpy/interp_ufuncs.py
@@ -313,6 +313,7 @@
("arccos", "arccos", 1, {"promote_to_float": True}),
("arctan", "arctan", 1, {"promote_to_float": True}),
("arcsinh", "arcsinh", 1, {"promote_to_float": True}),
+ ("arctanh", "arctanh", 1, {"promote_to_float": True}),
]:
self.add_ufunc(space, *ufunc_def)
diff --git a/pypy/module/micronumpy/test/test_ufuncs.py
b/pypy/module/micronumpy/test/test_ufuncs.py
--- a/pypy/module/micronumpy/test/test_ufuncs.py
+++ b/pypy/module/micronumpy/test/test_ufuncs.py
@@ -306,6 +306,17 @@
assert math.asinh(v) == arcsinh(v)
assert math.isnan(arcsinh(float("nan")))
+ def test_arctanh(self):
+ import math
+ from numpy import arctanh
+
+ for v in [.99, .5, 0, -.5, -.99]:
+ assert math.atanh(v) == arctanh(v)
+ for v in [2.0, -2.0]:
+ assert math.isnan(arctanh(v))
+ for v in [1.0, -1.0]:
+ assert arctanh(v) == math.copysign(float("inf"), v)
+
def test_reduce_errors(self):
from numpy import sin, add
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit