Conversion from ctypes to dtype.
In an ideal world, we could achieve this through the PEP3118 buffer protocol, something like:
def dtype_from_ctypes_type(t): # needed to ensure that the shape of `t` is within memoryview.format class DummyStruct(ctypes.Structure): _fields_ = [('a', t)] # empty to avoid memory allocation ctype_0 = (DummyStruct * 0)() mv = memoryview(ctype_0) # convert the struct, and slice back out the field return _dtype_from_pep3118(mv.format)['a']
Unfortunately, this fails because:
Function | _from_ctypes_array |
Undocumented |
Function | _from_ctypes_scalar |
Return the dtype type with endianness included if it's the case |
Function | _from_ctypes_structure |
Undocumented |
Function | _from_ctypes_union |
Undocumented |
Function | dtype_from_ctypes_type |
Construct a dtype object from a ctypes type |