Author: Brian Kearns <[email protected]>
Branch:
Changeset: r67819:61d2ad085488
Date: 2013-11-03 20:38 -0500
http://bitbucket.org/pypy/pypy/changeset/61d2ad085488/
Log: accept order argument for copy
diff --git a/pypy/module/micronumpy/constants.py
b/pypy/module/micronumpy/constants.py
--- a/pypy/module/micronumpy/constants.py
+++ b/pypy/module/micronumpy/constants.py
@@ -63,6 +63,11 @@
NPY_FLOATINGLTR = 'f'
NPY_COMPLEXLTR = 'c'
+NPY_ANYORDER = -1
+NPY_CORDER = 0
+NPY_FORTRANORDER = 1
+NPY_KEEPORDER = 2
+
NPY_CLIP = 0
NPY_WRAP = 1
NPY_RAISE = 2
diff --git a/pypy/module/micronumpy/conversion_utils.py
b/pypy/module/micronumpy/conversion_utils.py
--- a/pypy/module/micronumpy/conversion_utils.py
+++ b/pypy/module/micronumpy/conversion_utils.py
@@ -18,3 +18,25 @@
return mode
raise OperationError(space.w_TypeError,
space.wrap("clipmode not understood"))
+
+def order_converter(space, w_order, default):
+ if space.is_none(w_order):
+ return default
+ if not space.isinstance_w(w_order, space.w_str):
+ if space.is_true(w_order):
+ return NPY_FORTRANORDER
+ else:
+ return NPY_CORDER
+ else:
+ order = space.str_w(w_order)
+ if order.startswith('C') or order.startswith('c'):
+ return NPY_CORDER
+ elif order.startswith('F') or order.startswith('f'):
+ return NPY_FORTRANORDER
+ elif order.startswith('A') or order.startswith('a'):
+ return NPY_ANYORDER
+ elif order.startswith('K') or order.startswith('k'):
+ return NPY_KEEPORDER
+ else:
+ raise OperationError(space.w_TypeError, space.wrap(
+ "order not understood"))
diff --git a/pypy/module/micronumpy/interp_numarray.py
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -18,6 +18,8 @@
from rpython.rlib import jit
from rpython.rlib.rstring import StringBuilder
from pypy.module.micronumpy.arrayimpl.base import BaseArrayImplementation
+from pypy.module.micronumpy.conversion_utils import order_converter
+from pypy.module.micronumpy.constants import *
def _find_shape(space, w_size, dtype):
if space.is_none(w_size):
@@ -287,7 +289,11 @@
def get_scalar_value(self):
return self.implementation.get_scalar_value()
- def descr_copy(self, space):
+ def descr_copy(self, space, w_order=None):
+ order = order_converter(space, w_order, NPY_KEEPORDER)
+ if order == NPY_FORTRANORDER:
+ raise OperationError(space.w_NotImplementedError, space.wrap(
+ "unsupported value for order"))
copy = self.implementation.copy(space)
w_subtype = space.type(self)
return wrap_impl(space, w_subtype, self, copy)
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
@@ -411,6 +411,22 @@
b = a.copy()
assert b[0] == a[0]
+ a = arange(8)
+ b = a.copy(order=None)
+ assert (b == a).all()
+ b = a.copy(order=0)
+ assert (b == a).all()
+ b = a.copy(order='C')
+ assert (b == a).all()
+ b = a.copy(order='K')
+ assert (b == a).all()
+ b = a.copy(order='A')
+ assert (b == a).all()
+ import sys
+ if '__pypy__' in sys.builtin_module_names:
+ raises(NotImplementedError, a.copy, order='F')
+ raises(NotImplementedError, a.copy, order=True)
+
def test_iterator_init(self):
from numpypy import array
a = array(range(5))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit