36
votes

In the tutorial of the Cython documentation, there are cimport and import statements of numpy module:

import numpy as np
cimport numpy as np

I found this convention is quite popular among numpy/cython users.

This looks strange for me because they are both named as np. In which part of the code, imported/cimported np are used? Why cython compiler does not confuse them?

1
Because cimport doesn't really import a (Python) module. It imports (C) definitions. I don't know, but I could imagine that if you turn the second line into cimport numpy only, things would break: it may very well need the correspondonce between the actual Python module name as used in the script, and the definitions namespace. - user707650
@Evert You can also use cimport numpy, in the same way that one could use import numpy, it works just the same way, but cimport gives access to C functions or attributes under the imported module while import to Python functions or attributes - Saullo G. P. Castro

1 Answers

40
votes

cimport my_module gives access to C functions or attributes or even sub-modules under my_module

import my_module gives access to Python functions or attributes or sub-modules under my_module.

In your case:

cimport numpy as np

gives you access to Numpy C API, where you can declare array buffers, variable types and so on...

And:

import numpy as np

gives you access to NumPy-Python functions, such as np.array, np.linspace, etc

Cython internally handles this ambiguity so that the user does not need to use different names.