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

Function PyArray_PutMask

numpy/core/src/multiarray/item_selection.c:632–762  ·  view source on GitHub ↗

NUMPY_API * Put values into an array according to a mask. */

Source from the content-addressed store, hash-verified

630 * Put values into an array according to a mask.
631 */
632NPY_NO_EXPORT PyObject *
633PyArray_PutMask(PyArrayObject *self, PyObject* values0, PyObject* mask0)
634{
635 PyArrayObject *mask, *values;
636 PyArray_Descr *dtype;
637 npy_intp itemsize, ni, nv;
638 char *src, *dest;
639 npy_bool *mask_data;
640 int copied = 0;
641 int overlap = 0;
642 NPY_BEGIN_THREADS_DEF;
643
644 mask = NULL;
645 values = NULL;
646 if (!PyArray_Check(self)) {
647 PyErr_SetString(PyExc_TypeError,
648 "putmask: first argument must "
649 "be an array");
650 return NULL;
651 }
652
653 if (PyArray_FailUnlessWriteable(self, "putmask: output array") < 0) {
654 return NULL;
655 }
656
657 mask = (PyArrayObject *)PyArray_FROM_OTF(mask0, NPY_BOOL,
658 NPY_ARRAY_CARRAY | NPY_ARRAY_FORCECAST);
659 if (mask == NULL) {
660 goto fail;
661 }
662 ni = PyArray_SIZE(mask);
663 if (ni != PyArray_SIZE(self)) {
664 PyErr_SetString(PyExc_ValueError,
665 "putmask: mask and data must be "
666 "the same size");
667 goto fail;
668 }
669 mask_data = PyArray_DATA(mask);
670 dtype = PyArray_DESCR(self);
671 Py_INCREF(dtype);
672 values = (PyArrayObject *)PyArray_FromAny(values0, dtype,
673 0, 0, NPY_ARRAY_CARRAY, NULL);
674 if (values == NULL) {
675 goto fail;
676 }
677 nv = PyArray_SIZE(values); /* zero if null array */
678 if (nv <= 0) {
679 Py_XDECREF(values);
680 Py_XDECREF(mask);
681 Py_RETURN_NONE;
682 }
683 src = PyArray_DATA(values);
684
685 overlap = arrays_overlap(self, values) || arrays_overlap(self, mask);
686 if (overlap || !PyArray_ISCONTIGUOUS(self)) {
687 int flags = NPY_ARRAY_CARRAY | NPY_ARRAY_WRITEBACKIFCOPY;
688 PyArrayObject *obj;
689

Callers 1

array_putmaskFunction · 0.85

Calls 13

PyArray_DATAFunction · 0.85
PyArray_DESCRFunction · 0.85
PyArray_FromAnyFunction · 0.85
arrays_overlapFunction · 0.85
PyArray_FromArrayFunction · 0.85
NPY_cast_info_initFunction · 0.85
NPY_cast_info_xfreeFunction · 0.85
npy_fastputmaskFunction · 0.85

Tested by

no test coverage detected