[Scipy-svn] r6243 - trunk/scipy/signal
scipy-svn at scipy.org
scipy-svn at scipy.org
Sun Feb 21 10:38:35 EST 2010
Author: ptvirtan
Date: 2010-02-21 09:38:35 -0600 (Sun, 21 Feb 2010)
New Revision: 6243
Modified:
trunk/scipy/signal/lfilter.c.src
trunk/scipy/signal/sigtools.h
trunk/scipy/signal/sigtoolsmodule.c
Log:
BUG: signaltools: make lfilter work also after Numpy ABI change (value of NPY_OBJECT should not be hardcoded)
Modified: trunk/scipy/signal/lfilter.c.src
===================================================================
--- trunk/scipy/signal/lfilter.c.src 2010-02-19 11:02:12 UTC (rev 6242)
+++ trunk/scipy/signal/lfilter.c.src 2010-02-21 15:38:35 UTC (rev 6243)
@@ -33,13 +33,24 @@
typedef void (BasicFilterFunction) (char *, char *, char *, char *, char *, intp, uintp, intp, intp);
-static BasicFilterFunction *BasicFilterFunctions[] =
- { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- FLOAT_filt, DOUBLE_filt, EXTENDED_filt,
- CFLOAT_filt, CDOUBLE_filt, CEXTENDED_filt,
- OBJECT_filt, NULL, NULL, NULL
-};
+static BasicFilterFunction *BasicFilterFunctions[256];
+void
+scipy_signal_sigtools_linear_filter_module_init()
+{
+ int k;
+ for (k = 0; k < 256; ++k) {
+ BasicFilterFunctions[k] = NULL;
+ }
+ BasicFilterFunctions[NPY_FLOAT] = FLOAT_filt;
+ BasicFilterFunctions[NPY_DOUBLE] = DOUBLE_filt;
+ BasicFilterFunctions[NPY_LONGDOUBLE] = EXTENDED_filt;
+ BasicFilterFunctions[NPY_CFLOAT] = CFLOAT_filt;
+ BasicFilterFunctions[NPY_CDOUBLE] = CDOUBLE_filt;
+ BasicFilterFunctions[NPY_CLONGDOUBLE] = CEXTENDED_filt;
+ BasicFilterFunctions[NPY_OBJECT] = OBJECT_filt;
+}
+
/* There is the start of an OBJECT_filt, but it may need work */
static int
@@ -114,7 +125,12 @@
typenum);
}
- basic_filter = BasicFilterFunctions[(int) (arX->descr->type_num)];
+ if (arX->descr->type_num < 256) {
+ basic_filter = BasicFilterFunctions[(int) (arX->descr->type_num)];
+ }
+ else {
+ basic_filter = NULL;
+ }
if (basic_filter == NULL) {
PyObject *msg, *str;
char *s;
Modified: trunk/scipy/signal/sigtools.h
===================================================================
--- trunk/scipy/signal/sigtools.h 2010-02-19 11:02:12 UTC (rev 6242)
+++ trunk/scipy/signal/sigtools.h 2010-02-21 15:38:35 UTC (rev 6243)
@@ -55,6 +55,9 @@
PyObject*
scipy_signal_sigtools_correlateND(PyObject *NPY_UNUSED(dummy), PyObject *args);
+void
+scipy_signal_sigtools_linear_filter_module_init();
+
/*
static int index_out_of_bounds(int *, int *, int );
static long compute_offsets (unsigned long *, long *, int *, int *, int *, int *, int);
Modified: trunk/scipy/signal/sigtoolsmodule.c
===================================================================
--- trunk/scipy/signal/sigtoolsmodule.c 2010-02-19 11:02:12 UTC (rev 6242)
+++ trunk/scipy/signal/sigtoolsmodule.c 2010-02-21 15:38:35 UTC (rev 6243)
@@ -1338,6 +1338,7 @@
PyDict_SetItemString(d,"HILBERT", PyInt_FromLong((long) HILBERT));
*/
+ scipy_signal_sigtools_linear_filter_module_init();
/* Check for errors */
if (PyErr_Occurred()) {
More information about the Scipy-svn
mailing list