| 2269 | } |
| 2270 | |
| 2271 | static int |
| 2272 | npyiter_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 | |
| 2320 | static PyObject * |
| 2321 | npyiter_enter(NewNpyArrayIterObject *self, PyObject *NPY_UNUSED(args)) |
nothing calls this directly
no test coverage detected