2017-02-15 25 views
2

は、以下MCEコンパイルしよう:Cythonエラー:GILなしで許可されていないのPythonから強制

from libc.math import fabs 


cdef inline double fmax(double x, double y) nogil: 
    return x if x > y else y 


cdef inline double fsign(double x) nogil : 
    if x == 0.: 
     return 0. 
    elif x > 0.: 
     return 1. 
    else: 
     return - 1. 


cdef inline double ST(double u, double x) nogil: 
    return fsign(x) * fmax(fabs(x) - u, 0.) 

を私は他のエラーの中で、取得:

Error compiling Cython file: 
------------------------------------------------------------ 
... 
    else: 
     return - 1. 


cdef inline double ST(double u, double x) nogil: 
    return fsign(x) * fmax(fabs(x) - u, 0.) 
           ^
------------------------------------------------------------ 

test.pyx:18:35: Coercion from Python not allowed without the GIL 

は、私は何が起こっているのか見当もつかない、私の観点から見ると、すべての値は二重です(浮動小数点でもよいが、浮動小数点にすることはできますが、二重に昇格することは安全です)。

setup.py

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules=cythonize("*.pyx"), 
) 

EDIT:実際には、のようなこのラインに関連するさまざまなエラー、たくさんのがあります。

test.pyx:18:35: Operation not allowed without gil 
test.pyx:18:31: Calling gil-requiring function not allowed without gil 
test.pyx:18:31: Accessing Python global or builtin not allowed without gil 
test.pyx:18:33: Converting to Python object not allowed without gil 
test.pyx:18:31: Constructing Python tuple not allowed without gil 

答えて

3

これは「単なるタイプミス」であるが、エラーメッセージは私をたくさん助けにはなりませんでした、私は答えとしてこれを投稿しています: cimport fabsの代わりにlibc.math import fabsから使用していました。

関連する問題