Author: mattip <[email protected]>
Branch: numpypy-longdouble
Changeset: r59409:bd6c0279e8fb
Date: 2012-12-12 13:50 -0800
http://bitbucket.org/pypy/pypy/changeset/bd6c0279e8fb/
Log: add failing tests for float128 (64 bit linux)
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
@@ -1,4 +1,5 @@
from pypy.interpreter.mixedmodule import MixedModule
+from pypy.module.micronumpy.interp_boxes import long_double_size
class Module(MixedModule):
@@ -165,3 +166,8 @@
'max': 'app_numpy.max',
'arange': 'app_numpy.arange',
}
+
+if long_double_size == 16:
+ Module.interpleveldefs['float128'] = 'interp_boxes.W_Float128Box'
+elif long_double_size == 12:
+ Module.interpleveldefs['float96'] = 'interp_boxes.W_Float96Box'
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
@@ -430,7 +430,7 @@
kind=FLOATINGLTR,
name="float128",
char="g",
- w_box_type=space.gettypefor(interp_boxes.W_Floati128Box),
+ w_box_type=space.gettypefor(interp_boxes.W_Float128Box),
aliases=["longfloat", "longdouble"],
)
longdouble = self.w_float128dtype
diff --git a/pypy/module/micronumpy/test/test_numarray.py
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -2110,7 +2110,7 @@
def test_fromstring_types(self):
from _numpypy import (fromstring, int8, int16, int32, int64, uint8,
- uint16, uint32, float16, float32, float64)
+ uint16, uint32, float16, float32, float64, longfloat, array)
a = fromstring('\xFF', dtype=int8)
assert a[0] == -1
b = fromstring('\xFF', dtype=uint8)
@@ -2133,12 +2133,18 @@
assert j[0] == 12
k = fromstring(self.float16val, dtype=float16)
assert k[0] == float16(5.)
- try:
+ dt = array([5],dtype=longfloat).dtype
+ if dt.itemsize == 12:
from _numpypy import float96
- except:
- skip('no float96 on this platform/compiler, maybe try float128?')
- k = fromstring('\x00\x00\x00\x00\x00\x00\x00\xa0\x01@\x00\x00',
dtype=float96)
- assert k[0] == float96(5.)
+ m = fromstring('\x00\x00\x00\x00\x00\x00\x00\xa0\x01@\x00\x00',
dtype=float96)
+ elif dt.itemsize==16:
+ from _numpypy import float128
+ m =
fromstring('\x00\x00\x00\x00\x00\x00\x00\xa0\x01@\x9c\xd3#\x7f\x00\x00',
dtype=float128)
+ elif dt.itemsize == 8:
+ skip('longfloat is float64')
+ else:
+ skip('unknown itemsize for longfloat')
+ assert m[0] == longfloat(5.)
def test_fromstring_invalid(self):
from _numpypy import fromstring, uint16, uint8, int32
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
@@ -989,12 +989,10 @@
BoxType = interp_boxes.W_Float96Box
format_code = "q"
- class NonNativeFloat96(BaseType, NonNativeFloat):
- _attrs_ = ()
+ class NonNativeFloat96(Float96):
+ pass
- T = rffi.LONGDOUBLE
- BoxType = interp_boxes.W_Float96Box
- format_code = "q"
+
elif interp_boxes.long_double_size == 16:
class Float128(BaseType, Float):
_attrs_ = ()
@@ -1003,12 +1001,14 @@
BoxType = interp_boxes.W_Float128Box
format_code = "q"
- class NonNativeFloat128(BaseType, NonNativeFloat):
- _attrs_ = ()
+ def runpack_str(self, s):
+ assert len(s) == 16
+ fval = unpack_float(s, native_is_bigendian)
+ return self.box(fval)
- T = rffi.LONGDOUBLE
- BoxType = interp_boxes.W_Float128Box
- format_code = "q"
+ class NonNativeFloat128(Float128):
+ pass
+
class ComplexFloating(object):
_mixin_ = True
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit