【问题标题】:Cython: error adding complex[double] to doubleCython:将 complex[double] 添加到 double 时出错
【发布时间】:2017-03-27 05:24:31
【问题描述】:

根据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&)

看起来更合法,但仍然不起作用。

【问题讨论】:

  • 我同意它坏了。我认为没有可行的解决方法。也许向github.com/cython/cython/issues提交错误报告?
  • @DavidW 完成,问题#1643
  • @AntonyHatchkins 当我建议他们提交错误报告时,这是第一次有人这样做:)!
  • @DavidW haha​​ :) 也许有一天世界会变得更宜居 :)
  • AntonyHatchkins @DavidW 我已经提交了related question,它提供了某种解决方法,但也引发了新问题。

标签: python operator-overloading cython complex-numbers


【解决方案1】:

我已经成功了。见cython票https://github.com/cython/cython/issues/1643

这是一个组合 移动

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

超出 cppclass 定义,将其更改为

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

正如问题和@DavidW 对cimport * 的想法所建议的那样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    相关资源
    最近更新 更多