Author: mattip <matti.pi...@gmail.com> Branch: numpypy-complex2 Changeset: r57194:d4fe1f554cae Date: 2012-09-06 22:55 +0300 http://bitbucket.org/pypy/pypy/changeset/d4fe1f554cae/
Log: finish complex128 basic ufuncs, complex64 ufuncs need space support diff --git a/pypy/module/micronumpy/interp_boxes.py b/pypy/module/micronumpy/interp_boxes.py --- a/pypy/module/micronumpy/interp_boxes.py +++ b/pypy/module/micronumpy/interp_boxes.py @@ -298,13 +298,13 @@ dtype = self._COMPONENTS_BOX._get_dtype(space) box = self.convert_real_to(dtype) assert isinstance(box, self._COMPONENTS_BOX) - return space.wrap(box) + return space.wrap(box.value) def descr_get_imag(self, space): dtype = self._COMPONENTS_BOX._get_dtype(space) box = self.convert_imag_to(dtype) assert isinstance(box, self._COMPONENTS_BOX) - return space.wrap(box) + return space.wrap(box.value) class W_Complex128Box(ComplexBox, W_ComplexFloatingBox): descr__new__, _get_dtype = new_dtype_getter("complex128") 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 @@ -1021,7 +1021,7 @@ ) tested_funcs=[] fail_at_end = False - for complex_, abs_err in ((np.complex128, 5e-323), (np.complex64, 5e-32)): + for complex_, abs_err in ((np.complex64, 5e-32), (np.complex128, 5e-323), ): for id, fn, ar, ai, er, ei, flags in parse_testfile(testcases): arg = complex_(complex(ar, ai)) expected = (er, ei) @@ -1031,6 +1031,8 @@ fn = 'arc' + fn[1:] elif fn.startswith('atan'): fn = 'arc' + fn[1:] + elif fn in ('rect', 'polar'): + continue function = getattr(np, fn) _actual = function(arg) actual = (_actual.real, _actual.imag) diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py --- a/pypy/module/micronumpy/types.py +++ b/pypy/module/micronumpy/types.py @@ -1223,24 +1223,28 @@ @complex_unary_op def sin(self, v): if math.isinf(v[0]): + if v[1] == 0.: + return rfloat.NAN, 0. if isfinite(v[1]): + return rfloat.NAN, rfloat.NAN + elif not math.isnan(v[1]): return rfloat.NAN, rfloat.INFINITY - elif not math.isnan(v[1]): - return rfloat.INFINITY, rfloat.NAN return rcomplex.c_sin(*v) @complex_unary_op def cos(self, v): if math.isinf(v[0]): + if v[1] == 0.: + return rfloat.NAN, 0.0 if isfinite(v[1]): - return rfloat.NAN, 0.0 + return rfloat.NAN, rfloat.NAN elif not math.isnan(v[1]): return rfloat.INFINITY, rfloat.NAN return rcomplex.c_cos(*v) @complex_unary_op def tan(self, v): - if isinf(v[0]) and isfinite(v[1]): + if math.isinf(v[0]) and isfinite(v[1]): return rfloat.NAN, rfloat.NAN return rcomplex.c_tan(*v) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit