Numba considers global variables as compile-time constants. If you want
your jitted function to update itself when you have modified a global
variable’s value, one solution is to recompile it using the
recompile() method. This is a relatively slow operation,
though, so you may instead decide to rearchitect your code and turn the
global variable into a function argument.

Calling into pdb or other such high-level facilities is currently not
supported from Numba-compiled code. However, you can temporarily disable
compilation by setting the NUMBA_DISABLE_JIT environment
variable.

Numba currently doesn’t support the order argument to most Numpy
functions such as numpy.empty() (because of limitations in the
type inference algorithm). You can work around this issue by
creating a C-ordered array and then transposing it. For example:

By default, Numba will generally use machine integer width for integer
variables. On a 32-bit machine, you may sometimes need the magnitude of
64-bit integers instead. You can simply initialize relevant variables as
np.int64 (for example np.int64(0) instead of 0). It will
propagate to all computations involving those variables.

Not significantly. New users sometimes expect to JIT-compile such
functions:

deff(x,y):returnx+y

and get a significant speedup over the Python interpreter. But there isn’t
much Numba can improve here: most of the time is probably spent in CPython’s
function call mechanism, rather than the function itself. As a rule of
thumb, if a function takes less than 10 µs to execute: leave it.

The exception is that you should JIT-compile that function if it is called
from another jitted function.

1.10.2.5. There is a delay when JIT-compiling a complicated function, how can I improve it?¶

Try to pass cache=True to the @jit decorator. It will keep the
compiled version on disk for later use.

If you’re using PyInstaller or a similar utility to freeze an application,
you may encounter issues with llvmlite. llvmlite needs a non-Python DLL
for its working, but it won’t be automatically detected by freezing utilities.
You have to inform the freezing utility of the DLL’s location: it will
usually be named llvmlite/binding/libllvmlite.so or
llvmlite/binding/llvmlite.dll, depending on your system.

When you run a script in a console under Spyder, Spyder first tries to
reload existing modules. This doesn’t work well with Numba, and can
produce errors like TypeError:Nomatchingdefinitionforargumenttype(s).

There is a fix in the Spyder preferences. Open the “Preferences” window,
select “Console”, then “Advanced Settings”, click the “Set UMR excluded
modules” button, and add numba inside the text box that pops up.

To see the setting take effect, be sure to restart the IPython console or
kernel.