[Scipy-svn] r3498 - trunk/scipy/odr

scipy-svn@scip... scipy-svn@scip...
Mon Nov 5 17:13:19 CST 2007


Author: rkern
Date: 2007-11-05 17:13:01 -0600 (Mon, 05 Nov 2007)
New Revision: 3498

Modified:
   trunk/scipy/odr/__odrpack.c
   trunk/scipy/odr/odrpack.py
Log:
Use C-int arrays instead of C-long arrays. Fix #357.

Modified: trunk/scipy/odr/__odrpack.c
===================================================================
--- trunk/scipy/odr/__odrpack.c	2007-11-04 04:35:10 UTC (rev 3497)
+++ trunk/scipy/odr/__odrpack.c	2007-11-05 23:13:01 UTC (rev 3498)
@@ -920,7 +920,7 @@
   if (pifixb == NULL)
     {
       dim1[0] = np;
-      ifixb = (PyArrayObject *) PyArray_FromDims(1, dim1, PyArray_LONG);
+      ifixb = (PyArrayObject *) PyArray_FromDims(1, dim1, PyArray_INT);
       *(int *)(ifixb->data) = -1;      /* set first element negative */
     }
   else
@@ -928,7 +928,7 @@
       /* pifixb is a sequence as checked before */
 
       if ((ifixb =
-           (PyArrayObject *) PyArray_CopyFromObject(pifixb, PyArray_LONG, 1,
+           (PyArrayObject *) PyArray_CopyFromObject(pifixb, PyArray_INT, 1,
                                                     1)) == NULL)
         {
           PYERR(PyExc_ValueError,
@@ -946,7 +946,7 @@
     {
       dim2[0] = m;
       dim2[1] = 1;
-      ifixx = (PyArrayObject *) PyArray_FromDims(2, dim2, PyArray_LONG);
+      ifixx = (PyArrayObject *) PyArray_FromDims(2, dim2, PyArray_INT);
       *(int *)(ifixx->data) = -1;      /* set first element negative */
       ldifx = 1;
     }
@@ -955,7 +955,7 @@
       /* pifixx is a sequence as checked before */
 
       if ((ifixx =
-           (PyArrayObject *) PyArray_CopyFromObject(pifixx, PyArray_LONG, 1,
+           (PyArrayObject *) PyArray_CopyFromObject(pifixx, PyArray_INT, 1,
                                                     2)) == NULL)
         {
           PYERR(PyExc_ValueError,
@@ -1169,7 +1169,7 @@
   if (piwork != NULL)
     {
       if ((iwork =
-           (PyArrayObject *) PyArray_CopyFromObject(piwork, PyArray_LONG, 1,
+           (PyArrayObject *) PyArray_CopyFromObject(piwork, PyArray_INT, 1,
                                                     1)) == NULL)
         {
           PYERR(PyExc_ValueError,
@@ -1185,7 +1185,7 @@
     {
       /* initialize our own iwork array */
       dim1[0] = liwork;
-      iwork = (PyArrayObject *) PyArray_FromDims(1, dim1, PyArray_LONG);
+      iwork = (PyArrayObject *) PyArray_FromDims(1, dim1, PyArray_INT);
     }                           /* iwork */
 
   /* check if what JOB requests can be done with what the user has 

Modified: trunk/scipy/odr/odrpack.py
===================================================================
--- trunk/scipy/odr/odrpack.py	2007-11-04 04:35:10 UTC (rev 3497)
+++ trunk/scipy/odr/odrpack.py	2007-11-05 23:13:01 UTC (rev 3498)
@@ -107,14 +107,17 @@
 odr_stop = __odrpack.odr_stop
 
 
-def _conv(obj):
+def _conv(obj, dtype=None):
     """ Convert an object to the preferred form for input to the odr routine.
     """
 
     if obj is None:
         return obj
     else:
-        obj = numpy.asarray(obj)
+        if dtype is None:
+            obj = numpy.asarray(obj)
+        else:
+            obj = numpy.asarray(obj, dtype)
         if obj.shape == ():
             # Scalar.
             return obj.dtype.type(obj)
@@ -708,8 +711,11 @@
             self.beta0 = _conv(beta0)
 
         self.delta0 = _conv(delta0)
-        self.ifixx = _conv(ifixx)
-        self.ifixb = _conv(ifixb)
+        # These really are 32-bit integers in FORTRAN (gfortran), even on 64-bit
+        # platforms.
+        # XXX: some other FORTRAN compilers may not agree.
+        self.ifixx = _conv(ifixx, dtype=numpy.int32)
+        self.ifixb = _conv(ifixb, dtype=numpy.int32)
         self.job = job
         self.iprint = iprint
         self.errfile = errfile



More information about the Scipy-svn mailing list