[Scipy-svn] r6717 - in trunk: scipy/integrate tools

scipy-svn@scip... scipy-svn@scip...
Sat Sep 11 19:49:18 CDT 2010


Author: ptvirtan
Date: 2010-09-11 19:49:17 -0500 (Sat, 11 Sep 2010)
New Revision: 6717

Added:
   trunk/scipy/integrate/npy_3kcompat.h
Modified:
   trunk/scipy/integrate/_odepackmodule.c
   trunk/scipy/integrate/_quadpackmodule.c
   trunk/scipy/integrate/multipack.h
   trunk/scipy/integrate/quadpack.h
   trunk/tools/py3tool.py
Log:
3K: scipy.integrate now builds and all tests pass.

Modified: trunk/scipy/integrate/_odepackmodule.c
===================================================================
--- trunk/scipy/integrate/_odepackmodule.c	2010-09-12 00:48:58 UTC (rev 6716)
+++ trunk/scipy/integrate/_odepackmodule.c	2010-09-12 00:49:17 UTC (rev 6717)
@@ -8,17 +8,50 @@
 {"odeint", (PyCFunction) odepack_odeint, METH_VARARGS|METH_KEYWORDS, doc_odeint},
 {NULL,		NULL, 0, NULL}
 };
+
+#if PY_VERSION_HEX >= 0x03000000
+static struct PyModuleDef moduledef = {
+    PyModuleDef_HEAD_INIT,
+    "_odepack",
+    NULL,
+    -1,
+    odepack_module_methods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+};
+
+PyObject *PyInit__odepack(void)
+{
+    PyObject *m, *d, *s;
+
+    m = PyModule_Create(&moduledef);
+    import_array();
+    d = PyModule_GetDict(m);
+
+    s = PyUString_FromString(" 1.9 ");
+    PyDict_SetItemString(d, "__version__", s);
+    odepack_error = PyErr_NewException ("odpack.error", NULL, NULL);
+    Py_DECREF(s);
+    PyDict_SetItemString(d, "error", odepack_error);
+    if (PyErr_Occurred()) {
+        Py_FatalError("can't initialize module odepack");
+    }
+    return m;
+}
+#else
 PyMODINIT_FUNC init_odepack(void) {
   PyObject *m, *d, *s;
   m = Py_InitModule("_odepack", odepack_module_methods);
   import_array();
   d = PyModule_GetDict(m);
 
-  s = PyString_FromString(" 1.9 ");
+  s = PyUSString_FromString(" 1.9 ");
   PyDict_SetItemString(d, "__version__", s);
   odepack_error = PyErr_NewException ("odepack.error", NULL, NULL);
   Py_DECREF(s);
   if (PyErr_Occurred())
     Py_FatalError("can't initialize module odepack");
 }
-        
+#endif    

Modified: trunk/scipy/integrate/_quadpackmodule.c
===================================================================
--- trunk/scipy/integrate/_quadpackmodule.c	2010-09-12 00:48:58 UTC (rev 6716)
+++ trunk/scipy/integrate/_quadpackmodule.c	2010-09-12 00:49:17 UTC (rev 6717)
@@ -14,13 +14,46 @@
 {"_qawce", quadpack_qawce, METH_VARARGS, doc_qawce},
 {NULL,		NULL, 0, NULL}
 };
+
+#if PY_VERSION_HEX >= 0x03000000
+static struct PyModuleDef moduledef = {
+    PyModuleDef_HEAD_INIT,
+    "_quadpack",
+    NULL,
+    -1,
+    quadpack_module_methods,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+};
+
+PyObject *PyInit__quadpack(void)
+{
+    PyObject *m, *d, *s;
+
+    m = PyModule_Create(&moduledef);
+    import_array();
+    d = PyModule_GetDict(m);
+
+    s = PyUString_FromString(" 1.13 ");
+    PyDict_SetItemString(d, "__version__", s);
+    quadpack_error = PyErr_NewException ("quadpack.error", NULL, NULL);
+    Py_DECREF(s);
+    PyDict_SetItemString(d, "error", quadpack_error);
+    if (PyErr_Occurred()) {
+        Py_FatalError("can't initialize module quadpack");
+    }
+    return m;
+}
+#else
 PyMODINIT_FUNC init_quadpack(void) {
   PyObject *m, *d, *s;
   m = Py_InitModule("_quadpack", quadpack_module_methods);
   import_array();
   d = PyModule_GetDict(m);
 
-  s = PyString_FromString(" 1.13 ");
+  s = PyUString_FromString(" 1.13 ");
   PyDict_SetItemString(d, "__version__", s);
   quadpack_error = PyErr_NewException ("quadpack.error", NULL, NULL);
   Py_DECREF(s);
@@ -28,4 +61,4 @@
   if (PyErr_Occurred())
     Py_FatalError("can't initialize module quadpack");
 }
-        
+#endif

Modified: trunk/scipy/integrate/multipack.h
===================================================================
--- trunk/scipy/integrate/multipack.h	2010-09-12 00:48:58 UTC (rev 6716)
+++ trunk/scipy/integrate/multipack.h	2010-09-12 00:49:17 UTC (rev 6717)
@@ -29,6 +29,8 @@
 */
 
 #include "Python.h"
+#include "npy_3kcompat.h"
+
 #include "numpy/arrayobject.h"
 
 #define PYERR(errobj,message) {PyErr_SetString(errobj,message); goto fail;}

Added: trunk/scipy/integrate/npy_3kcompat.h
===================================================================
--- trunk/scipy/integrate/npy_3kcompat.h	                        (rev 0)
+++ trunk/scipy/integrate/npy_3kcompat.h	2010-09-12 00:49:17 UTC (rev 6717)
@@ -0,0 +1,305 @@
+#ifndef _NPY_3KCOMPAT_H_
+#define _NPY_3KCOMPAT_H_
+
+#include <Python.h>
+#include <stdio.h>
+
+#if PY_VERSION_HEX >= 0x03000000
+#define NPY_PY3K
+#endif
+
+#include "numpy/npy_common.h"
+#include "numpy/ndarrayobject.h"
+
+/*
+ * PyInt -> PyLong
+ */
+
+#if defined(NPY_PY3K)
+/* Return True only if the long fits in a C long */
+static NPY_INLINE int PyInt_Check(PyObject *op) {
+    int overflow = 0;
+    if (!PyLong_Check(op)) {
+        return 0;
+    }
+    PyLong_AsLongAndOverflow(op, &overflow);
+    return (overflow == 0);
+}
+
+#define PyInt_FromLong PyLong_FromLong
+#define PyInt_AsLong PyLong_AsLong
+#define PyInt_AS_LONG PyLong_AsLong
+#define PyInt_AsSsize_t PyLong_AsSsize_t
+
+/* NOTE:
+ *
+ * Since the PyLong type is very different from the fixed-range PyInt,
+ * we don't define PyInt_Type -> PyLong_Type.
+ */
+#endif /* NPY_PY3K */
+
+/*
+ * PyString -> PyBytes
+ */
+
+#if defined(NPY_PY3K)
+
+#define PyString_Type PyBytes_Type
+#define PyString_Check PyBytes_Check
+#define PyStringObject PyBytesObject
+#define PyString_FromString PyBytes_FromString
+#define PyString_FromStringAndSize PyBytes_FromStringAndSize
+#define PyString_AS_STRING PyBytes_AS_STRING
+#define PyString_AsStringAndSize PyBytes_AsStringAndSize
+#define PyString_FromFormat PyBytes_FromFormat
+#define PyString_Concat PyBytes_Concat
+#define PyString_ConcatAndDel PyBytes_ConcatAndDel
+#define PyString_AsString PyBytes_AsString
+#define PyString_GET_SIZE PyBytes_GET_SIZE
+#define PyString_Size PyBytes_Size
+
+#define PyUString_Type PyUnicode_Type
+#define PyUString_Check PyUnicode_Check
+#define PyUStringObject PyUnicodeObject
+#define PyUString_FromString PyUnicode_FromString
+#define PyUString_FromStringAndSize PyUnicode_FromStringAndSize
+#define PyUString_FromFormat PyUnicode_FromFormat
+#define PyUString_Concat PyUnicode_Concat2
+#define PyUString_ConcatAndDel PyUnicode_ConcatAndDel
+#define PyUString_GET_SIZE PyUnicode_GET_SIZE
+#define PyUString_Size PyUnicode_Size
+#define PyUString_InternFromString PyUnicode_InternFromString
+#define PyUString_Format PyUnicode_Format
+
+#else
+
+#define PyBytes_Type PyString_Type
+#define PyBytes_Check PyString_Check
+#define PyBytesObject PyStringObject
+#define PyBytes_FromString PyString_FromString
+#define PyBytes_FromStringAndSize PyString_FromStringAndSize
+#define PyBytes_AS_STRING PyString_AS_STRING
+#define PyBytes_AsStringAndSize PyString_AsStringAndSize
+#define PyBytes_FromFormat PyString_FromFormat
+#define PyBytes_Concat PyString_Concat
+#define PyBytes_ConcatAndDel PyString_ConcatAndDel
+#define PyBytes_AsString PyString_AsString
+#define PyBytes_GET_SIZE PyString_GET_SIZE
+#define PyBytes_Size PyString_Size
+
+#define PyUString_Type PyString_Type
+#define PyUString_Check PyString_Check
+#define PyUStringObject PyStringObject
+#define PyUString_FromString PyString_FromString
+#define PyUString_FromStringAndSize PyString_FromStringAndSize
+#define PyUString_FromFormat PyString_FromFormat
+#define PyUString_Concat PyString_Concat
+#define PyUString_ConcatAndDel PyString_ConcatAndDel
+#define PyUString_GET_SIZE PyString_GET_SIZE
+#define PyUString_Size PyString_Size
+#define PyUString_InternFromString PyString_InternFromString
+#define PyUString_Format PyString_Format
+
+#endif /* NPY_PY3K */
+
+
+static NPY_INLINE void
+PyUnicode_ConcatAndDel(PyObject **left, PyObject *right)
+{
+    PyObject *new;
+    new = PyUnicode_Concat(*left, right);
+    Py_DECREF(*left);
+    Py_DECREF(right);
+    *left = new;
+}
+
+static NPY_INLINE void
+PyUnicode_Concat2(PyObject **left, PyObject *right)
+{
+    PyObject *new;
+    new = PyUnicode_Concat(*left, right);
+    Py_DECREF(*left);
+    *left = new;
+}
+
+
+/*
+ * Accessing items of ob_base
+ */
+
+#if (PY_VERSION_HEX < 0x02060000)
+#define Py_TYPE(o)    (((PyObject*)(o))->ob_type)
+#define Py_REFCNT(o)  (((PyObject*)(o))->ob_refcnt)
+#define Py_SIZE(o)    (((PyVarObject*)(o))->ob_size)
+#endif
+
+/*
+ * PyFile_AsFile
+ */
+#if defined(NPY_PY3K)
+static NPY_INLINE FILE*
+npy_PyFile_Dup(PyObject *file, char *mode)
+{
+    int fd, fd2;
+    PyObject *ret, *os;
+    /* Flush first to ensure things end up in the file in the correct order */
+    ret = PyObject_CallMethod(file, "flush", "");
+    if (ret == NULL) {
+        return NULL;
+    }
+    Py_DECREF(ret);
+    fd = PyObject_AsFileDescriptor(file);
+    if (fd == -1) {
+        return NULL;
+    }
+    os = PyImport_ImportModule("os");
+    if (os == NULL) {
+        return NULL;
+    }
+    ret = PyObject_CallMethod(os, "dup", "i", fd);
+    Py_DECREF(os);
+    if (ret == NULL) {
+        return NULL;
+    }
+    fd2 = PyNumber_AsSsize_t(ret, NULL);
+    Py_DECREF(ret);
+    return fdopen(fd2, mode);
+}
+#endif
+
+static NPY_INLINE PyObject*
+npy_PyFile_OpenFile(PyObject *filename, char *mode)
+{
+    PyObject *open;
+    open = PyDict_GetItemString(PyEval_GetBuiltins(), "open");
+    if (open == NULL) {
+        return NULL;
+    }
+    return PyObject_CallFunction(open, "Os", filename, mode);
+}
+
+/*
+ * PyObject_Cmp
+ */
+#if defined(NPY_PY3K)
+static NPY_INLINE int
+PyObject_Cmp(PyObject *i1, PyObject *i2, int *cmp)
+{
+    int v;
+    v = PyObject_RichCompareBool(i1, i2, Py_LT);
+    if (v == 0) {
+        *cmp = -1;
+        return 1;
+    }
+    else if (v == -1) {
+        return -1;
+    }
+
+    v = PyObject_RichCompareBool(i1, i2, Py_GT);
+    if (v == 0) {
+        *cmp = 1;
+        return 1;
+    }
+    else if (v == -1) {
+        return -1;
+    }
+
+    v = PyObject_RichCompareBool(i1, i2, Py_EQ);
+    if (v == 0) {
+        *cmp = 0;
+        return 1;
+    }
+    else {
+        *cmp = 0;
+        return -1;
+    }
+}
+#endif
+
+/*
+ * PyCObject functions adapted to PyCapsules.
+ *
+ * The main job here is to get rid of the improved error handling
+ * of PyCapsules. It's a shame...
+ */
+#if defined(NPY_PY3K)
+
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(PyObject *))
+{
+    PyObject *ret = PyCapsule_New(ptr, NULL, dtor);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(PyObject *))
+{
+    PyObject *ret = NpyCapsule_FromVoidPtr(ptr, dtor);
+    if (ret != NULL && PyCapsule_SetContext(ret, context) != 0) {
+        PyErr_Clear();
+        Py_DECREF(ret);
+        ret = NULL;
+    }
+    return ret;
+}
+
+static NPY_INLINE void *
+NpyCapsule_AsVoidPtr(PyObject *obj)
+{
+    void *ret = PyCapsule_GetPointer(obj, NULL);
+    if (ret == NULL) {
+        PyErr_Clear();
+    }
+    return ret;
+}
+
+static NPY_INLINE int
+NpyCapsule_Check(PyObject *ptr)
+{
+    return PyCapsule_CheckExact(ptr);
+}
+
+static void
+simple_capsule_dtor(PyObject *cap)
+{
+    PyArray_free(PyCapsule_GetPointer(cap, NULL));
+}
+
+#else
+
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtr(void *ptr, void (*dtor)(void *))
+{
+    return PyCObject_FromVoidPtr(ptr, dtor);
+}
+
+static NPY_INLINE PyObject *
+NpyCapsule_FromVoidPtrAndDesc(void *ptr, void* context, void (*dtor)(void *))
+{
+    return PyCObject_FromVoidPtrAndDesc(ptr, context, dtor);
+}
+
+static NPY_INLINE void *
+NpyCapsule_AsVoidPtr(PyObject *ptr)
+{
+    return PyCObject_AsVoidPtr(ptr);
+}
+
+static NPY_INLINE int
+NpyCapsule_Check(PyObject *ptr)
+{
+    return PyCObject_Check(ptr);
+}
+
+static void
+simple_capsule_dtor(void *ptr)
+{
+    PyArray_free(ptr);
+}
+
+#endif
+
+#endif /* _NPY_3KCOMPAT_H_ */

Modified: trunk/scipy/integrate/quadpack.h
===================================================================
--- trunk/scipy/integrate/quadpack.h	2010-09-12 00:48:58 UTC (rev 6716)
+++ trunk/scipy/integrate/quadpack.h	2010-09-12 00:49:17 UTC (rev 6717)
@@ -28,6 +28,8 @@
 */
 
 #include "Python.h"
+
+#include "npy_3kcompat.h"
 #include "numpy/arrayobject.h"
 #include <setjmp.h>
 

Modified: trunk/tools/py3tool.py
===================================================================
--- trunk/tools/py3tool.py	2010-09-12 00:48:58 UTC (rev 6716)
+++ trunk/tools/py3tool.py	2010-09-12 00:49:17 UTC (rev 6717)
@@ -140,6 +140,13 @@
         os.path.join('cluster', 'vq.py'),
         os.path.join('fftpack', 'basic.py'),
         os.path.join('fftpack', 'pseudo_diffs.py'),
+        os.path.join('integrate', 'odepack.py'),
+        os.path.join('integrate', 'quadpack.py'),
+        os.path.join('integrate', 'ode.py'),
+        os.path.join('interpolate', 'fitpack.py'),
+        os.path.join('interpolate', 'fitpack2.py'),
+        os.path.join('interpolate', 'interpolate.py'),
+        os.path.join('interpolate', 'interpolate_wrapper.py'),
         os.path.join('linalg', 'basic.py'),
         os.path.join('linalg', 'decomp.py'),
         os.path.join('linalg', 'lapack.py'),
@@ -152,6 +159,8 @@
         os.path.join('optimize', 'cobyla.py'),
         os.path.join('optimize', 'slsqp.py'),
         os.path.join('optimize', 'nnls.py'),
+        os.path.join('signal', '__init__.py'),
+        os.path.join('signal', 'bsplines.py'),
         os.path.join('special', '__init__.py'),
         os.path.join('special', 'basic.py'),
         os.path.join('special', 'orthogonal.py'),
@@ -168,7 +177,10 @@
                     'calc_lwork', '_cephes', 'specfun', 'orthogonal_eval',
                     'lambertw', 'ckdtree', '_distance_wrap',
                     '_minpack', '_zeros', '_lbfgsb', '_cobyla', '_slsqp',
-                    '_nnls']:
+                    '_nnls',
+                    'sigtools', 'spline',
+                    '_fitpack', 'dfitpack', '_interpolate',
+                    '_odepack', '_quadpack', 'vode', '_dop']:
             text = re.sub(r'^(\s*)import %s' % mod,
                           r'\1from . import %s' % mod,
                           text, flags=re.M)



More information about the Scipy-svn mailing list