Python 是什么导致了麻木';s AttributeError:&x27;非类型';对象没有属性';pysig';?

Python 是什么导致了麻木';s AttributeError:&x27;非类型';对象没有属性';pysig';?,python,list,type-inference,numba,Python,List,Type Inference,Numba,当我尝试运行此代码时: from numba import njit, int64 from numba.types import List @njit(int64(List(int64, True))) def f(a): a[0] = 0 return a[0] @njit(List(int64)()) def g(): return [f([0])] 我得到以下信息。为什么会这样?我如何让它正确地计算出类型 Traceback (most recent call la

当我尝试运行此代码时:

from numba import njit, int64
from numba.types import List

@njit(int64(List(int64, True)))
def f(a):
    a[0] = 0
    return a[0]

@njit(List(int64)())
def g(): return [f([0])]
我得到以下信息。为什么会这样?我如何让它正确地计算出类型

Traceback (most recent call last):
  File "Temp.py", line 9, in <module>
    @njit(List(int64)())
  File "numba\decorators.py", line 172, in wrapper
    disp.compile(sig)
  File "numba\dispatcher.py", line 350, in compile
    flags=flags, locals=self.locals)
  File "numba\compiler.py", line 644, in compile_extra
    return pipeline.compile_extra(func)
  File "numba\compiler.py", line 361, in compile_extra
    return self.compile_bytecode(bc, func_attr=self.func_attr)
  File "numba\compiler.py", line 370, in compile_bytecode
    return self._compile_bytecode()
  File "numba\compiler.py", line 631, in _compile_bytecode
    return pm.run(self.status)
  File "numba\compiler.py", line 251, in run
    raise patched_exception
numba.errors.TypingError: Caused By:
Traceback (most recent call last):
  File "numba\compiler.py", line 243, in run
    res = stage()
  File "numba\compiler.py", line 458, in stage_nopython_frontend
    self.locals)
  File "numba\compiler.py", line 759, in type_inference_stage
    infer.propagate()
  File "numba\typeinfer.py", line 510, in propagate
    raise errors[0]
TypingError: Internal error at <numba.typeinfer.CallConstraint object at 0x00000000071C82E8>:
--%<-----------------------------------------------------------------
Traceback (most recent call last):
  File "numba\typeinfer.py", line 111, in propagate
    constraint(typeinfer)
  File "numba\typeinfer.py", line 270, in __call__
    self.resolve(typeinfer, typevars, fnty)
  File "numba\typeinfer.py", line 297, in resolve
    sig = context.resolve_function_type(fnty, pos_args, kw_args)
  File "numba\typing\context.py", line 113, in resolve_function_type
    return func.get_call_type(self, args, kws)
  File "numba\types.py", line 334, in get_call_type
    sig.pysig = self.pysig
AttributeError: 'NoneType' object has no attribute 'pysig'
--%<-----------------------------------------------------------------
File "Temp.py", line 10
回溯(最近一次呼叫最后一次):
文件“Temp.py”,第9行,在
@njit(列表(int64)()
包装器中第172行的文件“numba\decorators.py”
disp.compile(sig)
文件“numba\dispatcher.py”,第350行,编译
标志=标志,局部变量=自身。局部变量)
文件“numba\compiler.py”,第644行,在compile\u extra中
返回管道.compile_extra(func)
文件“numba\compiler.py”,第361行,在compile\u extra中
返回self.compile\u字节码(bc,func\u attr=self.func\u attr)
文件“numba\compiler.py”,第370行,编译字节码
返回self.\u编译\u字节码()
文件“numba\compiler.py”,第631行,字节码
返回pm.run(自我状态)
文件“numba\compiler.py”,第251行,正在运行
引发修补的\u异常
numba.errors.TypingError:由以下原因引起:
回溯(最近一次呼叫最后一次):
文件“numba\compiler.py”,第243行,正在运行
res=阶段()
文件“numba\compiler.py”,第458行,在stage\u Nopyton\u前端
(本地人)
文件“numba\compiler.py”,第759行,在类型推理阶段
推断.传播()
文件“numba\typeinfer.py”,第510行,在propagate中
引发错误[0]
TypingError:内部错误位于:

--% 将
f
的decorator签名从
@njit(int64(List(int64,True))
更改为
@njit(int64)(List(int64))
可以让我在Numba 0.31.0上工作

对于
f
a
不是反映的列表,因此将该标志设置为
True
似乎会导致问题。对于Numba 0.31.0,我收到了不同的错误消息


一般来说,我允许Numba对输入和输出进行自己的类型推断。我不确定您使用的是什么版本,但在最近的版本中,很少有理由在decorator签名中定义类型。如果您对类型推断器的作用感到好奇,只需使用
nb.njit
nb.jit(nopython=True)
,使用所需的输入调用函数,然后检查
f.inspect_types()
(如果您的jitted函数是
f

事实证明,我看到的核心问题是我的Numba版本中的一个bug(但你提到的问题也存在)。谢谢(另外,让Numba找出类型的一个问题是,它会延迟到调用,这增加了我不喜欢的额外延迟,特别是在分析时。)