1

numbaこのラッパーは、利用可能性 (「インポートできますか?」) とユーザー設定 (「numba_enabled()True を返しますか?」)に応じて numba を使用するかどうかに応じて作成しました。

これは、numba の有無にかかわらずテストを実行したいテストに特に役立ちます。

def try_numba_autojit(func):
    def func_(*args):
        if numba_enabled():
            try:
                import numba
            except:
                pass
            else:
                return numba.autojit(func)(*args)
        return func(*args)
    return func_

問題: ラッパーが原因で、そうでなければ機能する関数がこのエラーをスローします。

*** OverflowError: can't convert negative value to unsigned char

ラッパーをオーバーライドしてを設定try_numba_autojit = numba.autojitすると、エラーは発生しません。*args は numba が気に入らないことをしている可能性があると結論付けています。

pdb で、引数を手動で解凍しようとしました。

(Pdb) numba.autojit(func)
<specializing numba function(<function _refine at 0xa53ec6c>)>
(Pdb) numba.autojit(func)(*args)
*** OverflowError: can't convert negative value to unsigned char

(Pdb) numba.autojit(func)(args[0], args[1], args[2], args[3], args[4], args[5], args[6])
*** OverflowError: can't convert negative value to unsigned char

同じエラーが発生します。

try_numba_autojitnumba を動揺させないように推奨される関数の定義はありますか?

4

1 に答える 1

1

あなたがしていることがうまくいかない理由はわかりませんが、関数呼び出し時の代わりに、ラッピング時に numba-availibility/enability のテストを行うことができれば、これはうまくいくかもしれません (未テスト、申し訳ありません)。

def try_numba_autojit():
    if numba_enabled():
        try:
            import numba
            return numba.autojit
        except ImportError:
            pass
    return lambda func: func

そして次のように使用します:

@try_numba_autojit()
def f(a,b,c): ...
于 2014-01-27T20:11:57.563 に答える