MCPcopy Create free account
hub / github.com/numpy/numpy / npyiter_ass_subscript

Function npyiter_ass_subscript

numpy/core/src/multiarray/nditer_pywrap.c:2271–2318  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2269}
2270
2271static int
2272npyiter_ass_subscript(NewNpyArrayIterObject *self, PyObject *op,
2273 PyObject *value)
2274{
2275 if (value == NULL) {
2276 PyErr_SetString(PyExc_TypeError,
2277 "Cannot delete iterator elements");
2278 return -1;
2279 }
2280 if (self->iter == NULL || self->finished) {
2281 PyErr_SetString(PyExc_ValueError,
2282 "Iterator is past the end");
2283 return -1;
2284 }
2285
2286 if (NpyIter_HasDelayedBufAlloc(self->iter)) {
2287 PyErr_SetString(PyExc_ValueError,
2288 "Iterator construction used delayed buffer allocation, "
2289 "and no reset has been done yet");
2290 return -1;
2291 }
2292
2293 if (PyLong_Check(op) ||
2294 (PyIndex_Check(op) && !PySequence_Check(op))) {
2295 npy_intp i = PyArray_PyIntAsIntp(op);
2296 if (error_converting(i)) {
2297 return -1;
2298 }
2299 return npyiter_seq_ass_item(self, i, value);
2300 }
2301 else if (PySlice_Check(op)) {
2302 Py_ssize_t istart = 0, iend = 0, istep = 0, islicelength = 0;
2303 if (PySlice_GetIndicesEx(op, NpyIter_GetNOp(self->iter),
2304 &istart, &iend, &istep, &islicelength) < 0) {
2305 return -1;
2306 }
2307 if (istep != 1) {
2308 PyErr_SetString(PyExc_ValueError,
2309 "Iterator slice assignment only supports a step of 1");
2310 return -1;
2311 }
2312 return npyiter_seq_ass_slice(self, istart, iend, value);
2313 }
2314
2315 PyErr_SetString(PyExc_TypeError,
2316 "invalid index type for iterator indexing");
2317 return -1;
2318}
2319
2320static PyObject *
2321npyiter_enter(NewNpyArrayIterObject *self, PyObject *NPY_UNUSED(args))

Callers

nothing calls this directly

Calls 5

PyArray_PyIntAsIntpFunction · 0.85
npyiter_seq_ass_itemFunction · 0.85
NpyIter_GetNOpFunction · 0.85
npyiter_seq_ass_sliceFunction · 0.85

Tested by

no test coverage detected