structの宣言でハマった。
こういうstructを作りたい時。
#filename: test1.pyx cdef struct XY: int x,y def method(): ......
#filename: test1.pxd
ctypedef struct XY
こんな感じに書いてた。
そうすると、実際にcimportして構造体を使うときに怒られる。
#filename test2.pyx from test1 cimport XY def functest(): cdef XY xy
こんな感じに↓
cythonize test2.pyx ... 中略 ... test2.pyx:4:12: Variable type 'XY' is incomplete
pyx, pxdをこう書き換える必要がある。pyxからpxdに、構造体の宣言を書き写せばいい。
#filename: test1.pyx def method(): ......
#filename: test1.pxd ctypedef struct XY: int x,y
ちなみにO'REILLYのCython本には
simulator.pxdに含まれている宣言を、実装ファイルにも書くことはできない。書くと、コンパイルエラーが発生する。
とあり、pxdとpyxに同じ宣言を書けないような記述があるが、実際にやってみてもコンパイルエラーにはならなかった。structは別とか、矛盾がなければスルーするとか、そういう感じなのかな。
こういうことで一々ハマるし、ググっても答えにたどり着けないので大変だ。