[Numpy-discussion] Numpy complex types, packing and C99
Pauli Virtanen
pav at iki.fi
Wed Jul 1 15:57:05 EDT 2009
On 2009-07-01, Charles R Harris <charlesr.harris at gmail.com> wrote:
> On Wed, Jul 1, 2009 at 1:59 AM, David Cournapeau <david at ar.media.kyoto-u.ac.jp> wrote:
>> I would like to add an explicit configuration test to check that our
>> complex type is compatible with the C99 complex type (when available).
>> Is this ok?
Seems OK to me.
>> As currently defined, complex c types (npy_cfloat, etc...) are not
>> defined in a way such as they are binary compatible with the C99 complex
>> type. Strictly speaking, packing the complex type is an ABI break, but
>> we already make the assumption in ufunc, so we would have wrong
>> results/crashes currently if it were not packed, so I believe the check
Is there a reason not to pack our complex number struct? I think
if we bump the ABI version, changing this should be OK.
>> is harmless by itself. The rationale is that I would like to add support
>> for complex math in npy_math (cabs, cexp, etc...). As I would like to
>> use the C99 complex type (when available), this requires that numpy
>> complex type is ABI compatible with C99 type.
Useful goal: this would allow using npy_math functions as a
compatibility fallback when the C99 ones are not available.
> What do you mean by "packing" ?
C99 defines a complex type such that the real and imag parts are
packed as in an array:
double complex t;
real = ((double*)&t)[0];
imag = ((double*)&t)[1];
Numpy defines this type as a struct, which may imply additional
padding.
--
Pauli Virtanen
More information about the NumPy-Discussion
mailing list