On Wed, May 11, 2011 at 2:07 PM, Olivier Delalleau <sh...@keba.be> wrote: > 2011/5/11 Sturla Molden <stu...@molden.no> >> >> Den 09.05.2011 15:58, skrev Keith Goodman: >> > On Mon, May 9, 2011 at 1:46 AM, Pauli Virtanen<p...@iki.fi> wrote: >> >> Sun, 08 May 2011 14:45:45 -0700, Keith Goodman wrote: >> >>> I'm writing a function that accepts four possible dtypes: int32, >> >>> int64, >> >>> float32, float64. The function will call a C extension (wrapped in >> >>> Cython). What are the equivalent C types? int, long, float, double, >> >>> respectively? Will that work on all systems? >> >> Long can be 32-bit or 64-bit, depending on the platform. >> >> >> >> The types available in Numpy are listed here, including >> >> the information which of them are compatible with which C types: >> >> >> >> http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html >> >> >> >> The C long seems not to be listed -- but it's the same as >> >> "Python int", i.e., np.int_ will work. >> >> >> >> IIRC, the Numpy type codes, dtype.kind, map directly to C types. >> > Does this mapping look right? >> > >> >> No. >> >> C int is at least 16 bits, C long is at least 32 bits. >> >> The size of long and size of int depend on compiler and platform. >> >> I'd write a small Cython function and ask the C compiler for an >> authorative answer. >> >> Alternatively you could use ctypes. This is 64-bit Python on Windows: >> >> >>> import ctypes >> >>> ctypes.sizeof(ctypes.c_long) >> 4 >> >>> ctypes.sizeof(ctypes.c_int) >> 4 >> > > I think Keith's approach should work, as long as there is one C type listed > on the url you mention that corresponds to your four dtypes. > Something like (not tested at all): > > map = {} > for dtype in ('int32', 'int64', 'float32', 'float64'): > for ctype (N.byte, N.short, N.intc, N.long.long, ...): # List all > compatible C types here > if N.dtype(ctype) == dtype: > map{dtype} = ctype > break > assert len(map) == 4 > > -=- Olivier > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > >
But that result is just due to how Microsoft implemented it's 64-bit support so it will not work for 64-bit Linux and other similar OSes. I thought that you would just use things like npy_intp (or intp) and npy_float as used by mtrandom: numpy/random/mtrand/numpy.pxi These are defined in numpy/core/include/numpy/ndarraytypes.h Bruce _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion