[SciPy-user] Subclass of TimeSeries

Pierre GM pgmdevlist at gmail.com
Thu May 21 11:13:20 EDT 2009


On May 20, 2009, at 11:56 PM, Robert Ferrell wrote:

> On May 20, 2009, at 5:50 PM, Pierre GM wrote:
>
>>
>> On May 20, 2009, at 7:12 PM, Robert Ferrell wrote:
>>
>>> How do I derive a subclass from TimeSeries?  I tried
>>

>>
>> The easiest is to follow some of the examples given in the
>> scikits.hydroclimpy package (http://hydroclimpy.sourceforge.net/).
>> For instance, here's a class that attaches a reference period to the
>> series (in scikits/hydroclimpy/core/base.py). Adapting this example  
>> to
>> your case should be straightforward. Nevertheless, don't hesitate to
>> ask for more details/info as needed.
>>
>> Cheers
>> P.
>
> Thanks for the response.  I think I get the idea.

Almost. Once again, you should not use __init__ to define new  
attributes, as it may fail in some cases. For example, try to get the  
'label' of your myts['a'] object, or pickle myts...


>  For my purposes, it
> seems to work if I just call the TimeSeries.__new__ method.  That way
> I don't have to get into maoptions.

No pb with that.


> I don't think I need to call __array_finalize__.

You may not have to if you use the fact that MaskedArrays and  
TimeSeries always carry a special dictionary (_optinfo) with them,  
which stores various attributes and which is properly taken care of in  
__array_finalize__. You just need to make sure you store your 'label'  
in _optinfo, and provide convenient access methods.
Check that:


class MyTS(ts.TimeSeries):
     def __new__(cls, label, data, dates, mask=nomask, dtype=None,
                 copy=False, fill_value=None, subok=True,  
keep_mask=True,
                 hard_mask=False, autosort=True, **options):
         cls = ts.TimeSeries.__new__(cls, data=data, dates=dates,  
mask=mask,
dtype=dtype,
         copy=copy, fill_value=fill_value, subok=subok,  
keep_mask=keep_mask,
         hard_mask=hard_mask, autosort=autosort, **options)
         cls._optinfo['label'] = label
         return cls

     def _get_label(self):
         return self._optinfo['label']
     def _set_label(self, label):
         self._optinfo['label'] = label
     label = property(fget=_get_label, fset=_set_label)

It works as you expect, and in cases you didn't think of (try again  
taking the label of myts['a'].


Now, if I remember correctly, Travis O. toyed with the idea of  
implementing _optinfo for basic ndarrays some time ago, sometime in  
the future. No doubt that'll be the way to go when it'll happen.






More information about the SciPy-User mailing list