У меня проблема с попыткой использовать complex64_t в Cython.Вот мой простой пример с Cython.
cimport numpy as cnp
cdef extern from "complex.h":
double complex cexp(double complex)
cpdef example():
cdef float b = 2.0
cdef cnp.complex64_t temp1
cdef cnp.complex128_t temp2
temp1 = cexp(1j * b)
temp2 = cexp(1j * b)
Когда я запускаю файл со следующим setup.py
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
import numpy as np
ext_modules = [
Extension(
"bug_example",
["bug_example.pyx"],
include_dirs=[np.get_include()],
)
]
setup(
name='bug_example',
ext_modules=cythonize(ext_modules, annotate=True,
compiler_directives={'boundscheck': False})
)
Все компилируется без проблем, но я получаю желтый (не чистый C) в строке, содержащей
temp1 = cexp(1j * b)
, но не в
temp2 = cexp(1j * b)
Похоже, это проблема возврата двойного комплекса в комплекс с плавающей точкой.Я пытался привести его к явному плавающему комплексу, например:
temp1 = <float complex>(cexp(1j * b))
Но это не имеет значения.
Может кто-нибудь помочь мне исправить мой код, чтобы строка с temp1 не помоглаиметь больше желтый и чистый C. Это позволит мне использовать openmp в Cython.