Numba: Calling Jit With Explicit Signature Using Arguments With Default Values
Solution 1:
Ah, but the exception message should give a hint:
from numba import jit
import numpy as np
@jit(['float64(float64, float64)', 'float64(float64, optional(float64))'])
def fun(a, b=3.):
return a + b
>>> fun(10.)
TypeError: No matching definition for argument type(s) float64, omitted(default=3.0)
That means optional
is the wrong choice here. In fact optional
represents None
or "that type". But you want an optional argument, not an argument that could be a float
and None
, e.g.:
>>> fun(10, None) # doesn't fail because of the signature!
TypeError: unsupported operand type(s) for +: 'int'and'NoneType'
I suspect that it just "happens" to work for optional(float)
because float
is just an "arbitary Python object" from numbas point of view, so with optional(float)
you could pass anything in there (this apparently includs not giving the argument). With optional(float64)
it could only be None
or a float64
. That category isn't broad enough to allow not providing the argument.
It works if you give the type Omitted
:
from numba import jit
import numpy as np
@jit(['float64(float64, float64)', 'float64(float64, Omitted(float64))'])
def fun(a, b=3.):
return a + b
>>> fun(10.)13.0
However it seems like Omitted
isn't actually included in the documentation and that it has some "rough edges". For example it can't be compiled in nopython mode with that signature, even though it seems possible without signature:
@njit(['float64(float64, float64)', 'float64(float64, Omitted(float64))'])
def fun(a, b=3):
return a + b
TypingError: Failed at nopython (nopython frontend)
Invalid usage of + with parameters (float64, class(float64))
-----------
@njit(['float64(float64, float64)', 'float64(float64, Omitted(3.))'])
def fun(a, b=3):
return a + b
>>> fun(10.)
TypeError: No matching definition for argument type(s) float64, omitted(default=3)
-----------
@njit
def fun(a, b=3):
return a + b
>>> fun(10.)13.0
Post a Comment for "Numba: Calling Jit With Explicit Signature Using Arguments With Default Values"