[Numpy-discussion] [EXTERNAL] Re: Strange PyArray_FromObject() behavior
Bill Spotz
wfspotz@sandia....
Thu Feb 16 23:41:02 CST 2012
Val,
The problem occurs in function
PyArrayObject* obj_to_array_allow_conversion(PyObject* input,
int typecode,
int* is_new_object)
in numpy.i (which is the numpy SWIG interface file that I authored and is in the numpy distribution). The argument "input" comes in as a python int of value 0, "typecode" is NPY_NOTYPE to signify that the type should be detected, and "is_new_object" is an output flag. This function calls
PyArray_FromObject(input, typecode, 0, 0)
This is, in fact, a part of the PyTrilinos package, specifically the Teuchos module (Teuchos is our general tools package). The context here is the Teuchos Comm classes' reduce() method, in this case a summation over processors. We will be working with Tpetra classes that are built on top of a Teuchos Comm class.
Thanks,
Bill
On Feb 16, 2012, at 9:37 PM, Val Kalatsky wrote:
>
> Hi Bill,
>
> Looks like you are running a very fresh version of numpy.
> Without knowing the build version and what's going on in the extension module I can't tell you much.
> The usual suspects would be:
> 1) Numpy bug, not too likely.
> 2) Incorrect use of PyArray_FromObject, you'll need to send more info.
> 3) Something is seriously corrupted, probably not the case, because segfault would follow quickly.
>
> Please provide more info.
> Val
>
> PS Is it something related to what we'll be working on (Trilinos)?
>
>
> On Thu, Feb 16, 2012 at 11:09 AM, Spotz, William F <wfspotz@sandia.gov> wrote:
> I have a user who is reporting tests that are failing on his platform. I have not been able to reproduce the error on my system, but working with him, we have isolated the problem to unexpected results when PyArray_FromObject() is called. Here is the chain of events:
>
> In python, an integer is calculated. Specifically, it is
>
> len(result.errors) + len(result.failures)
>
> where result is a unit test result object from the unittest module. I had him verify that this value was in fact a python integer. In my extension module, this PyObject gets passed to the PyArray_FromObject() function in a routine that comes from numpy.i. What I expect, and what I typically get, is a numpy scalar array of type C long. I had my user print the result using PyObject_Print() and what he got was
>
> array([0:00:00], dtype=timedelta64[us])
>
> I am stuck as to why this might be happening. Any ideas?
>
> Thanks
>
> ** Bill Spotz **
> ** Sandia National Laboratories Voice: (505)845-0170 **
> ** P.O. Box 5800 Fax: (505)284-0154 **
> ** Albuquerque, NM 87185-0370 Email: wfspotz@sandia.gov **
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
More information about the NumPy-Discussion
mailing list