diff options
Diffstat (limited to 'docs/examples/tutorial/cython_tutorial')
6 files changed, 79 insertions, 31 deletions
diff --git a/docs/examples/tutorial/cython_tutorial/primes.py b/docs/examples/tutorial/cython_tutorial/primes.py new file mode 100644 index 000000000..645d9479d --- /dev/null +++ b/docs/examples/tutorial/cython_tutorial/primes.py @@ -0,0 +1,27 @@ +def primes(nb_primes: cython.int): + i: cython.int + p: cython.int[1000] + + if nb_primes > 1000: + nb_primes = 1000 + + if not cython.compiled: # Only if regular Python is running + p = [0] * 1000 # Make p work almost like a C array + + len_p: cython.int = 0 # The current number of elements in p. + n: cython.int = 2 + while len_p < nb_primes: + # Is n prime? + for i in p[:len_p]: + if n % i == 0: + break + + # If no break occurred in the loop, we have a prime. + else: + p[len_p] = n + len_p += 1 + n += 1 + + # Let's copy the result into a Python list: + result_as_list = [prime for prime in p[:len_p]] + return result_as_list diff --git a/docs/examples/tutorial/cython_tutorial/primes.pyx b/docs/examples/tutorial/cython_tutorial/primes.pyx index 96ecdb59a..7707e30dc 100644 --- a/docs/examples/tutorial/cython_tutorial/primes.pyx +++ b/docs/examples/tutorial/cython_tutorial/primes.pyx @@ -1,9 +1,13 @@ def primes(int nb_primes): cdef int n, i, len_p - cdef int p[1000] + cdef int[1000] p + if nb_primes > 1000: nb_primes = 1000 + + + len_p = 0 # The current number of elements in p. n = 2 while len_p < nb_primes: @@ -18,6 +22,6 @@ def primes(int nb_primes): len_p += 1 n += 1 - # Let's return the result in a python list: - result_as_list = [prime for prime in p[:len_p]] + # Let's copy the result into a Python list: + result_as_list = [prime for prime in p[:len_p]] return result_as_list diff --git a/docs/examples/tutorial/cython_tutorial/primes_cpp.py b/docs/examples/tutorial/cython_tutorial/primes_cpp.py new file mode 100644 index 000000000..468d00c46 --- /dev/null +++ b/docs/examples/tutorial/cython_tutorial/primes_cpp.py @@ -0,0 +1,22 @@ +# distutils: language=c++ + +import cython +from cython.cimports.libcpp.vector import vector + +def primes(nb_primes: cython.uint): + i: cython.int + p: vector[cython.int] + p.reserve(nb_primes) # allocate memory for 'nb_primes' elements. + + n: cython.int = 2 + while p.size() < nb_primes: # size() for vectors is similar to len() + for i in p: + if n % i == 0: + break + else: + p.push_back(n) # push_back is similar to append() + n += 1 + + # If possible, C values and C++ objects are automatically + # converted to Python objects at need. + return p # so here, the vector will be copied into a Python list. diff --git a/docs/examples/tutorial/cython_tutorial/primes_cpp.pyx b/docs/examples/tutorial/cython_tutorial/primes_cpp.pyx index 57bfe9cc2..afef8bd13 100644 --- a/docs/examples/tutorial/cython_tutorial/primes_cpp.pyx +++ b/docs/examples/tutorial/cython_tutorial/primes_cpp.pyx @@ -1,21 +1,22 @@ -# distutils: language=c++
-
-from libcpp.vector cimport vector
-
-def primes(unsigned int nb_primes):
- cdef int n, i
- cdef vector[int] p
- p.reserve(nb_primes) # allocate memory for 'nb_primes' elements.
-
- n = 2
- while p.size() < nb_primes: # size() for vectors is similar to len()
- for i in p:
- if n % i == 0:
- break
- else:
- p.push_back(n) # push_back is similar to append()
- n += 1
-
- # Vectors are automatically converted to Python
- # lists when converted to Python objects.
- return p
+# distutils: language=c++ + + +from libcpp.vector cimport vector + +def primes(unsigned int nb_primes): + cdef int n, i + cdef vector[int] p + p.reserve(nb_primes) # allocate memory for 'nb_primes' elements. + + n = 2 + while p.size() < nb_primes: # size() for vectors is similar to len() + for i in p: + if n % i == 0: + break + else: + p.push_back(n) # push_back is similar to append() + n += 1 + + # If possible, C values and C++ objects are automatically + # converted to Python objects at need. + return p # so here, the vector will be copied into a Python list. diff --git a/docs/examples/tutorial/cython_tutorial/primes_python.py b/docs/examples/tutorial/cython_tutorial/primes_python.py index f6559d519..845af5bbf 100644 --- a/docs/examples/tutorial/cython_tutorial/primes_python.py +++ b/docs/examples/tutorial/cython_tutorial/primes_python.py @@ -1,4 +1,4 @@ -def primes_python(nb_primes): +def primes(nb_primes): p = [] n = 2 while len(p) < nb_primes: diff --git a/docs/examples/tutorial/cython_tutorial/setup.py b/docs/examples/tutorial/cython_tutorial/setup.py deleted file mode 100644 index 302a08e5f..000000000 --- a/docs/examples/tutorial/cython_tutorial/setup.py +++ /dev/null @@ -1,6 +0,0 @@ -from distutils.core import setup -from Cython.Build import cythonize - -setup( - ext_modules=cythonize("fib.pyx"), -) |