2017-04-02 95 views
1

當我嘗試運行此代碼:是什麼導致Numba的AttributeError:'NoneType'對象沒有屬性'pysig'?

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 

回答

1

@njit(int64(List(int64, True)))更改爲f裝飾簽名@njit(int64(List(int64)))使事情爲我工作的Numba 0.31.0。

對於f,a不是反映的列表,所以看起來將該標誌設置爲True會導致問題。對於Numba 0.31.0,我收到了一條不同的錯誤消息。

一般來說,我會允許Numba對輸入和輸出進行自己的類型推斷。我不確定你使用的是什麼版本,但在最近的版本中,很少有理由在裝飾器簽名中定義類型。如果您對類型推理程序的作用感到好奇,只需使用nb.njitnb.jit(nopython=True),使用所需的輸入調用函數,然後檢查f.inspect_types()(如果您的jitted函數爲f)。

+0

事實證明,我看到的核心問題是我的Numba版本的問題(但你提到的問題也存在)。謝謝! (PS,讓Numba弄清楚這些類型的一個問題是它會延遲到調用之前,這會增加額外的延遲,我不喜歡,尤其是在分析時)。 – Mehrdad

相關問題