Browse Source

Big changes in Cython

pull/97/merge
Jure Šorn 1 week ago
parent
commit
ee85425cc7
3 changed files with 38 additions and 42 deletions
  1. 26
      README.md
  2. 29
      index.html
  3. 25
      parse.js

26
README.md

@ -379,7 +379,7 @@ import re
```python
<str> = <Match>.group() # Returns the whole match. Also group(0).
<str> = <Match>.group(1) # Returns part inside the first brackets.
<tuple> = <Match>.groups() # Returns all bracketed parts.
<tuple> = <Match>.groups() # Returns all bracketed parts as strings.
<int> = <Match>.start() # Returns start index of the match.
<int> = <Match>.end() # Returns exclusive end index of the match.
```
@ -3513,29 +3513,27 @@ Appendix
```python
# $ pip3 install cython
import pyximport; pyximport.install() # Module that runs imported Cython scripts.
import <cython_script> # Script must be saved with '.pyx' extension.
import pyximport; pyximport.install() # Module that runs Cython scripts.
import <cython_script> # Script must have '.pyx' extension.
```
#### All `'cdef'` definitions are optional, but they contribute to the speed-up:
```python
cdef <ctype/type> [*]<var_name> [= <object>]
cdef <ctype>[n_items] <array_name> [= <coll_of_nums/structs>]
cdef <ctype> *<array_name> = <<ctype> *> malloc(n_items * sizeof(<ctype>))
cdef <ctype/type/void> <func_name>(<ctype/type> [*]<arg_name>): ...
cdef <type> <var_name> [= <obj/var>] # Either Python or C type variable.
cdef <ctype> *<pointer_name> [= &<var>] # Use <pointer>[0] to get the value.
cdef <ctype>[size] <array_name> [= <coll/array>] # Also `from cpython cimport array`.
cdef <ctype> *<array_name> [= <coll/array>] # Also `<<ctype> *> malloc(n_bytes)`.
```
```python
cdef class <class_name>:
cdef public <ctype/type> [*]<attr_name>
def __init__(self, <ctype/type> [*]<arg_name>):
self.<attr_name> = <arg_name>
cdef <type> <func_name>(<type> [*]<arg_name>): ... # Omitted types default to `object`.
```
```python
cdef struct <struct_name>:
<ctype> [*]<field_name>
cdef class <class_name>: # Also `cdef struct <struct_name>:`.
cdef public <type> [*]<attr_name> # Also `... <ctype> [*]<field_name>`.
def __init__(self, <type> <arg_name>): # Also `cdef __dealloc__(self):`.
self.<attr_name> = <arg_name> # Also `... free(<pointer/array>)`.
```
### Virtual Environments

29
index.html

@ -56,7 +56,7 @@
<body>
<header>
<aside>June 5, 2025</aside>
<aside>June 11, 2025</aside>
<a href="https://gto76.github.io" rel="author">Jure Šorn</a>
</header>
@ -358,7 +358,7 @@ Point(x=<span class="hljs-number">1</span>, y=<span class="hljs-number">2</span>
</ul>
<div><h3 id="matchobject">Match Object</h3><pre><code class="python language-python hljs">&lt;str&gt; = &lt;Match&gt;.group() <span class="hljs-comment"># Returns the whole match. Also group(0).</span>
&lt;str&gt; = &lt;Match&gt;.group(<span class="hljs-number">1</span>) <span class="hljs-comment"># Returns part inside the first brackets.</span>
&lt;tuple&gt; = &lt;Match&gt;.groups() <span class="hljs-comment"># Returns all bracketed parts.</span>
&lt;tuple&gt; = &lt;Match&gt;.groups() <span class="hljs-comment"># Returns all bracketed parts as strings.</span>
&lt;int&gt; = &lt;Match&gt;.start() <span class="hljs-comment"># Returns start index of the match.</span>
&lt;int&gt; = &lt;Match&gt;.end() <span class="hljs-comment"># Returns exclusive end index of the match.</span>
</code></pre></div>
@ -2874,25 +2874,24 @@ px.line(df, x=<span class="hljs-string">'Date'</span>, y=<span class="hljs-strin
<div><h2 id="appendix"><a href="#appendix" name="appendix">#</a>Appendix</h2><div><h3 id="cython">Cython</h3><p><strong>Library that compiles Python-like code into C.</strong></p><pre><code class="python language-python hljs"><span class="hljs-comment"># $ pip3 install cython</span>
<span class="hljs-keyword">import</span> pyximport; pyximport.install() <span class="hljs-comment"># Module that runs imported Cython scripts.</span>
<span class="hljs-keyword">import</span> &lt;cython_script&gt; <span class="hljs-comment"># Script must be saved with '.pyx' extension.</span>
<span class="hljs-keyword">import</span> pyximport; pyximport.install() <span class="hljs-comment"># Module that runs Cython scripts.</span>
<span class="hljs-keyword">import</span> &lt;cython_script&gt; <span class="hljs-comment"># Script must have '.pyx' extension.</span>
</code></pre></div></div>
<div><h4 id="allcdefdefinitionsareoptionalbuttheycontributetothespeedup">All <code class="python hljs"><span class="hljs-string">'cdef'</span></code> definitions are optional, but they contribute to the speed-up:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> &lt;ctype/type&gt; [*]&lt;var_name&gt; [= &lt;object&gt;]
<span class="hljs-keyword">cdef</span> &lt;ctype&gt;[n_items] &lt;array_name&gt; [= &lt;coll_of_nums/structs&gt;]
<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;array_name&gt; = &lt;&lt;ctype&gt; *&gt; malloc(n_items * sizeof(&lt;ctype&gt;))
<span class="hljs-keyword">cdef</span> &lt;ctype/type/void&gt; &lt;func_name&gt;(&lt;ctype/type&gt; [*]&lt;arg_name&gt;): ...
<div><h4 id="allcdefdefinitionsareoptionalbuttheycontributetothespeedup">All <code class="python hljs"><span class="hljs-string">'cdef'</span></code> definitions are optional, but they contribute to the speed-up:</h4><pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> &lt;type&gt; &lt;var_name&gt; [= &lt;obj/var&gt;] <span class="hljs-comment"># Either Python or C type variable.</span>
<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;pointer_name&gt; [= &amp;&lt;var&gt;] <span class="hljs-comment"># Use &lt;pointer&gt;[0] to get the value.</span>
<span class="hljs-keyword">cdef</span> &lt;ctype&gt;[size] &lt;array_name&gt; [= &lt;coll/array&gt;] <span class="hljs-comment"># Also `from cpython cimport array`.</span>
<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;array_name&gt; [= &lt;coll/array&gt;] <span class="hljs-comment"># Also `&lt;&lt;ctype&gt; *&gt; malloc(n_bytes)`.</span>
</code></pre></div>
<pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> <span class="hljs-class"><span class="hljs-keyword">class</span> &lt;<span class="hljs-title">class_name</span>&gt;:</span>
<span class="hljs-keyword">cdef</span> <span class="hljs-keyword">public</span> &lt;ctype/type&gt; [*]&lt;attr_name&gt;
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, &lt;ctype/type&gt; [*]&lt;arg_name&gt;)</span>:</span>
self.&lt;attr_name&gt; = &lt;arg_name&gt;
<pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> &lt;type&gt; &lt;func_name&gt;(&lt;type&gt; [*]&lt;arg_name&gt;): ... <span class="hljs-comment"># Omitted types default to `object`.</span>
</code></pre>
<pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> <span class="hljs-keyword">struct</span> &lt;<span class="hljs-title">struct_name</span>&gt;:
&lt;ctype&gt; [*]&lt;field_name&gt;
<pre><code class="python language-python hljs"><span class="hljs-keyword">cdef</span> <span class="hljs-class"><span class="hljs-keyword">class</span> &lt;<span class="hljs-title">class_name</span>&gt;:</span> <span class="hljs-comment"># Also `cdef struct &lt;struct_name&gt;:`.</span>
<span class="hljs-keyword">cdef</span> <span class="hljs-keyword">public</span> &lt;type&gt; [*]&lt;attr_name&gt; <span class="hljs-comment"># Also `... &lt;ctype&gt; [*]&lt;field_name&gt;`.</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, &lt;type&gt; &lt;arg_name&gt;)</span>:</span> <span class="hljs-comment"># Also `cdef __dealloc__(self):`.</span>
self.&lt;attr_name&gt; = &lt;arg_name&gt; <span class="hljs-comment"># Also `... free(&lt;pointer/array&gt;)`.</span>
</code></pre>
<div><h3 id="virtualenvironments">Virtual Environments</h3><p><strong>System for installing libraries directly into project's directory.</strong></p><pre><code class="python hljs">$ python3 -m venv NAME <span class="hljs-comment"># Creates virtual environment in current directory.</span>
$ source NAME/bin/activate <span class="hljs-comment"># Activates it. On Windows run `NAME\Scripts\activate`.</span>
@ -2939,7 +2938,7 @@ $ deactivate <span class="hljs-comment"># Deactivates the active
<footer>
<aside>June 5, 2025</aside>
<aside>June 11, 2025</aside>
<a href="https://gto76.github.io" rel="author">Jure Šorn</a>
</footer>

25
parse.js

@ -326,20 +326,19 @@ const GROUPBY =
'<span class="hljs-number">6</span> <span class="hljs-number">11</span> <span class="hljs-number">13</span>';
const CYTHON_1 =
'<span class="hljs-keyword">cdef</span> &lt;ctype/type&gt; [*]&lt;var_name&gt; [= &lt;object&gt;]\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype&gt;[n_items] &lt;array_name&gt; [= &lt;coll_of_nums/structs&gt;]\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;array_name&gt; = &lt;&lt;ctype&gt; *&gt; malloc(n_items * sizeof(&lt;ctype&gt;))\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype/type/void&gt; &lt;func_name&gt;(&lt;ctype/type&gt; [*]&lt;arg_name&gt;): ...\n';
'<span class="hljs-keyword">cdef</span> &lt;type&gt; &lt;var_name&gt; [= &lt;obj/var&gt;] <span class="hljs-comment"># Either Python or C type variable.</span>\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;pointer_name&gt; [= &amp;&lt;var&gt;] <span class="hljs-comment"># Use &lt;pointer&gt;[0] to get the value.</span>\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype&gt;[size] &lt;array_name&gt; [= &lt;coll/array&gt;] <span class="hljs-comment"># Also `from cpython cimport array`.</span>\n' +
'<span class="hljs-keyword">cdef</span> &lt;ctype&gt; *&lt;array_name&gt; [= &lt;coll/array&gt;] <span class="hljs-comment"># Also `&lt;&lt;ctype&gt; *&gt; malloc(n_bytes)`.</span>\n';
const CYTHON_2 =
'<span class="hljs-keyword">cdef</span> <span class="hljs-class"><span class="hljs-keyword">class</span> &lt;<span class="hljs-title">class_name</span>&gt;:</span>\n' +
' <span class="hljs-keyword">cdef</span> <span class="hljs-keyword">public</span> &lt;ctype/type&gt; [*]&lt;attr_name&gt;\n' +
' <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, &lt;ctype/type&gt; [*]&lt;arg_name&gt;)</span>:</span>\n' +
' self.&lt;attr_name&gt; = &lt;arg_name&gt;\n';
'<span class="hljs-keyword">cdef</span> &lt;type&gt; &lt;func_name&gt;(&lt;type&gt; [*]&lt;arg_name&gt;): ... <span class="hljs-comment"># Omitted types default to `object`.</span>\n';
const CYTHON_3 =
'<span class="hljs-keyword">cdef</span> <span class="hljs-keyword">struct</span> &lt;<span class="hljs-title">struct_name</span>&gt;:\n' +
' &lt;ctype&gt; [*]&lt;field_name&gt;\n';
'<span class="hljs-keyword">cdef</span> <span class="hljs-class"><span class="hljs-keyword">class</span> &lt;<span class="hljs-title">class_name</span>&gt;:</span> <span class="hljs-comment"># Also `cdef struct &lt;struct_name&gt;:`.</span>\n' +
' <span class="hljs-keyword">cdef</span> <span class="hljs-keyword">public</span> &lt;type&gt; [*]&lt;attr_name&gt; <span class="hljs-comment"># Also `... &lt;ctype&gt; [*]&lt;field_name&gt;`.</span>\n' +
' <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, &lt;type&gt; &lt;arg_name&gt;)</span>:</span> <span class="hljs-comment"># Also `cdef __dealloc__(self):`.</span>\n' +
' self.&lt;attr_name&gt; = &lt;arg_name&gt; <span class="hljs-comment"># Also `... free(&lt;pointer/array&gt;)`.</span>\n';
const INDEX =
'<li><strong>Ctrl+F / ⌘F is usually sufficient.</strong></li>\n' +
@ -942,9 +941,9 @@ function fixHighlights() {
$(`code:contains(samples_f = (sin(i *)`).html(AUDIO_2);
$(`code:contains(collections, dataclasses, enum, io, itertools)`).html(MARIO);
$(`code:contains(>>> gb = df.groupby)`).html(GROUPBY);
$(`code:contains(cdef <ctype/type> [*]<var_name> [= <object>])`).html(CYTHON_1);
$(`code:contains(cdef class <class_name>:)`).html(CYTHON_2);
$(`code:contains(cdef struct <struct_name>:)`).html(CYTHON_3);
$(`code:contains(cdef <type> <var_name> [= <obj/var>])`).html(CYTHON_1);
$(`code:contains(cdef <type> <func_name>(<type> [*]<arg_name>): ...)`).html(CYTHON_2);
$(`code:contains(cdef class <class_name>:)`).html(CYTHON_3);
$(`ul:contains(Ctrl+F / ⌘F is usually sufficient.)`).html(INDEX);
}

Loading…
Cancel
Save