On Tue, Sep 29, 2009 at 13:09, Charles R Harris <charlesr.har...@gmail.com> wrote: > > > On Tue, Sep 29, 2009 at 11:00 AM, Neal Becker <ndbeck...@gmail.com> wrote: >> >> fixed_pt arrays need to apply the overflow_policy after operations >> (overflow_policy could be clip, or throw exception). >> >> I thought __array_wrap__ would work for this, but it seems to not be >> called >> when I need it. For example: >> >> In [13]: obj >> Out[13]: fixed_pt_array([ 0, 32, 64, 96, 128]) >> >> In [14]: obj*100 < this should overflow >> enter: [ 0 32 64 96 128] << on entry into __array_wrap >> enter: [0 32 64 96 128] >> exit: [ 0 32 64 96 128] >> Out[14]: fixed_pt_array([ 0, 3200, 6400, 9600, 12800]) >> >> Apparantly, obj*100 is never passed to array_wrap. >> >> Is there another way I can do this? >> > I believe array wrap has to be explicitly called after the fact.
Ufuncs call __array_wrap__ implicitly. In [22]: class myarray(np.ndarray): ....: def __array_wrap__(self, *args): ....: print 'myarray.__array_wrap__%r' % (args,) ....: return super(myarray, self).__array_wrap__(*args) ....: ....: In [25]: m = np.arange(10).view(myarray) In [26]: m * 100 myarray.__array_wrap__(myarray([ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900]), (<ufunc 'multiply'>, (myarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 100), 0)) Out[26]: myarray([ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900]) -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion