Source code for tomophantom.ctypes.dtype

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Module for internal utility functions.
"""

from __future__ import absolute_import, division, print_function, unicode_literals

import ctypes
import logging
import multiprocessing as mp

import numpy as np

logger = logging.getLogger(__name__)

__all__ = [
    "as_ndarray",
    "as_dtype",
    "as_float32",
    "as_int32",
    "as_uint8",
    "as_uint16",
    "as_c_float_p",
    "as_c_bool_p",
    "as_c_uint8_p",
    "as_c_uint16_p",
    "as_c_int",
    "as_c_int_p",
    "as_c_float",
    "as_c_char_p",
    "as_c_void_p",
    "as_c_size_t",
]


[docs]def as_ndarray(arr, dtype=None, copy=False): if not isinstance(arr, np.ndarray): arr = np.array(arr, dtype=dtype, copy=copy) return arr
[docs]def as_dtype(arr, dtype, copy=False): if not arr.dtype == dtype: arr = np.array(arr, dtype=dtype, copy=copy) return arr
[docs]def as_float32(arr): arr = as_ndarray(arr, np.float32) return as_dtype(arr, np.float32)
[docs]def as_int32(arr): arr = as_ndarray(arr, np.int32) return as_dtype(arr, np.int32)
[docs]def as_uint16(arr): arr = as_ndarray(arr, np.uint16) return as_dtype(arr, np.uint16)
[docs]def as_uint8(arr): arr = as_ndarray(arr, np.uint8) return as_dtype(arr, np.uint8)
[docs]def as_c_float_p(arr): c_float_p = ctypes.POINTER(ctypes.c_float) return arr.ctypes.data_as(c_float_p)
[docs]def as_c_bool_p(arr): c_bool_p = ctypes.POINTER(ctypes.c_bool) return arr.ctypes.data_as(c_bool_p)
[docs]def as_c_uint8_p(arr): c_uint8_p = ctypes.POINTER(ctypes.c_uint8) return arr.ctypes.data_as(c_uint8_p)
[docs]def as_c_uint16_p(arr): c_uint16_p = ctypes.POINTER(ctypes.c_uint16) return arr.ctypes.data_as(c_uint16_p)
[docs]def as_c_int(arr): return ctypes.c_int(arr)
def as_c_long(arr): return ctypes.c_long(arr)
[docs]def as_c_int_p(arr): arr = arr.astype(np.intc, copy=False) c_int_p = ctypes.POINTER(ctypes.c_int) return arr.ctypes.data_as(c_int_p)
[docs]def as_c_float(arr): return ctypes.c_float(arr)
[docs]def as_c_char_p(arr): return ctypes.c_char_p(arr.encode())
[docs]def as_c_void_p(): return ctypes.POINTER(ctypes.c_void_p)
[docs]def as_c_size_t(arr): return ctypes.c_size_t(arr)
def to_numpy_array(obj, dtype, shape): return np.frombuffer(obj, dtype=dtype).reshape(shape) def is_contiguous(arr): return arr.flags.c_contiguous