Example #1
0
def from_ctypes(value, u):
    result = from_ctypes_value(value)
    if result.is_function:
        pointer = ctypes.cast(value, ctypes.c_void_p).value
        return u.pointer_to_function(value, pointer, result)
    else:
        return result
Example #2
0
    def from_python(self, value):
        from numba.type_inference import module_type_inference

        if isinstance(value, np.ndarray):
            dtype = map_dtype(value.dtype)
            return minitypes.ArrayType(dtype, value.ndim) #,
                                       #is_c_contig=value.flags['C_CONTIGUOUS'],
                                       #is_f_contig=value.flags['F_CONTIGUOUS'])
        elif isinstance(value, np.dtype):
            return numba.typesystem.from_numpy_dtype(value)
        elif is_dtype_constructor(value):
            return numba.typesystem.from_numpy_dtype(np.dtype(value))
        elif isinstance(value, (tuple, list, dict)):
            return infer_container_type(self, value)
        elif isinstance(value, types.ModuleType):
            return ModuleType(value)
        # elif isinstance(value, (self.ctypes_func_type, self.ctypes_func_type2)):
        elif is_ctypes(value):
            result = from_ctypes_value(value)
            if result.is_function:
                pointer = ctypes.cast(value, ctypes.c_void_p).value
                return PointerFunctionType(value, pointer, result)
            else:
                return result
        elif cffi_support.is_cffi_func(value):
            signature = cffi_support.get_signature(value)
            pointer = cffi_support.get_pointer(value)
            return PointerFunctionType(value, pointer, signature)
        elif isinstance(value, minitypes.Type):
            return CastType(dst_type=value)
        elif hasattr(type(value), '__numba_ext_type'):
            return getattr(type(value), '__numba_ext_type')
        elif value is numba.NULL:
            return null_type
        elif numbawrapper.is_numba_wrapper(value):
            return JitType(value)
        elif isinstance(value, numbawrapper.NumbaSpecializingWrapper):
            return AutojitType(value)
        elif hasattr(value, 'from_address') and hasattr(value, 'in_dll'):
            # Try to detect ctypes pointers, or default to minivect
            try:
                ctypes.cast(value, ctypes.c_void_p)
            except ctypes.ArgumentError:
                pass
            else:
                pass
                #type = convert_from_ctypes(value)
                #value = ctypes.cast(value, ctypes.c_void_p).value
                #return CTypesPointerType(type, valuee

        result_type = super(NumbaTypeMapper, self).from_python(value)

        if result_type == object_ and module_type_inference.is_registered(value):
            result = module_type_inference.module_attribute_type(value)
            if result is not None:
                result_type = result
            else:
                result_type = KnownValueType(value)

        return result_type
Example #3
0
def from_ctypes(value, u):
    result = from_ctypes_value(value)
    if result.is_function:
        pointer = ctypes.cast(value, ctypes.c_void_p).value
        return u.pointer_to_function(value, pointer, result)
    else:
        return result
Example #4
0
    def from_python(self, value):
        from numba.type_inference import module_type_inference

        if isinstance(value, np.ndarray):
            dtype = map_dtype(value.dtype)
            return minitypes.ArrayType(dtype, value.ndim)  #,
            #is_c_contig=value.flags['C_CONTIGUOUS'],
            #is_f_contig=value.flags['F_CONTIGUOUS'])
        elif isinstance(value, np.dtype):
            return numba.typesystem.from_numpy_dtype(value)
        elif is_dtype_constructor(value):
            return numba.typesystem.from_numpy_dtype(np.dtype(value))
        elif isinstance(value, (tuple, list, dict)):
            return infer_container_type(self, value)
        elif isinstance(value, types.ModuleType):
            return ModuleType(value)
        # elif isinstance(value, (self.ctypes_func_type, self.ctypes_func_type2)):
        elif is_ctypes(value):
            result = from_ctypes_value(value)
            if result.is_function:
                pointer = ctypes.cast(value, ctypes.c_void_p).value
                return PointerFunctionType(value, pointer, result)
            else:
                return result
        elif cffi_support.is_cffi_func(value):
            signature = cffi_support.get_signature(value)
            pointer = cffi_support.get_pointer(value)
            return PointerFunctionType(value, pointer, signature)
        elif isinstance(value, minitypes.Type):
            return CastType(dst_type=value)
        elif hasattr(type(value), '__numba_ext_type'):
            return getattr(type(value), '__numba_ext_type')
        elif value is numba.NULL:
            return null_type
        elif numbawrapper.is_numba_wrapper(value):
            return JitType(value)
        elif isinstance(value, numbawrapper.NumbaSpecializingWrapper):
            return AutojitType(value)
        elif hasattr(value, 'from_address') and hasattr(value, 'in_dll'):
            # Try to detect ctypes pointers, or default to minivect
            try:
                ctypes.cast(value, ctypes.c_void_p)
            except ctypes.ArgumentError:
                pass
            else:
                pass
                #type = convert_from_ctypes(value)
                #value = ctypes.cast(value, ctypes.c_void_p).value
                #return CTypesPointerType(type, valuee

        result_type = super(NumbaTypeMapper, self).from_python(value)

        if result_type == object_ and module_type_inference.is_registered(
                value):
            result = module_type_inference.module_attribute_type(value)
            if result is not None:
                result_type = result
            else:
                result_type = KnownValueType(value)

        return result_type