[Scipy-svn] r2831 - trunk/Lib/sandbox/timeseries

scipy-svn at scipy.org scipy-svn at scipy.org
Tue Mar 6 16:15:27 EST 2007


Author: mattknox_ca
Date: 2007-03-06 15:15:18 -0600 (Tue, 06 Mar 2007)
New Revision: 2831

Modified:
   trunk/Lib/sandbox/timeseries/tdates.py
Log:
added support for new annual frequencies

Modified: trunk/Lib/sandbox/timeseries/tdates.py
===================================================================
--- trunk/Lib/sandbox/timeseries/tdates.py	2007-03-06 21:10:23 UTC (rev 2830)
+++ trunk/Lib/sandbox/timeseries/tdates.py	2007-03-06 21:15:18 UTC (rev 2831)
@@ -131,6 +131,7 @@
                       }
     
     for x in range(7): default_fmtstr[_c.FR_WK+x] = default_fmtstr[_c.FR_WK]
+    for x in range(12): default_fmtstr[_c.FR_ANN+x] = default_fmtstr[_c.FR_ANN]
       
     def __init__(self, freq, value=None, string=None,
                  year=None, month=None, day=None, quarter=None, 
@@ -145,17 +146,17 @@
         
         _freqGroup = get_freq_group(self.freq)
         
-        if value is not None:
-            if isinstance(value, ndarray):
-                value = int(value)
+        if isinstance(value, str):
+            if self.freq in (_c.FR_HR, _c.FR_MIN, _c.FR_SEC):
+                self.datetime = DateTimeFromString(value)
+            else:
+                self.datetime = DateFromString(value) 
+        elif value is not None:
         
-            if isinstance(value, str):
-                if self.freq in (_c.FR_HR, _c.FR_MIN, _c.FR_SEC):
-                    self.datetime = DateTimeFromString(value)
-                else:
-                    self.datetime = DateFromString(value)
+            #value could be a numpy scalar, which is not acceptable
+            value = int(value)
 
-            elif self.freq == _c.FR_SEC:
+            if self.freq == _c.FR_SEC:
                 self.datetime = secondlyOriginDate + dt.timedelta(seconds=value)
             elif self.freq == _c.FR_MIN:
                 self.datetime = minutelyOriginDate + dt.timedelta(minutes=value)
@@ -181,8 +182,11 @@
                 year = (value - 1)//4 + 1
                 month = (value - (year - 1)*4)*3
                 self.datetime = dt.datetime(year, month, 1)
-            elif self.freq == _c.FR_ANN:
-                self.datetime = dt.datetime(value, 1, 1)
+            elif _freqGroup == _c.FR_ANN:
+                if self.freq == _c.FR_ANNDEC:
+                    self.datetime = dt.datetime(value, 12, 1)
+                else:
+                    self.datetime = dt.datetime(value, self.freq - _c.FR_ANN, 1)
             else:
                 raise ValueError("unrecognized frequency: "+str(self.freq))
         
@@ -213,8 +217,9 @@
                     raise InsufficientDateError
                 month = quarter * 3
                 day = 1
-            elif self.freq == _c.FR_ANN:
-                month = 1
+            elif _freqGroup == _c.FR_ANN:
+                month = self.freq - _freqGroup
+                if month == 0: month = 12
                 day = 1
             elif self.freq == _c.FR_SEC:
                 if month is None or day is None or second is None: 
@@ -384,7 +389,7 @@
         elif self.freq == _c.FR_QTR:
             val = (self.datetime.year-1)*4 + self.datetime.month//3
         # Annual .......
-        elif self.freq == _c.FR_ANN:
+        elif _freqGroup == _c.FR_ANN:
             val = self.datetime.year
 
         return int(val)
@@ -468,8 +473,16 @@
         return dt.datetime(datetime.year, datetime.month, 1)
     elif freq == _c.FR_QTR:
         return dt.datetime(datetime.year, monthToQuarter(datetime.month)*3, 1)
-    elif freq == _c.FR_ANN:
-        return dt.datetime(datetime.year, 1, 1)
+    elif _freqGroup == _c.FR_ANN:
+        
+        if freq == _c.FR_ANNDEC: fr_month = 12
+        else: fr_month = freq - _c.FR_ANN
+        
+        if datetime.month <= fr_month:
+            return dt.datetime(datetime.year, fr_month, 1)
+        else:
+            return dt.datetime(datetime.year+1, fr_month, 1)
+
     else:
         return datetime
     




More information about the Scipy-svn mailing list