[Scipy-svn] r2984 - in trunk/Lib/sandbox/timeseries: lib src

scipy-svn at scipy.org scipy-svn at scipy.org
Fri May 11 16:25:03 EDT 2007


Author: mattknox_ca
Date: 2007-05-11 15:24:55 -0500 (Fri, 11 May 2007)
New Revision: 2984

Modified:
   trunk/Lib/sandbox/timeseries/lib/moving_funcs.py
   trunk/Lib/sandbox/timeseries/src/c_tseries.c
Log:
fixed a couple problems with the data type for moving function results

Modified: trunk/Lib/sandbox/timeseries/lib/moving_funcs.py
===================================================================
--- trunk/Lib/sandbox/timeseries/lib/moving_funcs.py	2007-05-11 13:38:00 UTC (rev 2983)
+++ trunk/Lib/sandbox/timeseries/lib/moving_funcs.py	2007-05-11 20:24:55 UTC (rev 2984)
@@ -80,10 +80,9 @@
     $$dtype$$"""
 
     kwargs = {'span':span}
-    if dtype is None: dtype = data.dtype
-    kwargs['dtype'] = dtype
-        
-
+    if dtype is not None:
+        kwargs['dtype'] = dtype
+ 
     return _moving_func(data, MA_mov_sum, kwargs)
 #...............................................................................
 def mov_median(data, span, dtype=None):
@@ -95,8 +94,8 @@
     $$dtype$$"""
 
     kwargs = {'span':span}
-    if dtype is None: dtype = data.dtype
-    kwargs['dtype'] = dtype
+    if dtype is not None:
+        kwargs['dtype'] = dtype
 
     return _moving_func(data, MA_mov_median, kwargs)
 #...............................................................................

Modified: trunk/Lib/sandbox/timeseries/src/c_tseries.c
===================================================================
--- trunk/Lib/sandbox/timeseries/src/c_tseries.c	2007-05-11 13:38:00 UTC (rev 2983)
+++ trunk/Lib/sandbox/timeseries/src/c_tseries.c	2007-05-11 20:24:55 UTC (rev 2984)
@@ -289,7 +289,7 @@
 }
 
 
-/* This function is directly copied from direct copy of function in  */
+/* This function is directly copied from the numpy source  */
 /* Return typenumber from dtype2 unless it is NULL, then return
    NPY_DOUBLE if dtype1->type_num is integer or bool
    and dtype1->type_num otherwise.
@@ -297,20 +297,30 @@
 static int
 _get_type_num_double(PyArray_Descr *dtype1, PyArray_Descr *dtype2)
 {
-        if (dtype2 != NULL)
-                return dtype2->type_num;
+    if (dtype2 != NULL) {
+        return dtype2->type_num;
+    }
 
-        /* For integer or bool data-types */
-        if (dtype1->type_num < NPY_FLOAT) {
-                return NPY_DOUBLE;
-        }
-        else {
-                return dtype1->type_num;
-        }
+    /* For integer or bool data-types */
+    if (dtype1->type_num < NPY_FLOAT) {
+        return NPY_DOUBLE;
+    }
+    else {
+        return dtype1->type_num;
+    }
 }
 
-#define _CHKTYPENUM(typ) ((typ) ? (typ)->type_num : PyArray_NOTYPE)
+static int
+_get_type_num(PyArray_Descr *dtype1, PyArray_Descr *dtype2)
+{
+    if (dtype2 != NULL) {
+        return dtype2->type_num;
+    } else {
+        return dtype1->type_num;
+    }
+}
 
+
 /* validates the standard arguments to moving functions and set the original
    mask, original ndarray, and mask for the result */
 static PyObject *
@@ -480,7 +490,7 @@
     check_mov_args(orig_arrayobj, span, 1,
                    &orig_ndarray, &result_mask);
 
-    rtype = _CHKTYPENUM(dtype);
+    rtype = _get_type_num(((PyArrayObject*)orig_ndarray)->descr, dtype);
 
     result_ndarray = calc_mov_sum((PyArrayObject*)orig_ndarray,
                                   span, rtype);
@@ -735,7 +745,11 @@
     check_mov_args(orig_arrayobj, span, 1,
                    &orig_ndarray, &result_mask);
 
-    rtype = _CHKTYPENUM(dtype);
+    if ((span % 2) == 0) {
+        rtype = _get_type_num_double(((PyArrayObject*)orig_ndarray)->descr, dtype);
+    } else {
+        rtype = _get_type_num(((PyArrayObject*)orig_ndarray)->descr, dtype);
+    }
 
     result_ndarray = calc_mov_median((PyArrayObject*)orig_ndarray,
                                      span, rtype);




More information about the Scipy-svn mailing list