<div dir="ltr">Works great! Thank you.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 14, 2016 at 11:51 AM, Nathan Goldbaum <span dir="ltr"><<a href="mailto:nathan12343@gmail.com" target="_blank">nathan12343@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm able to do this in my ndarrary subclass using __reduce__ and __setstate__:<div><br></div><div><a href="https://bitbucket.org/yt_analysis/yt/src/yt/yt/units/yt_array.py#yt_array.py-1250" target="_blank">https://bitbucket.org/yt_<wbr>analysis/yt/src/yt/yt/units/<wbr>yt_array.py#yt_array.py-1250</a><br></div><div><br></div><div>Here it's being used to save the unit information into the pickle for a unit-aware ndarray subclass.</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Wed, Dec 14, 2016 at 1:45 PM, Stuart Reynolds <span dir="ltr"><<a href="mailto:stuart@stuartreynolds.net" target="_blank">stuart@stuartreynolds.net</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div>I'm trying to subclass an NDArray as shown here:<br></div><div>   <a href="https://docs.scipy.org/doc/numpy/user/basics.subclassing.html" target="_blank">https://docs.scipy.org/doc/nu<wbr>mpy/user/basics.subclassing.ht<wbr>ml</a><br></div><div><br></div><div>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?</div><div><br></div><div>Is it possible to allow new state to serialized when overriding an NDArray?</div><div><br></div><div>In my example below, __setstate__ gets called by pickle but not __getstate__.</div><div>In the final line, a RealisticInfoArray has been deserialized, but it has no .info attribute.</div><div><br></div><div>----</div><div><br></div><div><div>import cPickle as pickle</div><div>import numpy as np</div><div><br></div><div>class RealisticInfoArray(np.ndarray)<wbr>:</div><div>    def __new__(cls, arr, info):</div><div>        obj = np.asarray(arr).view(cls)</div><div>        <a href="http://obj.info" target="_blank">obj.info</a> = info</div><div>        return obj</div><div><br></div><div>    def __array_finalize__(self, obj):</div><div>        if obj is None: return</div><div>        <a href="http://self.info" target="_blank">self.info</a> = getattr(obj,"info",None)</div><div><br></div><div>    def __setstate__(self, *args):</div><div>        print "SET"</div><div>        return np.ndarray.__setstate__(self,*<wbr>args)</div><div><br></div><div>    def __getstate__(self):</div><div>        print "GET"</div><div>        assert False, "EXPLODE"<br></div><div>        return np.ndarray.__getstate__(self)</div><div><br></div><div>arr = np.zeros((2,3), int)</div><div>arr = RealisticInfoArray(arr, "blarg")</div><div>print <a href="http://arr.info" target="_blank">arr.info</a></div><div>arr2 = pickle.loads(pickle.dumps(arr)<wbr>)</div><div>print <a href="http://arr2.info" target="_blank">arr2.info</a>  # no .info attribute!</div></div><div><br></div></div>
<br></div></div>______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman<wbr>/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
<br></blockquote></div><br></div>