我正在传递 numba 作为我的函数的签名
@numba.jit(numba.types.UniTuple(numba.float64[:, :], 2)(
numba.float64[:, :], numba.float64[:, :], numba.float64[:, :],
earth_model_type))
Run Code Online (Sandbox Code Playgroud)
其中earth_model_type定义为
earth_model_type = numba.deferred_type()
earth_model_type.define(em.EarthModel.class_type.instance_type)
Run Code Online (Sandbox Code Playgroud)
它编译得很好,但是当我尝试调用该函数时,我得到了
*** TypeError: 没有匹配的参数类型定义数组(float64, 2d, F), array(float64, 2d, C), array(float64, 2d, F), instance.jitclass.EarthModel#7fd9c48dd668
具有不匹配定义的参数类型在我看来与上面的类型几乎相同。另一方面,如果我不通过 using 指定签名@numba.jit(nopython=True),它工作正常并且由 numba 编译的函数的签名是
ipdb> numbed_cowell_propagator_propagate.signatures
Run Code Online (Sandbox Code Playgroud)
[(array(float64, 2d, F), array(float64, 2d, C), array(float64, 2d, F), instance.jitclass.EarthModel#7f81bbc0e780)]
编辑
如果我使用常见问题解答中的方式强制执行 C 顺序数组,我仍然会收到错误
类型错误:没有匹配的参数类型定义数组(float64, 2d, C), array(float64, 2d, C), array(float64, 2d, C), instance.jitclass.EarthModel#7f6edd8d57b8
我很确定问题与延迟类型有关,因为如果不是传递 jit 类,而是传递该类所需的所有属性(4numba.float64秒),它工作正常。
指定签名时我做错了什么?
干杯。