Author: Alex Gaynor <[email protected]>
Branch:
Changeset: r51458:36de78269626
Date: 2012-01-18 11:52 -0600
http://bitbucket.org/pypy/pypy/changeset/36de78269626/
Log: Issue #1007 -- added fill() method to numpypy arrays
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
@@ -581,7 +581,7 @@
def descr_var(self, space):
# var = mean((values - mean(values)) ** 2)
w_res = self.descr_sub(space, self.descr_mean(space, space.w_None))
- assert isinstance(w_res, BaseArray)
+ assert isinstance(w_res, BaseArray)
w_res = w_res.descr_pow(space, space.wrap(2))
assert isinstance(w_res, BaseArray)
return w_res.descr_mean(space, space.w_None)
@@ -590,6 +590,10 @@
# std(v) = sqrt(var(v))
return interp_ufuncs.get(space).sqrt.call(space,
[self.descr_var(space)])
+ def descr_fill(self, space, w_value):
+ concr = self.get_concrete_or_scalar()
+ concr.fill(space, w_value)
+
def descr_nonzero(self, space):
if self.size > 1:
raise OperationError(space.w_ValueError, space.wrap(
@@ -682,6 +686,9 @@
def copy(self, space):
return Scalar(self.dtype, self.value)
+ def fill(self, space, w_value):
+ self.value = self.dtype.coerce(space, w_value)
+
def create_sig(self):
return signature.ScalarSignature(self.dtype)
@@ -788,7 +795,7 @@
Intermediate class for performing binary operations.
"""
_immutable_fields_ = ['left', 'right']
-
+
def __init__(self, ufunc, name, shape, calc_dtype, res_dtype, left, right):
VirtualArray.__init__(self, name, shape, res_dtype)
self.ufunc = ufunc
@@ -828,7 +835,7 @@
def __init__(self, shape, dtype, left, right):
Call2.__init__(self, None, 'sliceloop', shape, dtype, dtype, left,
right)
-
+
def create_sig(self):
lsig = self.left.create_sig()
rsig = self.right.create_sig()
@@ -847,7 +854,7 @@
when we'll make AxisReduce lazy
"""
_immutable_fields_ = ['left', 'right']
-
+
def __init__(self, ufunc, name, shape, dtype, left, right, dim):
Call2.__init__(self, ufunc, name, shape, dtype, dtype,
left, right)
@@ -1061,6 +1068,9 @@
array.setslice(space, self)
return array
+ def fill(self, space, w_value):
+ self.setslice(space, scalar_w(space, self.dtype, w_value))
+
class ViewArray(ConcreteArray):
def create_sig(self):
@@ -1273,6 +1283,8 @@
var = interp2app(BaseArray.descr_var),
std = interp2app(BaseArray.descr_std),
+ fill = interp2app(BaseArray.descr_fill),
+
copy = interp2app(BaseArray.descr_copy),
reshape = interp2app(BaseArray.descr_reshape),
tolist = interp2app(BaseArray.descr_tolist),
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
@@ -1302,6 +1302,28 @@
assert isinstance(i['data'][0], int)
raises(TypeError, getattr, array(3), '__array_interface__')
+ def test_fill(self):
+ from _numpypy import array
+
+ a = array([1, 2, 3])
+ a.fill(10)
+ assert (a == [10, 10, 10]).all()
+ a.fill(False)
+ assert (a == [0, 0, 0]).all()
+
+ b = a[:1]
+ b.fill(4)
+ assert (b == [4]).all()
+ assert (a == [4, 0, 0]).all()
+
+ c = b + b
+ c.fill(27)
+ assert (c == [27]).all()
+
+ d = array(10)
+ d.fill(100)
+ assert d == 100
+
class AppTestSupport(BaseNumpyAppTest):
def setup_class(cls):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit