I tend to use ndarray.copy() in python code -- no reason you couldn't do the same in Cython.
If you want to take any array-like object that may not have a copy() method, you could call asanyarray() first: -CHB On Sat, Nov 12, 2016 at 9:00 AM, Pavlyk, Oleksandr < oleksandr.pav...@intel.com> wrote: > Hi, > > > > In my Cython code a function processes it argument x as follows: > > > > x_arr = PyArray_CheckFromAny( > > x, NULL, 0, 0, > > cnp.NPY_ELEMENTSTRIDES | cnp.NPY_ENSUREARRAY | > cnp.NPY_NOTSWAPPED, NULL) > > > > if x_arr is not x: > > in_place = 1 # a copy was made, so we can work in place. > > > > The logic is of the last line turns out to be incorrect, because the input > x can be a class with an array interface: > > > > class FakeArray(object): > > def __init__(self, data): > > self._data = data > > self.__array_interface__ = data.__array_interface__ > > > > Feeding my function FakeArray(xx), x_arr will point into the content of > xx, resulting in unwarranted content > overwrite of xx. > > > > I am trying to replace that condition with > > > > if x_arr is not x and cnp.PyArray_Check(x): > > # a copy was made, so we can work in place. > > in_place = 1 if cnp.PyArray_CHKFLAGS(x_arr, cnp.NPY_WRITEABLE) else > 0 > > > > I am wondering if I perhaps overlooked some case. > > > > Thank you, > > Sasha > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > https://mail.scipy.org/mailman/listinfo/numpy-discussion > > -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception chris.bar...@noaa.gov
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion