[pypy-dev] numpy fails trigonometry with complex numbers, what to do?

Matti Picus matti.picus at gmail.com
Wed Sep 5 03:30:00 CEST 2012


I am trying to complete complex numbers in numpypy.
Progress is good, I picked up from previous work on the numpypy-complex2 
branch.
Complex numbers come with extensive tests, it seems all the corner cases 
are covered.
In porting the tests to numpypy, I came across a problem: numpy returns 
different results than cmath.
Some of the differences are due to the fact that numpy does not raise a 
ValueError for dividing by 0 or other silly input values,
but other differences are inexplicable (note the sign of the imaginary 
part):
 >>> numpy.arccos(complex(0.,-0.))
(1.5707963267948966-0j)
 >>> cmath.acos(complex(0.,-0.))
(1.5707963267948966+0j)
 >>>

or this one:
 >>> cmath.acos(complex(float('inf'),2.3))
-infj
 >>> numpy.arccos(complex(float('inf'),2.3))
(0.78539816339744828-inf*j)

Should I ignore the inconsistencies, or fix the 700 out of 2300 test 
instance failures?
What should pypy's numpypy do - be consistent with numpy or with cmath?
cmath is easier and probably faster (no need to mangle results or input 
args), so I would prefer cmath to trying to understand the logic behind 
numpy.
Matti




2280c2365844


More information about the pypy-dev mailing list