Author: Brian Kearns <[email protected]>
Branch:
Changeset: r68534:527f9e5a953f
Date: 2013-12-24 14:17 -0500
http://bitbucket.org/pypy/pypy/changeset/527f9e5a953f/
Log: fix numpy long/ulong coerce for 64bit
diff --git a/pypy/module/micronumpy/test/test_scalar.py
b/pypy/module/micronumpy/test/test_scalar.py
--- a/pypy/module/micronumpy/test/test_scalar.py
+++ b/pypy/module/micronumpy/test/test_scalar.py
@@ -6,6 +6,7 @@
def test_init(self):
import numpy as np
import math
+ import sys
assert np.intp() == np.intp(0)
assert np.intp('123') == np.intp(123)
raises(TypeError, np.intp, None)
@@ -19,6 +20,7 @@
assert math.isnan(np.complex_(None))
for c in ['i', 'I', 'l', 'L', 'q', 'Q']:
assert np.dtype(c).type().dtype.char == c
+ assert np.dtype('L').type(sys.maxint + 42)
def test_builtin(self):
import numpy as np
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
@@ -12,7 +12,7 @@
from rpython.rlib.rawstorage import (alloc_raw_storage, raw_storage_setitem,
raw_storage_getitem)
from rpython.rlib.objectmodel import specialize
-from rpython.rlib.rarithmetic import widen, byteswap, r_ulonglong,
most_neg_value_of
+from rpython.rlib.rarithmetic import widen, byteswap, r_ulonglong,
most_neg_value_of, LONG_BIT
from rpython.rtyper.lltypesystem import lltype, rffi
from rpython.rlib.rstruct.runpack import runpack
from rpython.rlib.rstruct.nativefmttable import native_is_bigendian
@@ -568,16 +568,6 @@
BoxType = interp_boxes.W_UInt32Box
format_code = "I"
-class Long(BaseType, Integer):
- T = rffi.LONG
- BoxType = interp_boxes.W_LongBox
- format_code = "l"
-
-class ULong(BaseType, Integer):
- T = rffi.ULONG
- BoxType = interp_boxes.W_ULongBox
- format_code = "L"
-
def _int64_coerce(self, space, w_item):
try:
return self._base_coerce(space, w_item)
@@ -618,6 +608,22 @@
_coerce = func_with_new_name(_uint64_coerce, '_coerce')
+class Long(BaseType, Integer):
+ T = rffi.LONG
+ BoxType = interp_boxes.W_LongBox
+ format_code = "l"
+
+ if LONG_BIT == 64:
+ _coerce = func_with_new_name(_int64_coerce, '_coerce')
+
+class ULong(BaseType, Integer):
+ T = rffi.ULONG
+ BoxType = interp_boxes.W_ULongBox
+ format_code = "L"
+
+ if LONG_BIT == 64:
+ _coerce = func_with_new_name(_uint64_coerce, '_coerce')
+
class Float(Primitive):
_mixin_ = True
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit