C-Types Foreign Function Interface (numpy.ctypeslib)

numpy.ctypeslib.as_array(obj, shape=None) [source]

Create a numpy array from a ctypes array or POINTER.

The numpy array shares the memory with the ctypes object.

The shape parameter must be given if converting from a ctypes POINTER. The shape parameter is ignored if converting from a ctypes array

numpy.ctypeslib.as_ctypes(obj) [source]

Create and return a ctypes object from a numpy array. Actually anything that exposes the __array_interface__ is accepted.

numpy.ctypeslib.as_ctypes_type(dtype) [source]

Convert a dtype into a ctypes type.

Parameters
dtypedtype

The dtype to convert

Returns
ctype

A ctype scalar, union, array, or struct

Raises
NotImplementedError

If the conversion is not possible

Notes

This function does not losslessly round-trip in either direction.

np.dtype(as_ctypes_type(dt)) will:

  • insert padding fields
  • reorder fields to be sorted by offset
  • discard field titles

as_ctypes_type(np.dtype(ctype)) will:

numpy.ctypeslib.ctypes_load_library(*args, **kwds) [source]

ctypes_load_library is deprecated, use load_library instead!

It is possible to load a library using >>> lib = ctypes.cdll[<full_path_name>] # doctest: +SKIP

But there are cross-platform considerations, such as library file extensions, plus the fact Windows will just load the first library it finds with that name. NumPy supplies the load_library function as a convenience.

Parameters
libnamestr

Name of the library, which can have ‘lib’ as a prefix, but without an extension.

loader_pathstr

Where the library can be found.

Returns
ctypes.cdll[libpath]library object

A ctypes library object

Raises
OSError

If there is no library with the expected extension, or the library is defective and cannot be loaded.

numpy.ctypeslib.load_library(libname, loader_path) [source]

It is possible to load a library using >>> lib = ctypes.cdll[<full_path_name>] # doctest: +SKIP

But there are cross-platform considerations, such as library file extensions, plus the fact Windows will just load the first library it finds with that name. NumPy supplies the load_library function as a convenience.

Parameters
libnamestr

Name of the library, which can have ‘lib’ as a prefix, but without an extension.

loader_pathstr

Where the library can be found.

Returns
ctypes.cdll[libpath]library object

A ctypes library object

Raises
OSError

If there is no library with the expected extension, or the library is defective and cannot be loaded.

numpy.ctypeslib.ndpointer(dtype=None, ndim=None, shape=None, flags=None) [source]

Array-checking restype/argtypes.

An ndpointer instance is used to describe an ndarray in restypes and argtypes specifications. This approach is more flexible than using, for example, POINTER(c_double), since several restrictions can be specified, which are verified upon calling the ctypes function. These include data type, number of dimensions, shape and flags. If a given array does not satisfy the specified restrictions, a TypeError is raised.

Parameters
dtypedata-type, optional

Array data-type.

ndimint, optional

Number of array dimensions.

shapetuple of ints, optional

Array shape.

flagsstr or tuple of str

Array flags; may be one or more of:

  • C_CONTIGUOUS / C / CONTIGUOUS
  • F_CONTIGUOUS / F / FORTRAN
  • OWNDATA / O
  • WRITEABLE / W
  • ALIGNED / A
  • WRITEBACKIFCOPY / X
  • UPDATEIFCOPY / U
Returns
klassndpointer type object

A type object, which is an _ndtpr instance containing dtype, ndim, shape and flags information.

Raises
TypeError

If a given array does not satisfy the specified restrictions.

Examples

>>> clib.somefunc.argtypes = [np.ctypeslib.ndpointer(dtype=np.float64,
...                                                  ndim=1,
...                                                  flags='C_CONTIGUOUS')]
... 
>>> clib.somefunc(np.array([1, 2, 3], dtype=np.float64))
... 

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/routines.ctypeslib.html