Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

run Cython in Jupyter cdef

I am looking for incorporate some cython to speed my code. I get a issue with running cython code in Jupyter.

cell 1:

%%cython
cdef fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)

cell 2:

fuc()

error:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-48-10789e9d47b8> in <module>()
----> 1 fuc()

NameError: name 'fuc' is not defined

but if i do this, it works fine.

%%cython
def fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)

Looks like cdef is using differently in Jupyter, how could I use cdef in Jupyter notebook?

like image 877
JOHN Avatar asked May 01 '17 19:05

JOHN


People also ask

Can I use Cython in Jupyter notebook?

Use the [Jupyter] notebook or the [Sage] notebook, both of which allow Cython code inline. This is the easiest way to get started writing Cython code and running it.

What is Cdef in Python?

C Functions declared using cdef or the @cfunc decorator with a Python object return type, like Python functions, will return a None value when execution leaves the function body without an explicit return value. This is in contrast to C/C++, which leaves the return value undefined.

How do you use Cython in Python?

To make your Python into Cython, first you need to create a file with the . pyx extension rather than the . py extension. Inside this file, you can start by writing regular Python code (note that there are some limitations in the Python code accepted by Cython, as clarified in the Cython docs).

How do I import Cython code into Jupyter?

Run the cython command-line utility manually to produce the .c file from the .pyx file, then manually compiling the .c file into a shared object library or DLL suitable for import from Python. (These manual steps are mostly for debugging and experimentation.) Use the [Jupyter] notebook or the [Sage] notebook, both of which allow Cython code inline.

How does Jupyter work with Python?

Using the Python kernel; a computational engine that runs code that is typed within the notebooks, code is executed and the result neatly displayed immediately after each cell. Before we can get started with installing Jupyter we need to make sure that Python is installed.

How to get Jupyter installed?

So to get Jupyter installed we first need to visit the official Jupyter website. As of today, Jupyter offers two main products: the Jupyter Notebook and the JupyterLab.

How to launch JupyterLab from the command prompt?

To launch JupyterLab, we need to type the command below in the command prompt and press the enter button. This command is going to start the local server so that we can access Jupyter using the browser.


Video Answer


1 Answers

cdef functions can only be called from Cython, not Python. The documentation says

Within a Cython module, Python functions and C functions can call each other freely, but only Python functions can be called from outside the module by interpreted Python code.

(having already stated that "C functions" are defined by cdef and "Python functions" by def.)

Use a def function in Cython instead. It's still compiled by Cython. You can still cdef types within your def function.

like image 88
DavidW Avatar answered Oct 24 '22 11:10

DavidW