[Python-Dev] PEP: Adding data-type objects to Python (original) (raw)

Alexander Belopolsky alexander.belopolsky at gmail.com
Thu Nov 2 06:42:26 CET 2006


Travis E. Oliphant <oliphant.travis ieee.org> writes:

Alexander Belopolsky wrote: > ... > 1. Should primitive types be associated with simple type codes (short, int, long, > float, double) or type/size pairs [(int,16), (int, 32), (int, 64), (float, 32), > (float, 64)]? > - I prefer pairs > > 2. Should primitive type codes be characters or integers (from an enum) at > C level? > - I prefer integers Are these orthogonal?

Do you mean are my quiestions 1 and 2 orthogonal? I guess they are.

> > 3. Should size be expressed in bits or bytes? > - I prefer bits >

So, you want an integer enum for the "kind" and an integer for the bitsize? That's fine with me. One thing I just remembered. We have TUBYTE and TBYTE, etc. defined in structmember.h already. Should we just re-use those #defines while adding to them to make an easy to use interface for primitive types?

I was thinking about using something like NPY_TYPES enum, but T_* codes would work as well. Let me just present both options for the record:

--- numpy/ndarrayobject.h ---

enum NPY_TYPES { NPY_BOOL=0, NPY_BYTE, NPY_UBYTE, NPY_SHORT, NPY_USHORT, NPY_INT, NPY_UINT, NPY_LONG, NPY_ULONG, NPY_LONGLONG, NPY_ULONGLONG, NPY_FLOAT, NPY_DOUBLE, NPY_LONGDOUBLE, NPY_CFLOAT, NPY_CDOUBLE, NPY_CLONGDOUBLE, NPY_OBJECT=17, NPY_STRING, NPY_UNICODE, NPY_VOID, NPY_NTYPES, NPY_NOTYPE, NPY_CHAR, /* special flag / NPY_USERDEF=256 / leave room for characters */ };

--- structmember.h ---

/* Types / #define T_SHORT 0 #define T_INT 1 #define T_LONG 2 #define T_FLOAT 3 #define T_DOUBLE 4 #define T_STRING 5 #define T_OBJECT 6 / XXX the ordering here is weird for binary compatibility / #define T_CHAR 7 / 1-character string / #define T_BYTE 8 / 8-bit signed int / / unsigned variants: */ #define T_UBYTE 9 #define T_USHORT 10 #define T_UINT 11 #define T_ULONG 12

/* Added by Jack: strings contained in the structure */ #define T_STRING_INPLACE 13

#define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError when the value is NULL, instead of converting to None. / #ifdef HAVE_LONG_LONG #define T_LONGLONG 17
#define T_ULONGLONG 18 #endif /
HAVE_LONG_LONG */



More information about the Python-Dev mailing list