[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