Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 743d922

Browse files
author
sasha
committed
implemented a[...] = v and a[()] = v for zero rank a
1 parent 52c1871 commit 743d922

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

numpy/core/src/arrayobject.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,6 +1938,9 @@ array_ass_sub(PyArrayObject *self, PyObject *index, PyObject *op)
19381938
}
19391939

19401940
if (self->nd == 0) {
1941+
if (index == Py_Ellipsis ||
1942+
PyTuple_Check(index) && 0 == PyTuple_GET_SIZE(index))
1943+
return self->descr->f->setitem(op, self->data, self);
19411944
PyErr_SetString(PyExc_IndexError,
19421945
"0-d arrays can't be indexed.");
19431946
return -1;

numpy/core/tests/test_multiarray.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,31 @@ def check_invalid_subscript(self):
9696
self.failUnlessRaises(IndexError, lambda x: x[array([], int)], a)
9797
self.failUnlessRaises(IndexError, lambda x: x[array([], int)], b)
9898

99+
def check_ellipsis_subscript_assignment(self):
100+
a,b = self.d
101+
102+
a[...] = 42
103+
self.failUnlessEqual(a, 42)
104+
b[...] = ''
105+
self.failUnlessEqual(b.item(), '')
106+
107+
def check_empty_subscript_assignment(self):
108+
a,b = self.d
109+
110+
a[()] = 42
111+
self.failUnlessEqual(a, 42)
112+
b[()] = ''
113+
self.failUnlessEqual(b.item(), '')
114+
115+
def check_invalid_subscript_assignment(self):
116+
a,b = self.d
117+
def assign(x, i, v):
118+
x[i] = v
119+
self.failUnlessRaises(IndexError, assign, a, 0, 42)
120+
self.failUnlessRaises(IndexError, assign, b, 0, '')
121+
self.failUnlessRaises(TypeError, assign, a, (), '')
122+
123+
124+
99125
if __name__ == "__main__":
100126
ScipyTest('numpy.core.multiarray').run()

0 commit comments

Comments
 (0)