[Scipy-svn] r3570 - in trunk/scipy/sandbox/timeseries: . include lib src tests

scipy-svn at scipy.org scipy-svn at scipy.org
Fri Nov 23 16:42:35 EST 2007


Author: mattknox_ca
Date: 2007-11-23 15:42:20 -0600 (Fri, 23 Nov 2007)
New Revision: 3570

Modified:
   trunk/scipy/sandbox/timeseries/dates.py
   trunk/scipy/sandbox/timeseries/include/c_dates.h
   trunk/scipy/sandbox/timeseries/lib/moving_funcs.py
   trunk/scipy/sandbox/timeseries/plotlib.py
   trunk/scipy/sandbox/timeseries/report.py
   trunk/scipy/sandbox/timeseries/src/c_dates.c
   trunk/scipy/sandbox/timeseries/src/cseries.c
   trunk/scipy/sandbox/timeseries/tests/test_dates.py
   trunk/scipy/sandbox/timeseries/tseries.py
Log:
- renamed 'thisday' to 'now' (left 'thisday' and 'today' as deprecated aliases)
- added tolist method to DateArray which returns a list of datetime objects
- added additional documentation
- renamed 'day_of_week' to 'weekday' (left 'day_of_week' as deprecated alias for now)

Modified: trunk/scipy/sandbox/timeseries/dates.py
===================================================================
--- trunk/scipy/sandbox/timeseries/dates.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/dates.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -12,6 +12,7 @@
 
 import datetime as dt
 
+import operator
 import itertools
 import warnings
 import types
@@ -36,17 +37,21 @@
 cseries.set_callback_DateFromString(DateFromString)
 cseries.set_callback_DateTimeFromString(DateTimeFromString)
 
-from cseries import Date, thisday, check_freq, check_freq_str, get_freq_group,\
+from cseries import Date, now, check_freq, check_freq_str, get_freq_group,\
                     DateCalc_Error, DateCalc_RangeError
-today = thisday
 
+# aliases for `now` function. These are deprecated
+today = now
+thisday = now
+
 __all__ = [
 'Date', 'DateArray','isDate','isDateArray',
 'DateError', 'ArithmeticDateError', 'FrequencyDateError','InsufficientDateError',
 'datearray','date_array', 'date_array_fromlist', 'date_array_fromrange',
-'day_of_week','day_of_year','day','month','quarter','year','hour','minute',
-'second','thisday','today','prevbusday','period_break', 'check_freq',
-'check_freq_str','get_freq_group', 'DateCalc_Error', 'DateCalc_RangeError'
+'day_of_week','weekday','day_of_year','day','month','quarter','year','hour',
+'minute','second','now','thisday','today','prevbusday','period_break',
+'check_freq','check_freq_str','get_freq_group', 'DateCalc_Error',
+'DateCalc_RangeError'
            ]
 
 
@@ -93,22 +98,23 @@
 def prevbusday(day_end_hour=18, day_end_min=0):
     """Returns the previous business day (Monday-Friday) at business frequency.
 
-:Parameters:
-    - day_end_hour : (int, *[18]* )
-    - day_end_min : (int, *[0]*)
+*Parameters*:
+    day_end_hour : {18, int} (optional)
+    day_end_min : {0, int} (optional)
 
-:Return values:
+*Return values*:
     If it is currently Saturday or Sunday, then the preceding Friday will be
     returned. If it is later than the specified day_end_hour and day_end_min,
-    thisday('b') will be returned. Otherwise, thisday('b')-1 will be returned.
+    now('Business') will be returned. Otherwise, now('Business')-1 will be
+    returned.
 """
     tempDate = dt.datetime.now()
     dateNum = tempDate.hour + float(tempDate.minute)/60
     checkNum = day_end_hour + float(day_end_min)/60
     if dateNum < checkNum:
-        return thisday(_c.FR_BUS) - 1
+        return now(_c.FR_BUS) - 1
     else:
-        return thisday(_c.FR_BUS)
+        return now(_c.FR_BUS)
 
 
 def isDate(data):
@@ -283,9 +289,11 @@
         "Returns the day of month."
         return self.__getdateinfo__('D')
     @property
-    def day_of_week(self):
+    def weekday(self):
         "Returns the day of week."
         return self.__getdateinfo__('W')
+    # deprecated alias for weekday
+    day_of_week = weekday
     @property
     def day_of_year(self):
         "Returns the day of year."
@@ -329,7 +337,7 @@
         return self.__getdateinfo__('I')
 
     days = day
-    weekdays = day_of_week
+    weekdays = weekday
     yeardays = day_of_year
     months = month
     quarters = quarter
@@ -355,7 +363,6 @@
         "Converts the dates from values to ordinals."
         # Note: we better try to cache the result
         if self._cachedinfo['toord'] is None:
-#            diter = (Date(self.freq, value=d).toordinal() for d in self)
             if self.freq == _c.FR_UND:
                 diter = (d.value for d in self)
             else:
@@ -364,6 +371,13 @@
             self._cachedinfo['toord'] = toord
         return self._cachedinfo['toord']
     #
+    def tolist(self):
+        """Returns a hierarchical python list of standard datetime objects."""
+        _result = numpy.empty(self.shape, dtype=numpy.object_)
+        for idx, val in numpy.ndenumerate(self):
+            operator.setitem(_result, idx, Date(freq=self.freq, value=val).datetime)
+        return _result.tolist()
+    #
     def tostring(self):
         "Converts the dates to strings."
         # Note: we better cache the result
@@ -674,7 +688,9 @@
         except SystemError:
             return getattr(numpy,self._methodname).__call__(caller, *args, **params)
 #............................
-day_of_week = _frommethod('day_of_week')
+weekday = _frommethod('day_of_week')
+# deprecated alias for weekday
+day_of_week = weekday
 day_of_year = _frommethod('day_of_year')
 year = _frommethod('year')
 quarter = _frommethod('quarter')

Modified: trunk/scipy/sandbox/timeseries/include/c_dates.h
===================================================================
--- trunk/scipy/sandbox/timeseries/include/c_dates.h	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/include/c_dates.h	2007-11-23 21:42:20 UTC (rev 3570)
@@ -110,7 +110,7 @@
 PyObject *DateArray_getDateInfo(PyObject *, PyObject *);
 
 
-PyObject *c_dates_thisday(PyObject *, PyObject *);
+PyObject *c_dates_now(PyObject *, PyObject *);
 PyObject *c_dates_check_freq(PyObject *, PyObject *);
 PyObject *c_dates_check_freq_str(PyObject *, PyObject *);
 PyObject *c_dates_get_freq_group(PyObject *, PyObject *);

Modified: trunk/scipy/sandbox/timeseries/lib/moving_funcs.py
===================================================================
--- trunk/scipy/sandbox/timeseries/lib/moving_funcs.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/lib/moving_funcs.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -366,10 +366,10 @@
 
 ###############################################################################
 if __name__ == '__main__':
-    from timeseries import time_series, today
+    from timeseries import time_series, now
     from maskedarray.testutils import assert_equal, assert_almost_equal
     #
-    series = time_series(N.arange(10),start_date=today('D'))
+    series = time_series(N.arange(10),start_date=now('D'))
     #
     filtered = mov_sum(series,3)
     assert_equal(filtered, [0,1,3,6,9,12,15,18,21,24])

Modified: trunk/scipy/sandbox/timeseries/plotlib.py
===================================================================
--- trunk/scipy/sandbox/timeseries/plotlib.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/plotlib.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -574,7 +574,7 @@
         if self.isminor:
             fmt = self.formatdict.pop(x, '')
             if fmt is not '':
-                retval = Date(self.freq, value=int(x)).strfmt(fmt)
+                retval = Date(self.freq, value=int(x)).strftime(fmt)
             else:
                 retval = ''
         else:

Modified: trunk/scipy/sandbox/timeseries/report.py
===================================================================
--- trunk/scipy/sandbox/timeseries/report.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/report.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -328,7 +328,7 @@
         if datefmt is None:
             def datefmt_func(date): return str(date)
         else:
-            def datefmt_func(date): return date.strfmt(datefmt)
+            def datefmt_func(date): return date.strftime(datefmt)
 
         if dates is None:
             tseries = ts.align_series(*tseries)

Modified: trunk/scipy/sandbox/timeseries/src/c_dates.c
===================================================================
--- trunk/scipy/sandbox/timeseries/src/c_dates.c	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/src/c_dates.c	2007-11-23 21:42:20 UTC (rev 3570)
@@ -1649,9 +1649,12 @@
 }
 
 static char DateObject_strfmt_doc[] =
+"Deprecated alias for strftime method";
+
+static char DateObject_strftime_doc[] =
 "Returns string representation of Date object according to format specified.\n\n"
-":Parameters:\n"
-"   - fmt : string\n"
+"*Parameters*:\n"
+"   fmt : {str}\n"
 "       Formatting string. Uses the same directives as in the time.strftime\n"
 "       function in the standard Python time module. In addition, a few other\n"
 "       directives are supported:\n"
@@ -1665,7 +1668,7 @@
 "                 the current quarter. This is the same as %Y unless the\n"
 "                 Date is one of the 'qtr-s' frequencies\n";
 static PyObject *
-DateObject_strfmt(DateObject *self, PyObject *args)
+DateObject_strftime(DateObject *self, PyObject *args)
 {
 
     char *orig_fmt_str, *fmt_str;
@@ -1689,7 +1692,7 @@
     long (*toDaily)(long, char, asfreq_info*) = NULL;
     asfreq_info af_info;
 
-    if (!PyArg_ParseTuple(args, "s:strfmt(fmt)", &orig_fmt_str)) return NULL;
+    if (!PyArg_ParseTuple(args, "s:strftime(fmt)", &orig_fmt_str)) return NULL;
 
     toDaily = get_asfreq_func(self->freq, FR_DAY, 0);
     get_asfreq_info(self->freq, FR_DAY, &af_info);
@@ -1821,7 +1824,7 @@
 
     if (string_arg == NULL) { return NULL; }
 
-    retval = DateObject_strfmt(self, string_arg);
+    retval = DateObject_strftime(self, string_arg);
     Py_DECREF(string_arg);
 
     return retval;
@@ -2098,7 +2101,7 @@
 }
 
 static PyObject *
-DateObject_day_of_week(DateObject *self, void *closure) {
+DateObject_weekday(DateObject *self, void *closure) {
     struct date_info dinfo;
     if(DateObject_set_date_info(self, &dinfo) == -1) return NULL;
     return PyInt_FromLong(dinfo.day_of_week);
@@ -2173,8 +2176,11 @@
             "Returns the week.", NULL},
     {"day", (getter)DateObject_day, (setter)DateObject_ReadOnlyErr,
             "Returns the day of month.", NULL},
-    {"day_of_week", (getter)DateObject_day_of_week, (setter)DateObject_ReadOnlyErr,
+    {"weekday", (getter)DateObject_weekday, (setter)DateObject_ReadOnlyErr,
             "Returns the day of week.", NULL},
+	// deprecated alias for weekday property
+    {"day_of_week", (getter)DateObject_weekday, (setter)DateObject_ReadOnlyErr,
+            "Returns the day of week.", NULL},
     {"day_of_year", (getter)DateObject_day_of_year, (setter)DateObject_ReadOnlyErr,
             "Returns the day of year.", NULL},
     {"second", (getter)DateObject_second, (setter)DateObject_ReadOnlyErr,
@@ -2223,7 +2229,10 @@
 static PyMethodDef DateObject_methods[] = {
     {"toordinal", (PyCFunction)DateObject_toordinal, METH_NOARGS,
      DateObject_toordinal_doc},
-    {"strfmt", (PyCFunction)DateObject_strfmt, METH_VARARGS,
+    {"strftime", (PyCFunction)DateObject_strftime, METH_VARARGS,
+     DateObject_strftime_doc},
+    // deprecated alias for strftime
+    {"strfmt", (PyCFunction)DateObject_strftime, METH_VARARGS,
      DateObject_strfmt_doc},
     {"asfreq", (PyCFunction)DateObject_asfreq, METH_VARARGS | METH_KEYWORDS,
      DateObject_asfreq_doc},
@@ -2331,7 +2340,7 @@
 }
 
 PyObject *
-c_dates_thisday(PyObject *self, PyObject *args) {
+c_dates_now(PyObject *self, PyObject *args) {
 
     PyObject *freq, *init_args, *init_kwargs;
     time_t rawtime;
@@ -2340,7 +2349,7 @@
 
     DateObject *secondly_date;
 
-    if (!PyArg_ParseTuple(args, "O:thisday(freq)", &freq)) return NULL;
+    if (!PyArg_ParseTuple(args, "O:now(freq)", &freq)) return NULL;
 
     if ((freq_val = check_freq(freq)) == INT_ERR_CODE) return NULL;
 
@@ -2635,7 +2644,7 @@
             skip_periods = __skip_periods_day(freq);
             break;
         case 'W': //day of week
-            getDateInfo = &DateObject_day_of_week;
+            getDateInfo = &DateObject_weekday;
             skip_periods = __skip_periods_day(freq);
             break;
         case 'I': //week of year

Modified: trunk/scipy/sandbox/timeseries/src/cseries.c
===================================================================
--- trunk/scipy/sandbox/timeseries/src/cseries.c	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/src/cseries.c	2007-11-23 21:42:20 UTC (rev 3570)
@@ -26,11 +26,11 @@
      METH_VARARGS, ""},
 
 
-    {"thisday", (PyCFunction)c_dates_thisday,
+    {"now", (PyCFunction)c_dates_now,
      METH_VARARGS,
-        "Returns today's date, at the given frequency\n\n"
-        ":Parameters:\n"
-        "   - freq : string/int\n"
+        "Returns the current date/time, at the given frequency\n\n"
+        "*Parameters*:\n"
+        "   freq : {freq_spec}\n"
         "       Frequency to convert the Date to. Accepts any valid frequency\n"
         "       specification (string or integer)\n"},
 

Modified: trunk/scipy/sandbox/timeseries/tests/test_dates.py
===================================================================
--- trunk/scipy/sandbox/timeseries/tests/test_dates.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/tests/test_dates.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -29,7 +29,7 @@
 from timeseries import const as C
 from timeseries.parser import DateFromString, DateTimeFromString
 from timeseries import Date, DateArray,\
-    thisday, today, date_array, date_array_fromlist
+    now, date_array, date_array_fromlist
 from timeseries.cseries import freq_dict
 
 
@@ -122,8 +122,8 @@
         freqs = [x[0] for x in freq_dict.values() if x[0] != 'U']
 
         for f in freqs:
-            today = thisday(f)
-            assert_equal(Date(freq=f, value=today.value), today)
+            _now = now(f)
+            assert_equal(Date(freq=f, value=_now.value), _now)
         print "finished test_consistent_value"
 
     def test_shortcuts(self):
@@ -134,14 +134,14 @@
         assert_equal(Date('D','2007-01'), Date('D', value=732677))
         assert_equal(Date('D',732677), Date('D', value=732677))
         # DateArray shortcuts
-        n = today('M')
+        n = now('M')
         d = date_array(start_date=n, length=3)
         assert_equal(date_array(n,length=3), d)
         assert_equal(date_array(n, n+2), d)
         print "finished test_shortcuts"
 
 class TestDateProperties(NumpyTestCase):
-    "Test properties such as year, month, day_of_week, etc...."
+    "Test properties such as year, month, weekday, etc...."
 
     def __init__(self, *args, **kwds):
         NumpyTestCase.__init__(self, *args, **kwds)
@@ -201,21 +201,21 @@
         assert_equal(b_date.quarter, 1)
         assert_equal(b_date.month, 1)
         assert_equal(b_date.day, 1)
-        assert_equal(b_date.day_of_week, 0)
+        assert_equal(b_date.weekday, 0)
         assert_equal(b_date.day_of_year, 1)
 
         assert_equal(d_date.year, 2007)
         assert_equal(d_date.quarter, 1)
         assert_equal(d_date.month, 1)
         assert_equal(d_date.day, 1)
-        assert_equal(d_date.day_of_week, 0)
+        assert_equal(d_date.weekday, 0)
         assert_equal(d_date.day_of_year, 1)
 
         assert_equal(h_date.year, 2007)
         assert_equal(h_date.quarter, 1)
         assert_equal(h_date.month, 1)
         assert_equal(h_date.day, 1)
-        assert_equal(h_date.day_of_week, 0)
+        assert_equal(h_date.weekday, 0)
         assert_equal(h_date.day_of_year, 1)
         assert_equal(h_date.hour, 0)
 
@@ -223,7 +223,7 @@
         assert_equal(t_date.quarter, 1)
         assert_equal(t_date.month, 1)
         assert_equal(t_date.day, 1)
-        assert_equal(t_date.day_of_week, 0)
+        assert_equal(t_date.weekday, 0)
         assert_equal(t_date.day_of_year, 1)
         assert_equal(t_date.hour, 0)
         assert_equal(t_date.minute, 0)
@@ -232,7 +232,7 @@
         assert_equal(s_date.quarter, 1)
         assert_equal(s_date.month, 1)
         assert_equal(s_date.day, 1)
-        assert_equal(s_date.day_of_week, 0)
+        assert_equal(s_date.weekday, 0)
         assert_equal(s_date.day_of_year, 1)
         assert_equal(s_date.hour, 0)
         assert_equal(s_date.minute, 0)
@@ -483,17 +483,17 @@
             date_W_to_Q = dWrap(Date(freq='Q', year=2007, quarter=1))
             date_W_to_M = dWrap(Date(freq='M', year=2007, month=1))
 
-            if Date(freq='D', year=2007, month=12, day=31).day_of_week == 6:
+            if Date(freq='D', year=2007, month=12, day=31).weekday == 6:
                 date_W_to_A_end_of_year = dWrap(Date(freq='A', year=2007))
             else:
                 date_W_to_A_end_of_year = dWrap(Date(freq='A', year=2008))
 
-            if Date(freq='D', year=2007, month=3, day=31).day_of_week == 6:
+            if Date(freq='D', year=2007, month=3, day=31).weekday == 6:
                 date_W_to_Q_end_of_quarter = dWrap(Date(freq='Q', year=2007, quarter=1))
             else:
                 date_W_to_Q_end_of_quarter = dWrap(Date(freq='Q', year=2007, quarter=2))
 
-            if Date(freq='D', year=2007, month=1, day=31).day_of_week == 6:
+            if Date(freq='D', year=2007, month=1, day=31).weekday == 6:
                 date_W_to_M_end_of_month = dWrap(Date(freq='M', year=2007, month=1))
             else:
                 date_W_to_M_end_of_month = dWrap(Date(freq='M', year=2007, month=2))
@@ -877,7 +877,7 @@
         assert_equal(empty_darray.get_steps(), None)
 
     def test_cachedinfo(self):
-        D = date_array(start_date=thisday('D'), length=5)
+        D = date_array(start_date=now('D'), length=5)
         Dstr = D.tostring()
         assert_equal(D.tostring(), Dstr)
         DL = D[[0,-1]]

Modified: trunk/scipy/sandbox/timeseries/tseries.py
===================================================================
--- trunk/scipy/sandbox/timeseries/tseries.py	2007-11-23 07:21:55 UTC (rev 3569)
+++ trunk/scipy/sandbox/timeseries/tseries.py	2007-11-23 21:42:20 UTC (rev 3570)
@@ -35,7 +35,7 @@
 import dates
 from dates import DateError, InsufficientDateError
 from dates import Date, isDate, DateArray, isDateArray, \
-    date_array, date_array_fromlist, date_array_fromrange, thisday, today, \
+    date_array, date_array_fromlist, date_array_fromrange, now, \
     check_freq, check_freq_str
 
 import cseries
@@ -56,6 +56,7 @@
 'quarter',
 'second','split', 'stack',
 'tofile','tshift',
+'week',
 'year',
 ]
 
@@ -595,9 +596,11 @@
         """Returns the day of month for each date in self._dates."""
         return self._dates.day
     @property
-    def day_of_week(self):
+    def weekday(self):
         """Returns the day of week for each date in self._dates."""
-        return self._dates.day_of_week
+        return self._dates.weekday
+    # deprecated alias for weekday
+    day_of_week = weekday
     @property
     def day_of_year(self):
         """Returns the day of year for each date in self._dates."""
@@ -632,7 +635,7 @@
         return self._dates.week
 
     days = day
-    weekdays = day_of_week
+    weekdays = weekday
     yeardays = day_of_year
     months = month
     quarters = quarter
@@ -873,8 +876,11 @@
         except SystemError:
             return getattr(numpy,self._methodname).__call__(caller, *args, **params)
 #............................
-day_of_week = _frommethod('day_of_week')
+weekday = _frommethod('weekday')
+# deprecated alias for weekday 
+day_of_week = weekday
 day_of_year = _frommethod('day_of_year')
+week = _frommethod('week')
 year = _frommethod('year')
 quarter = _frommethod('quarter')
 month = _frommethod('month')
@@ -1544,8 +1550,8 @@
 saved. Otherwise, only the first occurence of the date is conserved.
 
 Example
->>> a = time_series([1,2,3], start_date=today('D'))
->>> b = time_series([10,20,30], start_date=today('D')+1)
+>>> a = time_series([1,2,3], start_date=now('D'))
+>>> b = time_series([10,20,30], start_date=now('D')+1)
 >>> c = concatenate((a,b))
 >>> c._series
 masked_array(data = [ 1  2  3 30],




More information about the Scipy-svn mailing list