cosmotool/python/_cosmomath.pyx

39 lines
1001 B
Cython

import numpy as np
cimport numpy as np
np.import_array()
np.import_ufunc()
cdef extern from "sys/types.h":
ctypedef np.int64_t int64_t
cdef extern from "special_math.hpp" namespace "CosmoTool":
T log_modified_bessel_first_kind[T](T v, T z) nogil except +
cdef np.PyUFuncGenericFunction loop_func[1]
cdef char input_output_types[3]
cdef void *elementwise_funcs[1]
loop_func[0] = np.PyUFunc_dd_d
input_output_types[0] = np.NPY_DOUBLE
input_output_types[1] = np.NPY_DOUBLE
input_output_types[2] = np.NPY_DOUBLE
elementwise_funcs[0] = <void*>log_modified_bessel_first_kind[double]
log_modified_I = np.PyUFunc_FromFuncAndData(
loop_func,
elementwise_funcs,
input_output_types,
1, # number of supported input types
2, # number of input args
1, # number of output args
0, # `identity` element, never mind this
"log_modified_bessel_first_kind", # function name
"log_modified_bessel_first_kind(v: Float, z: Float) -> Float", # docstring
0 # unused
)