add vector class and matrix class

This commit is contained in:
2019-12-20 12:29:56 +01:00
parent b0db7ab3dc
commit 0df813797d
31 changed files with 4308 additions and 94 deletions

View File

@@ -37,7 +37,7 @@
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathematical equations.</span>
<span class="sd">:Date: 2019-11-04</span>
<span class="sd">:Date: 2019-11-15</span>
<span class="sd">.. module:: function</span>
<span class="sd"> :platform: *nix, Windows</span>
@@ -46,7 +46,8 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="k">import</span> <span class="n">lcm</span>
<span class="kn">from</span> <span class="nn">pylib.data</span> <span class="kn">import</span> <span class="n">seq</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">lcm</span>
<div class="viewcode-block" id="transformation"><a class="viewcode-back" href="../function.html#function.transformation">[docs]</a><span class="k">def</span> <span class="nf">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">shift_horizontal</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
@@ -420,6 +421,8 @@
<span class="n">window_factor</span> <span class="o">=</span> <span class="n">w</span><span class="o">/</span><span class="p">(</span><span class="n">x_1</span><span class="o">-</span><span class="n">x_0</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;braille&quot;</span><span class="p">]:</span>
<span class="kn">import</span> <span class="nn">drawille</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
@@ -434,6 +437,8 @@
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;histogram&quot;</span><span class="p">,</span> <span class="s2">&quot;block&quot;</span><span class="p">]:</span>
<span class="kn">import</span> <span class="nn">drawblock</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span>

View File

@@ -47,7 +47,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="kn">from</span> <span class="nn">geometry</span> <span class="k">import</span> <span class="p">(</span>
<span class="kn">from</span> <span class="nn">geometry</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">distance</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">interpolate_hermite</span><span class="p">,</span> <span class="n">rotate_xy</span><span class="p">,</span> <span class="n">translate_xy</span>
<span class="p">)</span>

View File

@@ -45,6 +45,7 @@
<li><a href="numerical/ode_model.html">numerical.ode_model</a></li>
<li><a href="pylib/data.html">pylib.data</a></li>
<li><a href="pylib/date.html">pylib.date</a></li>
<li><a href="pylib/drawblock.html">pylib.drawblock</a></li>
<li><a href="pylib/function.html">pylib.function</a></li>
<li><a href="pylib/geometry.html">pylib.geometry</a></li>
<li><a href="pylib/geometry_plot.html">pylib.geometry_plot</a></li>

View File

@@ -35,21 +35,929 @@
<h1>Source code for mathematics</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathematical functions.</span>
<span class="sd">&quot;&quot;&quot;Mathematical functions and objects.</span>
<span class="sd">:Date: 2019-10-30</span>
<span class="sd">:Date: 2019-12-12</span>
<span class="sd">.. module:: mathematics</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Mathematical functions.</span>
<span class="sd"> :synopsis: Mathematical functions and objects.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">gcd</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">gcd</span>
<div class="viewcode-block" id="lcm"><a class="viewcode-back" href="../mathematics.html#mathematics.lcm">[docs]</a><span class="k">def</span> <span class="nf">lcm</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Compute the lowest common multiple of a and b&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">a</span><span class="o">/</span><span class="n">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">b</span></div>
<div class="viewcode-block" id="vector"><a class="viewcode-back" href="../mathematics.html#mathematics.vector">[docs]</a><span class="k">class</span> <span class="nc">vector</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Use/create vector like lists</span>
<span class="sd"> * size -&gt; len(a)</span>
<span class="sd"> * abs -&gt; abs(a)</span>
<span class="sd"> * dot -&gt; a * b</span>
<span class="sd"> * outer -&gt; a @ b</span>
<span class="sd"> use super constructor</span>
<span class="sd"> use super __iter__</span>
<span class="sd"> use super __setitem__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; v[3:5] = [1,2]</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1, 2, 3, 1, 2]</span>
<span class="sd"> &gt;&gt;&gt; isinstance(v, vector)</span>
<span class="sd"> True</span>
<span class="sd"> use super __lt__(a, b)</span>
<span class="sd"> use super __le__(a, b)</span>
<span class="sd"> use super __eq__(a, b)</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v2 = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v == v2</span>
<span class="sd"> True</span>
<span class="sd"> use super __ne__(a, b)</span>
<span class="sd"> use super __ge__(a, b)</span>
<span class="sd"> use super __gt__(a, b)</span>
<span class="sd"> use super __contains__</span>
<span class="sd"> &gt;&gt;&gt; 2 in vector([1,2,3])</span>
<span class="sd"> True</span>
<span class="sd"> __isub__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v -= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [-2, -1, 0]</span>
<span class="sd"> __imul__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> 18</span>
<span class="sd"> __imatmul__</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; m *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; v[1:3]</span>
<span class="sd"> [2, 3]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; v[3]</span>
<span class="sd"> 4</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;+ a (new object)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;- a (new object)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">-</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a + b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) + vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [2, 4, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a += b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v += vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [4, 5, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a - b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) - vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0, 0, 0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">-</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot b \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3.</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> &gt;&gt;&gt; s = vector([1,2,3])*vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(s)</span>
<span class="sd"> 14</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * matrix</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * scalar</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} &amp;= a \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = 3*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = 3.*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * vector (matrix * vector see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Outer product a @ b (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{a} \otimes \vec{b}</span>
<span class="sd"> =</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}\\</span>
<span class="sd"> a_{2}\\</span>
<span class="sd"> a_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> \otimes</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> b_{1}\\</span>
<span class="sd"> b_{2}\\</span>
<span class="sd"> b_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> =</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}b_{1}&amp;a_{1}b_{2}&amp;a_{1}b_{3}\\</span>
<span class="sd"> a_{2}b_{1}&amp;a_{2}b_{2}&amp;a_{2}b_{3}\\</span>
<span class="sd"> a_{3}b_{1}&amp;a_{3}b_{2}&amp;a_{3}b_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3]) @ vector([1,2,4])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">other</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * number</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Magnitude / norm of a vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> b = \sqrt{\sum a_i^2}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; norm([3, 4])</span>
<span class="sd"> 5</span>
<span class="sd"> &gt;&gt;&gt; norm(vector([3, 4]))</span>
<span class="sd"> 5</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;vector(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.full">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">fill_value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a vector of length m or matrix of size m rows, n</span>
<span class="sd"> columns filled with v.</span>
<span class="sd"> :param length: length of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :param fill_value: Fill value</span>
<span class="sd"> :Type fill_value: scalar</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector.full(3, 7)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [7, 7, 7]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">fill_value</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.zeros"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.zeros">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">zeros</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a zero vector of length m or matrix of size rows, n</span>
<span class="sd"> columns filled with zeros.</span>
<span class="sd"> :param length: length of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = zeros(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0.0, 0.0, 0.0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">0.</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.ones"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.ones">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ones</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a vector of length m or matrix of size rows, n</span>
<span class="sd"> columns filled with ones.</span>
<span class="sd"> :param length: lhape of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = ones(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1.0, 1.0, 1.0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">1.</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.random"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.random">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">lmin</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lmax</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a random vector of length n or matrix of size m rows, n</span>
<span class="sd"> columns filled with random numbers.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = random(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
<span class="sd"> &gt;&gt;&gt; v = random(3, 1, 2)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="n">dl</span> <span class="o">=</span> <span class="n">lmax</span><span class="o">-</span><span class="n">lmin</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">dl</span><span class="o">*</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="o">+</span><span class="n">lmin</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">shape</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.normalize">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">normalize</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Normalize a vector (i. e. the vector has a length of 1)</span>
<span class="sd"> :type a: vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{e}_a = \frac{\vec{a}}{|\vec{a}|}</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`norm` for a norm (magnitude) of a vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">a_mag</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">/</span><span class="n">a_mag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.ang"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.ang">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ang</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span> <span class="o">/</span> <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="nb">abs</span><span class="p">(</span><span class="n">b</span><span class="p">)))</span></div>
<div class="viewcode-block" id="vector.conjugate"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.conjugate">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">conjugate</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> New vector object</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">conjugate</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.re"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.re">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">re</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the real parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">real</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.im"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.im">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">im</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the imaginary parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">imag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.abs"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.abs">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">abs</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return modulus parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">abs</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.arg"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.arg">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">arg</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return phase parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">real</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.cross"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.cross">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">cross</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Cross product</span>
<span class="sd"> :type a: list</span>
<span class="sd"> :type b: list</span>
<span class="sd"> c is orthogonal to both a and b.</span>
<span class="sd"> The direction of c can be found with the right-hand rule.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{c} = \vec{a} \times \vec{b}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="vector.xyz"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span></div>
<div class="viewcode-block" id="vector.rotate_x"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.rotate_y"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the y dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.rotate_z"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the z dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.translate"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.scale"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.ch_cs"><a class="viewcode-back" href="../mathematics.html#mathematics.vector.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Transform this vector from its defined coordinate system to a</span>
<span class="sd"> new coordinate system, defined by the given coordinate system (u,</span>
<span class="sd"> v and w direction vectors).</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> u_x &amp; u_y &amp; u_z &amp; 0 \\</span>
<span class="sd"> v_x &amp; v_y &amp; v_z &amp; 0 \\</span>
<span class="sd"> w_x &amp; w_y &amp; w_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">cs</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="matrix"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix">[docs]</a><span class="k">class</span> <span class="nc">matrix</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Use/create matrix like list of lists</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]])</span>
<span class="sd"> &gt;&gt;&gt; print(m[2])</span>
<span class="sd"> [7, 8, 9, 0]</span>
<span class="sd"> &gt;&gt;&gt; print(m[:,1:3])</span>
<span class="sd"> [[2, 3], [5, 6], [8, 9], [0, 0]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[0:2,1:3])</span>
<span class="sd"> [[2, 3], [5, 6]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[::2,::2])</span>
<span class="sd"> [[1, 3], [7, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># index: slice(stop), slice(start, stop[, step])</span>
<span class="c1"># for e. g. m[(1,3),:] -&gt; index = ((1, 3), slice(None, None, None))</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<div class="viewcode-block" id="matrix.rx"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.rx">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the x direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{x}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.ry"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.ry">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the y direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{y}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.rz"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.rz">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the z direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> :Example:</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 0 &amp; -1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}0 \\ 1 \\ 0 \\ 1\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="n">c</span><span class="p">,</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.t"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.t">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation matrix</span>
<span class="sd"> .. math::</span>
<span class="sd"> T =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">tx</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">ty</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="n">tz</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.s"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.s">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling matrix</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> S =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">sx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span><span class="n">sy</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">sz</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot b \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5.</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> &gt;&gt;&gt; v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [75, 186, 297]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[91, 96, 102], [220, 231, 246], [349, 366, 390]]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * matrix</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * vector</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># matrix * scalar</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{C} &amp;= a \cdot \mathbf{B} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B} \\</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * matrix (matrix * matrix see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 1d list * matrix (vector * matrix see vector.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;matrix(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<div class="viewcode-block" id="matrix.rotate_x"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.rotate_y"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the y dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.rotate_z"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the z dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.translate"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x&#39; \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y&#39; \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.scale"><a class="viewcode-back" href="../mathematics.html#mathematics.matrix.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
</pre></div>
</div>

View File

@@ -45,9 +45,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">curve_fit</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="kn">import</span> <span class="n">curve_fit</span>
<div class="viewcode-block" id="gauss"><a class="viewcode-back" href="../../numerical.html#numerical.fit.gauss">[docs]</a><span class="k">def</span> <span class="nf">gauss</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gauss distribution function.</span>

View File

@@ -47,8 +47,8 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<div class="viewcode-block" id="trapez"><a class="viewcode-back" href="../../numerical.html#numerical.integration.trapez">[docs]</a><span class="k">def</span> <span class="nf">trapez</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">save_values</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>

View File

@@ -49,9 +49,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<div class="viewcode-block" id="e1"><a class="viewcode-back" href="../../numerical.html#numerical.ode.e1">[docs]</a><span class="k">def</span> <span class="nf">e1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit first-order method /</span>

View File

@@ -48,9 +48,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">inv</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">inv</span>
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../numerical.html#numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>

View File

@@ -0,0 +1,224 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.drawblock &#8212; pylib 2019.5.19 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for pylib.drawblock</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<div class="viewcode-block" id="histogram"><a class="viewcode-back" href="../../pylib.html#pylib.drawblock.histogram">[docs]</a><span class="k">def</span> <span class="nf">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Histogram chart with block symbols.</span>
<span class="sd"> dots:</span>
<span class="sd"> ,_,</span>
<span class="sd"> |8|</span>
<span class="sd"> |7|</span>
<span class="sd"> |6|</span>
<span class="sd"> |5|</span>
<span class="sd"> |4|</span>
<span class="sd"> |3|</span>
<span class="sd"> |2|</span>
<span class="sd"> |1|</span>
<span class="sd"> ```</span>
<span class="sd"> ▁▂▃▄▅▆▇█</span>
<span class="sd"> 12345678</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="n">chars</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">int</span><span class="p">))</span>
<span class="c1"># w/o comma no 2d tuple</span>
<span class="n">pixel_map</span> <span class="o">=</span> <span class="p">((</span><span class="mh">0x2581</span><span class="p">,),</span> <span class="c1"># Lower one eighth block, also used for value 0</span>
<span class="p">(</span><span class="mh">0x2582</span><span class="p">,),</span> <span class="c1"># Lower one quarter block</span>
<span class="p">(</span><span class="mh">0x2583</span><span class="p">,),</span> <span class="c1"># Lower three eighths block</span>
<span class="p">(</span><span class="mh">0x2584</span><span class="p">,),</span> <span class="c1"># Lower half block</span>
<span class="p">(</span><span class="mh">0x2585</span><span class="p">,),</span> <span class="c1"># Lower five eighths block</span>
<span class="p">(</span><span class="mh">0x2586</span><span class="p">,),</span> <span class="c1"># Lower three quarters block</span>
<span class="p">(</span><span class="mh">0x2587</span><span class="p">,),</span> <span class="c1"># Lower seven eighths block</span>
<span class="p">(</span><span class="mh">0x2588</span><span class="p">,))</span> <span class="c1"># Full block</span>
<span class="c1">#print(pixel_map)</span>
<span class="n">pixel_rows</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">pixel_cols</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">normalize</span><span class="p">(</span><span class="n">coord</span><span class="p">):</span>
<span class="n">coord_type</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">coord</span><span class="p">)</span>
<span class="k">if</span> <span class="n">coord_type</span> <span class="o">==</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">return</span> <span class="n">coord</span>
<span class="k">if</span> <span class="n">coord_type</span> <span class="o">==</span> <span class="nb">float</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">coord</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Unsupported coordinate type &lt;</span><span class="si">{0}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">coord</span><span class="p">)))</span>
<span class="k">def</span> <span class="nf">get_pos</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Convert x, y to cols, rows&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">//</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">//</span> <span class="n">pixel_rows</span>
<span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Set a pixel of the :class:`Canvas` object.</span>
<span class="sd"> :param x: x coordinate of the pixel</span>
<span class="sd"> :param y: y coordinate of the pixel</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<span class="n">col</span><span class="p">,</span> <span class="n">row</span> <span class="o">=</span> <span class="n">get_pos</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">chars</span><span class="p">[</span><span class="n">row</span><span class="p">][</span><span class="n">col</span><span class="p">])</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">chars</span><span class="p">[</span><span class="n">row</span><span class="p">][</span><span class="n">col</span><span class="p">]</span> <span class="o">|=</span> <span class="n">pixel_map</span><span class="p">[</span><span class="n">y</span> <span class="o">%</span> <span class="n">pixel_rows</span><span class="p">][</span><span class="n">x</span> <span class="o">%</span> <span class="n">pixel_cols</span><span class="p">]</span>
<span class="c1"># fill also below the tip</span>
<span class="k">if</span> <span class="n">row</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="n">chars</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">col</span><span class="p">]</span> <span class="o">|=</span> <span class="n">pixel_map</span><span class="p">[</span><span class="n">pixel_rows</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="n">x</span> <span class="o">%</span> <span class="n">pixel_cols</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">rows</span><span class="p">(</span><span class="n">min_x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_y</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_y</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a list of the current :class:`Canvas` object lines.</span>
<span class="sd"> :param min_x: (optional) minimum x coordinate of the canvas</span>
<span class="sd"> :param min_y: (optional) minimum y coordinate of the canvas</span>
<span class="sd"> :param max_x: (optional) maximum x coordinate of the canvas</span>
<span class="sd"> :param max_y: (optional) maximum y coordinate of the canvas</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">chars</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="n">minrow</span> <span class="o">=</span> <span class="n">min_y</span> <span class="o">//</span> <span class="n">pixel_rows</span> <span class="k">if</span> <span class="n">min_y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">min</span><span class="p">(</span><span class="n">chars</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">maxrow</span> <span class="o">=</span> <span class="p">(</span><span class="n">max_y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="n">pixel_rows</span> <span class="k">if</span> <span class="n">max_y</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">max</span><span class="p">(</span><span class="n">chars</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">mincol</span> <span class="o">=</span> <span class="n">min_x</span> <span class="o">//</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">min_x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">min</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">chars</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="n">maxcol</span> <span class="o">=</span> <span class="p">(</span><span class="n">max_x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">max_x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">max</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">chars</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">rownum</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">minrow</span><span class="p">,</span> <span class="n">maxrow</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">rownum</span> <span class="ow">in</span> <span class="n">chars</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">maxcol</span> <span class="o">=</span> <span class="p">(</span><span class="n">max_x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">//</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">max_x</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">max</span><span class="p">(</span><span class="n">chars</span><span class="p">[</span><span class="n">rownum</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">mincol</span><span class="p">,</span> <span class="n">maxcol</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="n">char</span> <span class="o">=</span> <span class="n">chars</span><span class="p">[</span><span class="n">rownum</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">char</span><span class="p">:</span>
<span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="mh">0x20</span><span class="p">))</span>
<span class="c1">#row.append(chr(0x2588))</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">int</span><span class="p">:</span>
<span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">char</span><span class="p">))</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">row</span><span class="p">))</span>
<span class="k">return</span> <span class="n">result</span>
<span class="k">def</span> <span class="nf">frame</span><span class="p">(</span><span class="n">min_x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">min_y</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_y</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;String representation of the current :class:`Canvas` object pixels.</span>
<span class="sd"> :param min_x: (optional) minimum x coordinate of the canvas</span>
<span class="sd"> :param min_y: (optional) minimum y coordinate of the canvas</span>
<span class="sd"> :param max_x: (optional) maximum x coordinate of the canvas</span>
<span class="sd"> :param max_y: (optional) maximum y coordinate of the canvas</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">linesep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">rows</span><span class="p">(</span><span class="n">min_x</span><span class="p">,</span> <span class="n">min_y</span><span class="p">,</span> <span class="n">max_x</span><span class="p">,</span> <span class="n">max_y</span><span class="p">)))</span>
<span class="k">return</span> <span class="n">result</span> <span class="c1"># py2: ret.encode(&#39;utf-8&#39;)</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">for</span> <span class="n">xi</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="nb">set</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">xi</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span>
<span class="nb">set</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">return</span> <span class="n">frame</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -37,7 +37,7 @@
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathematical equations.</span>
<span class="sd">:Date: 2019-11-04</span>
<span class="sd">:Date: 2019-11-15</span>
<span class="sd">.. module:: function</span>
<span class="sd"> :platform: *nix, Windows</span>
@@ -46,7 +46,8 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="k">import</span> <span class="n">lcm</span>
<span class="kn">from</span> <span class="nn">pylib.data</span> <span class="kn">import</span> <span class="n">seq</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">lcm</span>
<div class="viewcode-block" id="transformation"><a class="viewcode-back" href="../../pylib.html#pylib.function.transformation">[docs]</a><span class="k">def</span> <span class="nf">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">shift_horizontal</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
@@ -420,6 +421,8 @@
<span class="n">window_factor</span> <span class="o">=</span> <span class="n">w</span><span class="o">/</span><span class="p">(</span><span class="n">x_1</span><span class="o">-</span><span class="n">x_0</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;line&quot;</span><span class="p">,</span> <span class="s2">&quot;braille&quot;</span><span class="p">]:</span>
<span class="kn">import</span> <span class="nn">drawille</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">a</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
@@ -434,6 +437,8 @@
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;histogram&quot;</span><span class="p">,</span> <span class="s2">&quot;block&quot;</span><span class="p">]:</span>
<span class="kn">import</span> <span class="nn">drawblock</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="o">-</span><span class="mi">1</span>

View File

@@ -47,7 +47,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="kn">from</span> <span class="nn">geometry</span> <span class="k">import</span> <span class="p">(</span>
<span class="kn">from</span> <span class="nn">geometry</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">distance</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">interpolate_hermite</span><span class="p">,</span> <span class="n">rotate_xy</span><span class="p">,</span> <span class="n">translate_xy</span>
<span class="p">)</span>

View File

@@ -35,21 +35,929 @@
<h1>Source code for pylib.mathematics</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathematical functions.</span>
<span class="sd">&quot;&quot;&quot;Mathematical functions and objects.</span>
<span class="sd">:Date: 2019-10-30</span>
<span class="sd">:Date: 2019-12-12</span>
<span class="sd">.. module:: mathematics</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Mathematical functions.</span>
<span class="sd"> :synopsis: Mathematical functions and objects.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">gcd</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">gcd</span>
<div class="viewcode-block" id="lcm"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.lcm">[docs]</a><span class="k">def</span> <span class="nf">lcm</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Compute the lowest common multiple of a and b&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">a</span><span class="o">/</span><span class="n">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">b</span></div>
<div class="viewcode-block" id="vector"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector">[docs]</a><span class="k">class</span> <span class="nc">vector</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Use/create vector like lists</span>
<span class="sd"> * size -&gt; len(a)</span>
<span class="sd"> * abs -&gt; abs(a)</span>
<span class="sd"> * dot -&gt; a * b</span>
<span class="sd"> * outer -&gt; a @ b</span>
<span class="sd"> use super constructor</span>
<span class="sd"> use super __iter__</span>
<span class="sd"> use super __setitem__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; v[3:5] = [1,2]</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1, 2, 3, 1, 2]</span>
<span class="sd"> &gt;&gt;&gt; isinstance(v, vector)</span>
<span class="sd"> True</span>
<span class="sd"> use super __lt__(a, b)</span>
<span class="sd"> use super __le__(a, b)</span>
<span class="sd"> use super __eq__(a, b)</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v2 = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v == v2</span>
<span class="sd"> True</span>
<span class="sd"> use super __ne__(a, b)</span>
<span class="sd"> use super __ge__(a, b)</span>
<span class="sd"> use super __gt__(a, b)</span>
<span class="sd"> use super __contains__</span>
<span class="sd"> &gt;&gt;&gt; 2 in vector([1,2,3])</span>
<span class="sd"> True</span>
<span class="sd"> __isub__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v -= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [-2, -1, 0]</span>
<span class="sd"> __imul__</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> 18</span>
<span class="sd"> __imatmul__</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; m *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; v[1:3]</span>
<span class="sd"> [2, 3]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; v[3]</span>
<span class="sd"> 4</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;+ a (new object)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;- a (new object)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">-</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a + b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) + vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [2, 4, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a += b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v += vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [4, 5, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a - b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) - vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0, 0, 0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">-</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot b \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3.</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> &gt;&gt;&gt; s = vector([1,2,3])*vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; print(s)</span>
<span class="sd"> 14</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * matrix</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * scalar</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} &amp;= a \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = 3*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = 3.*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * vector (matrix * vector see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Outer product a @ b (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{a} \otimes \vec{b}</span>
<span class="sd"> =</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}\\</span>
<span class="sd"> a_{2}\\</span>
<span class="sd"> a_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> \otimes</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> b_{1}\\</span>
<span class="sd"> b_{2}\\</span>
<span class="sd"> b_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> =</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}b_{1}&amp;a_{1}b_{2}&amp;a_{1}b_{3}\\</span>
<span class="sd"> a_{2}b_{1}&amp;a_{2}b_{2}&amp;a_{2}b_{3}\\</span>
<span class="sd"> a_{3}b_{1}&amp;a_{3}b_{2}&amp;a_{3}b_{3}</span>
<span class="sd"> \end{pmatrix}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3]) @ vector([1,2,4])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">other</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * number</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Magnitude / norm of a vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> b = \sqrt{\sum a_i^2}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; norm([3, 4])</span>
<span class="sd"> 5</span>
<span class="sd"> &gt;&gt;&gt; norm(vector([3, 4]))</span>
<span class="sd"> 5</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;vector(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.full">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">fill_value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a vector of length m or matrix of size m rows, n</span>
<span class="sd"> columns filled with v.</span>
<span class="sd"> :param length: length of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :param fill_value: Fill value</span>
<span class="sd"> :Type fill_value: scalar</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector.full(3, 7)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [7, 7, 7]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">fill_value</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.zeros"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.zeros">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">zeros</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a zero vector of length m or matrix of size rows, n</span>
<span class="sd"> columns filled with zeros.</span>
<span class="sd"> :param length: length of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = zeros(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0.0, 0.0, 0.0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">0.</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.ones"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.ones">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ones</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a vector of length m or matrix of size rows, n</span>
<span class="sd"> columns filled with ones.</span>
<span class="sd"> :param length: lhape of the vector, e. g. 3</span>
<span class="sd"> :type length: int</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = ones(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1.0, 1.0, 1.0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">1.</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.random"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.random">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">lmin</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lmax</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a random vector of length n or matrix of size m rows, n</span>
<span class="sd"> columns filled with random numbers.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = random(3)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
<span class="sd"> &gt;&gt;&gt; v = random(3, 1, 2)</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="n">dl</span> <span class="o">=</span> <span class="n">lmax</span><span class="o">-</span><span class="n">lmin</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">dl</span><span class="o">*</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="o">+</span><span class="n">lmin</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">shape</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.normalize">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">normalize</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Normalize a vector (i. e. the vector has a length of 1)</span>
<span class="sd"> :type a: vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{e}_a = \frac{\vec{a}}{|\vec{a}|}</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`norm` for a norm (magnitude) of a vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">a_mag</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">/</span><span class="n">a_mag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.ang"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.ang">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ang</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span> <span class="o">/</span> <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="nb">abs</span><span class="p">(</span><span class="n">b</span><span class="p">)))</span></div>
<div class="viewcode-block" id="vector.conjugate"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.conjugate">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">conjugate</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> New vector object</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">conjugate</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.re"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.re">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">re</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the real parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">real</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.im"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.im">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">im</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return the imaginary parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">.</span><span class="n">imag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.abs"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.abs">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">abs</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return modulus parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">abs</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.arg"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.arg">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">arg</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Return phase parts of a complex vector</span>
<span class="sd"> :type a: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">real</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.cross"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.cross">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">cross</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Cross product</span>
<span class="sd"> :type a: list</span>
<span class="sd"> :type b: list</span>
<span class="sd"> c is orthogonal to both a and b.</span>
<span class="sd"> The direction of c can be found with the right-hand rule.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{c} = \vec{a} \times \vec{b}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="vector.xyz"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span></div>
<div class="viewcode-block" id="vector.rotate_x"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.rotate_y"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the y dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.rotate_z"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the z dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.translate"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.scale"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.ch_cs"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.vector.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Transform this vector from its defined coordinate system to a</span>
<span class="sd"> new coordinate system, defined by the given coordinate system (u,</span>
<span class="sd"> v and w direction vectors).</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> u_x &amp; u_y &amp; u_z &amp; 0 \\</span>
<span class="sd"> v_x &amp; v_y &amp; v_z &amp; 0 \\</span>
<span class="sd"> w_x &amp; w_y &amp; w_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">cs</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="matrix"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix">[docs]</a><span class="k">class</span> <span class="nc">matrix</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Use/create matrix like list of lists</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]])</span>
<span class="sd"> &gt;&gt;&gt; print(m[2])</span>
<span class="sd"> [7, 8, 9, 0]</span>
<span class="sd"> &gt;&gt;&gt; print(m[:,1:3])</span>
<span class="sd"> [[2, 3], [5, 6], [8, 9], [0, 0]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[0:2,1:3])</span>
<span class="sd"> [[2, 3], [5, 6]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[::2,::2])</span>
<span class="sd"> [[1, 3], [7, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># index: slice(stop), slice(start, stop[, step])</span>
<span class="c1"># for e. g. m[(1,3),:] -&gt; index = ((1, 3), slice(None, None, None))</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<div class="viewcode-block" id="matrix.rx"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.rx">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the x direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{x}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.ry"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.ry">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the y direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{y}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.rz"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.rz">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation matrix about the z direction.</span>
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> :Example:</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 0 &amp; -1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}0 \\ 1 \\ 0 \\ 1\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="n">c</span><span class="p">,</span><span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="n">s</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.t"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.t">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation matrix</span>
<span class="sd"> .. math::</span>
<span class="sd"> T =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">tx</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">ty</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="n">tz</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<div class="viewcode-block" id="matrix.s"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.s">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling matrix</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> S =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">sx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span><span class="n">sy</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="n">sz</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot b \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b} \\</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5.</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> &gt;&gt;&gt; v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [75, 186, 297]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[91, 96, 102], [220, 231, 246], [349, 366, 390]]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * matrix</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * vector</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># matrix * scalar</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{C} &amp;= a \cdot \mathbf{B} \\</span>
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B} \\</span>
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * matrix (matrix * matrix see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 1d list * matrix (vector * matrix see vector.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;matrix(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<div class="viewcode-block" id="matrix.rotate_x"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.rotate_y"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the y dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> -\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">ry</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.rotate_z"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the z dirction.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">rz</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.translate"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x&#39; \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y&#39; \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">t</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.scale"><a class="viewcode-back" href="../../pylib.html#pylib.mathematics.matrix.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scaling</span>
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx&#39; &amp; xy&#39; &amp; xz&#39; &amp; t_x&#39; \\</span>
<span class="sd"> yx&#39; &amp; yy&#39; &amp; yz&#39; &amp; t_y&#39; \\</span>
<span class="sd"> zx&#39; &amp; zy&#39; &amp; zz&#39; &amp; t_z&#39; \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; s_z &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> xx &amp; xy &amp; xz &amp; t_x \\</span>
<span class="sd"> yx &amp; yy &amp; yz &amp; t_y \\</span>
<span class="sd"> zx &amp; zy &amp; zz &amp; t_z \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
</pre></div>
</div>

View File

@@ -45,9 +45,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">curve_fit</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">argmax</span><span class="p">,</span> <span class="n">gradient</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">log</span><span class="p">,</span> <span class="n">linspace</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="kn">import</span> <span class="n">curve_fit</span>
<div class="viewcode-block" id="gauss"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.fit.gauss">[docs]</a><span class="k">def</span> <span class="nf">gauss</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Gauss distribution function.</span>

View File

@@ -47,8 +47,8 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">linspace</span><span class="p">,</span> <span class="n">trapz</span><span class="p">,</span> <span class="n">zeros</span>
<div class="viewcode-block" id="trapez"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.integration.trapez">[docs]</a><span class="k">def</span> <span class="nf">trapez</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">save_values</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>

View File

@@ -49,9 +49,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
<div class="viewcode-block" id="e1"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode.e1">[docs]</a><span class="k">def</span> <span class="nf">e1</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Explicit first-order method /</span>

View File

@@ -48,9 +48,9 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="k">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="k">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="k">import</span> <span class="n">inv</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">inv</span>
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../../pylib.numerical.html#pylib.numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>

View File

@@ -45,7 +45,7 @@
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">struct_time</span><span class="p">,</span> <span class="n">mktime</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">struct_time</span><span class="p">,</span> <span class="n">mktime</span>
<div class="viewcode-block" id="in_seconds"><a class="viewcode-back" href="../../pylib.html#pylib.time_of_day.in_seconds">[docs]</a><span class="k">def</span> <span class="nf">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;If time is `time.struct_time` convert to float seconds.</span>
@@ -164,7 +164,7 @@
<span class="k">return</span> <span class="n">time_norm</span><span class="o">*</span><span class="n">length</span> <span class="o">+</span> <span class="n">offset</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">gmtime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">gmtime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="c1"># time in seconds</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
<span class="nb">min</span> <span class="o">=</span> <span class="n">minutes</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>

View File

@@ -45,7 +45,7 @@
<span class="sd"> </span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">struct_time</span><span class="p">,</span> <span class="n">mktime</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">struct_time</span><span class="p">,</span> <span class="n">mktime</span>
<div class="viewcode-block" id="in_seconds"><a class="viewcode-back" href="../time_of_day.html#time_of_day.in_seconds">[docs]</a><span class="k">def</span> <span class="nf">in_seconds</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;If time is `time.struct_time` convert to float seconds.</span>
@@ -164,7 +164,7 @@
<span class="k">return</span> <span class="n">time_norm</span><span class="o">*</span><span class="n">length</span> <span class="o">+</span> <span class="n">offset</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="k">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">gmtime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">time</span><span class="p">,</span> <span class="n">gmtime</span><span class="p">,</span> <span class="n">localtime</span>
<span class="c1"># time in seconds</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
<span class="nb">min</span> <span class="o">=</span> <span class="n">minutes</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>

View File

@@ -4,11 +4,4 @@ pylib
.. toctree::
:maxdepth: 4
data
date
function
geometry
geometry_plot
mathematics
numerical
time_of_day
pylib

View File

@@ -27,6 +27,14 @@ pylib.date module
:undoc-members:
:show-inheritance:
pylib.drawblock module
----------------------
.. automodule:: pylib.drawblock
:members:
:undoc-members:
:show-inheritance:
pylib.function module
---------------------

View File

@@ -37,7 +37,7 @@
<p>Mathematical equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-11-04</p>
<dd class="field-odd"><p>2019-11-15</p>
</dd>
</dl>
<span class="target" id="module-function"></span><dl class="function">

View File

@@ -54,12 +54,19 @@
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#V"><strong>V</strong></a>
| <a href="#W"><strong>W</strong></a>
| <a href="#X"><strong>X</strong></a>
| <a href="#Z"><strong>Z</strong></a>
</div>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.abs">abs() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.abs">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.vector.ang">ang() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.ang">[1]</a>
</li>
<li><a href="geometry.html#geometry.angle">angle() (in module geometry)</a>
<ul>
@@ -68,6 +75,8 @@
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.arg">arg() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.arg">[1]</a>
</li>
<li><a href="date.html#date.ascension_of_jesus">ascension_of_jesus() (in module date)</a>
<ul>
@@ -80,20 +89,26 @@
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.ch_cs">ch_cs() (vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.ch_cs">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.vector.conjugate">conjugate() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.conjugate">[1]</a>
</li>
<li><a href="function.html#function.cosine_wave">cosine_wave() (in module function)</a>
<ul>
<li><a href="pylib.html#pylib.function.cosine_wave">(in module pylib.function)</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.vector.cross">cross() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.cross">[1]</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="geometry.html#geometry.cubic">cubic() (in module geometry)</a>
<ul>
<li><a href="pylib.html#pylib.geometry.cubic">(in module pylib.geometry)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="geometry.html#geometry.cubic_deg">cubic_deg() (in module geometry)</a>
<ul>
@@ -226,6 +241,8 @@
<li><a href="pylib.numerical.html#pylib.numerical.ode.fpi">(in module pylib.numerical.ode)</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.vector.full">full() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.full">[1]</a>
</li>
<li><a href="function.html#module-function">function (module)</a>, <a href="function.html#module-function">[1]</a>, <a href="pylib.html#module-function">[2]</a>
</li>
</ul></td>
@@ -270,20 +287,22 @@
<h2 id="H">H</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
</li>
<li><a href="pylib.html#pylib.time_of_day.hours">hours() (in module pylib.time_of_day)</a>
<ul>
<li><a href="time_of_day.html#time_of_day.hours">(in module time_of_day)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.html#pylib.time_of_day.hours_norm">hours_norm() (in module pylib.time_of_day)</a>
<ul>
<li><a href="time_of_day.html#time_of_day.hours_norm">(in module time_of_day)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="function.html#function.hypotrochoid">hypotrochoid() (in module function)</a>
<ul>
@@ -302,6 +321,8 @@
<li><a href="pylib.numerical.html#pylib.numerical.ode.i1">(in module pylib.numerical.ode)</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.vector.im">im() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.im">[1]</a>
</li>
<li><a href="pylib.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
<ul>
@@ -358,14 +379,20 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#module-mathematics">mathematics (module)</a>, <a href="mathematics.html#module-mathematics">[1]</a>, <a href="pylib.html#module-mathematics">[2]</a>
</li>
<li><a href="mathematics.html#mathematics.matrix">matrix (class in mathematics)</a>
<ul>
<li><a href="pylib.html#pylib.mathematics.matrix">(class in pylib.mathematics)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.html#pylib.time_of_day.minutes">minutes() (in module pylib.time_of_day)</a>
<ul>
<li><a href="time_of_day.html#time_of_day.minutes">(in module time_of_day)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.html#pylib.time_of_day.minutes_norm">minutes_norm() (in module pylib.time_of_day)</a>
<ul>
@@ -390,6 +417,8 @@
<li><a href="pylib.numerical.html#pylib.numerical.ode.newmark_newtonraphson_rdk">(in module pylib.numerical.ode)</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.vector.normalize">normalize() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.normalize">[1]</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#module-numerical">numerical (module)</a>
@@ -413,6 +442,8 @@
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="numerical.html#module-ode_model">ode_model (module)</a>, <a href="pylib.numerical.html#module-ode_model">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.vector.ones">ones() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.ones">[1]</a>
</li>
</ul></td>
</tr></table>
@@ -443,6 +474,8 @@
<li><a href="pylib.html#module-pylib.data">pylib.data (module)</a>
</li>
<li><a href="pylib.html#module-pylib.date">pylib.date (module)</a>
</li>
<li><a href="pylib.html#module-pylib.drawblock">pylib.drawblock (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -472,6 +505,10 @@
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.random">random() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.random">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.vector.re">re() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.re">[1]</a>
</li>
<li><a href="data.html#data.read">read() (in module data)</a>
<ul>
@@ -490,12 +527,18 @@
<li><a href="pylib.html#pylib.geometry.rotate">(in module pylib.geometry)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="geometry.html#geometry.rotate_deg">rotate_deg() (in module geometry)</a>
<ul>
<li><a href="pylib.html#pylib.geometry.rotate_deg">(in module pylib.geometry)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.matrix.rotate_x">rotate_x() (matrix method)</a>, <a href="pylib.html#pylib.mathematics.matrix.rotate_x">[1]</a>
<ul>
<li><a href="mathematics.html#mathematics.vector.rotate_x">(vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.rotate_x">[1]</a>
</li>
</ul></li>
<li><a href="geometry.html#geometry.rotate_xy">rotate_xy() (in module geometry)</a>
@@ -504,12 +547,38 @@
<li><a href="pylib.html#pylib.geometry.rotate_xy">(in module pylib.geometry)</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.matrix.rotate_y">rotate_y() (matrix method)</a>, <a href="pylib.html#pylib.mathematics.matrix.rotate_y">[1]</a>
<ul>
<li><a href="mathematics.html#mathematics.vector.rotate_y">(vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.rotate_y">[1]</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.matrix.rotate_z">rotate_z() (matrix method)</a>, <a href="pylib.html#pylib.mathematics.matrix.rotate_z">[1]</a>
<ul>
<li><a href="mathematics.html#mathematics.vector.rotate_z">(vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.rotate_z">[1]</a>
</li>
</ul></li>
<li><a href="mathematics.html#mathematics.matrix.rx">rx() (matrix static method)</a>, <a href="pylib.html#pylib.mathematics.matrix.rx">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.matrix.ry">ry() (matrix static method)</a>, <a href="pylib.html#pylib.mathematics.matrix.ry">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.matrix.rz">rz() (matrix static method)</a>, <a href="pylib.html#pylib.mathematics.matrix.rz">[1]</a>
</li>
</ul></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.matrix.s">s() (matrix static method)</a>, <a href="pylib.html#pylib.mathematics.matrix.s">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.matrix.scale">scale() (matrix method)</a>, <a href="pylib.html#pylib.mathematics.matrix.scale">[1]</a>
<ul>
<li><a href="mathematics.html#mathematics.vector.scale">(vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.scale">[1]</a>
</li>
</ul></li>
<li><a href="pylib.html#pylib.time_of_day.seconds">seconds() (in module pylib.time_of_day)</a>
<ul>
@@ -522,14 +591,14 @@
<li><a href="time_of_day.html#time_of_day.seconds_norm">(in module time_of_day)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="data.html#data.seq">seq() (in module data)</a>
<ul>
<li><a href="pylib.html#pylib.data.seq">(in module pylib.data)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="function.html#function.sine_wave">sine_wave() (in module function)</a>
<ul>
@@ -554,6 +623,8 @@
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.matrix.t">t() (matrix static method)</a>, <a href="pylib.html#pylib.mathematics.matrix.t">[1]</a>
</li>
<li><a href="pylib.html#module-time_of_day">time_of_day (module)</a>, <a href="time_of_day.html#module-time_of_day">[1]</a>, <a href="time_of_day.html#module-time_of_day">[2]</a>
</li>
<li><a href="function.html#function.to_str">to_str() (in module function)</a>
@@ -580,6 +651,10 @@
<ul>
<li><a href="pylib.html#pylib.geometry.translate">(in module pylib.geometry)</a>
</li>
<li><a href="mathematics.html#mathematics.matrix.translate">(matrix method)</a>, <a href="pylib.html#pylib.mathematics.matrix.translate">[1]</a>
</li>
<li><a href="mathematics.html#mathematics.vector.translate">(vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.translate">[1]</a>
</li>
</ul></li>
<li><a href="geometry.html#geometry.translate_xy">translate_xy() (in module geometry)</a>
@@ -609,6 +684,18 @@
</ul></td>
</tr></table>
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector">vector (class in mathematics)</a>
<ul>
<li><a href="pylib.html#pylib.mathematics.vector">(class in pylib.mathematics)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -621,6 +708,22 @@
</ul></td>
</tr></table>
<h2 id="X">X</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.xyz">xyz() (vector method)</a>, <a href="pylib.html#pylib.mathematics.vector.xyz">[1]</a>
</li>
</ul></td>
</tr></table>
<h2 id="Z">Z</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="mathematics.html#mathematics.vector.zeros">zeros() (vector static method)</a>, <a href="pylib.html#pylib.mathematics.vector.zeros">[1]</a>
</li>
</ul></td>
</tr></table>
</div>

View File

@@ -34,10 +34,10 @@
<div class="section" id="module-mathematics">
<span id="mathematics-module"></span><h1>mathematics module<a class="headerlink" href="#module-mathematics" title="Permalink to this headline"></a></h1>
<p>Mathematical functions.</p>
<p>Mathematical functions and objects.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-10-30</p>
<dd class="field-odd"><p>2019-12-12</p>
</dd>
</dl>
<span class="target" id="module-mathematics"></span><dl class="function">
@@ -46,6 +46,562 @@
<dd><p>Compute the lowest common multiple of a and b</p>
</dd></dl>
<dl class="class">
<dt id="mathematics.matrix">
<em class="property">class </em><code class="sig-name descname">matrix</code><a class="reference internal" href="_modules/mathematics.html#matrix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create matrix like list of lists</p>
<dl class="method">
<dt id="mathematics.matrix.rotate_x">
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.rotate_x" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the x dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.rotate_y">
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.rotate_y" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the y dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx &amp; yy &amp; yz &amp; t_y \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.rotate_z">
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.rotate_z" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the z dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.rx">
<em class="property">static </em><code class="sig-name descname">rx</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.rx"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.rx" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the x direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{x}(\theta) =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.ry">
<em class="property">static </em><code class="sig-name descname">ry</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.ry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.ry" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the y direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{y}(\theta) =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.rz">
<em class="property">static </em><code class="sig-name descname">rz</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.rz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.rz" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the z direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
\cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\
\sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
0 &amp; -1 &amp; 0 &amp; 0 \\
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}0 \\ 1 \\ 0 \\ 1\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.s">
<em class="property">static </em><code class="sig-name descname">s</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.s"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.s" title="Permalink to this definition"></a></dt>
<dd><p>Scaling matrix</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}S =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.scale">
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.scale" title="Permalink to this definition"></a></dt>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.t">
<em class="property">static </em><code class="sig-name descname">t</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.t"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.t" title="Permalink to this definition"></a></dt>
<dd><p>Translation matrix</p>
<div class="math notranslate nohighlight">
\[\begin{split}T =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.matrix.translate">
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#matrix.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.matrix.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translation</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x' \\
yx &amp; yy &amp; yz &amp; t_y' \\
zx &amp; zy &amp; zz &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="mathematics.vector">
<em class="property">class </em><code class="sig-name descname">vector</code><a class="reference internal" href="_modules/mathematics.html#vector"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create vector like lists</p>
<ul class="simple">
<li><p>size -&gt; len(a)</p></li>
<li><p>abs -&gt; abs(a)</p></li>
<li><p>dot -&gt; a * b</p></li>
<li><p>outer -&gt; a &#64; b</p></li>
</ul>
<p>use super constructor</p>
<p>use super __iter__</p>
<p>use super __setitem__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1, 2, 3, 1, 2]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">vector</span><span class="p">)</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __lt__(a, b)</p>
<p>use super __le__(a, b)</p>
<p>use super __eq__(a, b)</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">==</span> <span class="n">v2</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __ne__(a, b)</p>
<p>use super __ge__(a, b)</p>
<p>use super __gt__(a, b)</p>
<p>use super __contains__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
<p>__isub__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">-=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[-2, -1, 0]</span>
</pre></div>
</div>
<p>__imul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">18</span>
</pre></div>
</div>
<p>__imatmul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
</pre></div>
</div>
<dl class="method">
<dt id="mathematics.vector.abs">
<em class="property">static </em><code class="sig-name descname">abs</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.abs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.abs" title="Permalink to this definition"></a></dt>
<dd><p>Return modulus parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.ang">
<em class="property">static </em><code class="sig-name descname">ang</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.ang"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.ang" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="mathematics.vector.arg">
<em class="property">static </em><code class="sig-name descname">arg</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.arg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.arg" title="Permalink to this definition"></a></dt>
<dd><p>Return phase parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.ch_cs">
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.ch_cs" title="Permalink to this definition"></a></dt>
<dd><p>Transform this vector from its defined coordinate system to a
new coordinate system, defined by the given coordinate system (u,
v and w direction vectors).</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
u_x &amp; u_y &amp; u_z &amp; 0 \\
v_x &amp; v_y &amp; v_z &amp; 0 \\
w_x &amp; w_y &amp; w_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.conjugate">
<em class="property">static </em><code class="sig-name descname">conjugate</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.conjugate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.conjugate" title="Permalink to this definition"></a></dt>
<dd><p>New vector object</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.cross">
<em class="property">static </em><code class="sig-name descname">cross</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.cross"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.cross" title="Permalink to this definition"></a></dt>
<dd><p>Cross product</p>
<dl class="field-list simple">
</dl>
<p>c is orthogonal to both a and b.
The direction of c can be found with the right-hand rule.</p>
<div class="math notranslate nohighlight">
\[\vec{c} = \vec{a} \times \vec{b}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.full">
<em class="property">static </em><code class="sig-name descname">full</code><span class="sig-paren">(</span><em class="sig-param">length</em>, <em class="sig-param">fill_value</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.full"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.full" title="Permalink to this definition"></a></dt>
<dd><p>Returns a vector of length m or matrix of size m rows, n
columns filled with v.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>length</strong> (<em>int</em>) length of the vector, e. g. 3</p></li>
<li><p><strong>fill_value</strong> Fill value</p></li>
</ul>
</dd>
<dt class="field-even">Type fill_value</dt>
<dd class="field-even"><p>scalar</p>
</dd>
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[7, 7, 7]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.im">
<em class="property">static </em><code class="sig-name descname">im</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.im"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.im" title="Permalink to this definition"></a></dt>
<dd><p>Return the imaginary parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.normalize">
<em class="property">static </em><code class="sig-name descname">normalize</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.normalize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.normalize" title="Permalink to this definition"></a></dt>
<dd><p>Normalize a vector (i. e. the vector has a length of 1)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}\]</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">norm()</span></code> for a norm (magnitude) of a vector</p>
</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.ones">
<em class="property">static </em><code class="sig-name descname">ones</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.ones"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.ones" title="Permalink to this definition"></a></dt>
<dd><p>Returns a vector of length m or matrix of size rows, n
columns filled with ones.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) lhape of the vector, e. g. 3</p>
</dd>
<dt class="field-even">Example</dt>
<dd class="field-even"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">ones</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1.0, 1.0, 1.0]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.random">
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">shape</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.random" title="Permalink to this definition"></a></dt>
<dd><p>Returns a random vector of length n or matrix of size m rows, n
columns filled with random numbers.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.re">
<em class="property">static </em><code class="sig-name descname">re</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.re"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.re" title="Permalink to this definition"></a></dt>
<dd><p>Return the real parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.rotate_x">
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.rotate_x" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the x dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.rotate_y">
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.rotate_y" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the y dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.rotate_z">
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.rotate_z" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the z dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.scale">
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.scale" title="Permalink to this definition"></a></dt>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.translate">
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translation</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="mathematics.vector.xyz">
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="mathematics.vector.zeros">
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mathematics.html#vector.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#mathematics.vector.zeros" title="Permalink to this definition"></a></dt>
<dd><p>Returns a zero vector of length m or matrix of size rows, n
columns filled with zeros.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) length of the vector, e. g. 3</p>
</dd>
<dt class="field-even">Example</dt>
<dd class="field-even"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[0.0, 0.0, 0.0]</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
</div>

View File

@@ -36,22 +36,31 @@
<h1>pylib<a class="headerlink" href="#pylib" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="data.html">data module</a></li>
<li class="toctree-l1"><a class="reference internal" href="date.html">date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="function.html">function module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry.html">geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="geometry_plot.html">geometry_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="mathematics.html">mathematics module</a></li>
<li class="toctree-l1"><a class="reference internal" href="numerical.html">numerical package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.fit">numerical.fit module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.integration">numerical.integration module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.ode">numerical.ode module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical.ode_model">numerical.ode_model module</a></li>
<li class="toctree-l2"><a class="reference internal" href="numerical.html#module-numerical">Module contents</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.html">pylib package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pylib.numerical.html">pylib.numerical package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#module-pylib.numerical.fit">pylib.numerical.fit module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#module-pylib.numerical.integration">pylib.numerical.integration module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#module-pylib.numerical.ode">pylib.numerical.ode module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#module-pylib.numerical.ode_model">pylib.numerical.ode_model module</a></li>
<li class="toctree-l4"><a class="reference internal" href="pylib.numerical.html#module-pylib.numerical">Module contents</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.data">pylib.data module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.date">pylib.date module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.drawblock">pylib.drawblock module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.function">pylib.function module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.geometry">pylib.geometry module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.geometry_plot">pylib.geometry_plot module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.mathematics">pylib.mathematics module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib.time_of_day">pylib.time_of_day module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#module-pylib">Module contents</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="time_of_day.html">time_of_day module</a></li>
</ul>
</div>
</div>

Binary file not shown.

View File

@@ -105,7 +105,7 @@
<td></td>
<td>
<a href="pylib.html#module-mathematics"><code class="xref">mathematics</code></a> <em>(*nix, Windows)</em></td><td>
<em>Mathematical functions.</em></td></tr>
<em>Mathematical functions and objects.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-n"><td></td><td>
<strong>n</strong></td><td></td></tr>
@@ -167,6 +167,11 @@
<td>&#160;&#160;&#160;
<a href="pylib.html#module-pylib.date"><code class="xref">pylib.date</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.html#module-pylib.drawblock"><code class="xref">pylib.drawblock</code></a></td><td>
<em></em></td></tr>
<tr class="cg-2">
<td></td>
<td>&#160;&#160;&#160;

View File

@@ -351,13 +351,37 @@ between consecutive terms).</p></li>
</dl>
</dd></dl>
</div>
<div class="section" id="module-pylib.drawblock">
<span id="pylib-drawblock-module"></span><h2>pylib.drawblock module<a class="headerlink" href="#module-pylib.drawblock" title="Permalink to this headline"></a></h2>
<dl class="function">
<dt id="pylib.drawblock.histogram">
<code class="sig-name descname">histogram</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">x=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/drawblock.html#histogram"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.drawblock.histogram" title="Permalink to this definition"></a></dt>
<dd><p>Histogram chart with block symbols.</p>
<dl class="simple">
<dt>dots:</dt><dd><p>,_,
<a href="#id7"><span class="problematic" id="id8">|8|</span></a>
<a href="#id9"><span class="problematic" id="id10">|7|</span></a>
<a href="#id11"><span class="problematic" id="id12">|6|</span></a>
<a href="#id13"><span class="problematic" id="id14">|5|</span></a>
<a href="#id15"><span class="problematic" id="id16">|4|</span></a>
<a href="#id17"><span class="problematic" id="id18">|3|</span></a>
<a href="#id19"><span class="problematic" id="id20">|2|</span></a>
<a href="#id21"><span class="problematic" id="id22">|1|</span></a>
<a href="#id1"><span class="problematic" id="id2">``</span></a><a href="#id3"><span class="problematic" id="id4">`</span></a></p>
</dd>
</dl>
<p>▁▂▃▄▅▆▇█
12345678</p>
</dd></dl>
</div>
<div class="section" id="module-pylib.function">
<span id="pylib-function-module"></span><h2>pylib.function module<a class="headerlink" href="#module-pylib.function" title="Permalink to this headline"></a></h2>
<p>Mathematical equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-11-04</p>
<dd class="field-odd"><p>2019-11-15</p>
</dd>
</dl>
<span class="target" id="module-function"></span><dl class="function">
@@ -565,9 +589,9 @@ which are normed to the range of [0, 1] to</p>
<li><p><strong>w</strong> (<em>int</em>) number of chars in horizontal direction</p></li>
<li><p><strong>char_set</strong> (<em>str</em>) either “braille” or “block”. “braille” uses Unicode
Characters in the Braille Patterns Block (fisrt index U+2800, last
index U+28FF <a class="reference internal" href="#cudb" id="id1"><span>[CUDB]</span></a>) and the “block” uses part of the Unicode
index U+28FF <a class="reference internal" href="#cudb" id="id5"><span>[CUDB]</span></a>) and the “block” uses part of the Unicode
Characters in the Block Elements Block (fisrt index U+2580, last
index U+259F <a class="reference internal" href="#cudb" id="id2"><span>[CUDB]</span></a>). Alias for braille is line and alias for
index U+259F <a class="reference internal" href="#cudb" id="id6"><span>[CUDB]</span></a>). Alias for braille is line and alias for
block is histogram</p></li>
</ul>
</dd>
@@ -671,7 +695,7 @@ Example of 3 columns and 3 rows (upside down view of normal braille/drawil
</div>
<p class="rubric">References</p>
<dl class="citation">
<dt class="label" id="cudb"><span class="brackets">CUDB</span><span class="fn-backref">(<a href="#id1">1</a>,<a href="#id2">2</a>)</span></dt>
<dt class="label" id="cudb"><span class="brackets">CUDB</span><span class="fn-backref">(<a href="#id5">1</a>,<a href="#id6">2</a>)</span></dt>
<dd><p><a class="reference external" href="ftp://ftp.unicode.org/Public/UNIDATA/Blocks.txt">Unicode Database - Blocks</a></p>
</dd>
</dl>
@@ -1144,10 +1168,10 @@ around a given origin. The angle should be given in radians.</p>
</div>
<div class="section" id="module-pylib.mathematics">
<span id="pylib-mathematics-module"></span><h2>pylib.mathematics module<a class="headerlink" href="#module-pylib.mathematics" title="Permalink to this headline"></a></h2>
<p>Mathematical functions.</p>
<p>Mathematical functions and objects.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-10-30</p>
<dd class="field-odd"><p>2019-12-12</p>
</dd>
</dl>
<span class="target" id="module-mathematics"></span><dl class="function">
@@ -1156,6 +1180,562 @@ around a given origin. The angle should be given in radians.</p>
<dd><p>Compute the lowest common multiple of a and b</p>
</dd></dl>
<dl class="class">
<dt id="pylib.mathematics.matrix">
<em class="property">class </em><code class="sig-name descname">matrix</code><a class="reference internal" href="_modules/pylib/mathematics.html#matrix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create matrix like list of lists</p>
<dl class="method">
<dt id="pylib.mathematics.matrix.rotate_x">
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rotate_x" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the x dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.rotate_y">
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rotate_y" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the y dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx &amp; yy &amp; yz &amp; t_y \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.rotate_z">
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rotate_z" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the z dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.rx">
<em class="property">static </em><code class="sig-name descname">rx</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rx"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rx" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the x direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{x}(\theta) =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.ry">
<em class="property">static </em><code class="sig-name descname">ry</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.ry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.ry" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the y direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{y}(\theta) =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.rz">
<em class="property">static </em><code class="sig-name descname">rz</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rz" title="Permalink to this definition"></a></dt>
<dd><p>Rotation matrix about the z direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
\cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\
\sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
0 &amp; -1 &amp; 0 &amp; 0 \\
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}0 \\ 1 \\ 0 \\ 1\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.s">
<em class="property">static </em><code class="sig-name descname">s</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.s"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.s" title="Permalink to this definition"></a></dt>
<dd><p>Scaling matrix</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}S =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.scale">
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.scale" title="Permalink to this definition"></a></dt>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
yx' &amp; yy' &amp; yz' &amp; t_y' \\
zx' &amp; zy' &amp; zz' &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.t">
<em class="property">static </em><code class="sig-name descname">t</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.t"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.t" title="Permalink to this definition"></a></dt>
<dd><p>Translation matrix</p>
<div class="math notranslate nohighlight">
\[\begin{split}T =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.translate">
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translation</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x' \\
yx &amp; yy &amp; yz &amp; t_y' \\
zx &amp; zy &amp; zz &amp; t_z' \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}
xx &amp; xy &amp; xz &amp; t_x \\
yx &amp; yy &amp; yz &amp; t_y \\
zx &amp; zy &amp; zz &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; h
\end{bmatrix}\end{split}\]</div>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.mathematics.vector">
<em class="property">class </em><code class="sig-name descname">vector</code><a class="reference internal" href="_modules/pylib/mathematics.html#vector"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create vector like lists</p>
<ul class="simple">
<li><p>size -&gt; len(a)</p></li>
<li><p>abs -&gt; abs(a)</p></li>
<li><p>dot -&gt; a * b</p></li>
<li><p>outer -&gt; a &#64; b</p></li>
</ul>
<p>use super constructor</p>
<p>use super __iter__</p>
<p>use super __setitem__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1, 2, 3, 1, 2]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">vector</span><span class="p">)</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __lt__(a, b)</p>
<p>use super __le__(a, b)</p>
<p>use super __eq__(a, b)</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">==</span> <span class="n">v2</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __ne__(a, b)</p>
<p>use super __ge__(a, b)</p>
<p>use super __gt__(a, b)</p>
<p>use super __contains__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
<p>__isub__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">-=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[-2, -1, 0]</span>
</pre></div>
</div>
<p>__imul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">18</span>
</pre></div>
</div>
<p>__imatmul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
</pre></div>
</div>
<dl class="method">
<dt id="pylib.mathematics.vector.abs">
<em class="property">static </em><code class="sig-name descname">abs</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.abs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.abs" title="Permalink to this definition"></a></dt>
<dd><p>Return modulus parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.ang">
<em class="property">static </em><code class="sig-name descname">ang</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ang"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ang" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.arg">
<em class="property">static </em><code class="sig-name descname">arg</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.arg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.arg" title="Permalink to this definition"></a></dt>
<dd><p>Return phase parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.ch_cs">
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ch_cs" title="Permalink to this definition"></a></dt>
<dd><p>Transform this vector from its defined coordinate system to a
new coordinate system, defined by the given coordinate system (u,
v and w direction vectors).</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
u_x &amp; u_y &amp; u_z &amp; 0 \\
v_x &amp; v_y &amp; v_z &amp; 0 \\
w_x &amp; w_y &amp; w_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.conjugate">
<em class="property">static </em><code class="sig-name descname">conjugate</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.conjugate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.conjugate" title="Permalink to this definition"></a></dt>
<dd><p>New vector object</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.cross">
<em class="property">static </em><code class="sig-name descname">cross</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.cross"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.cross" title="Permalink to this definition"></a></dt>
<dd><p>Cross product</p>
<dl class="field-list simple">
</dl>
<p>c is orthogonal to both a and b.
The direction of c can be found with the right-hand rule.</p>
<div class="math notranslate nohighlight">
\[\vec{c} = \vec{a} \times \vec{b}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.full">
<em class="property">static </em><code class="sig-name descname">full</code><span class="sig-paren">(</span><em class="sig-param">length</em>, <em class="sig-param">fill_value</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.full"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.full" title="Permalink to this definition"></a></dt>
<dd><p>Returns a vector of length m or matrix of size m rows, n
columns filled with v.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>length</strong> (<em>int</em>) length of the vector, e. g. 3</p></li>
<li><p><strong>fill_value</strong> Fill value</p></li>
</ul>
</dd>
<dt class="field-even">Type fill_value</dt>
<dd class="field-even"><p>scalar</p>
</dd>
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[7, 7, 7]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.im">
<em class="property">static </em><code class="sig-name descname">im</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.im"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.im" title="Permalink to this definition"></a></dt>
<dd><p>Return the imaginary parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.normalize">
<em class="property">static </em><code class="sig-name descname">normalize</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.normalize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.normalize" title="Permalink to this definition"></a></dt>
<dd><p>Normalize a vector (i. e. the vector has a length of 1)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}\]</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">norm()</span></code> for a norm (magnitude) of a vector</p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.ones">
<em class="property">static </em><code class="sig-name descname">ones</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ones"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ones" title="Permalink to this definition"></a></dt>
<dd><p>Returns a vector of length m or matrix of size rows, n
columns filled with ones.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) lhape of the vector, e. g. 3</p>
</dd>
<dt class="field-even">Example</dt>
<dd class="field-even"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">ones</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1.0, 1.0, 1.0]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.random">
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">shape</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.random" title="Permalink to this definition"></a></dt>
<dd><p>Returns a random vector of length n or matrix of size m rows, n
columns filled with random numbers.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.re">
<em class="property">static </em><code class="sig-name descname">re</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.re"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.re" title="Permalink to this definition"></a></dt>
<dd><p>Return the real parts of a complex vector</p>
<dl class="field-list simple">
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.rotate_x">
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.rotate_x" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the x dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
0 &amp; \sin \theta &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.rotate_y">
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.rotate_y" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the y dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
-\sin \theta &amp; 0 &amp; \cos \theta &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.rotate_z">
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.rotate_z" title="Permalink to this definition"></a></dt>
<dd><p>Rotation about the z dirction.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.scale">
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.scale" title="Permalink to this definition"></a></dt>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; s_z &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.translate">
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.translate" title="Permalink to this definition"></a></dt>
<dd><p>Translation</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
0 &amp; 0 &amp; 1 &amp; t_z \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.xyz">
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.zeros">
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.zeros" title="Permalink to this definition"></a></dt>
<dd><p>Returns a zero vector of length m or matrix of size rows, n
columns filled with zeros.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) length of the vector, e. g. 3</p>
</dd>
<dt class="field-even">Example</dt>
<dd class="field-even"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[0.0, 0.0, 0.0]</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-pylib.time_of_day">
<span id="pylib-time-of-day-module"></span><h2>pylib.time_of_day module<a class="headerlink" href="#module-pylib.time_of_day" title="Permalink to this headline"></a></h2>

File diff suppressed because one or more lines are too long

View File

@@ -4,11 +4,4 @@ pylib
.. toctree::
:maxdepth: 4
data
date
function
geometry
geometry_plot
mathematics
numerical
time_of_day
pylib

View File

@@ -27,6 +27,14 @@ pylib.date module
:undoc-members:
:show-inheritance:
pylib.drawblock module
----------------------
.. automodule:: pylib.drawblock
:members:
:undoc-members:
:show-inheritance:
pylib.function module
---------------------

View File

@@ -1,12 +1,12 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Mathematical functions.
"""Mathematical functions and objects.
:Date: 2019-10-30
:Date: 2019-12-12
.. module:: mathematics
:platform: *nix, Windows
:synopsis: Mathematical functions.
:synopsis: Mathematical functions and objects.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
@@ -15,3 +15,911 @@ from math import gcd
def lcm(a, b):
"""Compute the lowest common multiple of a and b"""
return a/gcd(a, b)*b
class vector(list):
"""Use/create vector like lists
* size -> len(a)
* abs -> abs(a)
* dot -> a * b
* outer -> a @ b
use super constructor
use super __iter__
use super __setitem__
>>> v = vector([1,2,3,4,5])
>>> v[3:5] = [1,2]
>>> print(v)
[1, 2, 3, 1, 2]
>>> isinstance(v, vector)
True
use super __lt__(a, b)
use super __le__(a, b)
use super __eq__(a, b)
>>> v = vector([1,2,3,1,2])
>>> v2 = vector([1,2,3,1,2])
>>> v == v2
True
use super __ne__(a, b)
use super __ge__(a, b)
use super __gt__(a, b)
use super __contains__
>>> 2 in vector([1,2,3])
True
__isub__
>>> v = vector([1,2,3])
>>> v -= vector([3,3,3])
>>> print(v)
[-2, -1, 0]
__imul__
>>> v = vector([1,2,3])
>>> v *= vector([3,3,3])
>>> print(v)
18
__imatmul__
>>> m = vector([1,2,3])
>>> m *= vector([3,3,3])
>>> print(v)
[[3, 3, 3], [6, 6, 6], [9, 9, 9]]
"""
def __getitem__(self, index):
"""
For index return value, for range return new vector object.
:Example:
>>> v = vector([1, 2, 3, 4, 5])
>>> v[1:3]
[2, 3]
>>> v = vector([1, 2, 3, 4, 5])
>>> v[3]
4
"""
# use the list.__getslice__ method and convert result to vector
item = super().__getitem__(index)
return vector(item) if isinstance(item, list) else item
def __pos__(self):
"""+ a (new object)
"""
return vector([*self])
def __neg__(self):
"""- a (new object)
"""
return vector([-i for i in self])
def __add__(self, other):
"""a + b (new object)
:Example:
>>> v = vector([1,2,3]) + vector([1,2,3])
>>> print(v)
[2, 4, 6]
"""
return vector([i+j for i, j in zip(self, other)])
def __iadd__(self, other):
"""a += b (new object)
:Example:
>>> v = vector([1,2,3])
>>> v += vector([3,3,3])
>>> print(v)
[4, 5, 6]
"""
return vector([i+j for i, j in zip(self, other)])
def __sub__(self, other):
"""a - b (new object)
:Example:
>>> v = vector([1,2,3]) - vector([1,2,3])
>>> print(v)
[0, 0, 0]
"""
return vector([i-j for i, j in zip(self, other)])
def __mul__(self, other):
r"""Scalar multiplication, dot product (inner product) or
vector-matrix multiplication.
a * b (new object)
:type other: scalar, vector (or 1d list), matrix (or 2d list)
.. math::
\mathbf{c} &= \mathbf{a} \cdot b \\
\mathbf{c} &= \mathbf{a} \cdot \mathbf{b} \\
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B}
.. note::
No size checking will be conducted, therefore no exceptions for
wrong usage (result will be nonsense).
:Example:
>>> v = vector([1,2,3,4,5])*3
>>> print(v)
[3, 6, 9, 12, 15]
>>> v = vector([1,2,3,4,5])*3.
>>> print(v)
[3.0, 6.0, 9.0, 12.0, 15.0]
>>> s = vector([1,2,3])*vector([1,2,3])
>>> print(s)
14
.. seealso::
:meth:`__rmul__`
"""
try: # vector * vector
return sum([i*j for i, j in zip(self, other)])
except:
try: # vector * matrix
return vector([sum(c*d for c, d in zip(self, b_col)) for b_col in zip(*other)])
except: # vector * scalar
return vector([i*other for i in self])
def __rmul__(self, other):
r"""Scalar multiplication, dot product (inner product) or
matrix-vector multiplication.
a * b (new object)
:type other: scalar (or 1d list and 2d list)
.. math::
\mathbf{c} &= a \cdot \mathbf{b} \\
\mathbf{c} &= \mathbf{a} \cdot \mathbf{b} \\
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b}
.. note::
No size checking will be conducted, therefore no exceptions for
wrong usage (result will be nonsense).
:Example:
>>> v = 3*vector([1,2,3,4,5])
>>> print(v)
[3, 6, 9, 12, 15]
>>> v = 3.*vector([1,2,3,4,5])
>>> print(v)
[3.0, 6.0, 9.0, 12.0, 15.0]
.. seealso::
:meth:`__mul__`
:meth:`matrix.__mul__` for matrix * vector
"""
try: # 2d list * vector (matrix * vector see matrix.__mul__)
return vector([sum(c*d for c, d in zip(a_row, self)) for a_row in other])
except: # scalar * vector
return self*other
def __matmul__(self, other):
r"""Outer product a @ b (new object)
.. math::
\vec{a} \otimes \vec{b}
=
\begin{pmatrix}
a_{1}\\
a_{2}\\
a_{3}
\end{pmatrix}
\otimes
\begin{pmatrix}
b_{1}\\
b_{2}\\
b_{3}
\end{pmatrix}
=
\begin{pmatrix}
a_{1}b_{1}&a_{1}b_{2}&a_{1}b_{3}\\
a_{2}b_{1}&a_{2}b_{2}&a_{2}b_{3}\\
a_{3}b_{1}&a_{3}b_{2}&a_{3}b_{3}
\end{pmatrix}
:Example:
>>> m = vector([1,2,3]) @ vector([1,2,4])
>>> print(m)
[[1, 2, 4], [2, 4, 8], [3, 6, 12]]
"""
try: # vector * vector
return matrix([[i*j for j in other] for i in self])
except: # vector * number
return self*other
def __abs__(self):
r"""Magnitude / norm of a vector
.. math::
b = \sqrt{\sum a_i^2}
:Example:
>>> norm([3, 4])
5
>>> norm(vector([3, 4]))
5
"""
return math.sqrt(self * self)
def __str__(self):
return str([*self])
def __repr__(self):
return "vector(" + str(self) + ")"
@staticmethod
def full(length, fill_value):
"""Returns a vector of length m or matrix of size m rows, n
columns filled with v.
:param length: length of the vector, e. g. 3
:type length: int
:param fill_value: Fill value
:Type fill_value: scalar
:Example:
>>> v = vector.full(3, 7)
>>> print(v)
[7, 7, 7]
"""
return vector([fill_value for i in range(length)])
@staticmethod
def zeros(length):
"""Returns a zero vector of length m or matrix of size rows, n
columns filled with zeros.
:param length: length of the vector, e. g. 3
:type length: int
:Example:
>>> v = zeros(3)
>>> print(v)
[0.0, 0.0, 0.0]
"""
return vector.full(length, 0.)
@staticmethod
def ones(length):
"""Returns a vector of length m or matrix of size rows, n
columns filled with ones.
:param length: lhape of the vector, e. g. 3
:type length: int
:Example:
>>> v = ones(3)
>>> print(v)
[1.0, 1.0, 1.0]
"""
return vector.full(length, 1.)
@staticmethod
def random(shape, lmin=0.0, lmax=1.0):
"""Returns a random vector of length n or matrix of size m rows, n
columns filled with random numbers.
:Example:
>>> v = random(3)
>>> print(v)
[0.9172905912930438, 0.8908124278322492, 0.5256002790725927]
>>> v = random(3, 1, 2)
>>> print(v)
[1.2563665665080803, 1.9270454509964547, 1.2381672401270487]
"""
import random
dl = lmax-lmin
return vector([dl*random.random()+lmin for i in range(shape)])
@staticmethod
def normalize(a):
r"""Normalize a vector (i. e. the vector has a length of 1)
:type a: vector
.. math::
\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}
.. seealso::
:meth:`norm` for a norm (magnitude) of a vector
"""
a_mag = abs(a)
return vector([i/a_mag for i in a])
@staticmethod
def ang(a, b):
return math.acos(a * b / (abs(a) * abs(b)))
@staticmethod
def conjugate(a):
"""
New vector object
:type a: list
"""
return vector([i.conjugate() for i in a])
@staticmethod
def re(a):
"""Return the real parts of a complex vector
:type a: list
"""
return vector([i.real for i in a])
@staticmethod
def im(a):
"""Return the imaginary parts of a complex vector
:type a: list
"""
return vector([i.imag for i in a])
@staticmethod
def abs(a):
"""Return modulus parts of a complex vector
:type a: list
"""
return vector([abs(i) for i in a])
@staticmethod
def arg(a):
"""Return phase parts of a complex vector
:type a: list
"""
return vector([math.atan2(i.imag, i.real) for i in a])
@staticmethod
def cross(a, b):
r"""Cross product
:type a: list
:type b: list
c is orthogonal to both a and b.
The direction of c can be found with the right-hand rule.
.. math::
\vec{c} = \vec{a} \times \vec{b}
"""
return [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]]
def xyz(self):
return self[:3]
def rotate_x(self, theta):
r"""Rotation about the x dirction.
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & \cos \theta & -\sin \theta & 0 \\
0 & \sin \theta & \cos \theta & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
self[:] = matrix.rx(theta) * self
return self
def rotate_y(self, theta):
r"""Rotation about the y dirction.
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta & 0 & \sin \theta & 0 \\
0 & 1 & 0 & 0 \\
-\sin \theta & 0 & \cos \theta & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
self[:] = matrix.ry(theta) * self
return self
def rotate_z(self, theta):
r"""Rotation about the z dirction.
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
\cos \theta & -\sin \theta & 0 & 0 \\
\sin \theta & \cos \theta & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
self[:] = matrix.rz(theta) * self
return self
def translate(self, tx, ty, tz):
r"""Translation
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 & t_x \\
0 & 1 & 0 & t_y \\
0 & 0 & 1 & t_z \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
self[:] = matrix.t(tx, ty, tz) * self
return self
def scale(self, sx, sy=None, sz=None):
r"""Scaling
uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when it's located at the origin, or
perform a translation afterwards to move the object back to where
it should be.
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
s_x & 0 & 0 & 0 \\
0 & s_y & 0 & 0 \\
0 & 0 & s_z & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
if not sy:
sy = sx
sz = sx
self[:] = matrix.s(sx, sy, sz) * self
return self
def ch_cs(self, cs):
r"""Transform this vector from its defined coordinate system to a
new coordinate system, defined by the given coordinate system (u,
v and w direction vectors).
.. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
u_x & u_y & u_z & 0 \\
v_x & v_y & v_z & 0 \\
w_x & w_y & w_z & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
"""
self[:] = cs * self
return self
class matrix(list):
"""Use/create matrix like list of lists
"""
def __getitem__(self, index):
"""
For index return value, for range return new vector object.
:Example:
>>> m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]])
>>> print(m[2])
[7, 8, 9, 0]
>>> print(m[:,1:3])
[[2, 3], [5, 6], [8, 9], [0, 0]]
>>> print(m[0:2,1:3])
[[2, 3], [5, 6]]
>>> print(m[::2,::2])
[[1, 3], [7, 9]]
"""
# index: slice(stop), slice(start, stop[, step])
# for e. g. m[(1,3),:] -> index = ((1, 3), slice(None, None, None))
# use the list.__getslice__ method and convert result to vector
try: # 2d slicing (tuple of sclices)
item = [row.__getitem__(index[1]) for row in super().__getitem__(index[0])]
except: # 1d slicing
item = super().__getitem__(index)
return matrix(item) if isinstance(item, list) else item
@staticmethod
def rx(theta):
r"""Rotation matrix about the x direction.
Rotates the coordinate system of vectors
.. math::
R_{x}(\theta) =
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & \cos \theta & -\sin \theta & 0 \\
0 & \sin \theta & \cos \theta & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
"""
s = math.sin(theta)
c = math.cos(theta)
T = matrix([[ 1, 0, 0, 0],
[ 0, c,-s, 0],
[ 0, s, c, 0],
[ 0, 0, 0, 1]])
return T
@staticmethod
def ry(theta):
r"""Rotation matrix about the y direction.
Rotates the coordinate system of vectors
.. math::
R_{y}(\theta) =
\begin{bmatrix}
\cos \theta & 0 & \sin \theta & 0 \\
0 & 1 & 0 & 0 \\
-\sin \theta & 0 & \cos \theta & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
"""
s = math.sin(theta)
c = math.cos(theta)
T = matrix([[ c, 0, s, 0],
[ 0, 1, 0, 0],
[-s, 0, c, 0],
[ 0, 0, 0, 1]])
return T
@staticmethod
def rz(theta):
r"""Rotation matrix about the z direction.
Rotates the coordinate system of vectors
.. math::
R_{z}(\theta) =
\begin{bmatrix}
\cos \theta & -\sin \theta & 0 & 0 \\
\sin \theta & \cos \theta & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
:Example:
.. math::
R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
\cos 90° & -\sin 90° & 0 & 0 \\
\sin 90° & \cos 90° & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}
0 & -1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}0 \\ 1 \\ 0 \\ 1\end{bmatrix}
"""
s = math.sin(theta)
c = math.cos(theta)
T = matrix([[ c,-s, 0, 0],
[ s, c, 0, 0],
[ 0, 0, 1, 0],
[ 0, 0, 0, 1]])
return T
@staticmethod
def t(tx, ty, tz):
r"""Translation matrix
.. math::
T =
\begin{bmatrix}
1 & 0 & 0 & t_x \\
0 & 1 & 0 & t_y \\
0 & 0 & 1 & t_z \\
0 & 0 & 0 & 1
\end{bmatrix}
"""
T = matrix([[ 1, 0, 0,tx],
[ 0, 1, 0,ty],
[ 0, 0, 1,tz],
[ 0, 0, 0, 1]])
return T
@staticmethod
def s(sx, sy=None, sz=None):
r"""Scaling matrix
uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when it's located at the origin, or
perform a translation afterwards to move the object back to where
it should be.
.. math::
S =
\begin{bmatrix}
s_x & 0 & 0 & 0 \\
0 & s_y & 0 & 0 \\
0 & 0 & s_z & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
"""
if not sy:
sy = sx
sz = sx
T = matrix([[sx, 0, 0, 0],
[ 0,sy, 0, 0],
[ 0, 0,sz, 0],
[ 0, 0, 0, 1]])
return T
def __mul__(self, other):
r"""Scalar multiplication, dot product (inner product) or
matrix-vector multiplication.
a * b (new object)
:type other: scalar, vector (or 1d list), matrix (or 2d list)
.. math::
\mathbf{C} &= \mathbf{A} \cdot b \\
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
.. note::
No size checking will be conducted, therefore no exceptions for
wrong usage (result will be nonsense).
:Example:
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5
>>> print(m)
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5.
>>> print(m)
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
>>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13])
>>> print(v)
[75, 186, 297]
>>> m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])
>>> print(m)
[[91, 96, 102], [220, 231, 246], [349, 366, 390]]
.. seealso::
:meth:`__rmul__`
"""
try: # matrix * matrix
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for b_col in zip(*other)] for a_row in self])
except:
try: # matrix * vector
return vector([sum(c*d for c, d in zip(a_row, other)) for a_row in self])
except: # matrix * scalar
return matrix([[a*other for a in a_row] for a_row in self])
def __rmul__(self, other):
r"""Scalar multiplication, dot product (inner product) or
vector-matrix multiplication.
a * b (new object)
:type other: scalar (or 1d list and 2d list)
.. math::
\mathbf{C} &= a \cdot \mathbf{B} \\
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
.. note::
No size checking will be conducted, therefore no exceptions for
wrong usage (result will be nonsense).
:Example:
>>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5
>>> print(m)
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
>>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]])
>>> print(m)
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
.. seealso::
:meth:`__mul__`
:meth:`vector.__mul__` for vector * matrix
"""
try: # 2d list * matrix (matrix * matrix see matrix.__mul__)
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for b_col in zip(*self)] for a_row in other])
except:
try: # 1d list * matrix (vector * matrix see vector.__mul__)
return vector([sum(c*d for c, d in zip(other, b_col)) for b_col in zip(*self)])
except: # scalar * vector
return self*other
def __str__(self):
return str([*self])
def __repr__(self):
return "matrix(" + str(self) + ")"
def rotate_x(self, theta):
r"""Rotation about the x dirction.
.. math::
\begin{bmatrix}
xx & xy & xz & t_x \\
yx' & yy' & yz' & t_y' \\
zx' & zy' & zz' & t_z' \\
0 & 0 & 0 & h
\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & \cos \theta & -\sin \theta & 0 \\
0 & \sin \theta & \cos \theta & 0 \\
0 & 0 & 0 & h
\end{bmatrix}
\begin{bmatrix}
xx & xy & xz & t_x \\
yx & yy & yz & t_y \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix}
"""
self[:] = matrix.rx(theta) * self
return self
def rotate_y(self, theta):
r"""Rotation about the y dirction.
.. math::
\begin{bmatrix}
xx' & xy' & xz' & t_x' \\
yx & yy & yz & t_y \\
zx' & zy' & zz' & t_z' \\
0 & 0 & 0 & h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta & 0 & \sin \theta & 0 \\
0 & 1 & 0 & 0 \\
-\sin \theta & 0 & \cos \theta & 0 \\
0 & 0 & 0 & h
\end{bmatrix}
\begin{bmatrix}
xx & xy & xz & t_x \\
yx & yy & yz & t_y \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix}
"""
self[:] = matrix.ry(theta) * self
return self
def rotate_z(self, theta):
r"""Rotation about the z dirction.
.. math::
\begin{bmatrix}
xx' & xy' & xz' & t_x' \\
yx' & yy' & yz' & t_y' \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix} =
\begin{bmatrix}
\cos \theta & -\sin \theta & 0 & 0 \\
\sin \theta & \cos \theta & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
xx & xy & xz & t_x \\
yx & yy & yz & t_y \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix}
"""
self[:] = matrix.rz(theta) * self
return self
def translate(self, tx, ty, tz):
r"""Translation
.. math::
\begin{bmatrix}
xx & xy & xz & t_x' \\
yx & yy & yz & t_y' \\
zx & zy & zz & t_z' \\
0 & 0 & 0 & h
\end{bmatrix} =
\begin{bmatrix}
1 & 0 & 0 & t_x \\
0 & 1 & 0 & t_y \\
0 & 0 & 1 & t_z \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
xx & xy & xz & t_x \\
yx & yy & yz & t_y \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix}
"""
self[:] = matrix.t(tx, ty, tz) * self
return self
def scale(self, sx, sy=None, sz=None):
r"""Scaling
uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when it's located at the origin, or
perform a translation afterwards to move the object back to where
it should be.
.. math::
\begin{bmatrix}
xx' & xy' & xz' & t_x' \\
yx' & yy' & yz' & t_y' \\
zx' & zy' & zz' & t_z' \\
0 & 0 & 0 & h
\end{bmatrix} =
\begin{bmatrix}
s_x & 0 & 0 & 0 \\
0 & s_y & 0 & 0 \\
0 & 0 & s_z & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
xx & xy & xz & t_x \\
yx & yy & yz & t_y \\
zx & zy & zz & t_z \\
0 & 0 & 0 & h
\end{bmatrix}
"""
if not sy:
sy = sx
sz = sx
self[:] = matrix.s(sx, sy, sz) * self
return self