[pypy-commit] pypy longdouble2: merge implementations of W_Float96Box and W_Float128Box, etc.
rlamy
noreply at buildbot.pypy.org
Wed Mar 27 21:29:09 CET 2013
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: longdouble2
Changeset: r62841:0d1617b3c655
Date: 2013-03-25 16:02 +0000
http://bitbucket.org/pypy/pypy/changeset/0d1617b3c655/
Log: merge implementations of W_Float96Box and W_Float128Box, etc.
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
@@ -79,13 +79,13 @@
]
if long_double_size == 16:
long_double_dtypes += [
- ('float128', 'interp_boxes.W_Float128Box'),
- ('complex256', 'interp_boxes.W_Complex256Box'),
+ ('float128', 'interp_boxes.W_LongDoubleBox'),
+ ('complex256', 'interp_boxes.W_CLongDoubleBox'),
]
elif long_double_size == 12:
long_double_dtypes += [
- ('float96', 'interp_boxes.W_Float96Box'),
- ('complex192', 'interp_boxes.W_Complex192Box'),
+ ('float96', 'interp_boxes.W_LongDoubleBox'),
+ ('complex192', 'interp_boxes.W_CLongDoubleBox'),
]
for dt, box in long_double_dtypes:
interpleveldefs[dt] = box
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
@@ -346,34 +346,34 @@
descr__new__, _get_dtype = new_dtype_getter("complex128")
_COMPONENTS_BOX = W_Float64Box
-if ENABLED_LONG_DOUBLE and long_double_size == 12:
- class W_Float96Box(W_FloatingBox, PrimitiveBox):
- descr__new__, _get_dtype = new_dtype_getter("float96")
+if ENABLED_LONG_DOUBLE and long_double_size > 8:
+ class W_LongDoubleBox(W_FloatingBox, PrimitiveBox):
+ @staticmethod
+ def _get_dtype(space):
+ from pypy.module.micronumpy.interp_dtype import get_dtype_cache
+ return get_dtype_cache(space).w_longdouble
- W_LongDoubleBox = W_Float96Box
+ def descr__new__(space, w_subtype, w_value):
+ dtype = W_LongDoubleBox._get_dtype(space)
+ return dtype.itemtype.coerce_subtype(space, w_subtype, w_value)
- class W_Complex192Box(ComplexBox, W_ComplexFloatingBox):
- descr__new__, _get_dtype = new_dtype_getter("complex192")
- _COMPONENTS_BOX = W_Float96Box
- W_CLongDoubleBox = W_Complex192Box
+ class W_CLongDoubleBox(ComplexBox, W_ComplexFloatingBox):
+ @staticmethod
+ def _get_dtype(space):
+ from pypy.module.micronumpy.interp_dtype import get_dtype_cache
+ return get_dtype_cache(space).w_clongdouble
-elif ENABLED_LONG_DOUBLE and long_double_size == 16:
- class W_Float128Box(W_FloatingBox, PrimitiveBox):
- descr__new__, _get_dtype = new_dtype_getter("float128")
- W_LongDoubleBox = W_Float128Box
-
- class W_Complex256Box(ComplexBox, W_ComplexFloatingBox):
- descr__new__, _get_dtype = new_dtype_getter("complex256")
- _COMPONENTS_BOX = W_Float128Box
-
- W_CLongDoubleBox = W_Complex256Box
+ def descr__new__(space, w_subtype, w_value):
+ dtype = W_CLongDoubleBox._get_dtype(space)
+ return dtype.itemtype.coerce_subtype(space, w_subtype, w_value)
+ _COMPONENTS_BOX = W_LongDoubleBox
elif ENABLED_LONG_DOUBLE:
W_LongDoubleBox = W_Float64Box
W_CLongDoubleBox = W_Complex64Box
-
+
W_GenericBox.typedef = TypeDef("generic",
__module__ = "numpypy",
@@ -539,33 +539,25 @@
__new__ = interp2app(W_Float64Box.descr__new__.im_func),
)
-if ENABLED_LONG_DOUBLE and long_double_size == 12:
- W_Float96Box.typedef = TypeDef("float96", (W_FloatingBox.typedef),
+if ENABLED_LONG_DOUBLE and long_double_size > 8:
+ W_LongDoubleBox.typedef = TypeDef("float00", (W_FloatingBox.typedef),
__module__ = "numpypy",
- __new__ = interp2app(W_Float96Box.descr__new__.im_func),
+ __new__ = interp2app(W_LongDoubleBox.descr__new__.im_func),
)
- W_Complex192Box.typedef = TypeDef("complex192", (W_ComplexFloatingBox.typedef, complex_typedef),
+ W_CLongDoubleBox.typedef = TypeDef("complex00", (W_ComplexFloatingBox.typedef, complex_typedef),
__module__ = "numpypy",
- __new__ = interp2app(W_Complex192Box.descr__new__.im_func),
+ __new__ = interp2app(W_CLongDoubleBox.descr__new__.im_func),
real = GetSetProperty(W_ComplexFloatingBox.descr_get_real),
imag = GetSetProperty(W_ComplexFloatingBox.descr_get_imag),
)
-
-elif ENABLED_LONG_DOUBLE and long_double_size == 16:
- W_Float128Box.typedef = TypeDef("float128", (W_FloatingBox.typedef),
- __module__ = "numpypy",
-
- __new__ = interp2app(W_Float128Box.descr__new__.im_func),
- )
-
- W_Complex256Box.typedef = TypeDef("complex256", (W_ComplexFloatingBox.typedef, complex_typedef),
- __module__ = "numpypy",
- __new__ = interp2app(W_Complex256Box.descr__new__.im_func),
- real = GetSetProperty(W_ComplexFloatingBox.descr_get_real),
- imag = GetSetProperty(W_ComplexFloatingBox.descr_get_imag),
- )
+ if long_double_size == 12:
+ W_LongDoubleBox.name = "float96"
+ W_CLongDoubleBox.name = "complex192"
+ elif long_double_size == 16:
+ W_LongDoubleBox.name = "float128"
+ W_CLongDoubleBox.name = "complex256"
W_FlexibleBox.typedef = TypeDef("flexible", W_GenericBox.typedef,
__module__ = "numpypy",
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
@@ -482,21 +482,21 @@
)
if interp_boxes.ENABLED_LONG_DOUBLE and interp_boxes.long_double_size > 8:
self.w_longdouble = W_Dtype(
- types.Float96(),
+ types.Float80(),
num=13,
kind=FLOATINGLTR,
name="",
char="g",
- w_box_type=space.gettypefor(interp_boxes.W_Float96Box),
+ w_box_type=space.gettypefor(interp_boxes.W_LongDoubleBox),
aliases=["longdouble", "longfloat"],
)
self.w_clongdouble = W_ComplexDtype(
- types.Complex192(),
+ types.Complex160(),
num=16,
kind=COMPLEXLTR,
name="",
char="G",
- w_box_type = space.gettypefor(interp_boxes.W_Complex192Box),
+ w_box_type = space.gettypefor(interp_boxes.W_CLongDoubleBox),
alternate_constructors=[space.w_complex],
aliases=["clongdouble", "clongfloat"],
float_type = self.w_longdouble,
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
@@ -1567,7 +1567,7 @@
_attrs_ = ()
T = rffi.LONGDOUBLE
- BoxType = interp_boxes.W_Float96Box
+ BoxType = interp_boxes.W_LongDoubleBox
format_code = "q"
def runpack_str(self, s):
@@ -1587,18 +1587,12 @@
_attrs_ = ()
T = rffi.LONGDOUBLE
- BoxType = interp_boxes.W_Complex192Box
- ComponentBoxType = interp_boxes.W_Float96Box
+ BoxType = interp_boxes.W_CLongDoubleBox
+ ComponentBoxType = interp_boxes.W_LongDoubleBox
NonNativeComplex160 = Complex160
- if interp_boxes.long_double_size == 12:
- Float80.storage_bytes = 12
- Float96 = Float80
- Complex192 = Complex160
- elif interp_boxes.long_double_size == 16:
- Float80.storage_bytes = 16
- Float128 = Float80
- Complex256 = Complex160
+ if interp_boxes.long_double_size in (12, 16):
+ Float80.storage_bytes = interp_boxes.long_double_size
else:
raise ImportError("Unsupported size for long double")
More information about the pypy-commit
mailing list