I want numba to be an optional dependency, so that it's fast if installed or slow if not. So when numba is not installed, I want @njit
to be a dummy decorator that does nothing.
If I follow these directions and use:
def njit(func):
return func
Then when the decorator is called like @njit(cache=True, nogil=True)
I get errors about:
TypeError: njit() got an unexpected keyword argument 'cache'
If I try to catch the args and ignore them using
def njit(func, *args, **kwargs):
return func
then I get:
missing 1 required positional argument: 'func'
How do I just make a dummy decorator that does nothing and ignores kwargs?
Think of decorators with arguments as decorator factory, they return a decorator. This way
def decorator(func):
return func
The above is a decorator, now with arguments
def decorator_factory(a,b,c):
def decorator(func):
return func
return decorator
The inner decorator
has access to the a,b,c
arguments because it is a closure. I hope that helps
So it can be defined as:
def njit(cache, nogil):
def decorator(func):
return func
return decorator
If you want to save some time and be able to do the same with all numba decorators, try numbasub. It provides exactly what you are asking for, and you can apply it to any project you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With