[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