2017-04-02 7 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)))@njit(int64(List(int64, True)))からfためのデコレータの署名を変更するには、物事がNumbaの0.31.0に私のために働くことができます。

の場合、aは反映されたリストではないため、このフラグをTrueに設定すると問題が発生しているようです。 Numba 0.31.0では、別のエラーメッセージが表示されます。

しかし、私はNumbaに入力と出力のための独自の型推論をさせることができます。私はどのバージョンを使用しているのか分かりませんが、最近のバージョンでは、デコレータのシグネチャに型を定義する理由はほとんどありません。型推論が何をしているのか不思議であれば、nb.njitまたはnb.jit(nopython=True)を使用し、目的の入力で関数を呼び出してf.inspect_types()(あなたの関数がfの場合)を調べます。

+0

私が見ていたコアの問題は、Numbaの私のバージョンのバグでした(しかし、あなたが言及した問題もそこにあります)。ありがとう! (PS、Numbaにタイプを理解させる問題は、呼び出すまで遅くなり、特にプロファイリングの際に私が気に入らない追加の遅延が追加されることです)。 – Mehrdad

関連する問題