/ / Prečo dostávam toto varovanie pod Cythonom? - cython

Prečo dostávam toto varovanie pod Cythonom? - cython

Snažím sa reprodukovať niekoľko príkladov z tutoriálu pre Cython, aby som sa naučil Cython:

http://docs.cython.org/en/latest/src/tutorial/external.html

Myslím si, že dve nasledujúce varovania spolu nesúvisia. Preto dve otázky:

(1)

Pomocou tohto ako vstupu do

python setup.py build_ext --inplace -c mingw32

from libc.math cimport sin

cdef extern from "math.h":
cdef double sin(double x)


cpdef double f(double x):
return sin(x*x)

cpdef test(double x):
return f(x)

Dostávam:

D:pythoncython>python setup.py build_ext --inplace -c mingw32
Compiling primes.pyx because it changed.
[1/1] Cythonizing primes.pyx
warning: primes.pyx:4:19: Function signature does not match previous declaration
running build_ext
building "primes" extension
C:MinGWbingcc.exe -mdll -O -Wall -IC:Python34include -IC:Python34include -c primes.c -o buildtemp.win32-3.4Releaseprimes.o
writing buildtemp.win32-3.4Releaseprimes.def
C:MinGWbingcc.exe -shared -s buildtemp.win32-3.4Releaseprimes.o buildtemp.win32-3.4Releaseprimes.def -LC:Python34libs -LC:Python34PCbuild -lpython34 -lmsvcr100 -o D:pythoncythonprimes.pyd

D:pythoncython>

Prečo je varovanie „Funkčný podpis sa nezhoduje s predchádzajúcou deklaráciou“?

(2)

Keď sa prihlásim

cdef extern from "math.h":
cpdef double sin(double x)

Dostávam ďalšie varovanie

warning: primes.pyx:4:20: Function "sin" previously declared as "cpdef"

Je však uvedený presne rovnakým spôsobom akopríklad v kapitole „Externé vyhlásenia“ odkazovanej stránky. V module pythonu, do ktorého sa modul importuje, nie je v balíku známe sin. Kde je problém?

Popis v tejto príručke je:

Note that you can easily export an external C function from your Cython module by declaring it as cpdef. This generates a Python wrapper for it and adds it to the module dict.

odpovede:

1 pre odpoveď č. 1

rôzne časti tutoriálu rozdielny spôsoby volania funkcií C.

Pre niektoré funkcie, pre ktoré je to Cython .pxd hlavička je poskytnutá, môžete použiť from libc.math import sin. Pre všetky knižnice môžete použiť dlhšiu metódu .h hlavička a opätovné prehlásenie.

Nemôžete ich však kombinovať, pretože vytvárajú dve definície tej istej funkcie, aj keď sú identické.