On Tue, Jan 26, 2016 at 10:27 AM, Solbrig,Jeremy < jeremy.solb...@colostate.edu> wrote:
> Hello Chuck, > > I receive the same result with 1.10.4. I agree that it looks like > __array_prepare__, __array_finalize__, and __array_wrap__ have not been > changed. I’m starting to dig into the source again, but focusing on the > _MaskedBinaryOperation class to try to understand what is going on there. > > Jeremy > > From: NumPy-Discussion <numpy-discussion-boun...@scipy.org> on behalf of > Charles R Harris <charlesr.har...@gmail.com> > Reply-To: Discussion of Numerical Python <numpy-discussion@scipy.org> > Date: Tuesday, January 26, 2016 at 10:17 AM > To: Discussion of Numerical Python <numpy-discussion@scipy.org> > Subject: Re: [Numpy-discussion] Inconsistent behavior for ufuncs in numpy > v1.10.X > > > > On Tue, Jan 26, 2016 at 10:11 AM, Charles R Harris < > charlesr.har...@gmail.com> wrote: > >> >> >> On Mon, Jan 25, 2016 at 10:43 PM, Solbrig,Jeremy < >> jeremy.solb...@colostate.edu> wrote: >> >>> Hello, >>> >>> Much of what is below was copied from this stack overflow question. >>> >>> <http://stackoverflow.com/questions/35005569/behavior-of-ufuncs-and-mathematical-operators-differ-for-subclassed-maskedarray> >>> >>> I am attempting to subclass numpy.ma.MaskedArray. I am currently using >>> Python v2.7.10. The problem discussed below does not occur in Numpy >>> v1.9.2, but does occur in all versions of Numpy v1.10.x. >>> >>> In all versions of Numpy v1.10.x, using mathematical operators on my >>> subclass behaves differently than using the analogous ufunc. When using the >>> ufunc directly (e.g. np.subtract(arr1, arr2)), __array_prepare__, >>> __array_finalize__, and __array_wrap__ are all called as expected, however, >>> when using the symbolic operator (e.g. arr1-arr2) only >>> __array_finalize__ is called. As a consequence, I lose any information >>> stored in arr._optinfo when a mathematical operator is used. >>> >>> Here is a code snippet that illustrates the issue. >>> >>> #!/bin/env pythonimport numpy as npfrom numpy.ma import MaskedArray, nomask >>> class InfoArray(MaskedArray): >>> def __new__(cls, info=None, data=None, mask=nomask, dtype=None, >>> copy=False, subok=True, ndmin=0, fill_value=None, >>> keep_mask=True, hard_mask=None, shrink=True, **kwargs): >>> obj = super(InfoArray, cls).__new__(cls, data=data, mask=mask, >>> dtype=dtype, copy=copy, subok=subok, ndmin=ndmin, >>> fill_value=fill_value, hard_mask=hard_mask, >>> shrink=shrink, **kwargs) >>> obj._optinfo['info'] = info >>> return obj >>> >>> def __array_prepare__(self, out, context=None): >>> print '__array_prepare__' >>> return super(InfoArray, self).__array_prepare__(out, context) >>> >>> def __array_wrap__(self, out, context=None): >>> print '__array_wrap__' >>> return super(InfoArray, self).__array_wrap__(out, context) >>> >>> def __array_finalize__(self, obj): >>> print '__array_finalize__' >>> return super(InfoArray, self).__array_finalize__(obj)if __name__ == >>> "__main__": >>> arr1 = InfoArray('test', data=[1,2,3,4,5,6]) >>> arr2 = InfoArray(data=[0,1,2,3,4,5]) >>> >>> diff1 = np.subtract(arr1, arr2) >>> print diff1._optinfo >>> >>> diff2 = arr1-arr2 >>> print diff2._optinfo >>> >>> If run, the output looks like this: >>> >>> $ python test_ma_sub.py #Call to np.subtract(arr1, arr2) here >>> __array_finalize__ >>> __array_finalize__ >>> __array_prepare__ >>> __array_finalize__ >>> __array_wrap__ >>> __array_finalize__{'info': 'test'}#Executing arr1-arr2 here >>> __array_finalize__{} >>> >>> Currently I have simply downgraded to 1.9.2 to solve the problem for >>> myself, but have been having difficulty figuring out where the difference >>> lies between 1.9.2 and 1.10.0. >>> >> >> I don't see a difference between 1.9.2 and 1.10.0 in this test, so I >> suspect it is something else. Could you try 1.10.4 to see if the something >> else has been fixed? >> > > Which is to say, it isn't in the calls to prepare, wrap, and finalize. Now > to look in _optinfo. > > Please open an issue on github, the mailing list is not a good place to deal with this. I've got a bisect script running, so we should soon know where the change occurred. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion