[Numpy-discussion] Possible to pickle new state in NDArray subclasses?
Stuart Reynolds
stuart at stuartreynolds.net
Wed Dec 14 17:05:18 EST 2016
Works great! Thank you.
On Wed, Dec 14, 2016 at 11:51 AM, Nathan Goldbaum <nathan12343 at gmail.com>
wrote:
> I'm able to do this in my ndarrary subclass using __reduce__ and
> __setstate__:
>
> https://bitbucket.org/yt_analysis/yt/src/yt/yt/units/
> yt_array.py#yt_array.py-1250
>
> Here it's being used to save the unit information into the pickle for a
> unit-aware ndarray subclass.
>
> On Wed, Dec 14, 2016 at 1:45 PM, Stuart Reynolds <
> stuart at stuartreynolds.net> wrote:
>
>> I'm trying to subclass an NDArray as shown here:
>> https://docs.scipy.org/doc/numpy/user/basics.subclassing.html
>>
>> My problem is that when I save the new class' state with pickle, the new
>> attributes are lost. I don't seem to be able to override __getstate__ or
>> __setstate__ to achieve this?
>>
>> Is it possible to allow new state to serialized when overriding an
>> NDArray?
>>
>> In my example below, __setstate__ gets called by pickle but not
>> __getstate__.
>> In the final line, a RealisticInfoArray has been deserialized, but it has
>> no .info attribute.
>>
>> ----
>>
>> import cPickle as pickle
>> import numpy as np
>>
>> class RealisticInfoArray(np.ndarray):
>> def __new__(cls, arr, info):
>> obj = np.asarray(arr).view(cls)
>> obj.info = info
>> return obj
>>
>> def __array_finalize__(self, obj):
>> if obj is None: return
>> self.info = getattr(obj,"info",None)
>>
>> def __setstate__(self, *args):
>> print "SET"
>> return np.ndarray.__setstate__(self,*args)
>>
>> def __getstate__(self):
>> print "GET"
>> assert False, "EXPLODE"
>> return np.ndarray.__getstate__(self)
>>
>> arr = np.zeros((2,3), int)
>> arr = RealisticInfoArray(arr, "blarg")
>> print arr.info
>> arr2 = pickle.loads(pickle.dumps(arr))
>> print arr2.info # no .info attribute!
>>
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> https://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20161214/109ded3f/attachment.html>
More information about the NumPy-Discussion
mailing list