On Sun, Mar 8, 2009 at 4:42 PM, Darren Dale <[email protected]> wrote:
> On Sun, Mar 8, 2009 at 12:31 PM, Darren Dale <[email protected]> wrote: > >> On Wed, Jan 21, 2009 at 12:43 PM, Pierre GM <[email protected]> wrote: >> >>> >>> On Jan 21, 2009, at 11:34 AM, Darren Dale wrote: >>> >>> > I have a simple test script here that multiplies an ndarray subclass >>> > with another number. Can anyone help me understand why each of these >>> > combinations returns a new instance of MyArray: >>> > >>> > mine = MyArray() >>> > print type(np.float32(1)*mine) >>> > print type(mine*np.float32(1)) >>> > print type(mine*np.float64(1)) >>> > print type(1*mine) >>> > print type(mine*1) >>> > >>> > but this one returns a np.float64 instance? >>> >>> FYI, that's the same behavior as observed in ticket #826. A first >>> thread addressed that issue >>> http://www.mail-archive.com/[email protected]/msg13235.html >>> But so far, no answer has been suggested. >>> Any help welcome. >> >> >> I believe ticket #826 can be solved with the application of this patch: >> >> >> $ svn diff scalarmathmodule.c.src >> Index: scalarmathmodule.c.src >> =================================================================== >> --- scalarmathmodule.c.src (revision 6566) >> +++ scalarmathmodule.c.src (working copy) >> @@ -566,6 +566,10 @@ >> Py_DECREF(descr1); >> return ret; >> } >> + else if (PyArray_GetPriority(a, PyArray_SUBTYPE_PRIORITY) > \ >> + PyArray_SUBTYPE_PRIORITY) { >> + return -2; >> + } >> else if ((temp = PyArray_ScalarFromObject(a)) != NULL) { >> int retval; >> retval = _...@name@_convert_to_ctype(temp, arg1); >> >> >> I've run the unit tests and get the same results with and without the >> patch applied, but it solves the problem in my script and also the problem >> with masked arrays. > > > Here is a test for this patch, maybe issue #826 can be closed. > > Index: numpy/core/tests/test_umath.py > =================================================================== > --- numpy/core/tests/test_umath.py (revision 6575) > +++ numpy/core/tests/test_umath.py (working copy) > @@ -253,6 +253,17 @@ > self.failUnless(isinstance(x, with_wrap)) > assert_array_equal(x, np.array((1, 2, 3))) > > + def test_priority_with_scalar(self): > + # test fix for bug #826: > + class A(np.ndarray): > + __array_priority__ = 10 > + def __new__(cls): > + return np.asarray(1.0, 'float64').view(cls).copy() > + a = A() > + x = np.float64(1)*a > + self.failUnless(isinstance(x, A)) > + assert_array_equal(x, np.array(1)) > + > def test_old_wrap(self): > class with_wrap(object): > def __array__(self): > > __ Added in r6578... Chuck
_______________________________________________ Numpy-discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
