[pypy-commit] pypy numpy-refactor: some more progress, mostly copy-paste
fijal
noreply at buildbot.pypy.org
Thu Aug 30 16:37:21 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-refactor
Changeset: r56944:60facc62d90d
Date: 2012-08-30 16:36 +0200
http://bitbucket.org/pypy/pypy/changeset/60facc62d90d/
Log: some more progress, mostly copy-paste
diff --git a/pypy/module/micronumpy/arrayimpl/concrete.py b/pypy/module/micronumpy/arrayimpl/concrete.py
--- a/pypy/module/micronumpy/arrayimpl/concrete.py
+++ b/pypy/module/micronumpy/arrayimpl/concrete.py
@@ -1,6 +1,6 @@
from pypy.module.micronumpy.arrayimpl import base
-from pypy.module.micronumpy import support
+from pypy.module.micronumpy import support, loop
from pypy.interpreter.error import OperationError, operationerrfmt
from pypy.rlib import jit
@@ -71,6 +71,10 @@
def fill(self, box):
self.dtype.fill(self.storage, box, 0, self.size)
+ def copy(self):
+ impl = ConcreteArray(self.shape, self.dtype, self.order)
+ return loop.setslice(impl, self)
+
# -------------------- applevel get/setitem -----------------------
@jit.unroll_safe
diff --git a/pypy/module/micronumpy/arrayimpl/scalar.py b/pypy/module/micronumpy/arrayimpl/scalar.py
--- a/pypy/module/micronumpy/arrayimpl/scalar.py
+++ b/pypy/module/micronumpy/arrayimpl/scalar.py
@@ -36,3 +36,9 @@
def get_scalar_value(self):
return self.value
+
+ def copy(self):
+ scalar = Scalar(self.dtype)
+ scalar.value = self.value
+ return scalar
+
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
@@ -1,6 +1,6 @@
from pypy.interpreter.baseobjspace import Wrappable
-from pypy.interpreter.error import operationerrfmt
+from pypy.interpreter.error import operationerrfmt, OperationError
from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.interpreter.gateway import interp2app, unwrap_spec
from pypy.module.micronumpy import interp_dtype, interp_ufuncs, support
@@ -8,6 +8,7 @@
from pypy.module.micronumpy.strides import find_shape_and_elems
from pypy.tool.sourcetools import func_with_new_name
from pypy.rlib import jit
+from pypy.rlib.objectmodel import instantiate
def _find_shape(space, w_size):
if space.isinstance_w(w_size, space.w_int):
@@ -63,6 +64,13 @@
support.convert_to_array(space, w_value))
self.implementation.descr_setitem(space, w_idx, w_value)
+ def descr_len(self, space):
+ shape = self.get_shape()
+ if len(shape):
+ return space.wrap(shape[0])
+ raise OperationError(space.w_TypeError, space.wrap(
+ "len() of unsized object"))
+
def create_iter(self):
return self.implementation.create_iter()
@@ -78,6 +86,11 @@
def get_scalar_value(self):
return self.implementation.get_scalar_value()
+ def descr_copy(self, space):
+ arr = instantiate(W_NDimArray)
+ arr.implementation = self.implementation.copy()
+ return arr
+
# --------------------- binary operations ----------------------------
def _binop_impl(ufunc_name):
@@ -87,6 +100,13 @@
return func_with_new_name(impl, "binop_%s_impl" % ufunc_name)
descr_add = _binop_impl("add")
+
+ descr_eq = _binop_impl("equal")
+ descr_ne = _binop_impl("not_equal")
+ descr_lt = _binop_impl("less")
+ descr_le = _binop_impl("less_equal")
+ descr_gt = _binop_impl("greater")
+ descr_ge = _binop_impl("greater_equal")
def _binop_right_impl(ufunc_name):
def impl(self, space, w_other, w_out=None):
@@ -112,18 +132,28 @@
"ndarray",
__new__ = interp2app(descr_new_array),
+ __len__ = interp2app(W_NDimArray.descr_len),
+ __getitem__ = interp2app(W_NDimArray.descr_getitem),
+ __setitem__ = interp2app(W_NDimArray.descr_setitem),
+
__add__ = interp2app(W_NDimArray.descr_add),
__radd__ = interp2app(W_NDimArray.descr_radd),
- __getitem__ = interp2app(W_NDimArray.descr_getitem),
- __setitem__ = interp2app(W_NDimArray.descr_setitem),
+ __eq__ = interp2app(W_NDimArray.descr_eq),
+ __ne__ = interp2app(W_NDimArray.descr_ne),
+ __lt__ = interp2app(W_NDimArray.descr_lt),
+ __le__ = interp2app(W_NDimArray.descr_le),
+ __gt__ = interp2app(W_NDimArray.descr_gt),
+ __ge__ = interp2app(W_NDimArray.descr_ge),
dtype = GetSetProperty(W_NDimArray.descr_get_dtype),
shape = GetSetProperty(W_NDimArray.descr_get_shape,
W_NDimArray.descr_set_shape),
ndim = GetSetProperty(W_NDimArray.descr_get_ndim),
size = GetSetProperty(W_NDimArray.descr_get_size),
+
+ copy = interp2app(W_NDimArray.descr_copy),
)
def decode_w_dtype(space, w_dtype):
diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -27,6 +27,16 @@
obj_iter.next()
return out
+def setslice(target, source):
+ target_iter = target.create_iter()
+ dtype = target.dtype
+ source_iter = source.create_iter()
+ while not target_iter.done():
+ target_iter.setitem(source_iter.getitem().convert_to(dtype))
+ target_iter.next()
+ source_iter.next()
+ return target
+
# from pypy.rlib.jit import JitDriver, hint, unroll_safe, promote
# from pypy.module.micronumpy.interp_iter import ConstantIterator
More information about the pypy-commit
mailing list