Cython:错误添加复杂[double]加倍

时间:2017-03-27 05:24:31

标签: python operator-overloading cython complex-numbers

根据libcpp/complex.pxd支持T添加complex[T]

    complex[T] operator+(complex[T]&, T&)
    complex[T] operator+(T&, complex[T]&)

但它不起作用:

a.pyx:

# distutils: language = c++

cimport libcpp.complex

def f():
    libcpp.complex.complex[double](1,2) + libcpp.complex.complex[double](2,3) # ok
    libcpp.complex.complex[double](1,2) + 5. # Cannot assign type 'double' to 'complex[double]' 
    5. + libcpp.complex.complex[double](1,2) # Invalid operand types for '+' (double; complex[double])

setup.pyx:

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

setup(
    name = "demo",
    ext_modules = cythonize('a.pyx'),
)

不知道如何解决它?

移动声明

complex[T] operator+(complex[T]&, T&)

cppclass并将其更改为

complex[T] operator+[T](complex[T]&, T&)

看起来更有活力,但仍然不起作用。

1 个答案:

答案 0 :(得分:2)

我已经开始工作了。参见cython ticket https://github.com/cython/cython/issues/1643

这是一个组合 移动

complex[T] operator+(complex[T]&, T&) 

超出cppclass定义,将其更改为

complex[T] operator+[T](complex[T]&, T&)

正如问题和@ DavidW关于cimport *

的想法所示