change data, mathematics, function, geometry and geometry_plot_pylab. add data_step, data_step_std and helper. add an example and more documentation.

inside the data module rename read to read_columns add add new read function to read the whole file as string. add print_list function to print one element per line. add unique_list and unique_list_hashable to reduce the list into a unique list with same order. add find_last, str_between, str_to_list functions.

inside the mathematics module for vector add normalized creating a new object (normalize will change the object), isclose and iscloseto, change ang to round internal number. for matrix improve slicing and add transposed creating a new object (transpose will change object).

inside the function module add b_spline_basis, b_spline_curve_with_knots and b_spline_knots functions. add sample_hal_open and sample_half_open_seq. add circle and ellipse.

inside the geometry module change CS init from using lists to Directions and add new constructor CS.init_xzy using lists. rename Wireframe to Polyline. add classes B_spline_curve_with_knots, Ellipse, ArcCircle, ArcEllipse, ArcBSplineCurveWithKnots. add function sample_half_open to create a list of Points.

inside the geometry_plot_pylab module change the help text.

add step_and data data_step_std module to read a step file to list and draw the content.

add helper module with context manager and decorator timeit to meassure the time for a section or function.

add example for b_spline function.
This commit is contained in:
2020-01-08 21:59:53 +01:00
parent 4b42d7b508
commit 4fc4903dc2
56 changed files with 8756 additions and 947 deletions

View File

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: caf5792fd17da2c604992977d35f1f60
config: 2580fd671a06d4c76900a6be80ac7ca7
tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@@ -34,6 +34,8 @@
<h1>All modules for which code is available</h1>
<ul><li><a href="pylib/data.html">pylib.data</a></li>
<li><a href="pylib/data_step.html">pylib.data_step</a></li>
<li><a href="pylib/data_step_std.html">pylib.data_step_std</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>
@@ -41,6 +43,7 @@
<li><a href="pylib/geometry2d.html">pylib.geometry2d</a></li>
<li><a href="pylib/geometry2d_plot.html">pylib.geometry2d_plot</a></li>
<li><a href="pylib/geometry_plot_pylab.html">pylib.geometry_plot_pylab</a></li>
<li><a href="pylib/helper.html">pylib.helper</a></li>
<li><a href="pylib/mathematics.html">pylib.mathematics</a></li>
<li><a href="pylib/numerical/fit.html">pylib.numerical.fit</a></li>
<li><a href="pylib/numerical/integration.html">pylib.numerical.integration</a></li>

View File

@@ -35,9 +35,10 @@
<h1>Source code for pylib.data</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;Read and write data to or from file and manipulate data structures.</span>
<span class="sd">&quot;&quot;&quot;Read and write data to or from file and manipulate data</span>
<span class="sd">structures.</span>
<span class="sd">:Date: 2019-10-11</span>
<span class="sd">:Date: 2019-12-28</span>
<span class="sd">.. module:: data</span>
<span class="sd"> :platform: *nix, Windows</span>
@@ -48,6 +49,7 @@
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">collections</span>
<span class="kn">import</span> <span class="nn">re</span>
<div class="viewcode-block" id="issequence"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.issequence">[docs]</a><span class="k">def</span> <span class="nf">issequence</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -78,11 +80,25 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">abc</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span></div>
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</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>
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Read ascii data file.</span>
<span class="sd"> :param filename: file to read</span>
<span class="sd"> :type filename: str</span>
<span class="sd"> :returns: file content</span>
<span class="sd"> :rtype: str</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">file_str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">file_str</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">return</span> <span class="n">file_str</span></div>
<div class="viewcode-block" id="read_columns"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read_columns">[docs]</a><span class="k">def</span> <span class="nf">read_columns</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</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="sd">&quot;&quot;&quot;Read ascii data file.</span>
<span class="sd"> :param file_name: file to read</span>
<span class="sd"> :type file_name: str</span>
<span class="sd"> :param x_column: column index for the x data (first column is 0)</span>
<span class="sd"> :type x_column: int</span>
<span class="sd"> :param y_column: column index for the y data (first column is 0)</span>
@@ -95,8 +111,6 @@
<span class="sd"> :returns: x and y</span>
<span class="sd"> :rtype: tuple(list, list)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">default</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">default</span>
@@ -167,6 +181,14 @@
<span class="c1"># every dump needs a load</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">object_data</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span></div>
<div class="viewcode-block" id="print_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.print_list">[docs]</a><span class="k">def</span> <span class="nf">print_list</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Print list, one list element per line.</span>
<span class="sd"> :param lst: list to print</span>
<span class="sd"> :type lst: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="p">[</span><span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">]</span></div>
<div class="viewcode-block" id="fold_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.fold_list">[docs]</a><span class="k">def</span> <span class="nf">fold_list</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Convert one-dimensional kx1 array (list) to two-dimensional mxn</span>
<span class="sd"> array. m = k / n</span>
@@ -238,6 +260,24 @@
<span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="nb">round</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">step</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="n">exponent</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">n</span><span class="p">)]</span>
<span class="k">return</span> <span class="n">lst</span></div>
<div class="viewcode-block" id="unique_list_hashable"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_list_hashable">[docs]</a><span class="k">def</span> <span class="nf">unique_list_hashable</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> faster using set() but elements of the sequence must be hashable.</span>
<span class="sd"> unhashable types: &#39;list&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># https://stackoverflow.com/a/37163210</span>
<span class="n">used</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="c1"># .add(x) will always be falsy</span>
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">used</span> <span class="ow">and</span> <span class="p">(</span><span class="n">used</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)]</span></div>
<div class="viewcode-block" id="unique_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_list">[docs]</a><span class="k">def</span> <span class="nf">unique_list</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># https://stackoverflow.com/a/37163210</span>
<span class="n">used</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># .append(x) will always be falsy</span>
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">used</span> <span class="ow">and</span> <span class="p">(</span><span class="n">used</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)]</span></div>
<div class="viewcode-block" id="unique_ending"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_ending">[docs]</a><span class="k">def</span> <span class="nf">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;From id list get list with unique ending.</span>
@@ -249,12 +289,11 @@
<span class="sd"> :returns: unique ending of ids</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">ids</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span></div>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span></div>
<div class="viewcode-block" id="get_id"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.get_id">[docs]</a><span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">uide</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get full id from unique id ending.</span>
@@ -269,6 +308,87 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># take first element, because we know it is a unique ending</span>
<span class="k">return</span> <span class="p">[</span><span class="n">idi</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span> <span class="k">if</span> <span class="n">idi</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">uide</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span></div>
<div class="viewcode-block" id="find_last"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.find_last">[docs]</a><span class="k">def</span> <span class="nf">find_last</span><span class="p">(</span><span class="n">sequence</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Find last last occurance in sequence (text)</span>
<span class="sd"> :param sequence: text to search in</span>
<span class="sd"> :type sequence: str</span>
<span class="sd"> :param pattern: search pattern</span>
<span class="sd"> :type pattern: str</span>
<span class="sd"> :returns: index (-1 if pattern not in sequence)</span>
<span class="sd"> :rtype: int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">pattern</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span> <span class="o">-</span> <span class="n">sequence</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span></div>
<div class="viewcode-block" id="str_between"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.str_between">[docs]</a><span class="k">def</span> <span class="nf">str_between</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get text between two pattern.</span>
<span class="sd"> Text can be multi-line.</span>
<span class="sd"> :param text: text to search in</span>
<span class="sd"> :type text: str</span>
<span class="sd"> :param left: left pattern</span>
<span class="sd"> :type left: str</span>
<span class="sd"> :param right: right pattern</span>
<span class="sd"> :type right: str</span>
<span class="sd"> :returns: text between the left and right pattern</span>
<span class="sd"> :rtype: str</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">left</span><span class="o">+</span><span class="s1">&#39;(.+?)&#39;</span><span class="o">+</span><span class="n">right</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;&#39;</span></div>
<div class="viewcode-block" id="str_to_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.str_to_list">[docs]</a><span class="k">def</span> <span class="nf">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span> <span class="n">newline_replacement</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Converts a string with block information into a list.</span>
<span class="sd"> This function un-wraps multi-line block information into one line.</span>
<span class="sd"> :param string: string with block information</span>
<span class="sd"> :type string: str</span>
<span class="sd"> :param delimiter: block delimiter (default = &#39;;\n&#39;). This will be</span>
<span class="sd"> removed from the resulting list.</span>
<span class="sd"> :type delimiter: str</span>
<span class="sd"> :param newline_replacement: block lines replacement (default = &#39;&#39;)</span>
<span class="sd"> :type newline_replacement: str</span>
<span class="sd"> :returns: list of block information</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> .. note:: Every line is left striped. Empty line are ignored.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> before (string):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;);</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(</span>
<span class="sd"> &#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;</span>
<span class="sd"> ,&#39;Unknown&#39;);</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;));</span>
<span class="sd"> after (list elements one per line):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;)</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(&#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;,&#39;Unknown&#39;)</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># for example blocks are seperated by ;\n</span>
<span class="n">blocks</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">blocks</span><span class="p">:</span>
<span class="c1"># un-wrap block to single line</span>
<span class="c1"># remove \n and replace with newline_replacement</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">newline_replacement</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">row</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span> <span class="k">for</span>
<span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)])</span>
<span class="c1"># append line if True (if it has some content)</span>
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">if</span> <span class="nb">bool</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">else</span> <span class="kc">False</span>
<span class="k">return</span> <span class="n">lines</span></div>
</pre></div>
</div>

View File

@@ -0,0 +1,785 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.data_step &#8212; pylib 2019.12.21 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.data_step</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;STEP reader.</span>
<span class="sd">:Date: 2020-01-03</span>
<span class="sd">.. module:: data_step</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: STEP reader.</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">.data</span> <span class="kn">import</span> <span class="n">read</span><span class="p">,</span> <span class="n">find_last</span><span class="p">,</span> <span class="n">str_between</span><span class="p">,</span> <span class="n">str_to_list</span>
<span class="kn">from</span> <span class="nn">.data_step_std</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">CARTESIAN_POINT</span><span class="p">,</span> <span class="n">VERTEX_POINT</span><span class="p">,</span> <span class="n">DIRECTION</span><span class="p">,</span> <span class="n">VECTOR</span><span class="p">,</span> <span class="n">LINE</span><span class="p">,</span>
<span class="n">AXIS2_PLACEMENT_2D</span><span class="p">,</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">,</span>
<span class="n">SEAM_CURVE</span><span class="p">,</span> <span class="n">EDGE_CURVE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">,</span>
<span class="n">ORIENTED_EDGE</span><span class="p">,</span> <span class="n">EDGE_LOOP</span><span class="p">,</span> <span class="n">ELLIPSE</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
<span class="kn">from</span> <span class="nn">.geometry</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">World</span><span class="p">,</span> <span class="n">Line</span><span class="p">,</span> <span class="n">Point</span><span class="p">,</span> <span class="n">Circle</span><span class="p">,</span> <span class="n">CS</span><span class="p">,</span> <span class="n">ArcCircle</span><span class="p">,</span> <span class="n">ArcEllipse</span><span class="p">,</span> <span class="n">Direction</span><span class="p">,</span>
<span class="n">Polyline</span><span class="p">,</span> <span class="n">Ellipse</span><span class="p">,</span> <span class="n">B_spline_curve_with_knots</span><span class="p">,</span> <span class="n">ArcBSplineCurveWithKnots</span>
<span class="p">)</span>
<div class="viewcode-block" id="step"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.step">[docs]</a><span class="k">class</span> <span class="nc">step</span><span class="p">:</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;STEP reader class.</span>
<span class="sd"> 1st read a STEP file.</span>
<span class="sd"> 2nd convert header and data section string to list of commands.</span>
<span class="sd"> The STEP file string can have commands distributed over several</span>
<span class="sd"> lines, the commands are seperated by ``;\n``. This class un-wraps</span>
<span class="sd"> each command into one line (remove ``\n``) and removes empty lines.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> header part of a step file (between HEADER; and ENDSEC;):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;);</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(</span>
<span class="sd"> &#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;</span>
<span class="sd"> ,&#39;Unknown&#39;);</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;));</span>
<span class="sd"> will result in (but as a list):</span>
<span class="sd"> FILE_DESCRIPTION((&#39;Open CASCADE Model&#39;),&#39;2;1&#39;)</span>
<span class="sd"> FILE_NAME(&#39;Open CASCADE Shape Model&#39;,&#39;2019-10-14T14:32:20&#39;,(&#39;Author&#39;),(&#39;Open CASCADE&#39;),&#39;Open CASCADE STEP processor 7.1&#39;,&#39;Open CASCADE 7.1&#39;,&#39;Unknown&#39;)</span>
<span class="sd"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">file_str</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
<span class="n">step_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_str</span><span class="p">,</span> <span class="s1">&#39;ISO-10303-21;&#39;</span><span class="p">,</span>
<span class="s1">&#39;END-ISO-10303-21;&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">step_str</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;File is not a step file&#39;</span><span class="p">)</span>
<span class="n">header_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">&#39;HEADER;&#39;</span><span class="p">,</span> <span class="s1">&#39;ENDSEC;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">header_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">data_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">&#39;DATA;&#39;</span><span class="p">,</span> <span class="s1">&#39;ENDSEC;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">data_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">&#39;;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="str_to_cmd_args"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.str_to_cmd_args">[docs]</a><span class="k">def</span> <span class="nf">str_to_cmd_args</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Using negative lookahead to match all the commas which are not</span>
<span class="sd"> inside a parenthesis and then split the string at the commas.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))</span>
<span class="sd"> will become</span>
<span class="sd"> command = &#39;CARTESIAN_POINT&#39;</span>
<span class="sd"> arguments = [&#39;&#39;, &#39;(0.E+000,0.E+000,0.E+000)&#39;]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="n">command</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;(&#39;</span><span class="p">)]</span>
<span class="n">inside_parenthesis</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[(</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;(&#39;</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span><span class="n">find_last</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">)]</span>
<span class="n">arguments</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;,\s*(?![^()]*\))&#39;</span><span class="p">,</span> <span class="n">inside_parenthesis</span><span class="p">)</span>
<span class="c1"># arguments = [i.strip() for i in inside_parenthesis.split(&#39;,&#39;)] # does not work for arguments with commas inside the parenthsis</span>
<span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">arguments</span></div>
<div class="viewcode-block" id="data_cmds_to_data_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_cmds_to_data_dict">[docs]</a><span class="k">def</span> <span class="nf">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">data_cmds</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="sd">&quot;&quot;&quot;Create dict with step objects</span>
<span class="sd"> 1st it creats keys equal to the number id string and values with</span>
<span class="sd"> the command string.</span>
<span class="sd"> 2nd it creats keys for different step object types to dict all</span>
<span class="sd"> commands as new created objects of that type.</span>
<span class="sd"> :Example:</span>
<span class="sd"> ::</span>
<span class="sd"> from:</span>
<span class="sd"> [&quot;#12 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&quot;,</span>
<span class="sd"> &quot;#22 = VERTEX_POINT(&#39;&#39;,#23)&quot;]</span>
<span class="sd"> to:</span>
<span class="sd"> {&#39;#12&#39;: &#39;CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&#39;,</span>
<span class="sd"> &#39;#22&#39;: &#39;VERTEX_POINT(&#39;&#39;,#23)&#39;}</span>
<span class="sd"> additional</span>
<span class="sd"> {</span>
<span class="sd"> &#39;cartesian_points&#39;: {</span>
<span class="sd"> &#39;#12&#39;: pointer_to_new_created_point_object,</span>
<span class="sd"> ...</span>
<span class="sd"> },</span>
<span class="sd"> &#39;vertex_points&#39;: {</span>
<span class="sd"> &#39;#22&#39;: pointer_to_new_created_vertex_object,</span>
<span class="sd"> ...</span>
<span class="sd"> },</span>
<span class="sd"> ...</span>
<span class="sd"> }</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">processed_cmds</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">ignored_cmds</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">data_cmd</span> <span class="ow">in</span> <span class="n">data_cmds</span><span class="p">:</span>
<span class="c1">#print(data_cmd)</span>
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">data_cmd</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;=&#39;</span><span class="p">)</span>
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">str_to_cmd_args</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">arguments</span><span class="p">)</span>
<span class="c1"># command can be empty (empty string: &#39;&#39;)</span>
<span class="c1"># #2052 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) )</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># do if command.lower() is in data_dict else do nothing</span>
<span class="n">data_dict</span><span class="p">[</span><span class="n">command</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">processed_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">ignored_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;processed_cmds&#39;</span><span class="p">,</span> <span class="n">processed_cmds</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ignored_cmds&#39;</span><span class="p">,</span> <span class="n">ignored_cmds</span><span class="p">)</span>
<span class="c1">#</span>
<span class="c1"># Order is important!</span>
<span class="c1">#</span>
<span class="c1">#</span>
<span class="c1"># POINT objects</span>
<span class="c1">#</span>
<span class="c1"># create point objects, these will be referenced by vertex_points</span>
<span class="c1"># #12 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CARTESIAN_POINT</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
<span class="c1"># vertex_points references to cartesian_points</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #23 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VERTEX_POINT</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
<span class="c1">#</span>
<span class="c1"># EDGE objects</span>
<span class="c1">#</span>
<span class="c1"># DIRECTIONs</span>
<span class="c1"># #30 = DIRECTION(&#39;&#39;,(0.E+000,0.E+000,1.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">DIRECTION</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
<span class="c1"># VECTORs references to DIRECTIONs</span>
<span class="c1"># #29 = VECTOR(&#39;&#39;,#30,1.);</span>
<span class="c1"># #30 = DIRECTION(&#39;&#39;,(0.E+000,0.E+000,1.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VECTOR</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># LINEs references to cartesian_point and vector</span>
<span class="c1"># #27 = LINE(&#39;&#39;,#28,#29);</span>
<span class="c1"># #28 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000));</span>
<span class="c1"># #29 = VECTOR(&#39;&#39;,#30,1.);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">LINE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vector&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
<span class="c1"># AXIS2_PLACEMENT_2Ds references to location (CARTESIAN_POINT) and ref_direction (DIRECTION)</span>
<span class="c1"># #50 = AXIS2_PLACEMENT_2D(&#39;&#39;,#51,#52);</span>
<span class="c1"># #51 = CARTESIAN_POINT(&#39;&#39;,(0.,0.));</span>
<span class="c1"># #52 = DIRECTION(&#39;&#39;,(1.,0.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_2D</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
<span class="c1"># AXIS2_PLACEMENT_3Ds references to location (CARTESIAN_POINT), axis (DIRECTION) and ref_direction (DIRECTION)</span>
<span class="c1"># #26 = AXIS2_PLACEMENT_3D(&#39;&#39;,#27,#28,#29);</span>
<span class="c1"># #27 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,10.));</span>
<span class="c1"># #28 = DIRECTION(&#39;&#39;,(0.,0.,1.));</span>
<span class="c1"># #29 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;direction&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]])</span>
<span class="c1"># CIRCLE references to AXIS2_PLACEMENT_3D and radius</span>
<span class="c1"># #25 = CIRCLE(&#39;&#39;,#26,5.);</span>
<span class="c1"># #26 = AXIS2_PLACEMENT_3D(&#39;&#39;,#27,#28,#29);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_3D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_2D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CIRCLE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">axis2_placement</span><span class="p">,</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># ELLIPSE references to AXIS2_PLACEMENT_3D and both semi axes</span>
<span class="c1"># #1049 = ELLIPSE(&#39;&#39;,#1050,176.13914953808,100.);</span>
<span class="c1"># #1050 = AXIS2_PLACEMENT_3D(&#39;&#39;,#1051,#1052,#1053);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_3D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_3d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">&#39;AXIS2_PLACEMENT_2D&#39;</span><span class="p">:</span>
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;axis2_placement_2d&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ELLIPSE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">axis2_placement</span><span class="p">,</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
<span class="c1"># B_SPLINE_CURVE_WITH_KNOTS references to list of CARTESIAN_POINTs</span>
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS(&#39;&#39;,3,(#43614,#43615,#43616,#43617,#43618,</span>
<span class="c1"># #43619,#43620,#43621,#43622,#43623,#43624,#43625,#43626,#43627,#43628,#43629,</span>
<span class="c1"># #43630,#43631,#43632,#43633),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,4),</span>
<span class="c1"># (-0.540362356556626,-0.521155983847334,-0.45632355837375,-0.391167894616668,</span>
<span class="c1"># -0.32606569132423,-0.260898117378603,-0.19567917747905,-0.130414239126491,</span>
<span class="c1"># -0.0649893846296135,-0.0228378692889149),.UNSPECIFIED.);</span>
<span class="c1"># #43614=CARTESIAN_POINT(&#39;Ctrl Pts&#39;,(-0.852590969048745,68.3094592905054,1.00613961606655E-15));</span>
<span class="c1"># #43615=CARTESIAN_POINT(&#39;Ctrl Pts&#39;,(-0.879956199816603,68.2515804555212,8.67420237522527E-16));</span>
<span class="c1"># ...</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">int</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span>
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cartesian_point&#39;</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">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]),</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">6</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1"># SURFACE_CURVE references to a LINE and a list of (two) PCURVEs and a ?</span>
<span class="c1"># #26 = SURFACE_CURVE(&#39;&#39;,#27,(#31,#43),.PCURVE_S1.);</span>
<span class="c1"># #27 = LINE(&#39;&#39;,#28,#29);</span>
<span class="c1"># #31 = PCURVE(&#39;&#39;,#32,#37);</span>
<span class="c1"># #32 = PLANE(&#39;&#39;,#33);</span>
<span class="c1"># #33 = AXIS2_PLACEMENT_3D(&#39;&#39;,#34,#35,#36);</span>
<span class="c1"># #37 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#38),#42);</span>
<span class="c1"># #38 = LINE(&#39;&#39;,#39,#40);</span>
<span class="c1"># #42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #43 = PCURVE(&#39;&#39;,#44,#49);</span>
<span class="c1"># #44 = PLANE(&#39;&#39;,#45);</span>
<span class="c1"># #45 = AXIS2_PLACEMENT_3D(&#39;&#39;,#46,#47,#48);</span>
<span class="c1"># #49 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#50),#54);</span>
<span class="c1"># #50 = LINE(&#39;&#39;,#51,#52);</span>
<span class="c1"># #54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #24 = SURFACE_CURVE(&#39;&#39;,#25,(#30,#42),.PCURVE_S1.);</span>
<span class="c1"># #25 = CIRCLE(&#39;&#39;,#26,5.);</span>
<span class="c1"># #30 = PCURVE(&#39;&#39;,#31,#36);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #36 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#37),#41);</span>
<span class="c1"># #37 = LINE(&#39;&#39;,#38,#39);</span>
<span class="c1"># #41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #42 = PCURVE(&#39;&#39;,#43,#48);</span>
<span class="c1"># #43 = PLANE(&#39;&#39;,#44);</span>
<span class="c1"># #44 = AXIS2_PLACEMENT_3D(&#39;&#39;,#45,#46,#47);</span>
<span class="c1"># #48 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#49),#53);</span>
<span class="c1"># #49 = CIRCLE(&#39;&#39;,#50,5.);</span>
<span class="c1"># #50 = AXIS2_PLACEMENT_2D(&#39;&#39;,#51,#52);</span>
<span class="c1"># #51 = CARTESIAN_POINT(&#39;&#39;,(0.,0.));</span>
<span class="c1"># #52 = DIRECTION(&#39;&#39;,(1.,0.));</span>
<span class="c1"># #53 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #243 = SURFACE_CURVE(&#39;&#39;,#244,(#319,#415),.PCURVE_S1.);</span>
<span class="c1"># #244 = B_SPLINE_CURVE_WITH_KNOTS();</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;ELLIPSE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;ellipse&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;B_SPLINE_CURVE_WITH_KNOTS&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown curve_3d&#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SURFACE_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">curve_3d</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="c1"># SEAM_CURVE references to a Line and a list of (two) PCURVEs and a ?</span>
<span class="c1"># #58 = SEAM_CURVE(&#39;&#39;,#59,(#63,#70),.PCURVE_S1.);</span>
<span class="c1"># #59 = LINE(&#39;&#39;,#60,#61);</span>
<span class="c1"># #63 = PCURVE(&#39;&#39;,#31,#64);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #33 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,0.));</span>
<span class="c1"># #34 = DIRECTION(&#39;&#39;,(-0.,-0.,-1.));</span>
<span class="c1"># #35 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="c1"># #64 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#65),#69);</span>
<span class="c1"># #65 = LINE(&#39;&#39;,#66,#67);</span>
<span class="c1"># #69 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="c1"># #70 = PCURVE(&#39;&#39;,#31,#71);</span>
<span class="c1"># #31 = CONICAL_SURFACE(&#39;&#39;,#32,10.,0.463647609001);</span>
<span class="c1"># #32 = AXIS2_PLACEMENT_3D(&#39;&#39;,#33,#34,#35);</span>
<span class="c1"># #33 = CARTESIAN_POINT(&#39;&#39;,(0.,0.,0.));</span>
<span class="c1"># #34 = DIRECTION(&#39;&#39;,(-0.,-0.,-1.));</span>
<span class="c1"># #35 = DIRECTION(&#39;&#39;,(1.,0.,-0.));</span>
<span class="c1"># #71 = DEFINITIONAL_REPRESENTATION(&#39;&#39;,(#72),#76);</span>
<span class="c1"># #72 = LINE(&#39;&#39;,#73,#74);</span>
<span class="c1"># #76 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT(&#39;2D SPACE&#39;,&#39;&#39;) );</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown curve_3d&#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SEAM_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">curve_3d</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="c1"># EDGE_CURVE references to two VERTEX_POINTs, a CURVE and a BOOLEAN</span>
<span class="c1"># #21 = EDGE_CURVE(&#39;&#39;,#22,#24,#26,.T.);</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #24 = VERTEX_POINT(&#39;&#39;,#25);</span>
<span class="c1"># #26 = SURFACE_CURVE(&#39;&#39;,#27,(#31,#43),.PCURVE_S1.);</span>
<span class="c1"># #55 = EDGE_CURVE(&#39;&#39;,#56,#22,#58,.T.);</span>
<span class="c1"># #56 = VERTEX_POINT(&#39;&#39;,#57);</span>
<span class="c1"># #22 = VERTEX_POINT(&#39;&#39;,#23);</span>
<span class="c1"># #58 = SEAM_CURVE(&#39;&#39;,#59,(#63,#70),.PCURVE_S1.);</span>
<span class="c1"># #21187=EDGE_CURVE(&#39;&#39;,#15685,#15685,#12509,.T.);</span>
<span class="c1"># #15685=VERTEX_POINT(&#39;&#39;,#230114);</span>
<span class="c1"># #15685=VERTEX_POINT(&#39;&#39;,#230114);</span>
<span class="c1"># #12509=CIRCLE(&#39;&#39;,#37712,11.1464466094067);</span>
<span class="c1"># #15689=EDGE_CURVE(&#39;&#39;,#12514,#12512,#2195,.T.);</span>
<span class="c1"># #12514=VERTEX_POINT(&#39;&#39;,#43613);</span>
<span class="c1"># #12512=VERTEX_POINT(&#39;&#39;,#43610);</span>
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS(...)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">geometry_cmd</span><span class="p">,</span> <span class="n">geometry_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;SURFACE_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;surface_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;SEAM_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;seam_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;LINE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;line&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;CIRCLE&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;circle&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">&#39;B_SPLINE_CURVE_WITH_KNOTS&#39;</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;b_spline_curve_with_knots&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown edge_geometry&#39;</span><span class="p">,</span> <span class="n">geometry_cmd</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_CURVE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;vertex_point&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="n">edge_geometry</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1">#</span>
<span class="c1"># poly-curve objects</span>
<span class="c1"># to speed things up use EDGE_LOOP to create wireframes instead</span>
<span class="c1"># of plotting every single EDGE_CURVE in it&#39;s own plot cmd</span>
<span class="c1">#</span>
<span class="c1"># ORIENTED_EDGE references to two re-declared attributes from a CURVE, a CURVE and a BOOLEAN</span>
<span class="c1"># 83 = ORIENTED_EDGE(&#39;&#39;,*,*,#84,.F.);</span>
<span class="c1"># #84 = EDGE_CURVE(&#39;&#39;,#85,#87,#89,.T.);</span>
<span class="c1"># ORIENTED_EDGE will have multiple same edges, because connected faces</span>
<span class="c1"># use the same curve (about double as EDGE_CURVE)</span>
<span class="c1"># BUT combined with EDGE_LOOP the number of concatenated curves decrease.</span>
<span class="c1"># (about half to 2/3 of EDGE_CURVE)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">edge_element_cmd</span><span class="p">,</span> <span class="n">edge_element_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">edge_element_cmd</span> <span class="o">==</span> <span class="s1">&#39;EDGE_CURVE&#39;</span><span class="p">:</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown edge_element&#39;</span><span class="p">,</span> <span class="n">edge_element_cmd</span><span class="p">)</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ORIENTED_EDGE</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">edge_element</span><span class="p">,</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="p">)</span>
<span class="c1"># EDGE_LOOP</span>
<span class="c1"># #82 = EDGE_LOOP(&#39;&#39;,(#83,#118,#146,#174));</span>
<span class="c1"># #83 = ORIENTED_EDGE(&#39;&#39;,*,*,#84,.F.);</span>
<span class="c1"># #118 = ORIENTED_EDGE(&#39;&#39;,*,*,#119,.T.);</span>
<span class="c1"># #146 = ORIENTED_EDGE(&#39;&#39;,*,*,#147,.T.);</span>
<span class="c1"># #174 = ORIENTED_EDGE(&#39;&#39;,*,*,#175,.F.);</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]:</span>
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;cmds&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_LOOP</span><span class="p">(</span>
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;oriented_edge&#39;</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">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">1</span><span class="p">]),</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">data_dict</span></div>
<div class="viewcode-block" id="data_section_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_section_dict">[docs]</a><span class="k">def</span> <span class="nf">data_section_dict</span><span class="p">(</span><span class="n">step</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="k">return</span> <span class="n">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">step</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span></div>
<div class="viewcode-block" id="line_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.line_geometry">[docs]</a><span class="k">def</span> <span class="nf">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="c1"># (normally)</span>
<span class="c1"># edge_curve.edge_geometry.curve_3d.pnt.coordinates is</span>
<span class="c1"># equal to p1 (see above) this is</span>
<span class="c1"># edge_curve.edge_start.vertex_geometry.coordinates</span>
<span class="c1"># p2 could be calculated from</span>
<span class="c1"># edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios</span>
<span class="c1"># and edge_curve.edge_geometry.curve_3d.dir.magnitude</span>
<span class="c1"># vector = [i*edge_curve.edge_geometry.curve_3d.dir.magnitude for</span>
<span class="c1"># i in edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios]</span>
<span class="k">return</span> <span class="n">Line</span><span class="p">(</span><span class="n">point1</span><span class="o">=</span><span class="n">p1</span><span class="p">,</span> <span class="n">point2</span><span class="o">=</span><span class="n">p2</span><span class="p">)</span></div>
<span class="kn">import</span> <span class="nn">math</span>
<div class="viewcode-block" id="arc_circle_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.arc_circle_geometry">[docs]</a><span class="k">def</span> <span class="nf">arc_circle_geometry</span><span class="p">(</span><span class="n">conic</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">ellipse</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="n">z</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">ref_direction</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">Direction</span><span class="o">.</span><span class="n">cross</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="n">cs_gl</span> <span class="o">=</span> <span class="n">CS</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="n">z</span><span class="p">)</span> <span class="c1"># transform from global to local</span>
<span class="n">cs_lg</span> <span class="o">=</span> <span class="n">CS</span><span class="o">.</span><span class="n">transposed</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span> <span class="c1"># transform from local to global</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="k">if</span> <span class="n">p1</span> <span class="o">==</span> <span class="n">p2</span><span class="p">:</span> <span class="c1"># Full Circle or Ellipse</span>
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
<span class="k">return</span> <span class="n">Ellipse</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">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="c1"># else Circle</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
<span class="k">return</span> <span class="n">Circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="c1"># else Arc</span>
<span class="c1"># points relative to the location</span>
<span class="n">v1</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">location</span><span class="p">,</span> <span class="n">p2</span> <span class="o">-</span> <span class="n">location</span>
<span class="c1">#ang1, ang2 = vector.ang(x, v1), vector.ang(x, v2)</span>
<span class="c1"># relative points transformed into circle coordinate system</span>
<span class="c1"># relative point lay in local xy-plane</span>
<span class="n">vl1</span><span class="p">,</span> <span class="n">vl2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">),</span> <span class="n">vector</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span>
<span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">*</span><span class="n">vl1</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</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="o">*</span><span class="n">vl2</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
<span class="k">return</span> <span class="n">ArcEllipse</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="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
<span class="k">return</span> <span class="n">ArcCircle</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span></div>
<span class="kn">import</span> <span class="nn">copy</span>
<div class="viewcode-block" id="b_spline_curve_with_knots_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.b_spline_curve_with_knots_geometry">[docs]</a><span class="k">def</span> <span class="nf">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Currently only clamped b_spline curves and assumed, i. e. closed</span>
<span class="sd"> = False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">control_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">coordinates</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span>
<span class="c1"># es_near = [vector.isclose(p1, i.coordinates, abs_tol=2.1) for i in b_spline.control_points].index(True)</span>
<span class="n">es_near</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># ee_near = len(b_spline.control_points) - 1 - [vector.isclose(p2, i.coordinates, abs_tol=2.1) for i in b_spline.control_points[::-1]].index(True)</span>
<span class="n">ee_near</span> <span class="o">=</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
<span class="c1"># print(&#39;bs es, ee in:&#39;, es_near, ee_near,</span>
<span class="c1"># knots[es_near], knots[ee_near+b_spline.degree])</span>
<span class="c1"># print(&#39; knots, knote:&#39;, knots[0], knots[-1], len(knots))</span>
<span class="k">if</span> <span class="n">es_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">ee_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1">#print(&#39;yes&#39;)</span>
<span class="n">bs</span> <span class="o">=</span> <span class="n">ArcBSplineCurveWithKnots</span><span class="p">(</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">,</span> <span class="n">knots</span><span class="p">[</span><span class="n">es_near</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="n">knots</span><span class="p">[</span><span class="n">ee_near</span><span class="o">+</span><span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">bs</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">p1</span><span class="p">)]</span> <span class="o">+</span> <span class="n">bs</span><span class="o">.</span><span class="n">_points</span> <span class="o">+</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">p2</span><span class="p">)]</span>
<span class="k">return</span> <span class="n">bs</span>
<span class="c1"># +1 so not the last near point but the following, also -1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">B_spline_curve_with_knots</span><span class="p">(</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">)</span></div>
<span class="c1"># TODO: backup solution to draw each edge_curve,</span>
<span class="c1"># new is to put edge_curves to edge_loops and draw these loops</span>
<span class="c1"># see data_dict_to_geometry_world</span>
<div class="viewcode-block" id="data_dict_to_geometry_world_edge_curve"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world_edge_curve">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world_edge_curve</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">edges</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">return</span> <span class="n">w</span></div>
<div class="viewcode-block" id="data_dict_edge_curve_to_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_edge_curve_to_geometry">[docs]</a><span class="k">def</span> <span class="nf">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">edges</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_curve</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">p1</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
<span class="c1"># if SURFACE_CURVE or SEAM_CURVE, b/c SEAM_CURVE(SURFACE_CURVE)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">ELLIPSE</span><span class="p">):</span>
<span class="n">ellipse</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">ellipse</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown SURFACE_CURVE&#39;</span><span class="p">,</span>
<span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">))</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># fallback to straight line</span>
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_curve&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">&#39;unknown type&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="p">))</span>
<span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">edges</span></div>
<div class="viewcode-block" id="data_dict_to_geometry_world"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;geometry_edge_curves&#39;</span><span class="p">]</span>
<span class="c1"># add all but the last point, it is a path.</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="nb">iter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_loop</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">last_end_point</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">edge_loop</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
<span class="n">edge_curve</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
<span class="k">if</span> <span class="n">idn</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
<span class="n">pts</span> <span class="o">=</span> <span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span><span class="o">.</span><span class="n">points</span><span class="p">()</span>
<span class="k">if</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">:</span>
<span class="c1">#[points.append(i) for i in pts[:-1]]</span>
<span class="p">[</span><span class="n">points</span><span class="o">.</span><span class="n">append</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">pts</span><span class="p">]</span>
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1">#[points.append(i) for i in pts[:0:-1]]</span>
<span class="p">[</span><span class="n">points</span><span class="o">.</span><span class="n">append</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">pts</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">last_end_point</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># TODO: some points are only near because of the current</span>
<span class="c1"># b-spline cut in b_spline_curve_with_knots_geometry</span>
<span class="n">isclose</span> <span class="o">=</span> <span class="nb">all</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">1e-3</span><span class="p">)</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="n">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">isclose</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="nb">print</span><span class="p">(</span><span class="n">isclose</span><span class="p">,</span> <span class="n">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c1">#print(&#39;start of loop&#39;)</span>
<span class="n">last_end_point</span> <span class="o">=</span> <span class="n">end_point</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">pass</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">points</span><span class="p">:</span>
<span class="c1"># add last end point of path</span>
<span class="c1"># if oriented_edge.orientation:</span>
<span class="c1"># points.append(Point(*edge_curve.edge_end.vertex_geometry.coordinates))</span>
<span class="c1"># else:</span>
<span class="c1"># points.append(Point(*edge_curve.edge_start.vertex_geometry.coordinates))</span>
<span class="c1">#points.append(Point(*oriented_edge.edge_end.vertex_geometry.coordinates))</span>
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">Polyline</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">))</span>
<span class="c1"># if iter == 4:</span>
<span class="c1"># print()</span>
<span class="c1"># print(key)</span>
<span class="c1"># break</span>
<span class="c1"># iter += 1</span>
<span class="k">return</span> <span class="n">w</span></div>
<span class="c1"># TODO: delete this testing def</span>
<div class="viewcode-block" id="print_edge_loop"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.print_edge_loop">[docs]</a><span class="k">def</span> <span class="nf">print_edge_loop</span><span class="p">(</span><span class="n">data_dict</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
<span class="kn">from</span> <span class="nn">pylib.data_step_std</span> <span class="kn">import</span> <span class="n">LINE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;edge_loop:&#39;</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">,</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">idn</span><span class="p">)</span>
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">&#39;edge_loop&#39;</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; orientation: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_start: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_end: &#39;</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_element&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; same_sense: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">same_sense</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_start: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_end: &#39;</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; edge_geometry.curve_3d&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; type: &#39;</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">))</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; es in: &#39;</span><span class="p">,</span>
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; ee in: &#39;</span><span class="p">,</span>
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; pnt: &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; pnt2: &#39;</span><span class="p">,</span> <span class="p">[</span><span class="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">magnitude</span><span class="o">*</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="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">orientation</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; es in: &#39;</span><span class="p">,</span>
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; ee in: &#39;</span><span class="p">,</span>
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; control_points&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="s1">&#39;...&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span></div>
<span class="c1"># print()</span>
<span class="c1"># print_edge_loop(data_dict, &#39;#1306&#39;)</span>
</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>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">pylib</a></li>
</ul>
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -44,10 +44,12 @@
<span class="sd"> :synopsis: Mathematical equations.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">Functions returns function to apply conditions.</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.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>
<span class="kn">from</span> <span class="nn">.data</span> <span class="kn">import</span> <span class="n">seq</span>
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">lcm</span>
<div class="viewcode-block" id="transformation"><a class="viewcode-back" href="../../pylib.function.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>
@@ -114,12 +116,13 @@
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
<span class="sd"> time t</span>
<span class="sd"> :rtype: function</span>
<span class="sd"> In general, the function is:</span>
<span class="sd"> .. math::</span>
<span class="sd"> y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\</span>
<span class="sd"> y(x,t) = A\sin(kx + \omega t + \varphi) + D</span>
<span class="sd"> y(x,t) = A\sin(kx + \omega t + \varphi) + D \\</span>
<span class="sd"> y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D</span>
<span class="sd"> where:</span>
@@ -178,6 +181,7 @@
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
<span class="sd"> time t</span>
<span class="sd"> :rtype: function</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`sine_wave`</span>
@@ -188,12 +192,225 @@
<span class="n">phi</span> <span class="o">=</span> <span class="n">phi</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span>
<span class="k">return</span> <span class="n">sine_wave</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">k</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="n">f</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="n">phi</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="n">D</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="n">degree</span><span class="p">)</span></div>
<div class="viewcode-block" id="b_spline_basis"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_basis">[docs]</a><span class="k">def</span> <span class="nf">b_spline_basis</span><span class="p">(</span><span class="n">knots</span><span class="p">,</span> <span class="n">knot_span</span><span class="p">,</span> <span class="n">degree</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Cox-de Boor algorithm / recursion formula.</span>
<span class="sd"> Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)</span>
<span class="sd"> :param knots: Knot vector U. m + 1 non-decreasing numbers / knots,</span>
<span class="sd"> :math:`u_0 &lt;= u_1 &lt;= u_2 &lt;= ... &lt;= u_m`</span>
<span class="sd"> :type knots: list</span>
<span class="sd"> :param knot_span: i-th knot span</span>
<span class="sd"> :type knot_span: int</span>
<span class="sd"> :param degree: degree of B-spline basis function</span>
<span class="sd"> :type degree: int</span>
<span class="sd"> :returns: B-spline basis function using variable, u \in [u_0, u_m]</span>
<span class="sd"> :rtype: function</span>
<span class="sd"> .. math::</span>
<span class="sd"> N_{i,0}(u) &amp;= \begin{cases} 1 &amp; \text{if } u_i \le u \lt u_{i+1} \\</span>
<span class="sd"> 0 &amp; \text{otherwise}\end{cases} \\</span>
<span class="sd"> N_{i,p}(u) &amp;= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) +</span>
<span class="sd"> \frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">U</span> <span class="o">=</span> <span class="n">knots</span>
<span class="n">N</span> <span class="o">=</span> <span class="n">b_spline_basis</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">knot_span</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">degree</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">Np</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
<span class="k">return</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="n">u</span> <span class="o">&lt;</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">Np</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">term1</span> <span class="o">=</span> <span class="p">(</span><span class="n">u</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">])</span><span class="o">/</span><span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="p">]</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">])</span><span class="o">*</span><span class="n">N</span><span class="p">(</span><span class="n">U</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)(</span><span class="n">u</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">term1</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">term2</span> <span class="o">=</span> <span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">u</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">N</span><span class="p">(</span><span class="n">U</span><span class="p">,</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)(</span><span class="n">u</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">term2</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">term1</span> <span class="o">+</span> <span class="n">term2</span>
<span class="k">return</span> <span class="n">Np</span></div>
<span class="c1"># TODO: other types than clamped?</span>
<div class="viewcode-block" id="b_spline_knots"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_knots">[docs]</a><span class="k">def</span> <span class="nf">b_spline_knots</span><span class="p">(</span><span class="n">control_point_spans</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;B-spline knots to generate a clamped uniform B-spline curve</span>
<span class="sd"> of degree p (order + 1).</span>
<span class="sd"> The internal knots are equally spaced (uniform B-spline curve)</span>
<span class="sd"> :param control_point_spans: number of control points + 1</span>
<span class="sd"> :type control_point_spans: int</span>
<span class="sd"> :param degree: degree of B-spline basis functions (default = 3)</span>
<span class="sd"> :type degree: int</span>
<span class="sd"> :returns: knot vector</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`b_spline_curve_with_knots`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">degree</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">control_point_spans</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="n">p</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># number of knot spans</span>
<span class="c1"># number of</span>
<span class="n">U_outer</span> <span class="o">=</span> <span class="n">p</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># at each of the vector</span>
<span class="n">U_inner</span> <span class="o">=</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">U_outer</span><span class="p">)</span>
<span class="n">U</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">U_outer</span><span class="p">)</span>
<span class="n">U</span> <span class="o">+=</span> <span class="p">[</span><span class="n">i</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="mi">1</span><span class="p">,</span> <span class="n">U_inner</span><span class="p">)]</span>
<span class="n">U</span> <span class="o">+=</span> <span class="p">[</span><span class="n">U_inner</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">U_outer</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">U</span><span class="p">)</span> <span class="c1"># tuples are hashable</span></div>
<div class="viewcode-block" id="b_spline_curve_with_knots"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_curve_with_knots">[docs]</a><span class="k">def</span> <span class="nf">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;B-spline curve of degree p (order + 1) on a given set of knots.</span>
<span class="sd"> n, m and p must satisfy m = n + p + 1.</span>
<span class="sd"> :param degree: degree of B-spline basis functions</span>
<span class="sd"> :type degree: int</span>
<span class="sd"> :param control_points: control points P, n + 1 control points</span>
<span class="sd"> :type control_points: list</span>
<span class="sd"> :param knots: Knot vector U. m + 1 non-decreasing numbers / knots,</span>
<span class="sd"> :math:`u_0 &lt;= u_1 &lt;= u_2 &lt;= ... &lt;= u_m`</span>
<span class="sd"> :type knots: list</span>
<span class="sd"> :returns: B-spline curve using variable, u \in [u_0, u_m]</span>
<span class="sd"> :rtype: function</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i</span>
<span class="sd"> * open B-spline curves</span>
<span class="sd"> * the curve will not touch the first and last legs of the</span>
<span class="sd"> control polyline</span>
<span class="sd"> * the knot vector does not have any particular structure</span>
<span class="sd"> * for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not</span>
<span class="sd"> have &quot;full support&quot; of basis functions and are ignored when a</span>
<span class="sd"> B-spline curve is open. For open B-spline curves, the domain</span>
<span class="sd"> is inteval [u_p, u_{n-p}]</span>
<span class="sd"> * clamped B-spline curves, nonperiodic B-spline curves</span>
<span class="sd"> * the curve is tangent to the first and the last legs just like</span>
<span class="sd"> a Bézier curve</span>
<span class="sd"> * the first knot and the last knot must be repeated p+1 times</span>
<span class="sd"> (i. e., of multiplicity p+1)</span>
<span class="sd"> * closed B-spline curves</span>
<span class="sd"> * the start and the end of the generated curve join together</span>
<span class="sd"> forming a closed loop</span>
<span class="sd"> * repeating some knots and control points # TODO: which?</span>
<span class="sd"> * uniform B-spline curves</span>
<span class="sd"> * internal knots are equally spaced</span>
<span class="sd"> * Bézier curves</span>
<span class="sd"> * a B-spline with no internal knots.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`b_spline_knots`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dim</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">control_points</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">C</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
<span class="n">NiPi</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">dim</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="nb">len</span><span class="p">(</span><span class="n">control_points</span><span class="p">)):</span>
<span class="n">Ni</span> <span class="o">=</span> <span class="n">b_spline_basis</span><span class="p">(</span><span class="n">knots</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">degree</span><span class="p">)</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
<span class="n">NiPi</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">Ni</span><span class="p">(</span><span class="n">u</span><span class="p">)</span><span class="o">*</span><span class="n">control_points</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span>
<span class="k">return</span> <span class="n">NiPi</span>
<span class="k">return</span> <span class="n">C</span></div>
<div class="viewcode-block" id="sample_half_open"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.sample_half_open">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open</span><span class="p">(</span><span class="n">f</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="n">n</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
<span class="c1"># hack to sample close to the endpoint</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</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="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">n</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="n">b</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
<span class="c1"># Sample the function</span>
<span class="k">return</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span></div>
<div class="viewcode-block" id="sample_half_open_seq"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.sample_half_open_seq">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open_seq</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
<span class="c1"># hack to sample close to the endpoint, x[-1] can be present</span>
<span class="c1"># multiple times.</span>
<span class="n">xend</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</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="p">[</span><span class="n">xi</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span> <span class="k">if</span> <span class="n">xi</span> <span class="o">!=</span> <span class="n">xend</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">xend</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
<span class="c1"># Sample the function</span>
<span class="k">return</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span></div>
<span class="c1">#</span>
<span class="c1"># Parametric equations</span>
<span class="c1"># roulette</span>
<span class="c1">#</span>
<div class="viewcode-block" id="circle"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.circle">[docs]</a><span class="k">def</span> <span class="nf">circle</span><span class="p">(</span><span class="n">r</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Circle</span>
<span class="sd"> :param r: radius of the circle</span>
<span class="sd"> :type r: float</span>
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
<span class="sd"> x(\theta) = r\cos\theta \\</span>
<span class="sd"> y(\theta) = r\sin\theta \\</span>
<span class="sd"> \theta = \left[0, 2\pi\right]</span>
<span class="sd"> ::</span>
<span class="sd"> * *</span>
<span class="sd"> * r *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = circle(20)[:2]</span>
<span class="sd"> &gt;&gt;&gt; x, y, _ = circle(20)</span>
<span class="sd"> &gt;&gt;&gt; x, y, interval = circle(20)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">ellipse</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span></div>
<div class="viewcode-block" id="ellipse"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.ellipse">[docs]</a><span class="k">def</span> <span class="nf">ellipse</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;Ellipse</span>
<span class="sd"> :param a: semi-major axis</span>
<span class="sd"> :type a: float</span>
<span class="sd"> :param b: semi-minor axis</span>
<span class="sd"> :type b: float</span>
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
<span class="sd"> x(\theta) = a\cos\theta \\</span>
<span class="sd"> y(\theta) = b\sin\theta \\</span>
<span class="sd"> \theta = \left[0, 2\pi\right]</span>
<span class="sd"> ::</span>
<span class="sd"> * .*</span>
<span class="sd"> * b : *</span>
<span class="sd"> * :......*</span>
<span class="sd"> * a *</span>
<span class="sd"> * *</span>
<span class="sd"> * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = ellipse(10, 5)[:2]</span>
<span class="sd"> &gt;&gt;&gt; x, y, _ = ellipse(10, 5)</span>
<span class="sd"> &gt;&gt;&gt; x, y, interval = ellipse(10, 5)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="n">a</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">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="n">b</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="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">]</span></div>
<div class="viewcode-block" id="hypotrochoid"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.hypotrochoid">[docs]</a><span class="k">def</span> <span class="nf">hypotrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Hypotrochoid</span>
@@ -208,7 +425,7 @@
<span class="sd"> :param d: distance from the center of the interior circle</span>
<span class="sd"> :type d: float</span>
<span class="sd"> :results: functions for x of theta and y of theta</span>
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
@@ -223,7 +440,7 @@
<span class="sd"> * *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * r **</span>
<span class="sd"> * * .... *</span>
<span class="sd"> * * ,.. *</span>
<span class="sd"> * * d *</span>
<span class="sd"> * * **</span>
<span class="sd"> * * * *</span>
@@ -231,16 +448,16 @@
<span class="sd"> * *</span>
<span class="sd"> * * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = hyotrochoid(20, 6, 6)[:1]</span>
<span class="sd"> &gt;&gt;&gt; x, y, theta_end = hyotrochoid(20, 6, 6)</span>
<span class="sd"> &gt;&gt;&gt; x, y = hyotrochoid(20, 6, 6)[:2]</span>
<span class="sd"> &gt;&gt;&gt; x, y, _ = hyotrochoid(20, 6, 6)</span>
<span class="sd"> &gt;&gt;&gt; x, y, interval = hyotrochoid(20, 6, 6)</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`pylib.mathematics.lcm`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</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="o">+</span> <span class="n">d</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">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</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="o">-</span> <span class="n">d</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">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">theta_end</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">lcm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="n">R</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">lcm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="n">R</span><span class="p">]</span></div>
<div class="viewcode-block" id="epitrochoid"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.epitrochoid">[docs]</a><span class="k">def</span> <span class="nf">epitrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Epitrochoid</span>
@@ -256,7 +473,7 @@
<span class="sd"> :param d: distance from the center of the exterior circle</span>
<span class="sd"> :type d: float</span>
<span class="sd"> :results: functions for x of theta and y of theta</span>
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
<span class="sd"> :rtype: tuple</span>
<span class="sd"> .. math::</span>
@@ -271,7 +488,7 @@
<span class="sd"> * *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * * r *</span>
<span class="sd"> * ** .... *</span>
<span class="sd"> * ** .., *</span>
<span class="sd"> * ** d *</span>
<span class="sd"> * * * *</span>
<span class="sd"> * * * *</span>
@@ -279,13 +496,13 @@
<span class="sd"> * *</span>
<span class="sd"> * * *</span>
<span class="sd"> &gt;&gt;&gt; x, y = epitrochoid(3, 1, 0.5)[:1]</span>
<span class="sd"> &gt;&gt;&gt; x, y, theta_end = epitrochoid(3, 1, 0.5)</span>
<span class="sd"> &gt;&gt;&gt; x, y = epitrochoid(3, 1, 0.5)[:2]</span>
<span class="sd"> &gt;&gt;&gt; x, y, _ = epitrochoid(3, 1, 0.5)</span>
<span class="sd"> &gt;&gt;&gt; x, y, interval = epitrochoid(3, 1, 0.5)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</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="o">-</span> <span class="n">d</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">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</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="o">-</span> <span class="n">d</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">R</span><span class="o">+</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">theta_end</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">]</span></div>
<div class="viewcode-block" id="to_str"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.to_str">[docs]</a><span class="k">def</span> <span class="nf">to_str</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="n">x_0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">x_1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">w</span><span class="o">=</span><span class="mi">80</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">char_set</span><span class="o">=</span><span class="s2">&quot;line&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Represent functions as string frame with a specific character set.</span>
@@ -299,7 +516,7 @@
<span class="sd"> :type w: int</span>
<span class="sd"> :param char_set: either &quot;braille&quot; or &quot;block&quot;. &quot;braille&quot; uses Unicode</span>
<span class="sd"> Characters in the Braille Patterns Block (fisrt index U+2800, last</span>
<span class="sd"> Characters in the Braille Patterns Block (first index U+2800, last</span>
<span class="sd"> index U+28FF [CUDB]_) and the &quot;block&quot; uses part of the Unicode</span>
<span class="sd"> Characters in the Block Elements Block (fisrt index U+2580, last</span>
<span class="sd"> index U+259F [CUDB]_). Alias for braille is line and alias for</span>
@@ -433,7 +650,9 @@
<span class="c1"># divide step width of the sequence by 2 (double density, 2 dots/pixel per char)</span>
<span class="c1"># multiplicate x by 2 (2 dots/pixel per char)</span>
<span class="k">for</span> <span class="n">x_i</span> <span class="ow">in</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">density</span><span class="p">):</span>
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">))</span>
<span class="n">y_i</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o">&gt;=</span> <span class="n">y_i</span> <span class="o">&gt;=</span> <span class="o">-</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="p">:</span>
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">y_i</span><span class="p">)</span>
<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>

View File

@@ -45,8 +45,8 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">Affine transforms</span>
<span class="sd">-----------------</span>
<span class="sd">.. rubric:: Affine transforms</span>
<span class="sd">Functions in augmented space, in homogenous coordinates.</span>
<span class="sd">Points are augment to 4 dimensions, by adding a dummy coordinate.</span>
@@ -56,12 +56,21 @@
<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">copy</span>
<span class="kn">from</span> <span class="nn">.data</span> <span class="kn">import</span> <span class="n">seq</span>
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span><span class="p">,</span> <span class="n">matrix</span>
<span class="kn">from</span> <span class="nn">.function</span> <span class="kn">import</span> <span class="n">circle</span><span class="p">,</span> <span class="n">ellipse</span><span class="p">,</span> <span class="n">b_spline_curve_with_knots</span>
<div class="viewcode-block" id="Properties"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Properties">[docs]</a><span class="k">class</span> <span class="nc">Properties</span><span class="p">():</span>
<span class="n">circle_sectors</span> <span class="o">=</span> <span class="mi">12</span> <span class="c1"># 12 = 30°</span></div>
<div class="viewcode-block" id="Direction"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Direction">[docs]</a><span class="k">class</span> <span class="nc">Direction</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Direction in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</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="mi">0</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</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="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span></div>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</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="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
<div class="viewcode-block" id="Direction.cross"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Direction.cross">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">cross</span><span class="p">(</span><span class="bp">cls</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="bp">cls</span><span class="p">(</span><span class="o">*</span><span class="n">vector</span><span class="o">.</span><span class="n">cross</span><span class="p">(</span><span class="n">a</span><span class="p">[:</span><span class="mi">3</span><span class="p">],</span> <span class="n">b</span><span class="p">[:</span><span class="mi">3</span><span class="p">]))</span></div></div>
<div class="viewcode-block" id="Point"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Point">[docs]</a><span class="k">class</span> <span class="nc">Point</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Point in local coordinate system&quot;&quot;&quot;</span>
@@ -79,32 +88,41 @@
<div class="viewcode-block" id="CS"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS">[docs]</a><span class="k">class</span> <span class="nc">CS</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Coordinate system</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</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">y</span><span class="o">=</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">z</span><span class="o">=</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([[</span><span class="o">*</span><span class="n">x</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">y</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">z</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">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="n">Direction</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">y</span><span class="o">=</span><span class="n">Direction</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">z</span><span class="o">=</span><span class="n">Direction</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</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="n">z</span><span class="p">,</span> <span class="n">vector</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>
<div class="viewcode-block" id="CS.x90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.x90">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">x90</span><span class="p">():</span>
<span class="k">return</span> <span class="n">CS</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="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</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></div>
<div class="viewcode-block" id="CS.init_xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.init_xyz">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">init_xyz</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">x</span><span class="o">=</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">y</span><span class="o">=</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">z</span><span class="o">=</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="bp">cls</span><span class="p">(</span><span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">x</span><span class="p">),</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">y</span><span class="p">),</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">z</span><span class="p">))</span></div>
<div class="viewcode-block" id="CS.xm90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.xm90">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">xm90</span><span class="p">():</span>
<span class="k">return</span> <span class="n">CS</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="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="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span></div>
<div class="viewcode-block" id="CS.x90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.x90">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">x90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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">Direction</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="o">-</span><span class="mi">1</span><span class="p">),</span>
<span class="n">Direction</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></div>
<div class="viewcode-block" id="CS.y90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.y90">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">y90</span><span class="p">():</span>
<span class="k">return</span> <span class="n">CS</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="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="o">-</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></div>
<div class="viewcode-block" id="CS.xm90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.xm90">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">xm90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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">Direction</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">Direction</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span></div>
<div class="viewcode-block" id="CS.ym90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.ym90">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">ym90</span><span class="p">():</span>
<span class="k">return</span> <span class="n">CS</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="o">-</span><span class="mi">1</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="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></div>
<div class="viewcode-block" id="CS.y90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.y90">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">y90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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">Direction</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">Direction</span><span class="p">(</span><span class="o">-</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></div>
<div class="viewcode-block" id="CS.ym90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.ym90">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">ym90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">Direction</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">Direction</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></div>
<div class="viewcode-block" id="CS.get_coordinates"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.get_coordinates">[docs]</a> <span class="k">def</span> <span class="nf">get_coordinates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">,:</span><span class="mi">3</span><span class="p">]</span></div></div>
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
<span class="c1"># TODO: Polyline(list) or Polyline(matrix) ?</span>
<span class="c1"># list of Points</span>
<div class="viewcode-block" id="Wireframe"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe">[docs]</a><span class="k">class</span> <span class="nc">Wireframe</span><span class="p">:</span>
<div class="viewcode-block" id="Polyline"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline">[docs]</a><span class="k">class</span> <span class="nc">Polyline</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;Open and closed wireframe object in local coordinate system</span>
<span class="sd"> This class create its own points (copy).</span>
@@ -113,44 +131,48 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</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">points</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="o">=</span> <span class="n">closed</span>
<div class="viewcode-block" id="Wireframe.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.__str__">[docs]</a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Polyline.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__str__">[docs]</a> <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="s1">&#39;[&#39;</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;]&#39;</span></div>
<div class="viewcode-block" id="Wireframe.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Polyline.__repr__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__repr__">[docs]</a> <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="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> \
<span class="s1">&#39;(&#39;</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span></div>
<div class="viewcode-block" id="Polyline.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns the Iterator object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">())</span></div>
<div class="viewcode-block" id="Wireframe.points"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.points">[docs]</a> <span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Polyline.points"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.points">[docs]</a> <span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[</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="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="k">else</span> <span class="n">result</span> <span class="o">+</span> <span class="p">[</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="Wireframe.xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.xy">[docs]</a> <span class="k">def</span> <span class="nf">xy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="Polyline.xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.xy">[docs]</a> <span class="k">def</span> <span class="nf">xy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">i</span><span class="p">[:</span><span class="mi">2</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="o">.</span><span class="n">points</span><span class="p">()]))</span></div>
<div class="viewcode-block" id="Wireframe.xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">i</span><span class="p">[:</span><span class="mi">3</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="o">.</span><span class="n">points</span><span class="p">()]))</span></div>
<div class="viewcode-block" id="Wireframe.rotate_x"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.rotate_x"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_y"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.rotate_y"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_z"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.rotate_z"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_z</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">translate</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="k">for</span>
<span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
@@ -159,28 +181,113 @@
<span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.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>
<div class="viewcode-block" id="Polyline.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="Line"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Line">[docs]</a><span class="k">class</span> <span class="nc">Line</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line a open wireframe object in local coordinate system&quot;&quot;&quot;</span>
<div class="viewcode-block" id="Line"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Line">[docs]</a><span class="k">class</span> <span class="nc">Line</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line, an open wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">point1</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</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">point2</span><span class="o">=</span><span class="n">Point</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">)</span></div>
<div class="viewcode-block" id="Polygon"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polygon">[docs]</a><span class="k">class</span> <span class="nc">Polygon</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="c1"># TODO: combining wit non Arc version?</span>
<div class="viewcode-block" id="ArcCircle"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcCircle">[docs]</a><span class="k">class</span> <span class="nc">ArcCircle</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Arc of a circle, an open wireframe object in local coordinate</span>
<span class="sd"> system</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">ang1</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ang2</span><span class="o">=</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="kc">None</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="n">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="k">if</span> <span class="n">ang1</span> <span class="o">&gt;</span> <span class="n">ang2</span> <span class="p">:</span>
<span class="n">ang1</span> <span class="o">=</span> <span class="n">ang1</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang1</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang2</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</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">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">ang2</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang2</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<span class="c1"># TODO: combining wit non Arc version?</span>
<div class="viewcode-block" id="ArcEllipse"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcEllipse">[docs]</a><span class="k">class</span> <span class="nc">ArcEllipse</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Arc of an ellipse, an open wireframe object in local</span>
<span class="sd"> coordinate system</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">1</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">ang1</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ang2</span><span class="o">=</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="kc">None</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="n">interval</span> <span class="o">=</span> <span class="n">ellipse</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">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="k">if</span> <span class="n">ang1</span> <span class="o">&gt;</span> <span class="n">ang2</span> <span class="p">:</span>
<span class="n">ang1</span> <span class="o">=</span> <span class="n">ang1</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang1</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang2</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</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">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">ang2</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang2</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<span class="c1"># redefining the .function.sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-7)</span>
<span class="c1"># to create a list of Points</span>
<div class="viewcode-block" id="sample_half_open"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.sample_half_open">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open</span><span class="p">(</span><span class="n">f</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="n">n</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
<span class="c1"># hack to sample close to the endpoint</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</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="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">n</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="n">b</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
<span class="c1"># Sample the function</span>
<span class="k">return</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">))</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span></div>
<span class="c1"># TODO: naming? combining wit non Arc version?</span>
<div class="viewcode-block" id="ArcBSplineCurveWithKnots"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">[docs]</a><span class="k">class</span> <span class="nc">ArcBSplineCurveWithKnots</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;B-spline curve with knots, an open wireframe object in local</span>
<span class="sd"> coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">knots</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
<span class="c1">#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]</span>
<span class="n">C</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">)</span>
<span class="c1">#points = [Point(*C(ui)) for ui in u]</span>
<span class="n">points</span> <span class="o">=</span> <span class="n">sample_half_open</span><span class="p">(</span><span class="n">C</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<div class="viewcode-block" id="B_spline_curve_with_knots"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.B_spline_curve_with_knots">[docs]</a><span class="k">class</span> <span class="nc">B_spline_curve_with_knots</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;B-spline curve with knots, an open wireframe object in local</span>
<span class="sd"> coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knot_multiplicities</span><span class="p">,</span>
<span class="n">knots</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
<span class="c1">#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]</span>
<span class="n">C</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">)</span>
<span class="c1">#points = [Point(*C(ui)) for ui in u]</span>
<span class="n">points</span> <span class="o">=</span> <span class="n">sample_half_open</span><span class="p">(</span><span class="n">C</span><span class="p">,</span> <span class="n">knots</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">knots</span><span class="p">[</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="n">n</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<div class="viewcode-block" id="Polygon"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polygon">[docs]</a><span class="k">class</span> <span class="nc">Polygon</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Polygon as closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">points</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">,</span> <span class="n">closed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="Circle"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Circle">[docs]</a><span class="k">class</span> <span class="nc">Circle</span><span class="p">(</span><span class="n">Polygon</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Circle a closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</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">points</span> <span class="o">=</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">n</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">radius</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">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">radius</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">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</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="mi">0</span><span class="p">))</span>
<span class="sd">&quot;&quot;&quot;Circle, a closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</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="kc">None</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="n">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</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">n</span><span class="p">)]</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<div class="viewcode-block" id="Ellipse"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Ellipse">[docs]</a><span class="k">class</span> <span class="nc">Ellipse</span><span class="p">(</span><span class="n">Polygon</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Circle, a closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">1</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="kc">None</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="n">interval</span> <span class="o">=</span> <span class="n">ellipse</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">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</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">n</span><span class="p">)]</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<div class="viewcode-block" id="Solid"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid">[docs]</a><span class="k">class</span> <span class="nc">Solid</span><span class="p">:</span>
@@ -240,6 +347,13 @@
<span class="sd">&quot;&quot;&quot;Returns the Iterator object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">())</span></div>
<div class="viewcode-block" id="World.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.__str__">[docs]</a> <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="n">result</span> <span class="o">=</span> <span class="s1">&#39;World(</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="n">result</span> <span class="o">+=</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;,</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="n">result</span> <span class="o">+=</span> <span class="s1">&#39;)&#39;</span>
<span class="k">return</span> <span class="n">result</span></div>
<span class="k">def</span> <span class="nf">_store_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Initialize or reset calculated values, because a new object</span>
<span class="sd"> was added.</span>
@@ -279,7 +393,7 @@
<div class="viewcode-block" id="World.wireframes"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes">[docs]</a> <span class="k">def</span> <span class="nf">wireframes</span><span class="p">(</span><span class="bp">self</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">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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="n">i</span><span class="o">.</span><span class="n">points</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</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="n">j</span><span class="o">.</span><span class="n">points</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
@@ -288,7 +402,7 @@
<div class="viewcode-block" id="World.wireframes_xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xy">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xy</span><span class="p">(</span><span class="bp">self</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">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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="n">i</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</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="n">j</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
@@ -297,7 +411,7 @@
<div class="viewcode-block" id="World.wireframes_xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xyz">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xyz</span><span class="p">(</span><span class="bp">self</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">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</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="n">j</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
@@ -308,6 +422,7 @@
<div class="viewcode-block" id="World.add"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">objects</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_store_init</span><span class="p">()</span> <span class="c1"># calculated values are not correct anymore</span>
<span class="c1"># [] + [] not possible bc objects are vectors</span>
<span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">append</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">objects</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>

View File

@@ -262,13 +262,18 @@
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">mpl_connect</span><span class="p">(</span><span class="s1">&#39;resize_event&#39;</span><span class="p">,</span>
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">onresize</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">))</span>
<span class="c1"># &#39;rotate: ←left, right, up, down, ctrl+left, ctrl+right\n&#39; +</span>
<span class="c1"># &#39;pan: shift+left, shift+right, shift+up, shift+down\n&#39; +</span>
<span class="c1"># &#39;zoom: ctrl+up, ctrl+down\n&#39; +</span>
<span class="c1"># &#39;view: f (front), l (left), r (right), t (top), b (bottom)\n&#39; +</span>
<span class="c1"># &#39; i (isometric), d (dimetric)&#39;,</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
<span class="mi">0</span><span class="o">+.</span><span class="mi">01</span><span class="p">,</span> <span class="mi">1</span><span class="o">-.</span><span class="mi">015</span><span class="p">,</span>
<span class="s1">&#39;rotate: left, right, up, down, ctrl+left, ctrl+right</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;pan: shift+left, shift+right, shift+up, shift+down</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;zoom: ctrl+up, ctrl+down</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;view: f (front), l (left), r (right), t (top), b (bottom)</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39; i (isometric), d (dimetric)&#39;</span><span class="p">,</span>
<span class="s1">&#39;rotate: [←], [→], [↑], [↓], [Ctrl][←], [Ctrl][→]</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;pan: [Shift][←], [Shift][→], [Shift][↑], [Shift][↓]</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;zoom: [Ctrl][↑], [Ctrl][↓]</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;view: [f]ront, [l]eft, [r]ight, [t]op, [b]ottom</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39; [i]sometric, [d]imetric&#39;</span><span class="p">,</span>
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">&#39;left&#39;</span><span class="p">,</span>
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">&#39;top&#39;</span><span class="p">,</span>
<span class="n">transform</span><span class="o">=</span><span class="n">fig</span><span class="o">.</span><span class="n">transFigure</span><span class="p">,</span>

View File

@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.helper &#8212; pylib 2019.12.21 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.helper</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;Helper objects.</span>
<span class="sd">:Date: 2020-01-01</span>
<span class="sd">.. module:: helper</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Helper 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">import</span> <span class="nn">time</span>
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">ContextDecorator</span>
<div class="viewcode-block" id="timeit"><a class="viewcode-back" href="../../pylib.helper.html#pylib.helper.timeit">[docs]</a><span class="k">class</span> <span class="nc">timeit</span><span class="p">(</span><span class="n">ContextDecorator</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Meassure time for a function or code block.</span>
<span class="sd"> :param description: description for the function or code block</span>
<span class="sd"> used for the print-out</span>
<span class="sd"> :type description: str</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; with timeit(&#39;section_test&#39;):</span>
<span class="sd"> ... # code</span>
<span class="sd"> section_test took 0.006 ms</span>
<span class="sd"> ::</span>
<span class="sd"> @timeit(&#39;func&#39;)</span>
<span class="sd"> def func():</span>
<span class="sd"> # code</span>
<span class="sd"> &gt;&gt;&gt; func()</span>
<span class="sd"> func took 0.006 ms</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span>
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span> <span class="c1"># to use as: with Timit() as t:</span>
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exc</span><span class="p">):</span> <span class="c1"># exc: type, value, traceback</span>
<span class="n">elapsed_time_ms</span> <span class="o">=</span> <span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_time</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">{:s}</span><span class="s1"> took </span><span class="si">{:.3f}</span><span class="s1"> ms&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">elapsed_time_ms</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</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>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">pylib</a></li>
</ul>
<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

@@ -130,7 +130,7 @@
<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="c1"># use the list.__getitem__ 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></div>
@@ -385,12 +385,11 @@
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../../pylib.mathematics.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">&quot;&quot;&quot;Returns a vector of length m 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"> :param fill_value: fill value</span>
<span class="sd"> :Type fill_value: scalar</span>
<span class="sd"> :Example:</span>
@@ -403,15 +402,14 @@
<div class="viewcode-block" id="vector.zeros"><a class="viewcode-back" href="../../pylib.mathematics.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">&quot;&quot;&quot;Returns a zero vector of length m 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; v = vector.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>
@@ -419,40 +417,42 @@
<div class="viewcode-block" id="vector.ones"><a class="viewcode-back" href="../../pylib.mathematics.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">&quot;&quot;&quot;Returns a vector of length m 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; v = vector.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.mathematics.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,</span>
<span class="sd"> n columns filled with random numbers.</span>
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">length</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 filled with random</span>
<span class="sd"> numbers.</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 = random(3)</span>
<span class="sd"> &gt;&gt;&gt; v = vector.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; v = vector.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>
<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">length</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../../pylib.mathematics.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>
<div class="viewcode-block" id="vector.normalized"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.normalized">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">normalized</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>
@@ -468,7 +468,12 @@
<div class="viewcode-block" id="vector.ang"><a class="viewcode-back" href="../../pylib.mathematics.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>
<span class="n">x</span> <span class="o">=</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>
<span class="c1"># decimal floating-point numbers are only approximated by the</span>
<span class="c1"># binary floating-point numbers actually stored in the machine.</span>
<span class="c1"># https://docs.python.org/3.8/tutorial/floatingpoint.html</span>
<span class="n">xr15</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">15</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">xr15</span><span class="p">)</span> <span class="k">if</span> <span class="o">-</span><span class="mi">1</span> <span class="o">&lt;=</span> <span class="n">xr15</span> <span class="o">&lt;=</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.conjugate"><a class="viewcode-back" href="../../pylib.mathematics.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>
@@ -524,9 +529,30 @@
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} = \mathbf{a} \times \mathbf{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>
<span class="k">return</span> <span class="n">vector</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.isclose"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.isclose">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">isclose</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="n">rel_tol</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">1e-8</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">rel_tol</span><span class="o">=</span><span class="n">rel_tol</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="n">abs_tol</span><span class="p">)</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="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)])</span></div>
<div class="viewcode-block" id="vector.iscloseto"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.iscloseto">[docs]</a> <span class="k">def</span> <span class="nf">iscloseto</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">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.normalize">[docs]</a> <span class="k">def</span> <span class="nf">normalize</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;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"> \mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__abs__` for a norm (magnitude) of a vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">normalized</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.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>
@@ -649,8 +675,16 @@
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], \</span>
<span class="sd"> [0, 0, 0, 0]])</span>
<span class="sd"> &gt;&gt;&gt; print(m[:])</span>
<span class="sd"> [[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[2, :])</span>
<span class="sd"> [7, 8, 9, 0]</span>
<span class="sd"> &gt;&gt;&gt; print(m[:, 2])</span>
<span class="sd"> [3, 6, 9, 0]</span>
<span class="sd"> &gt;&gt;&gt; print(m[2, 2])</span>
<span class="sd"> 9</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>
@@ -658,15 +692,143 @@
<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"># TODO single row or column = vector (1d list)?</span>
<span class="c1"># index: slice(stop), slice(start, stop[, step])</span>
<span class="c1"># for 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="c1"># use the list.__getitem__ method and convert result to matrix</span>
<span class="c1">#print(index)</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># range:range or range:single: [:, 2]</span>
<span class="c1">#print(1)</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"># single:range: [2, :], [2, 2]</span>
<span class="c1">#print(2)</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="mi">0</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">1</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing: [:], [2], [2][2]</span>
<span class="c1">#print(3)</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>
<span class="c1">#print(item)</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="ow">and</span> \
<span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</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>
<div class="viewcode-block" id="matrix.__setitem__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__setitem__">[docs]</a> <span class="k">def</span> <span class="fm">__setitem__</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="n">value</span><span class="p">):</span>
<span class="c1">#print(index, value)</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># [2, 2]</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="o">.</span><span class="fm">__setitem__</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="n">value</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># [2], [2][2]</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
<span class="c1">#print(self)</span>
<div class="viewcode-block" id="matrix.__mul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__mul__">[docs]</a> <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. (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</span>
<span class="sd"> for 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], \</span>
<span class="sd"> [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], \</span>
<span class="sd"> [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]]) * \</span>
<span class="sd"> 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]]) * \</span>
<span class="sd"> 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></div>
<div class="viewcode-block" id="matrix.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">[docs]</a> <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. (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</span>
<span class="sd"> for 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], \</span>
<span class="sd"> [9, 10, 11, 12], [0, 0, 0, 1]])</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], \</span>
<span class="sd"> [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__` and :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></div>
<div class="viewcode-block" id="matrix.__str__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__str__">[docs]</a> <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></div>
<div class="viewcode-block" id="matrix.__repr__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__repr__">[docs]</a> <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>
<div class="viewcode-block" id="matrix.zeros"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.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">m</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a zero matrix of size mxn; m rows and n columns</span>
<span class="sd"> filled with zeros.</span>
<span class="sd"> :param m: number of rows of the matrix, e. g. 3</span>
<span class="sd"> :type m: int</span>
<span class="sd"> :param n: number of columns of the matrix, e. g. 3</span>
<span class="sd"> :type n: int</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix.zeros(3, 3)</span>
<span class="sd"> &gt;&gt;&gt; print(m)\</span>
<span class="sd"> [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="mf">0.</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">n</span><span class="p">)]</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">)])</span></div>
<div class="viewcode-block" id="matrix.rx"><a class="viewcode-back" href="../../pylib.mathematics.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>
@@ -809,97 +971,23 @@
<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.__mul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__mul__">[docs]</a> <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. (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</span>
<span class="sd"> for 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], \</span>
<span class="sd"> [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], \</span>
<span class="sd"> [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]]) * \</span>
<span class="sd"> 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]]) * \</span>
<span class="sd"> 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>
<div class="viewcode-block" id="matrix.transposed"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.transposed">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">transposed</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transpose</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></div>
<span class="n">m</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">len</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="n">new</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</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">m</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">new</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span>
<span class="k">return</span> <span class="n">new</span></div>
<div class="viewcode-block" id="matrix.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">[docs]</a> <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. (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</span>
<span class="sd"> for 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], \</span>
<span class="sd"> [9, 10, 11, 12], [0, 0, 0, 1]])</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], \</span>
<span class="sd"> [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__` and :meth:`vector.__mul__` for vector * matrix</span>
<div class="viewcode-block" id="matrix.transpose"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.transpose">[docs]</a> <span class="k">def</span> <span class="nf">transpose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transpose</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></div>
<div class="viewcode-block" id="matrix.__str__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__str__">[docs]</a> <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></div>
<div class="viewcode-block" id="matrix.__repr__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__repr__">[docs]</a> <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>
<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">transposed</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="matrix.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.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>

View File

@@ -35,7 +35,7 @@
<h1>Source code for pylib.numerical.ode</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;Numerical solver of ordinary differential equations.</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Numerical solver of ordinary differential equations.</span>
<span class="sd">Solves the initial value problem for systems of first order</span>
<span class="sd">ordinary differential equations.</span>
@@ -47,9 +47,14 @@
<span class="sd"> :synopsis: Numerical solver.</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">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
<span class="sd">Approximate the solution :math:`x(t)` of the initial value problem</span>
<span class="sd">.. math ::</span>
<span class="sd"> \frac{\mathrm{d}x}{\mathrm{d}t} = \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> x(t_0) &amp;= x_0 \\</span>
<span class="sd"> t &amp;\in [t_0, t_n]</span>
<span class="sd">&quot;&quot;&quot;</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>
@@ -73,20 +78,21 @@
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> Approximate the solution of the initial value problem</span>
<span class="sd"> Approximate the solution :math:`x(t)` of the initial value problem</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x} &amp;= f(t,x) \\</span>
<span class="sd"> x(t_0) &amp;= x_0</span>
<span class="sd"> x(t_0) &amp;= x_0 \\</span>
<span class="sd"> t &amp;\in [t_0, t_n]</span>
<span class="sd"> Choose a value h for the size of every step and set</span>
<span class="sd"> .. math ::</span>
<span class="sd"> t_i = t_0 + i h ~,\quad i=1,2,\ldots,n</span>
<span class="sd"> t_{i+1} = t_0 + i h = t_i + h ~,\quad i=0,1,2,\ldots,n-1</span>
<span class="sd"> The derivative of the solution is approximated as the forward</span>
<span class="sd"> difference equation</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}</span>
@@ -166,13 +172,23 @@
<span class="sd"> the step size, and the global error (error at a given time) is</span>
<span class="sd"> proportional to the step size.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
<span class="kn">from</span> <span class="nn">pylib.data</span> <span class="kn">import</span> <span class="n">issequence</span>
<span class="k">if</span> <span class="n">issequence</span><span class="p">(</span><span class="n">x0</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)))</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">x0</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
<span class="c1"># Approximate solution at next value of x</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Numerical integration of ODE using explicit &#39;</span> <span class="o">+</span>
<span class="s1">&#39;first-order method (Euler / Runge-Kutta) was successful.&#39;</span><span class="p">)</span>
@@ -218,6 +234,31 @@
<span class="sd"> ...)</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> Problem</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{y} &amp;= f(t, y) \\</span>
<span class="sd"> y(t_0) &amp;= y_0 \\</span>
<span class="sd"> t &amp;\in [t_0, t_n]</span>
<span class="sd"> Increment :math:`\delta t = t_{i+1}-t_i ~,~~ i=0,1,2,\ldots,n-1`</span>
<span class="sd"> .. math::</span>
<span class="sd"> y_{n+1} &amp;= y_{i} + \tfrac{1}{6}(</span>
<span class="sd"> \delta y_{i,1} + 2\delta y_{i,2} + 2\delta y_{i,3} +</span>
<span class="sd"> \delta y_{i,4}) \\</span>
<span class="sd"> &amp; \qquad \text{with} \\</span>
<span class="sd"> \delta y_{i,1} &amp;= \delta t \cdot y&#39;(t_{i}, ~ y_{i}) \\</span>
<span class="sd"> \delta y_{i,2} &amp;= \delta t \cdot</span>
<span class="sd"> y&#39;(t_{i}+\tfrac{1}{2}\delta t, ~</span>
<span class="sd"> y_{i}+\tfrac{1}{2}\delta y_{i,1}) \\</span>
<span class="sd"> \delta y_{i,3} &amp;= \delta t \cdot</span>
<span class="sd"> y&#39;(t_{i}+\tfrac{1}{2}\delta t, ~</span>
<span class="sd"> y_{i}+\tfrac{1}{2}\delta y_{i,2}) \\</span>
<span class="sd"> \delta y_{i,4} &amp;= \delta t \cdot</span>
<span class="sd"> y&#39;(t_{i}+\delta t, ~ y_{i}+\delta y_{i,3})</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition</span>
@@ -237,7 +278,7 @@
<div class="viewcode-block" id="fpi"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.fpi">[docs]</a><span class="k">def</span> <span class="nf">fpi</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">ti</span><span class="p">,</span> <span class="n">ti1</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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;Fixed-point iteration.</span>
<span class="sd"> </span>
<span class="sd"> :param f: the function to iterate :math:`f = \dot{x}(x,t)`</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param xi: initial condition :math:`x_i`</span>
@@ -255,19 +296,19 @@
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> :returns: :math:`x_{i}`</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i,j=0} = x_{i}</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i,j+1} = x_i + \dot{x}(x_{i,j}, t_{i+1})\cdot(t_{i+1}-t_i)</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> \text{residuum} = \frac{\lVert x_{i,j+1}-x_{i,j}\rVert}</span>
<span class="sd"> {\lVert x_{i,j+1} \rVert} &lt; \varepsilon</span>
<span class="sd"> </span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_{i} = x_{i,j=\text{end}}</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -301,7 +342,7 @@
<span class="sd"> :type tol: float</span>
<span class="sd"> :param verbose: print information (default = False)</span>
<span class="sd"> :type verbose: bool</span>
<span class="sd"> </span>
<span class="sd"> The backward Euler method has order one and is A-stable.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
@@ -313,8 +354,9 @@
<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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span>
<span class="n">xi</span><span class="p">,</span> <span class="n">iteration</span> <span class="o">=</span> <span class="n">fpi</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="p">,</span>
<span class="n">tol</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span>
<span class="n">xi</span><span class="p">,</span> <span class="n">iteration</span> <span class="o">=</span> <span class="n">fpi</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span>
<span class="n">max_iterations</span><span class="o">=</span><span class="n">max_iterations</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="n">tol</span><span class="p">,</span>
<span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xi</span>
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">iteration</span>
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
@@ -382,7 +424,7 @@
<span class="n">dot</span><span class="p">(</span><span class="n">dNp</span><span class="p">,</span> <span class="p">(</span><span class="n">xp1</span><span class="o">-</span><span class="n">xpi</span><span class="p">))))</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="n">gamma</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">gamma</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">xi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span> <span class="o">+</span> <span class="n">Dt</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="p">(</span> <span class="p">(</span><span class="o">.</span><span class="mi">5</span><span class="o">-</span><span class="n">beta</span><span class="p">)</span><span class="o">*</span><span class="n">xppi</span> <span class="o">+</span> <span class="n">beta</span><span class="o">*</span><span class="n">xpp11</span> <span class="p">)</span>
<span class="n">residuum</span> <span class="o">=</span> <span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="o">-</span><span class="n">xpp1</span><span class="p">)</span><span class="o">/</span><span class="n">norm</span><span class="p">(</span><span class="n">xpp11</span><span class="p">)</span>
<span class="n">xpp1</span> <span class="o">=</span> <span class="n">xpp11</span>
<span class="k">if</span> <span class="n">residuum</span> <span class="o">&lt;</span> <span class="n">tol</span><span class="p">:</span>
@@ -398,10 +440,12 @@
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
<div class="viewcode-block" id="newmark_newtonraphson_rdk"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_rdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_rdk</span><span class="p">(</span><span class="n">fnm</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</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">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
<div class="viewcode-block" id="newmark_newtonraphson_mdk"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_mdk</span><span class="p">(</span><span class="n">fmdk</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</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">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
<span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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;Newmark method.</span>
<span class="sd"> Using m mass, d damping and k stiffness formulation.</span>
<span class="sd"> :param f: the function to solve</span>
<span class="sd"> :type f: function</span>
<span class="sd"> :param x0: initial condition</span>
@@ -435,9 +479,9 @@
<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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fnm</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span>
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fmdk</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span>
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</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="n">xpi</span> <span class="o">=</span> <span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</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="n">xppi</span> <span class="o">=</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
@@ -450,7 +494,7 @@
<span class="c1"># Approximate solution at next value of x</span>
<span class="c1">#x11 = x[i,:] + dxdt*Dt</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">rmx</span><span class="o">+</span><span class="n">rdx</span><span class="o">+</span><span class="n">rkx</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span> <span class="o">+</span> <span class="n">rdxp</span><span class="o">*</span><span class="n">Dt</span><span class="o">/</span><span class="mi">2</span> <span class="o">+</span> <span class="n">rmxpp</span>
<span class="n">r</span> <span class="o">=</span> <span class="p">(</span><span class="n">rmx</span><span class="o">+</span><span class="n">rdx</span><span class="o">+</span><span class="n">rkx</span><span class="p">)</span><span class="o">*</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span> <span class="o">+</span> <span class="n">rdxp</span><span class="o">*</span><span class="n">Dt</span><span class="o">/</span><span class="mi">2</span> <span class="o">+</span> <span class="n">rmxpp</span>
<span class="n">rp</span> <span class="o">=</span> <span class="n">f</span> <span class="o">-</span> <span class="p">(</span><span class="n">rm</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rmx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">-</span> \
<span class="n">dot</span><span class="p">(</span><span class="n">rmxpp</span><span class="p">,</span> <span class="n">xppi</span><span class="p">)</span> <span class="o">+</span> \
<span class="n">rd</span> <span class="o">+</span> <span class="n">dot</span><span class="p">(</span><span class="n">rdx</span><span class="p">,</span> <span class="p">(</span><span class="n">Dt</span><span class="o">*</span><span class="n">xpi</span><span class="o">+</span><span class="n">Dt</span><span class="o">**</span><span class="mf">2.</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="n">xppi</span><span class="p">))</span> <span class="o">+</span> \

View File

@@ -37,10 +37,10 @@
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Mathmatical models governed by ordinary differential equations.</span>
<span class="sd">Describes initial value problems as systems of first order ordinary differential</span>
<span class="sd">equations.</span>
<span class="sd">Describes initial value problems as systems of first order ordinary</span>
<span class="sd">differential equations.</span>
<span class="sd">:Date: 2019-05-25</span>
<span class="sd">:Date: 2020-01-08</span>
<span class="sd">.. module:: ode_model</span>
<span class="sd"> :platform: *nix, Windows</span>
@@ -48,111 +48,172 @@
<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="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.ode_model.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>
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.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">d</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">T</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation of an eccentric disk.</span>
<span class="sd"> :param x: values of the function</span>
<span class="sd"> :type x: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> :param d: diameter</span>
<span class="sd"> :type d: float</span>
<span class="sd"> :param e: eccentricity</span>
<span class="sd"> :type e: float</span>
<span class="sd"> :param T: torque</span>
<span class="sd"> :type T: float</span>
<span class="sd"> :param method: the method to use, default = &#39;&#39;.</span>
<span class="sd"> :type method:</span>
<span class="sd"> :returns: disk function. This function is independent of the time.</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> * For method = &#39;&#39;: f(x, t=0) -&gt; (xp1, xp2, xp3, xp4, xp5, xp6).</span>
<span class="sd"> x is (x, y, phi, x&#39;, y&#39;, phi&#39;) and the return values are (x&#39;,</span>
<span class="sd"> y&#39;, phi&#39;, x&#39;&#39;, y&#39;&#39;, phi&#39;&#39;)</span>
<span class="sd"> * For method = &#39;nm&#39;: f(xn, xpn, xppn, t=0) -&gt; (N, dN, dNp, dNpp).</span>
<span class="sd"> xn are the values of the function (x, y, phi), xpn are first</span>
<span class="sd"> derivative values of the function (x&#39;, y&#39;, phi&#39;) and xppn are</span>
<span class="sd"> the second derivative values of the function (x&#39;&#39;, y&#39;&#39;, phi&#39;&#39;).</span>
<span class="sd"> The return values are (N, dN, dNp, dNpp)</span>
<span class="sd"> * For method = &#39;nmmdk&#39;: f(xn, xpn, xppn, t=0) -&gt;</span>
<span class="sd"> (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f).</span>
<span class="sd"> xn are the values of the function (x, y, phi), xpn are first</span>
<span class="sd"> derivative values of the function (x&#39;, y&#39;, phi&#39;) and xppn are</span>
<span class="sd"> the second derivative values of the function (x&#39;&#39;, y&#39;&#39;, phi&#39;&#39;).</span>
<span class="sd"> The return values are (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx,</span>
<span class="sd"> f)</span>
<span class="sd"> :rtype: function</span>
<span class="sd"> Model</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \begin{vmatrix}</span>
<span class="sd"> \ddot{x} + \cos(\varphi)\ddot{\varphi} + 2d \,\dot{x} - \sin(\varphi) \,\dot{\varphi}^2 + 2d\cos(\varphi)\, \dot{\varphi} + x &amp;=&amp;</span>
<span class="sd"> 0 \\</span>
<span class="sd"> \ddot{y} - \sin(\varphi)\ddot{\varphi} + 2d \,\dot{y} - \cos(\varphi) \,\dot{\varphi}^2 + 2d\sin(\varphi)\, \dot{\varphi} + y &amp;=&amp;</span>
<span class="sd"> 0 \\</span>
<span class="sd"> \ddot{\varphi} + e\,y\sin(\varphi) - e\,x\cos(\varphi) &amp;=&amp; t</span>
<span class="sd"> \end{vmatrix}</span>
<span class="sd"> \\</span>
<span class="sd"> \begin{vmatrix}</span>
<span class="sd"> \ddot{x} + \cos(\varphi)\ddot{\varphi} &amp;=&amp;</span>
<span class="sd"> -2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\</span>
<span class="sd"> \ddot{y} - \sin(\varphi)\ddot{\varphi} &amp;=&amp;</span>
<span class="sd"> -2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\</span>
<span class="sd"> \ddot{\varphi} &amp;=&amp; t - e\,y\sin(\varphi) + e\,x\cos(\varphi)</span>
<span class="sd"> \end{vmatrix}</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \mathbf{M}(\mathbf{x}) \cdot \mathbf{\ddot{x}} &amp;=</span>
<span class="sd"> \mathbf{f}(\mathbf{x}, \mathbf{\dot{x}})</span>
<span class="sd"> \\</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; \cos \varphi \\</span>
<span class="sd"> 0 &amp; 1 &amp; -\sin \varphi \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix} \cdot</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \ddot{x} \\ \ddot{y} \\ \ddot{\varphi}</span>
<span class="sd"> \end{bmatrix} &amp;= \begin{bmatrix}</span>
<span class="sd"> -2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\</span>
<span class="sd"> -2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\</span>
<span class="sd"> t - e\,y\sin(\varphi) + e\,x\cos(\varphi)</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> returns</span>
<span class="sd"> .. math ::</span>
<span class="sd"> x_1 &amp;= x &amp;\quad x_4 &amp;= \dot{x}_1 = \dot{x} &amp;\quad \dot{x}_4 &amp;= \ddot{x} \\</span>
<span class="sd"> x_2 &amp;= y &amp;\quad x_5 &amp;= \dot{x}_2 = \dot{y} &amp;\quad \dot{x}_5 &amp;= \ddot{y} \\</span>
<span class="sd"> x_3 &amp;= \varphi &amp;\quad x_6 &amp;= \dot{x}_3 = \dot{\varphi} &amp;\quad \dot{x}_6 &amp;= \ddot{\varphi} \\</span>
<span class="sd"> .. math ::</span>
<span class="sd"> \dot{q} &amp;= f(x) \\</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \dot{x}_1 \\</span>
<span class="sd"> \dot{x}_2 \\</span>
<span class="sd"> \dot{x}_3 \\</span>
<span class="sd"> \dot{x}_4 \\</span>
<span class="sd"> \dot{x}_5 \\</span>
<span class="sd"> \dot{x}_6</span>
<span class="sd"> \end{bmatrix} &amp;= \begin{bmatrix}</span>
<span class="sd"> x_4 \\</span>
<span class="sd"> x_5 \\</span>
<span class="sd"> x_6 \\</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; \cos x_3 \\</span>
<span class="sd"> 0 &amp; 1 &amp; -\sin x_3 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}^{-1} \cdot \begin{bmatrix}</span>
<span class="sd"> -2d \,x_4 + \sin(x_3) \,x_6^2 -2d\cos(x_3)\, x_6 - x_1 \\</span>
<span class="sd"> -2d \,x_5 + \cos(x_3) \,x_6^2 -2d\sin(x_3)\, x_6 - x_2 \\</span>
<span class="sd"> t - e\,x_2\sin(x_3) + e\,x_1\cos(x_3)</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> Three explicit differential equations of order 2 reducted to a</span>
<span class="sd"> system of 3x2 first-order differential equations.</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`pylib.numerical.ode.newmark_newtonraphson` and</span>
<span class="sd"> :meth:`pylib.numerical.ode.newmark_newtonraphson_mdk`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">qp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="n">qp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="n">qp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</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">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> \
<span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
<span class="n">qp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
<span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span> <span class="o">=</span> <span class="n">qp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
<span class="k">return</span> <span class="n">qp1</span><span class="p">,</span> <span class="n">qp2</span><span class="p">,</span> <span class="n">qp3</span><span class="p">,</span> <span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span></div>
<div class="viewcode-block" id="disk_nm"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nm">[docs]</a><span class="k">def</span> <span class="nf">disk_nm</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</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>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: first derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">dNpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span></div>
<div class="viewcode-block" id="disk_nmmdk"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nmmdk">[docs]</a><span class="k">def</span> <span class="nf">disk_nmmdk</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</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>
<span class="sd"> :param xn: values of the function</span>
<span class="sd"> :type xn: list</span>
<span class="sd"> :param xpn: derivative values of the function</span>
<span class="sd"> :type xpn: list</span>
<span class="sd"> :param xppn: second derivative values of the function</span>
<span class="sd"> :type xppn: list</span>
<span class="sd"> :param t: time</span>
<span class="sd"> :type t: list</span>
<span class="sd"> :param `*p`: parameters of the function</span>
<span class="sd"> * diameter</span>
<span class="sd"> * eccentricity</span>
<span class="sd"> * torque</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</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="n">rmxpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="n">rdx</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</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="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="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">array</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="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="kc">True</span>
<span class="n">p</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">T</span><span class="p">)</span>
<span class="k">if</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">xp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="n">xp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
<span class="n">xp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</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">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span> \
<span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">**</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
<span class="n">xp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
<span class="n">xp4</span><span class="p">,</span> <span class="n">xp5</span><span class="p">,</span> <span class="n">xp6</span> <span class="o">=</span> <span class="n">xp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
<span class="k">return</span> <span class="n">xp1</span><span class="p">,</span> <span class="n">xp2</span><span class="p">,</span> <span class="n">xp3</span><span class="p">,</span> <span class="n">xp4</span><span class="p">,</span> <span class="n">xp5</span><span class="p">,</span> <span class="n">xp6</span>
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;nm&#39;</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">dNpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span>
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;nmmdk&#39;</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</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="n">rmxpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</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">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="n">rdx</span> <span class="o">=</span> <span class="n">array</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</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="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</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="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="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
<span class="n">f</span> <span class="o">=</span> <span class="n">array</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="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span>
<span class="k">return</span> <span class="n">f</span></div>
</pre></div>
</div>

View File

@@ -0,0 +1,7 @@
pylib.data\_step module
=======================
.. automodule:: pylib.data_step
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,7 @@
pylib.data\_step\_std module
============================
.. automodule:: pylib.data_step_std
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,7 @@
pylib.helper module
===================
.. automodule:: pylib.helper
:members:
:undoc-members:
:show-inheritance:

View File

@@ -19,6 +19,8 @@ Submodules
.. toctree::
pylib.data
pylib.data_step
pylib.data_step_std
pylib.date
pylib.drawblock
pylib.function
@@ -27,5 +29,6 @@ Submodules
pylib.geometry2d_plot
pylib.geometry_plot
pylib.geometry_plot_pylab
pylib.helper
pylib.mathematics
pylib.time_of_day

View File

@@ -259,8 +259,8 @@ dt:target, .highlight {
}
div.warning {
background-color: #FCC;
border: 1px solid #FAA;
background-color: rgb(82, 0, 0);
border: 1px solid rgb(170, 0, 0);
}
div.danger {
@@ -455,7 +455,7 @@ dl pre, blockquote pre, li pre {
}
tt, code {
background-color: #ecf0f3;
background-color: #25272c;
color: #b2b2b2;
/* padding: 1px 2px; */
}

View File

@@ -11,3 +11,10 @@ table.indextable tr.cap {
position: relative;
top: -1.5em;
}
/* sidebar_header is only set for normal screen size */
@media screen and (max-width: 875px) {
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #b2b2b2;
}
}

View File

@@ -82,7 +82,7 @@
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__iadd__">__iadd__() (vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__iter__">__iter__() (Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__iter__">__iter__() (Polyline method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.World.__iter__">(World method)</a>
@@ -94,14 +94,14 @@
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__matmul__">__matmul__() (vector method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__mul__">__mul__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__mul__">(vector method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__neg__">__neg__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__pos__">__pos__() (vector method)</a>
@@ -109,6 +109,8 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__repr__">__repr__() (matrix method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__repr__">(Polyline method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__repr__">(vector method)</a>
</li>
</ul></li>
@@ -118,12 +120,20 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__rmul__">(vector method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">__str__() (matrix method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__setitem__">__setitem__() (matrix method)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CARTESIAN_POINT.__str__">__str__() (CARTESIAN_POINT method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">(matrix method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__str__">(Polyline method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__str__">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__str__">(Wireframe method)</a>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX_POINT.__str__">(VERTEX_POINT method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.__str__">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__sub__">__sub__() (vector method)</a>
@@ -139,14 +149,26 @@
<li><a href="pylib.geometry.html#pylib.geometry.World.add">add() (World method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ang">ang() (vector static method)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.angle">angle() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.arc_circle_geometry">arc_circle_geometry() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">ArcBSplineCurveWithKnots (class in pylib.geometry)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.angle">angle() (in module pylib.geometry2d)</a>
<li><a href="pylib.geometry.html#pylib.geometry.ArcCircle">ArcCircle (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.ArcEllipse">ArcEllipse (class in pylib.geometry)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.arg">arg() (vector static method)</a>
</li>
<li><a href="pylib.date.html#pylib.date.ascension_of_jesus">ascension_of_jesus() (in module pylib.date)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.AXIS2_PLACEMENT_2D">AXIS2_PLACEMENT_2D (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.AXIS2_PLACEMENT_3D">AXIS2_PLACEMENT_3D (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -154,6 +176,28 @@
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.function.html#pylib.function.b_spline_basis">b_spline_basis() (in module pylib.function)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.B_SPLINE_CURVE">B_SPLINE_CURVE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.B_SPLINE_CURVE_WITH_KNOTS">B_SPLINE_CURVE_WITH_KNOTS (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.B_spline_curve_with_knots">B_spline_curve_with_knots (class in pylib.geometry)</a>
</li>
<li><a href="pylib.function.html#pylib.function.b_spline_curve_with_knots">b_spline_curve_with_knots() (in module pylib.function)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step.html#pylib.data_step.b_spline_curve_with_knots_geometry">b_spline_curve_with_knots_geometry() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.function.html#pylib.function.b_spline_knots">b_spline_knots() (in module pylib.function)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.boolean_choose">boolean_choose() (in module pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.BOOLEAN_to_bool">BOOLEAN_to_bool() (in module pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.BOUNDED_CURVE">BOUNDED_CURVE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.bounding_box">bounding_box() (World method)</a>
</li>
</ul></td>
@@ -163,29 +207,43 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.cad_wireframe">cad_wireframe() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CARTESIAN_POINT">CARTESIAN_POINT (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.center">center() (World method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">ch_cs() (Solid method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.ch_cs">ch_cs() (Polyline method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">(Solid method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">(Wireframe method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CIRCLE">CIRCLE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Circle">Circle (class in pylib.geometry)</a>
</li>
<li><a href="pylib.function.html#pylib.function.circle">circle() (in module pylib.function)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Properties.circle_sectors">circle_sectors (Properties attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CONIC">CONIC (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
</li>
<li><a href="pylib.function.html#pylib.function.cosine_wave">cosine_wave() (in module pylib.function)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Direction.cross">cross() (Direction class method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">(vector static method)</a>
</li>
</ul></li>
<li><a href="pylib.geometry.html#pylib.geometry.CS">CS (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.cs">cs() (World method)</a>
@@ -195,6 +253,8 @@
<li><a href="pylib.geometry2d.html#pylib.geometry2d.cubic_deg">cubic_deg() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.cubics">cubics() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CURVE">CURVE (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -204,21 +264,35 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data.html#module-data">data (module)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.data_cmds_to_data_dict">data_cmds_to_data_dict() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_edge_curve_to_geometry">data_dict_edge_curve_to_geometry() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world">data_dict_to_geometry_world() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world_edge_curve">data_dict_to_geometry_world_edge_curve() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.data_section_dict">data_section_dict() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data_step.html#module-data_step">data_step (module)</a>
</li>
<li><a href="pylib.data_step_std.html#module-data_step_std">data_step_std (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.date.html#module-date">date (module)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.days">days() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.days_norm">days_norm() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.dimension_of">dimension_of() (in module pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.DIRECTION">DIRECTION (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Direction">Direction (class in pylib.geometry)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk">disk() (in module pylib.numerical.ode_model)</a>
</li>
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nm">disk_nm() (in module pylib.numerical.ode_model)</a>
</li>
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nmmdk">disk_nmmdk() (in module pylib.numerical.ode_model)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.distance">distance() (in module pylib.geometry2d)</a>
</li>
@@ -236,13 +310,25 @@
</li>
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.e4">e4() (in module pylib.numerical.ode)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.date.html#pylib.date.easter_friday">easter_friday() (in module pylib.date)</a>
</li>
<li><a href="pylib.date.html#pylib.date.easter_monday">easter_monday() (in module pylib.date)</a>
</li>
<li><a href="pylib.date.html#pylib.date.easter_sunday">easter_sunday() (in module pylib.date)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE">EDGE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE_CURVE">EDGE_CURVE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE_LOOP">EDGE_LOOP (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.ELLIPSE">ELLIPSE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Ellipse">Ellipse (class in pylib.geometry)</a>
</li>
<li><a href="pylib.function.html#pylib.function.ellipse">ellipse() (in module pylib.function)</a>
</li>
<li><a href="pylib.function.html#pylib.function.epitrochoid">epitrochoid() (in module pylib.function)</a>
</li>
@@ -252,6 +338,8 @@
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data.html#pylib.data.find_last">find_last() (in module pylib.data)</a>
</li>
<li><a href="pylib.numerical.fit.html#module-fit">fit (module)</a>
</li>
<li><a href="pylib.data.html#pylib.data.fold_list">fold_list() (in module pylib.data)</a>
@@ -276,12 +364,14 @@
</li>
<li><a href="pylib.date.html#pylib.date.gaußsche_osterformel">gaußsche_osterformel() (in module pylib.date)</a>
</li>
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.GEOMETRIC_REPRESENTATION_ITEM">GEOMETRIC_REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
</li>
<li><a href="pylib.geometry2d_plot.html#module-geometry2d_plot">geometry2d_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot.html#module-geometry_plot">geometry_plot (module)</a>
@@ -298,6 +388,8 @@
<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.helper.html#module-helper">helper (module)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Hexahedron">Hexahedron (class in pylib.geometry)</a>
</li>
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
@@ -317,16 +409,24 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.i1">i1() (in module pylib.numerical.ode)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.REPRESENTATION_ITEM.idn">idn (REPRESENTATION_ITEM attribute)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.CS.init_xyz">init_xyz() (CS class method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.interpolate_hermite">interpolate_hermite() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.isclose">isclose() (vector static method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.iscloseto">iscloseto() (vector method)</a>
</li>
<li><a href="pylib.data.html#pylib.data.issequence">issequence() (in module pylib.data)</a>
</li>
@@ -337,16 +437,24 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.lcm">lcm() (in module pylib.mathematics)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.LINE">LINE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Line">Line (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.line">line() (in module pylib.geometry2d)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.line">line() (in module pylib.geometry2d)</a>
<li><a href="pylib.data_step.html#pylib.data_step.line_geometry">line_geometry() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.lines">lines() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.list_to_array">list_to_array() (in module pylib.data_step_std)</a>
</li>
<li><a href="pylib.data.html#pylib.data.load">load() (in module pylib.data)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.LOOP">LOOP (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -371,12 +479,14 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson">newmark_newtonraphson() (in module pylib.numerical.ode)</a>
</li>
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk">newmark_newtonraphson_mdk() (in module pylib.numerical.ode)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_rdk">newmark_newtonraphson_rdk() (in module pylib.numerical.ode)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalize">normalize() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalize">normalize() (vector static method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalized">normalized() (vector static method)</a>
</li>
</ul></td>
</tr></table>
@@ -393,6 +503,8 @@
<li><a href="pylib.numerical.ode_model.html#module-ode_model">ode_model (module)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ones">ones() (vector static method)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.ORIENTED_EDGE">ORIENTED_EDGE (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -400,32 +512,52 @@
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.PATH">PATH (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.path_head_to_tail">path_head_to_tail() (in module pylib.data_step_std)</a>
</li>
<li><a href="pylib.date.html#pylib.date.pentecost">pentecost() (in module pylib.date)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.PLACEMENT">PLACEMENT (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_cubic_lines">plot_cubic_lines() (in module pylib.geometry2d_plot)</a>
</li>
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_lines">plot_lines() (in module pylib.geometry2d_plot)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.plot_post">plot_post() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.POINT">POINT (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.points">points() (Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Polygon">Polygon (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline">Polyline (class in pylib.geometry)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.print_edge_loop">print_edge_loop() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data.html#pylib.data.print_list">print_list() (in module pylib.data)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Point.projection">projection() (Point method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Properties">Properties (class in pylib.geometry)</a>
</li>
<li><a href="pylib.html#module-pylib">pylib (module)</a>
</li>
<li><a href="pylib.data.html#module-pylib.data">pylib.data (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step.html#module-pylib.data_step">pylib.data_step (module)</a>
</li>
<li><a href="pylib.data_step_std.html#module-pylib.data_step_std">pylib.data_step_std (module)</a>
</li>
<li><a href="pylib.date.html#module-pylib.date">pylib.date (module)</a>
</li>
<li><a href="pylib.drawblock.html#module-pylib.drawblock">pylib.drawblock (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.function.html#module-pylib.function">pylib.function (module)</a>
</li>
<li><a href="pylib.geometry.html#module-pylib.geometry">pylib.geometry (module)</a>
@@ -437,6 +569,8 @@
<li><a href="pylib.geometry_plot.html#module-pylib.geometry_plot">pylib.geometry_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab">pylib.geometry_plot_pylab (module)</a>
</li>
<li><a href="pylib.helper.html#module-pylib.helper">pylib.helper (module)</a>
</li>
<li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a>
</li>
@@ -463,8 +597,12 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.re">re() (vector static method)</a>
</li>
<li><a href="pylib.data.html#pylib.data.read">read() (in module pylib.data)</a>
</li>
<li><a href="pylib.data.html#pylib.data.read_columns">read_columns() (in module pylib.data)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rectangle">rectangle() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.REPRESENTATION_ITEM">REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate">rotate() (in module pylib.geometry2d)</a>
</li>
@@ -473,23 +611,23 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_x">rotate_x() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_x">(vector method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_x">(Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_x">(Wireframe method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_x">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_x">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate_xy">rotate_xy() (in module pylib.geometry2d)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate_xy">rotate_xy() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_y">rotate_y() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_y">(vector method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_y">(Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_y">(Wireframe method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_y">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_y">(World method)</a>
</li>
@@ -497,9 +635,9 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_z">rotate_z() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_z">(vector method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_z">(Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_z">(Wireframe method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_z">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_z">(World method)</a>
</li>
@@ -517,25 +655,35 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.s">s() (matrix static method)</a>
</li>
<li><a href="pylib.function.html#pylib.function.sample_half_open">sample_half_open() (in module pylib.function)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.sample_half_open">(in module pylib.geometry)</a>
</li>
</ul></li>
<li><a href="pylib.function.html#pylib.function.sample_half_open_seq">sample_half_open_seq() (in module pylib.function)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.scale">(Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.scale">(Solid method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.scale">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.scale">(Wireframe method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.scale">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.SEAM_CURVE">SEAM_CURVE (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds">seconds() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.data.html#pylib.data.seq">seq() (in module pylib.data)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.set_aspect_equal">set_aspect_equal() (in module pylib.geometry_plot_pylab)</a>
@@ -547,8 +695,18 @@
<li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.square">square() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.step">step (class in pylib.data_step)</a>
</li>
<li><a href="pylib.data.html#pylib.data.store">store() (in module pylib.data)</a>
</li>
<li><a href="pylib.data.html#pylib.data.str_between">str_between() (in module pylib.data)</a>
</li>
<li><a href="pylib.data_step.html#pylib.data_step.str_to_cmd_args">str_to_cmd_args() (in module pylib.data_step)</a>
</li>
<li><a href="pylib.data.html#pylib.data.str_to_list">str_to_list() (in module pylib.data)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.SURFACE_CURVE">SURFACE_CURVE (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -559,8 +717,12 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.t">t() (matrix static method)</a>
</li>
<li><a href="pylib.time_of_day.html#module-time_of_day">time_of_day (module)</a>
</li>
<li><a href="pylib.helper.html#pylib.helper.timeit">timeit (class in pylib.helper)</a>
</li>
<li><a href="pylib.function.html#pylib.function.to_str">to_str() (in module pylib.function)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.TOPOLOGICAL_REPRESENTATION_ITEM">TOPOLOGICAL_REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.transform">transform() (in module pylib.time_of_day)</a>
</li>
@@ -570,12 +732,12 @@
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.translate">(matrix method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.translate">(Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.translate">(Solid method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.translate">(Wireframe method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.translate">(World method)</a>
</li>
@@ -583,6 +745,10 @@
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.translate_xy">translate_xy() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.transpose">transpose() (matrix method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.transposed">transposed() (matrix static method)</a>
</li>
<li><a href="pylib.numerical.integration.html#pylib.numerical.integration.trapez">trapez() (in module pylib.numerical.integration)</a>
</li>
@@ -593,6 +759,12 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data.html#pylib.data.unique_ending">unique_ending() (in module pylib.data)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data.html#pylib.data.unique_list">unique_list() (in module pylib.data)</a>
</li>
<li><a href="pylib.data.html#pylib.data.unique_list_hashable">unique_list_hashable() (in module pylib.data)</a>
</li>
</ul></td>
</tr></table>
@@ -600,7 +772,15 @@
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VECTOR">VECTOR (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector">vector (class in pylib.mathematics)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX">VERTEX (class in pylib.data_step_std)</a>
</li>
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX_POINT">VERTEX_POINT (class in pylib.data_step_std)</a>
</li>
</ul></td>
</tr></table>
@@ -608,8 +788,6 @@
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.wireframe3d">wireframe3d() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.wireframes">wireframes() (Solid method)</a>
@@ -634,15 +812,15 @@
<h2 id="X">X</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.CS.x90">x90() (CS static method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.CS.x90">x90() (CS class method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.CS.xm90">xm90() (CS static method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.CS.xm90">xm90() (CS class method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xy">xy() (Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.xy">xy() (Polyline method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">xyz() (Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.xyz">xyz() (Polyline method)</a>
</li>
</ul></td>
</tr></table>
@@ -650,11 +828,11 @@
<h2 id="Y">Y</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.CS.y90">y90() (CS static method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.CS.y90">y90() (CS class method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.CS.ym90">ym90() (CS static method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.CS.ym90">ym90() (CS class method)</a>
</li>
</ul></td>
</tr></table>
@@ -662,8 +840,12 @@
<h2 id="Z">Z</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.zeros">zeros() (vector static method)</a>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.zeros">zeros() (matrix static method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.zeros">(vector static method)</a>
</li>
</ul></li>
</ul></td>
</tr></table>

View File

@@ -48,17 +48,17 @@
</li>
<li class="toctree-l2"><a class="reference internal" href="pylib.html#submodules">Submodules</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pylib.data.html">pylib.data module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.data_step.html">pylib.data_step module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.data_step_std.html">pylib.data_step_std module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.helper.html">pylib.helper module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul>

Binary file not shown.

View File

@@ -42,6 +42,7 @@
<a href="#cap-d"><strong>d</strong></a> |
<a href="#cap-f"><strong>f</strong></a> |
<a href="#cap-g"><strong>g</strong></a> |
<a href="#cap-h"><strong>h</strong></a> |
<a href="#cap-i"><strong>i</strong></a> |
<a href="#cap-m"><strong>m</strong></a> |
<a href="#cap-o"><strong>o</strong></a> |
@@ -58,6 +59,16 @@
<td>
<a href="pylib.data.html#module-data"><code class="xref">data</code></a> <em>(*nix, Windows)</em></td><td>
<em>Handle data files and structures.</em></td></tr>
<tr>
<td></td>
<td>
<a href="pylib.data_step.html#module-data_step"><code class="xref">data_step</code></a> <em>(*nix, Windows)</em></td><td>
<em>STEP reader.</em></td></tr>
<tr>
<td></td>
<td>
<a href="pylib.data_step_std.html#module-data_step_std"><code class="xref">data_step_std</code></a> <em>(*nix, Windows)</em></td><td>
<em>STEP Standard structure.</em></td></tr>
<tr>
<td></td>
<td>
@@ -110,6 +121,14 @@
<a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab"><code class="xref">geometry_plot_pylab</code></a> <em>(*nix, Windows)</em></td><td>
<em>Geometry plotting (pylab).</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-h"><td></td><td>
<strong>h</strong></td><td></td></tr>
<tr>
<td></td>
<td>
<a href="pylib.helper.html#module-helper"><code class="xref">helper</code></a> <em>(*nix, Windows)</em></td><td>
<em>Helper objects.</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-i"><td></td><td>
<strong>i</strong></td><td></td></tr>
<tr>
@@ -152,6 +171,16 @@
<td>&#160;&#160;&#160;
<a href="pylib.data.html#module-pylib.data"><code class="xref">pylib.data</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.data_step.html#module-pylib.data_step"><code class="xref">pylib.data_step</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.data_step_std.html#module-pylib.data_step_std"><code class="xref">pylib.data_step_std</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
@@ -192,6 +221,11 @@
<td>&#160;&#160;&#160;
<a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab"><code class="xref">pylib.geometry_plot_pylab</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.helper.html#module-pylib.helper"><code class="xref">pylib.helper</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;

View File

@@ -16,7 +16,7 @@
<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="next" title="pylib.date module" href="pylib.date.html" />
<link rel="next" title="pylib.data_step module" href="pylib.data_step.html" />
<link rel="prev" title="pylib.numerical.ode_model module" href="pylib.numerical.ode_model.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -36,13 +36,34 @@
<div class="section" id="module-pylib.data">
<span id="pylib-data-module"></span><h1>pylib.data module<a class="headerlink" href="#module-pylib.data" title="Permalink to this headline"></a></h1>
<p>Read and write data to or from file and manipulate data structures.</p>
<p>Read and write data to or from file and manipulate data
structures.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-10-11</p>
<dd class="field-odd"><p>2019-12-28</p>
</dd>
</dl>
<span class="target" id="module-data"></span><dl class="function">
<dt id="pylib.data.find_last">
<code class="sig-name descname">find_last</code><span class="sig-paren">(</span><em class="sig-param">sequence</em>, <em class="sig-param">pattern</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#find_last"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.find_last" title="Permalink to this definition"></a></dt>
<dd><p>Find last last occurance in sequence (text)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>sequence</strong> (<em>str</em>) text to search in</p></li>
<li><p><strong>pattern</strong> (<em>str</em>) search pattern</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>index (-1 if pattern not in sequence)</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>int</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.fold_list">
<code class="sig-name descname">fold_list</code><span class="sig-paren">(</span><em class="sig-param">lst</em>, <em class="sig-param">n</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#fold_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.fold_list" title="Permalink to this definition"></a></dt>
<dd><p>Convert one-dimensional kx1 array (list) to two-dimensional mxn
@@ -137,14 +158,42 @@ False for int, dict, set</p>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.print_list">
<code class="sig-name descname">print_list</code><span class="sig-paren">(</span><em class="sig-param">lst</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#print_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.print_list" title="Permalink to this definition"></a></dt>
<dd><p>Print list, one list element per line.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>lst</strong> (<em>list</em>) list to print</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.read">
<code class="sig-name descname">read</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">x_column</em>, <em class="sig-param">y_column</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">read</code><span class="sig-paren">(</span><em class="sig-param">file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read" title="Permalink to this definition"></a></dt>
<dd><p>Read ascii data file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) file to read</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>file content</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.read_columns">
<code class="sig-name descname">read_columns</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">x_column</em>, <em class="sig-param">y_column</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read_columns"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read_columns" title="Permalink to this definition"></a></dt>
<dd><p>Read ascii data file.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>filename</strong> (<em>str</em>) file to read</p></li>
<li><p><strong>file_name</strong> (<em>str</em>) file to read</p></li>
<li><p><strong>x_column</strong> (<em>int</em>) column index for the x data (first column is 0)</p></li>
<li><p><strong>y_column</strong> (<em>int</em>) column index for the y data (first column is 0)</p></li>
<li><p><strong>default</strong> (<em>object</em>) return object if data loading fails</p></li>
@@ -203,6 +252,72 @@ between consecutive terms).</p></li>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.str_between">
<code class="sig-name descname">str_between</code><span class="sig-paren">(</span><em class="sig-param">text</em>, <em class="sig-param">left</em>, <em class="sig-param">right</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#str_between"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.str_between" title="Permalink to this definition"></a></dt>
<dd><p>Get text between two pattern.</p>
<p>Text can be multi-line.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>text</strong> (<em>str</em>) text to search in</p></li>
<li><p><strong>left</strong> (<em>str</em>) left pattern</p></li>
<li><p><strong>right</strong> (<em>str</em>) right pattern</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>text between the left and right pattern</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.str_to_list">
<code class="sig-name descname">str_to_list</code><span class="sig-paren">(</span><em class="sig-param">string</em>, <em class="sig-param">delimiter=';\n'</em>, <em class="sig-param">newline_replacement=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#str_to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.str_to_list" title="Permalink to this definition"></a></dt>
<dd><p>Converts a string with block information into a list.</p>
<p>This function un-wraps multi-line block information into one line.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>string</strong> (<em>str</em>) string with block information</p></li>
<li><p><strong>delimiter</strong> (<em>str</em>) block delimiter (default = ;n). This will be
removed from the resulting list.</p></li>
<li><p><strong>newline_replacement</strong> (<em>str</em>) block lines replacement (default = )</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>list of block information</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>list</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Every line is left striped. Empty line are ignored.</p>
</div>
<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="n">before</span> <span class="p">(</span><span class="n">string</span><span class="p">):</span>
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">&#39;Open CASCADE Model&#39;</span><span class="p">),</span><span class="s1">&#39;2;1&#39;</span><span class="p">);</span>
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">&#39;Open CASCADE Shape Model&#39;</span><span class="p">,</span><span class="s1">&#39;2019-10-14T14:32:20&#39;</span><span class="p">,(</span><span class="s1">&#39;Author&#39;</span><span class="p">),(</span>
<span class="s1">&#39;Open CASCADE&#39;</span><span class="p">),</span><span class="s1">&#39;Open CASCADE STEP processor 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Open CASCADE 7.1&#39;</span>
<span class="p">,</span><span class="s1">&#39;Unknown&#39;</span><span class="p">);</span>
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;</span><span class="p">));</span>
<span class="n">after</span> <span class="p">(</span><span class="nb">list</span> <span class="n">elements</span> <span class="n">one</span> <span class="n">per</span> <span class="n">line</span><span class="p">):</span>
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">&#39;Open CASCADE Model&#39;</span><span class="p">),</span><span class="s1">&#39;2;1&#39;</span><span class="p">)</span>
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">&#39;Open CASCADE Shape Model&#39;</span><span class="p">,</span><span class="s1">&#39;2019-10-14T14:32:20&#39;</span><span class="p">,(</span><span class="s1">&#39;Author&#39;</span><span class="p">),(</span><span class="s1">&#39;Open CASCADE&#39;</span><span class="p">),</span><span class="s1">&#39;Open CASCADE STEP processor 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Open CASCADE 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Unknown&#39;</span><span class="p">)</span>
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;</span><span class="p">))</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.data.unique_ending">
<code class="sig-name descname">unique_ending</code><span class="sig-paren">(</span><em class="sig-param">ids</em>, <em class="sig-param">n=1</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_ending"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_ending" title="Permalink to this definition"></a></dt>
@@ -223,6 +338,18 @@ between consecutive terms).</p></li>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.unique_list">
<code class="sig-name descname">unique_list</code><span class="sig-paren">(</span><em class="sig-param">sequence</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_list" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data.unique_list_hashable">
<code class="sig-name descname">unique_list_hashable</code><span class="sig-paren">(</span><em class="sig-param">sequence</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_list_hashable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_list_hashable" title="Permalink to this definition"></a></dt>
<dd><p>faster using set() but elements of the sequence must be hashable.
unhashable types: list</p>
</dd></dl>
<dl class="function">
<dt id="pylib.data.write">
<code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.write" title="Permalink to this definition"></a></dt>
@@ -271,7 +398,7 @@ between consecutive terms).</p></li>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.numerical.ode_model.html" title="previous chapter">pylib.numerical.ode_model module</a></li>
<li>Next: <a href="pylib.date.html" title="next chapter">pylib.date module</a></li>
<li>Next: <a href="pylib.data_step.html" title="next chapter">pylib.data_step module</a></li>
</ul></li>
</ul></li>
</ul></li>

246
docs/build/html/pylib.data_step.html vendored Normal file
View File

@@ -0,0 +1,246 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.data_step module &#8212; pylib 2019.12.21 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="next" title="pylib.data_step_std module" href="pylib.data_step_std.html" />
<link rel="prev" title="pylib.data module" href="pylib.data.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">
<div class="section" id="module-pylib.data_step">
<span id="pylib-data-step-module"></span><h1>pylib.data_step module<a class="headerlink" href="#module-pylib.data_step" title="Permalink to this headline"></a></h1>
<p>STEP reader.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2020-01-03</p>
</dd>
</dl>
<span class="target" id="module-data_step"></span><dl class="function">
<dt id="pylib.data_step.arc_circle_geometry">
<code class="sig-name descname">arc_circle_geometry</code><span class="sig-paren">(</span><em class="sig-param">conic</em>, <em class="sig-param">p1</em>, <em class="sig-param">p2</em>, <em class="sig-param">ellipse=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#arc_circle_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.arc_circle_geometry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.b_spline_curve_with_knots_geometry">
<code class="sig-name descname">b_spline_curve_with_knots_geometry</code><span class="sig-paren">(</span><em class="sig-param">b_spline</em>, <em class="sig-param">p1</em>, <em class="sig-param">p2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#b_spline_curve_with_knots_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.b_spline_curve_with_knots_geometry" title="Permalink to this definition"></a></dt>
<dd><p>Currently only clamped b_spline curves and assumed, i. e. closed
= False.</p>
</dd></dl>
<dl class="function">
<dt id="pylib.data_step.data_cmds_to_data_dict">
<code class="sig-name descname">data_cmds_to_data_dict</code><span class="sig-paren">(</span><em class="sig-param">data_cmds</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_cmds_to_data_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_cmds_to_data_dict" title="Permalink to this definition"></a></dt>
<dd><p>Create dict with step objects</p>
<p>1st it creats keys equal to the number id string and values with
the command string.</p>
<p>2nd it creats keys for different step object types to dict all
commands as new created objects of that type.</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="n">from</span><span class="p">:</span>
<span class="p">[</span><span class="s2">&quot;#12 = CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&quot;</span><span class="p">,</span>
<span class="s2">&quot;#22 = VERTEX_POINT(&#39;&#39;,#23)&quot;</span><span class="p">]</span>
<span class="n">to</span><span class="p">:</span>
<span class="p">{</span><span class="s1">&#39;#12&#39;</span><span class="p">:</span> <span class="s1">&#39;CARTESIAN_POINT(&#39;&#39;,(0.E+000,0.E+000,0.E+000))&#39;</span><span class="p">,</span>
<span class="s1">&#39;#22&#39;</span><span class="p">:</span> <span class="s1">&#39;VERTEX_POINT(&#39;&#39;,#23)&#39;</span><span class="p">}</span>
<span class="n">additional</span>
<span class="p">{</span>
<span class="s1">&#39;cartesian_points&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;#12&#39;</span><span class="p">:</span> <span class="n">pointer_to_new_created_point_object</span><span class="p">,</span>
<span class="o">...</span>
<span class="p">},</span>
<span class="s1">&#39;vertex_points&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;#22&#39;</span><span class="p">:</span> <span class="n">pointer_to_new_created_vertex_object</span><span class="p">,</span>
<span class="o">...</span>
<span class="p">},</span>
<span class="o">...</span>
<span class="p">}</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.data_step.data_dict_edge_curve_to_geometry">
<code class="sig-name descname">data_dict_edge_curve_to_geometry</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_edge_curve_to_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_edge_curve_to_geometry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.data_dict_to_geometry_world">
<code class="sig-name descname">data_dict_to_geometry_world</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_to_geometry_world"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_to_geometry_world" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.data_dict_to_geometry_world_edge_curve">
<code class="sig-name descname">data_dict_to_geometry_world_edge_curve</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_to_geometry_world_edge_curve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_to_geometry_world_edge_curve" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.data_section_dict">
<code class="sig-name descname">data_section_dict</code><span class="sig-paren">(</span><em class="sig-param">step</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_section_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_section_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.line_geometry">
<code class="sig-name descname">line_geometry</code><span class="sig-paren">(</span><em class="sig-param">p1</em>, <em class="sig-param">p2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#line_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.line_geometry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.data_step.print_edge_loop">
<code class="sig-name descname">print_edge_loop</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em>, <em class="sig-param">instance_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#print_edge_loop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.print_edge_loop" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="class">
<dt id="pylib.data_step.step">
<em class="property">class </em><code class="sig-name descname">step</code><span class="sig-paren">(</span><em class="sig-param">file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.step" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>STEP reader class.</p>
<p>1st read a STEP file.
2nd convert header and data section string to list of commands.</p>
<p>The STEP file string can have commands distributed over several
lines, the commands are seperated by <code class="docutils literal notranslate"><span class="pre">;\n</span></code>. This class un-wraps
each command into one line (remove <code class="docutils literal notranslate"><span class="pre">\n</span></code>) and removes empty lines.</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="n">header</span> <span class="n">part</span> <span class="n">of</span> <span class="n">a</span> <span class="n">step</span> <span class="n">file</span> <span class="p">(</span><span class="n">between</span> <span class="n">HEADER</span><span class="p">;</span> <span class="ow">and</span> <span class="n">ENDSEC</span><span class="p">;):</span>
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">&#39;Open CASCADE Model&#39;</span><span class="p">),</span><span class="s1">&#39;2;1&#39;</span><span class="p">);</span>
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">&#39;Open CASCADE Shape Model&#39;</span><span class="p">,</span><span class="s1">&#39;2019-10-14T14:32:20&#39;</span><span class="p">,(</span><span class="s1">&#39;Author&#39;</span><span class="p">),(</span>
<span class="s1">&#39;Open CASCADE&#39;</span><span class="p">),</span><span class="s1">&#39;Open CASCADE STEP processor 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Open CASCADE 7.1&#39;</span>
<span class="p">,</span><span class="s1">&#39;Unknown&#39;</span><span class="p">);</span>
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;</span><span class="p">));</span>
<span class="n">will</span> <span class="n">result</span> <span class="ow">in</span> <span class="p">(</span><span class="n">but</span> <span class="k">as</span> <span class="n">a</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">&#39;Open CASCADE Model&#39;</span><span class="p">),</span><span class="s1">&#39;2;1&#39;</span><span class="p">)</span>
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">&#39;Open CASCADE Shape Model&#39;</span><span class="p">,</span><span class="s1">&#39;2019-10-14T14:32:20&#39;</span><span class="p">,(</span><span class="s1">&#39;Author&#39;</span><span class="p">),(</span><span class="s1">&#39;Open CASCADE&#39;</span><span class="p">),</span><span class="s1">&#39;Open CASCADE STEP processor 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Open CASCADE 7.1&#39;</span><span class="p">,</span><span class="s1">&#39;Unknown&#39;</span><span class="p">)</span>
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">&#39;AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }&#39;</span><span class="p">))</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.data_step.str_to_cmd_args">
<code class="sig-name descname">str_to_cmd_args</code><span class="sig-paren">(</span><em class="sig-param">cmd_str</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#str_to_cmd_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.str_to_cmd_args" title="Permalink to this definition"></a></dt>
<dd><p>Using negative lookahead to match all the commas which are not
inside a parenthesis and then split the string at the commas.</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="n">CARTESIAN_POINT</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,(</span><span class="mf">0.E+000</span><span class="p">,</span><span class="mf">0.E+000</span><span class="p">,</span><span class="mf">0.E+000</span><span class="p">))</span>
<span class="n">will</span> <span class="n">become</span>
<span class="n">command</span> <span class="o">=</span> <span class="s1">&#39;CARTESIAN_POINT&#39;</span>
<span class="n">arguments</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;(0.E+000,0.E+000,0.E+000)&#39;</span><span class="p">]</span>
</pre></div>
</div>
</dd></dl>
</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>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.data.html" title="previous chapter">pylib.data module</a></li>
<li>Next: <a href="pylib.data_step_std.html" title="next chapter">pylib.data_step_std module</a></li>
</ul></li>
</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>
|
<a href="_sources/pylib.data_step.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

1021
docs/build/html/pylib.data_step_std.html vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,7 @@
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pylib.drawblock module" href="pylib.drawblock.html" />
<link rel="prev" title="pylib.data module" href="pylib.data.html" />
<link rel="prev" title="pylib.data_step_std module" href="pylib.data_step_std.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -194,7 +194,7 @@
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.data.html" title="previous chapter">pylib.data module</a></li>
<li>Previous: <a href="pylib.data_step_std.html" title="previous chapter">pylib.data_step_std module</a></li>
<li>Next: <a href="pylib.drawblock.html" title="next chapter">pylib.drawblock module</a></li>
</ul></li>
</ul></li>

View File

@@ -42,7 +42,163 @@
<dd class="field-odd"><p>2019-11-15</p>
</dd>
</dl>
<span class="target" id="module-function"></span><dl class="function">
<span class="target" id="module-function"></span><p>Functions returns function to apply conditions.</p>
<dl class="function">
<dt id="pylib.function.b_spline_basis">
<code class="sig-name descname">b_spline_basis</code><span class="sig-paren">(</span><em class="sig-param">knots</em>, <em class="sig-param">knot_span</em>, <em class="sig-param">degree</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_basis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_basis" title="Permalink to this definition"></a></dt>
<dd><p>Cox-de Boor algorithm / recursion formula.</p>
<p>Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>knots</strong> (<em>list</em>) Knot vector U. m + 1 non-decreasing numbers / knots,
<span class="math notranslate nohighlight">\(u_0 &lt;= u_1 &lt;= u_2 &lt;= ... &lt;= u_m\)</span></p></li>
<li><p><strong>knot_span</strong> (<em>int</em>) i-th knot span</p></li>
<li><p><strong>degree</strong> (<em>int</em>) degree of B-spline basis function</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>B-spline basis function using variable, u in [u_0, u_m]</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>function</p>
</dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}N_{i,0}(u) &amp;= \begin{cases} 1 &amp; \text{if } u_i \le u \lt u_{i+1} \\
0 &amp; \text{otherwise}\end{cases} \\
N_{i,p}(u) &amp;= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) +
\frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)\end{split}\]</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.b_spline_curve_with_knots">
<code class="sig-name descname">b_spline_curve_with_knots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knots</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_curve_with_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_curve_with_knots" title="Permalink to this definition"></a></dt>
<dd><p>B-spline curve of degree p (order + 1) on a given set of knots.</p>
<p>n, m and p must satisfy m = n + p + 1.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>degree</strong> (<em>int</em>) degree of B-spline basis functions</p></li>
<li><p><strong>control_points</strong> (<em>list</em>) control points P, n + 1 control points</p></li>
<li><p><strong>knots</strong> (<em>list</em>) Knot vector U. m + 1 non-decreasing numbers / knots,
<span class="math notranslate nohighlight">\(u_0 &lt;= u_1 &lt;= u_2 &lt;= ... &lt;= u_m\)</span></p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>B-spline curve using variable, u in [u_0, u_m]</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>function</p>
</dd>
</dl>
<div class="math notranslate nohighlight">
\[\mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i\]</div>
<ul class="simple">
<li><p>open B-spline curves</p>
<ul>
<li><p>the curve will not touch the first and last legs of the
control polyline</p></li>
<li><p>the knot vector does not have any particular structure</p></li>
<li><p>for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not
have “full support” of basis functions and are ignored when a
B-spline curve is open. For open B-spline curves, the domain
is inteval [u_p, u_{n-p}]</p></li>
</ul>
</li>
<li><p>clamped B-spline curves, nonperiodic B-spline curves</p>
<ul>
<li><p>the curve is tangent to the first and the last legs just like
a Bézier curve</p></li>
<li><p>the first knot and the last knot must be repeated p+1 times
(i. e., of multiplicity p+1)</p></li>
</ul>
</li>
<li><p>closed B-spline curves</p>
<ul>
<li><p>the start and the end of the generated curve join together
forming a closed loop</p></li>
<li><p>repeating some knots and control points # TODO: which?</p></li>
</ul>
</li>
<li><p>uniform B-spline curves</p>
<ul>
<li><p>internal knots are equally spaced</p></li>
</ul>
</li>
<li><p>Bézier curves</p>
<ul>
<li><p>a B-spline with no internal knots.</p></li>
</ul>
</li>
</ul>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.function.b_spline_knots" title="pylib.function.b_spline_knots"><code class="xref py py-meth docutils literal notranslate"><span class="pre">b_spline_knots()</span></code></a></p>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.b_spline_knots">
<code class="sig-name descname">b_spline_knots</code><span class="sig-paren">(</span><em class="sig-param">control_point_spans</em>, <em class="sig-param">degree=3</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_knots" title="Permalink to this definition"></a></dt>
<dd><p>B-spline knots to generate a clamped uniform B-spline curve
of degree p (order + 1).</p>
<p>The internal knots are equally spaced (uniform B-spline curve)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>control_point_spans</strong> (<em>int</em>) number of control points + 1</p></li>
<li><p><strong>degree</strong> (<em>int</em>) degree of B-spline basis functions (default = 3)</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>knot vector</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.function.b_spline_curve_with_knots" title="pylib.function.b_spline_curve_with_knots"><code class="xref py py-meth docutils literal notranslate"><span class="pre">b_spline_curve_with_knots()</span></code></a></p>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.circle">
<code class="sig-name descname">circle</code><span class="sig-paren">(</span><em class="sig-param">r</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.circle" title="Permalink to this definition"></a></dt>
<dd><p>Circle</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>r</strong> (<em>float</em>) radius of the circle</p>
</dd>
<dt class="field-even">Results</dt>
<dd class="field-even"><p>functions for x of theta and y of theta and the interval</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}x(\theta) = r\cos\theta \\
y(\theta) = r\sin\theta \\
\theta = \left[0, 2\pi\right]\end{split}\]</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="n">r</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.cosine_wave">
<code class="sig-name descname">cosine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#cosine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.cosine_wave" title="Permalink to this definition"></a></dt>
<dd><p>A cosine wave is said to be sinusoidal, because,
@@ -67,6 +223,9 @@ interpreted in degrees.</p></li>
<dd class="field-even"><p>sine wave function of spatial variable x and optional
time t</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>function</p>
</dd>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
@@ -74,6 +233,43 @@ time t</p>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.ellipse">
<code class="sig-name descname">ellipse</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/function.html#ellipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.ellipse" title="Permalink to this definition"></a></dt>
<dd><p>Ellipse</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>a</strong> (<em>float</em>) semi-major axis</p></li>
<li><p><strong>b</strong> (<em>float</em>) semi-minor axis</p></li>
</ul>
</dd>
<dt class="field-even">Results</dt>
<dd class="field-even"><p>functions for x of theta and y of theta and the interval</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tuple</p>
</dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}x(\theta) = a\cos\theta \\
y(\theta) = b\sin\theta \\
\theta = \left[0, 2\pi\right]\end{split}\]</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">*</span> <span class="o">.*</span>
<span class="o">*</span> <span class="n">b</span> <span class="p">:</span> <span class="o">*</span>
<span class="o">*</span> <span class="p">:</span><span class="o">......*</span>
<span class="o">*</span> <span class="n">a</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.epitrochoid">
<code class="sig-name descname">epitrochoid</code><span class="sig-paren">(</span><em class="sig-param">R</em>, <em class="sig-param">r</em>, <em class="sig-param">d</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#epitrochoid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.epitrochoid" title="Permalink to this definition"></a></dt>
@@ -93,7 +289,7 @@ circle of radius R.</p>
<dd class="field-even"><p>float</p>
</dd>
<dt class="field-odd">Results</dt>
<dd class="field-odd"><p>functions for x of theta and y of theta</p>
<dd class="field-odd"><p>functions for x of theta and y of theta and the interval</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>tuple</p>
@@ -108,7 +304,7 @@ y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="n">r</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">**</span> <span class="o">....</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">**</span> <span class="o">..</span><span class="p">,</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">**</span> <span class="n">d</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
@@ -117,8 +313,9 @@ y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">epitrochoid</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="mf">0.5</span><span class="p">)[:</span><span class="mi">1</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span> <span class="o">=</span> <span class="n">epitrochoid</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="mf">0.5</span><span class="p">)</span>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">epitrochoid</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="mf">0.5</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">epitrochoid</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="mf">0.5</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">epitrochoid</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="mf">0.5</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
@@ -142,7 +339,7 @@ circle of radius R.</p>
<dd class="field-even"><p>float</p>
</dd>
<dt class="field-odd">Results</dt>
<dd class="field-odd"><p>functions for x of theta and y of theta</p>
<dd class="field-odd"><p>functions for x of theta and y of theta and the interval</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>tuple</p>
@@ -157,7 +354,7 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
<span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="n">r</span> <span class="o">**</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">....</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="p">,</span><span class="o">..</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="n">d</span> <span class="o">*</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">**</span>
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
@@ -166,8 +363,9 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)[:</span><span class="mi">1</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition seealso">
@@ -176,6 +374,16 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.function.sample_half_open">
<code class="sig-name descname">sample_half_open</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">n=50</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sample_half_open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sample_half_open" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.function.sample_half_open_seq">
<code class="sig-name descname">sample_half_open_seq</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">x</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sample_half_open_seq"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sample_half_open_seq" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.function.sine_wave">
<code class="sig-name descname">sine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sine_wave" title="Permalink to this definition"></a></dt>
@@ -198,11 +406,14 @@ interpreted in degrees.</p></li>
<dd class="field-even"><p>sine wave function of spatial variable x and optional
time t</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>function</p>
</dd>
</dl>
<p>In general, the function is:</p>
<div class="math notranslate nohighlight">
\[\begin{split}y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\
y(x,t) = A\sin(kx + \omega t + \varphi) + D\end{split}\]</div>
\[\begin{split}y(x,t) = A\sin(kx + \omega t + \varphi) + D \\
y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D\end{split}\]</div>
<p>where:</p>
<blockquote>
<div><ul class="simple">
@@ -246,7 +457,7 @@ which are normed to the range of [0, 1] to</p>
<li><p><strong>h</strong> (<em>int</em>) number of chars in vertical direction</p></li>
<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
Characters in the Braille Patterns Block (first 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
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

View File

@@ -42,16 +42,47 @@
<dd class="field-odd"><p>2019-12-21</p>
</dd>
</dl>
<span class="target" id="module-geometry"></span><div class="section" id="affine-transforms">
<h2>Affine transforms<a class="headerlink" href="#affine-transforms" title="Permalink to this headline"></a></h2>
<span class="target" id="module-geometry"></span><p class="rubric">Affine transforms</p>
<p>Functions in augmented space, in homogenous coordinates.
Points are augment to 4 dimensions, by adding a dummy coordinate.
For points the dummy coordinate is always normalized to 1.
With homogenous coordinates translation of points is repesentable
as a linear transformation.</p>
<dl class="class">
<dt id="pylib.geometry.ArcBSplineCurveWithKnots">
<em class="property">class </em><code class="sig-name descname">ArcBSplineCurveWithKnots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knot_multiplicities</em>, <em class="sig-param">knots</em>, <em class="sig-param">start</em>, <em class="sig-param">end</em>, <em class="sig-param">n=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcBSplineCurveWithKnots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcBSplineCurveWithKnots" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>B-spline curve with knots, an open wireframe object in local
coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.ArcCircle">
<em class="property">class </em><code class="sig-name descname">ArcCircle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">ang1=0</em>, <em class="sig-param">ang2=1.5707963267948966</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcCircle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcCircle" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>Arc of a circle, an open wireframe object in local coordinate
system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.ArcEllipse">
<em class="property">class </em><code class="sig-name descname">ArcEllipse</code><span class="sig-paren">(</span><em class="sig-param">a=1</em>, <em class="sig-param">b=1</em>, <em class="sig-param">ang1=0</em>, <em class="sig-param">ang2=1.5707963267948966</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcEllipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcEllipse" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>Arc of an ellipse, an open wireframe object in local
coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.B_spline_curve_with_knots">
<em class="property">class </em><code class="sig-name descname">B_spline_curve_with_knots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knot_multiplicities</em>, <em class="sig-param">knots</em>, <em class="sig-param">n=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#B_spline_curve_with_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.B_spline_curve_with_knots" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>B-spline curve with knots, an open wireframe object in local
coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.CS">
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition"></a></dt>
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">y=vector([0</em>, <em class="sig-param">1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">z=vector([0</em>, <em class="sig-param">0</em>, <em class="sig-param">1</em>, <em class="sig-param">0])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.matrix" title="pylib.mathematics.matrix"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.matrix</span></code></a></p>
<p>Coordinate system</p>
<dl class="method">
@@ -60,33 +91,38 @@ as a linear transformation.</p>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.CS.init_xyz">
<em class="property">classmethod </em><code class="sig-name descname">init_xyz</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.init_xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.init_xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.CS.x90">
<em class="property">static </em><code class="sig-name descname">x90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.x90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.x90" title="Permalink to this definition"></a></dt>
<em class="property">classmethod </em><code class="sig-name descname">x90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.x90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.x90" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.CS.xm90">
<em class="property">static </em><code class="sig-name descname">xm90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.xm90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.xm90" title="Permalink to this definition"></a></dt>
<em class="property">classmethod </em><code class="sig-name descname">xm90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.xm90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.xm90" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.CS.y90">
<em class="property">static </em><code class="sig-name descname">y90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.y90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.y90" title="Permalink to this definition"></a></dt>
<em class="property">classmethod </em><code class="sig-name descname">y90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.y90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.y90" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.CS.ym90">
<em class="property">static </em><code class="sig-name descname">ym90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.ym90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.ym90" title="Permalink to this definition"></a></dt>
<em class="property">classmethod </em><code class="sig-name descname">ym90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.ym90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.ym90" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Circle">
<em class="property">class </em><code class="sig-name descname">Circle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">n=10</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Circle" title="Permalink to this definition"></a></dt>
<em class="property">class </em><code class="sig-name descname">Circle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Circle" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polygon" title="pylib.geometry.Polygon"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polygon</span></code></a></p>
<p>Circle a closed wireframe object in local coordinate system</p>
<p>Circle, a closed wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
@@ -94,6 +130,25 @@ as a linear transformation.</p>
<em class="property">class </em><code class="sig-name descname">Direction</code><span class="sig-paren">(</span><em class="sig-param">x=1</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Direction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
<p>Direction in local coordinate system</p>
<dl class="method">
<dt id="pylib.geometry.Direction.cross">
<em class="property">classmethod </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/geometry.html#Direction.cross"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction.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">
\[\mathbf{c} = \mathbf{a} \times \mathbf{b}\]</div>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Ellipse">
<em class="property">class </em><code class="sig-name descname">Ellipse</code><span class="sig-paren">(</span><em class="sig-param">a=1</em>, <em class="sig-param">b=1</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Ellipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Ellipse" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polygon" title="pylib.geometry.Polygon"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polygon</span></code></a></p>
<p>Circle, a closed wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
@@ -106,8 +161,8 @@ as a linear transformation.</p>
<dl class="class">
<dt id="pylib.geometry.Line">
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
<p>Line a open wireframe object in local coordinate system</p>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>Line, an open wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
@@ -126,10 +181,95 @@ as a linear transformation.</p>
<dl class="class">
<dt id="pylib.geometry.Polygon">
<em class="property">class </em><code class="sig-name descname">Polygon</code><span class="sig-paren">(</span><em class="sig-param">*points</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polygon"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polygon" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
<p>Polygon as closed wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Polyline">
<em class="property">class </em><code class="sig-name descname">Polyline</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Open and closed wireframe object in local coordinate system</p>
<p>This class create its own points (copy).</p>
<dl class="method">
<dt id="pylib.geometry.Polyline.__iter__">
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__iter__" title="Permalink to this definition"></a></dt>
<dd><p>Returns the Iterator object</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.__repr__">
<code class="sig-name descname">__repr__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__repr__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__repr__" title="Permalink to this definition"></a></dt>
<dd><p>Return repr(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.ch_cs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.points">
<code class="sig-name descname">points</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.points"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.points" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_x" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_y" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_z" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.scale" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.translate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.xy">
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.xy" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Polyline.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/geometry.html#Polyline.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.xyz" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Properties">
<em class="property">class </em><code class="sig-name descname">Properties</code><a class="reference internal" href="_modules/pylib/geometry.html#Properties"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Properties" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="attribute">
<dt id="pylib.geometry.Properties.circle_sectors">
<code class="sig-name descname">circle_sectors</code><em class="property"> = 12</em><a class="headerlink" href="#pylib.geometry.Properties.circle_sectors" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Solid">
<em class="property">class </em><code class="sig-name descname">Solid</code><span class="sig-paren">(</span><em class="sig-param">*wireframes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid" title="Permalink to this definition"></a></dt>
@@ -159,74 +299,6 @@ The Wireframe class create its own points (copy).</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Wireframe">
<em class="property">class </em><code class="sig-name descname">Wireframe</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Open and closed wireframe object in local coordinate system</p>
<p>This class create its own points (copy).</p>
<dl class="method">
<dt id="pylib.geometry.Wireframe.__iter__">
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__iter__" title="Permalink to this definition"></a></dt>
<dd><p>Returns the Iterator object</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.ch_cs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.points">
<code class="sig-name descname">points</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.points"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.points" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_x" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_y" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_z" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.scale" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.translate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.xy">
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xy" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.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/geometry.html#Wireframe.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xyz" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.World">
<em class="property">class </em><code class="sig-name descname">World</code><a class="reference internal" href="_modules/pylib/geometry.html#World"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World" title="Permalink to this definition"></a></dt>
@@ -238,6 +310,12 @@ The Wireframe class create its own points (copy).</p>
<dd><p>Returns the Iterator object</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">*objects</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.add" title="Permalink to this definition"></a></dt>
@@ -315,7 +393,11 @@ The Wireframe class create its own points (copy).</p>
</dd></dl>
</div>
<dl class="function">
<dt id="pylib.geometry.sample_half_open">
<code class="sig-name descname">sample_half_open</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">n=50</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#sample_half_open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.sample_half_open" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>

View File

@@ -16,7 +16,7 @@
<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="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
<link rel="next" title="pylib.helper module" href="pylib.helper.html" />
<link rel="prev" title="pylib.geometry_plot module" href="pylib.geometry_plot.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -147,7 +147,7 @@ working for 3D.</p>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry_plot.html" title="previous chapter">pylib.geometry_plot module</a></li>
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
<li>Next: <a href="pylib.helper.html" title="next chapter">pylib.helper module</a></li>
</ul></li>
</ul></li>
</ul></li>

152
docs/build/html/pylib.helper.html vendored Normal file
View File

@@ -0,0 +1,152 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.helper module &#8212; pylib 2019.12.21 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="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.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">
<div class="section" id="module-pylib.helper">
<span id="pylib-helper-module"></span><h1>pylib.helper module<a class="headerlink" href="#module-pylib.helper" title="Permalink to this headline"></a></h1>
<p>Helper objects.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2020-01-01</p>
</dd>
</dl>
<span class="target" id="module-helper"></span><dl class="class">
<dt id="pylib.helper.timeit">
<em class="property">class </em><code class="sig-name descname">timeit</code><span class="sig-paren">(</span><em class="sig-param">description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/helper.html#timeit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.helper.timeit" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">contextlib.ContextDecorator</span></code></p>
<p>Meassure time for a function or code block.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>description</strong> (<em>str</em>) description for the function or code block
used for the print-out</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="k">with</span> <span class="n">timeit</span><span class="p">(</span><span class="s1">&#39;section_test&#39;</span><span class="p">):</span>
<span class="gp">... </span> <span class="c1"># code</span>
<span class="go">section_test took 0.006 ms</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@timeit</span><span class="p">(</span><span class="s1">&#39;func&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">func</span><span class="p">():</span>
<span class="c1"># code</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">func</span><span class="p">()</span>
<span class="go">func took 0.006 ms</span>
</pre></div>
</div>
</dd></dl>
</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>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
</ul></li>
</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>
|
<a href="_sources/pylib.helper.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -58,17 +58,17 @@
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pylib.data.html">pylib.data module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.data_step.html">pylib.data_step module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.data_step_std.html">pylib.data_step_std module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.helper.html">pylib.helper module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul>

View File

@@ -17,7 +17,7 @@
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pylib.time_of_day module" href="pylib.time_of_day.html" />
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
<link rel="prev" title="pylib.helper module" href="pylib.helper.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -62,8 +62,16 @@
<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">m</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">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</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="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</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">0</span><span class="p">]])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:])</span>
<span class="go">[[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="go">[7, 8, 9, 0]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="p">:])</span>
<span class="go">[7, 8, 9, 0]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">[3, 6, 9, 0]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">9</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
<span class="go">[[2, 3], [5, 6], [8, 9], [0, 0]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
@@ -160,6 +168,12 @@ for wrong usage (result will be nonsense).</p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__setitem__">
<code class="sig-name descname">__setitem__</code><span class="sig-paren">(</span><em class="sig-param">index</em>, <em class="sig-param">value</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__setitem__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__setitem__" title="Permalink to this definition"></a></dt>
<dd><p>Set self[key] to value.</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__str__" title="Permalink to this definition"></a></dt>
@@ -400,6 +414,39 @@ where it should be.</p>
\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.transpose">
<code class="sig-name descname">transpose</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.transpose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.transpose" title="Permalink to this definition"></a></dt>
<dd><p>Transpose</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.transposed">
<em class="property">static </em><code class="sig-name descname">transposed</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#matrix.transposed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.transposed" title="Permalink to this definition"></a></dt>
<dd><p>Transpose</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.zeros">
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">m</em>, <em class="sig-param">n</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.zeros" title="Permalink to this definition"></a></dt>
<dd><p>Returns a zero matrix of size mxn; m rows and n columns
filled with zeros.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>m</strong> (<em>int</em>) number of rows of the matrix, e. g. 3</p></li>
<li><p><strong>n</strong> (<em>int</em>) number of columns of the matrix, e. g. 3</p></li>
</ul>
</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">m</span> <span class="o">=</span> <span class="n">matrix</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="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">m</span><span class="p">)</span> <span class="p">[[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">]]</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
<dl class="class">
@@ -848,13 +895,12 @@ The direction of c can be found with the right-hand rule.</p>
<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>
<dd><p>Returns a vector of length m 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>
<li><p><strong>fill_value</strong> fill value</p></li>
</ul>
</dd>
<dt class="field-even">Type fill_value</dt>
@@ -878,9 +924,33 @@ columns filled with v.</p>
</dl>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.isclose">
<em class="property">static </em><code class="sig-name descname">isclose</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">rel_tol=0.05</em>, <em class="sig-param">abs_tol=1e-08</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.isclose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.isclose" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.iscloseto">
<code class="sig-name descname">iscloseto</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.iscloseto"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.iscloseto" title="Permalink to this definition"></a></dt>
<dd></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>
<code class="sig-name descname">normalize</code><span class="sig-paren">(</span><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">
\[\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}\]</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a> for a norm (magnitude) of a vector</p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.normalized">
<em class="property">static </em><code class="sig-name descname">normalized</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.normalized"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.normalized" 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>
@@ -895,8 +965,7 @@ columns filled with v.</p>
<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>
<dd><p>Returns a vector of length m 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>
@@ -904,7 +973,7 @@ columns filled with ones.</p>
<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>
<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">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>
@@ -913,17 +982,20 @@ columns filled with ones.</p>
<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>
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">length</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 filled with random
numbers.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
<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">random</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<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">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="n">v</span> <span class="o">=</span> <span class="n">vector</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>
@@ -1022,8 +1094,7 @@ where it should be.</p>
<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>
<dd><p>Returns a zero vector of length m 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>
@@ -1031,7 +1102,7 @@ columns filled with zeros.</p>
<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>
<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">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>
@@ -1073,7 +1144,7 @@ columns filled with zeros.</p>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
<li>Previous: <a href="pylib.helper.html" title="previous chapter">pylib.helper module</a></li>
<li>Next: <a href="pylib.time_of_day.html" title="next chapter">pylib.time_of_day module</a></li>
</ul></li>
</ul></li>

View File

@@ -44,7 +44,12 @@ ordinary differential equations.</p>
<dd class="field-odd"><p>2015-09-21</p>
</dd>
</dl>
<span class="target" id="module-ode"></span><dl class="function">
<span class="target" id="module-ode"></span><p>Approximate the solution <span class="math notranslate nohighlight">\(x(t)\)</span> of the initial value problem</p>
<div class="math notranslate nohighlight">
\[\begin{split}\frac{\mathrm{d}x}{\mathrm{d}t} = \dot{x} &amp;= f(t,x) \\
x(t_0) &amp;= x_0 \\
t &amp;\in [t_0, t_n]\end{split}\]</div>
<dl class="function">
<dt id="pylib.numerical.ode.e1">
<code class="sig-name descname">e1</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">x0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#e1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.e1" title="Permalink to this definition"></a></dt>
<dd><p>Explicit first-order method /
@@ -65,13 +70,14 @@ Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</p>
</ul>
</dd>
</dl>
<p>Approximate the solution of the initial value problem</p>
<p>Approximate the solution <span class="math notranslate nohighlight">\(x(t)\)</span> of the initial value problem</p>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{x} &amp;= f(t,x) \\
x(t_0) &amp;= x_0\end{split}\]</div>
x(t_0) &amp;= x_0 \\
t &amp;\in [t_0, t_n]\end{split}\]</div>
<p>Choose a value h for the size of every step and set</p>
<div class="math notranslate nohighlight">
\[t_i = t_0 + i h ~,\quad i=1,2,\ldots,n\]</div>
\[t_{i+1} = t_0 + i h = t_i + h ~,\quad i=0,1,2,\ldots,n-1\]</div>
<p>The derivative of the solution is approximated as the forward
difference equation</p>
<div class="math notranslate nohighlight">
@@ -169,6 +175,30 @@ proportional to the step size.</p>
</ul>
</dd>
</dl>
<p>Problem</p>
<blockquote>
<div><div class="math notranslate nohighlight">
\[\begin{split}\dot{y} &amp;= f(t, y) \\
y(t_0) &amp;= y_0 \\
t &amp;\in [t_0, t_n]\end{split}\]</div>
</div></blockquote>
<p>Increment <span class="math notranslate nohighlight">\(\delta t = t_{i+1}-t_i ~,~~ i=0,1,2,\ldots,n-1\)</span></p>
<blockquote>
<div><div class="math notranslate nohighlight">
\[\begin{split}y_{n+1} &amp;= y_{i} + \tfrac{1}{6}(
\delta y_{i,1} + 2\delta y_{i,2} + 2\delta y_{i,3} +
\delta y_{i,4}) \\
&amp; \qquad \text{with} \\
\delta y_{i,1} &amp;= \delta t \cdot y'(t_{i}, ~ y_{i}) \\
\delta y_{i,2} &amp;= \delta t \cdot
y'(t_{i}+\tfrac{1}{2}\delta t, ~
y_{i}+\tfrac{1}{2}\delta y_{i,1}) \\
\delta y_{i,3} &amp;= \delta t \cdot
y'(t_{i}+\tfrac{1}{2}\delta t, ~
y_{i}+\tfrac{1}{2}\delta y_{i,2}) \\
\delta y_{i,4} &amp;= \delta t \cdot
y'(t_{i}+\delta t, ~ y_{i}+\delta y_{i,3})\end{split}\]</div>
</div></blockquote>
</dd></dl>
<dl class="function">
@@ -251,9 +281,10 @@ proportional to the step size.</p>
</dd></dl>
<dl class="function">
<dt id="pylib.numerical.ode.newmark_newtonraphson_rdk">
<code class="sig-name descname">newmark_newtonraphson_rdk</code><span class="sig-paren">(</span><em class="sig-param">fnm</em>, <em class="sig-param">x0</em>, <em class="sig-param">xp0</em>, <em class="sig-param">xpp0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">gamma=0.5</em>, <em class="sig-param">beta=0.25</em>, <em class="sig-param">max_iterations=1000</em>, <em class="sig-param">tol=1e-09</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#newmark_newtonraphson_rdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.newmark_newtonraphson_rdk" title="Permalink to this definition"></a></dt>
<dt id="pylib.numerical.ode.newmark_newtonraphson_mdk">
<code class="sig-name descname">newmark_newtonraphson_mdk</code><span class="sig-paren">(</span><em class="sig-param">fmdk</em>, <em class="sig-param">x0</em>, <em class="sig-param">xp0</em>, <em class="sig-param">xpp0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">gamma=0.5</em>, <em class="sig-param">beta=0.25</em>, <em class="sig-param">max_iterations=1000</em>, <em class="sig-param">tol=1e-09</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#newmark_newtonraphson_mdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.newmark_newtonraphson_mdk" title="Permalink to this definition"></a></dt>
<dd><p>Newmark method.</p>
<p>Using m mass, d damping and k stiffness formulation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">

View File

@@ -37,78 +37,123 @@
<div class="section" id="module-pylib.numerical.ode_model">
<span id="pylib-numerical-ode-model-module"></span><h1>pylib.numerical.ode_model module<a class="headerlink" href="#module-pylib.numerical.ode_model" title="Permalink to this headline"></a></h1>
<p>Mathmatical models governed by ordinary differential equations.</p>
<p>Describes initial value problems as systems of first order ordinary differential
equations.</p>
<p>Describes initial value problems as systems of first order ordinary
differential equations.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-05-25</p>
<dd class="field-odd"><p>2020-01-08</p>
</dd>
</dl>
<span class="target" id="module-ode_model"></span><dl class="function">
<dt id="pylib.numerical.ode_model.disk">
<code class="sig-name descname">disk</code><span class="sig-paren">(</span><em class="sig-param">x</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">disk</code><span class="sig-paren">(</span><em class="sig-param">d</em>, <em class="sig-param">e</em>, <em class="sig-param">T</em>, <em class="sig-param">method=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>x</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
<li><p><strong>d</strong> (<em>float</em>) diameter</p></li>
<li><p><strong>e</strong> (<em>float</em>) eccentricity</p></li>
<li><p><strong>T</strong> (<em>float</em>) torque</p></li>
<li><p><strong>method</strong> the method to use, default = .</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.numerical.ode_model.disk_nm">
<code class="sig-name descname">disk_nm</code><span class="sig-paren">(</span><em class="sig-param">xn</em>, <em class="sig-param">xpn</em>, <em class="sig-param">xppn</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk_nm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk_nm" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) first derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.numerical.ode_model.disk_nmmdk">
<code class="sig-name descname">disk_nmmdk</code><span class="sig-paren">(</span><em class="sig-param">xn</em>, <em class="sig-param">xpn</em>, <em class="sig-param">xppn</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk_nmmdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk_nmmdk" title="Permalink to this definition"></a></dt>
<dd><p>Rotation of an eccentric disk.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>xn</strong> (<em>list</em>) values of the function</p></li>
<li><p><strong>xpn</strong> (<em>list</em>) derivative values of the function</p></li>
<li><p><strong>xppn</strong> (<em>list</em>) second derivative values of the function</p></li>
<li><p><strong>t</strong> (<em>list</em>) time</p></li>
<li><p><strong>*p</strong> <p>parameters of the function</p>
<ul>
<li><p>diameter</p></li>
<li><p>eccentricity</p></li>
<li><p>torque</p></li>
</ul>
</p></li>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><p>disk function. This function is independent of the time.</p>
<ul class="simple">
<li><p>For method = : f(x, t=0) -&gt; (xp1, xp2, xp3, xp4, xp5, xp6).
x is (x, y, phi, x, y, phi) and the return values are (x,
y, phi, x, y, phi)</p></li>
<li><p>For method = nm: f(xn, xpn, xppn, t=0) -&gt; (N, dN, dNp, dNpp).
xn are the values of the function (x, y, phi), xpn are first
derivative values of the function (x, y, phi) and xppn are
the second derivative values of the function (x, y, phi).
The return values are (N, dN, dNp, dNpp)</p></li>
<li><p>For method = nmmdk: f(xn, xpn, xppn, t=0) -&gt;
(rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f).
xn are the values of the function (x, y, phi), xpn are first
derivative values of the function (x, y, phi) and xppn are
the second derivative values of the function (x, y, phi).
The return values are (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx,
f)</p></li>
</ul>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>function</p>
</dd>
</dl>
<p>Model</p>
<blockquote>
<div><div class="math notranslate nohighlight">
\[\begin{split}\begin{vmatrix}
\ddot{x} + \cos(\varphi)\ddot{\varphi} + 2d \,\dot{x} - \sin(\varphi) \,\dot{\varphi}^2 + 2d\cos(\varphi)\, \dot{\varphi} + x &amp;=&amp;
0 \\
\ddot{y} - \sin(\varphi)\ddot{\varphi} + 2d \,\dot{y} - \cos(\varphi) \,\dot{\varphi}^2 + 2d\sin(\varphi)\, \dot{\varphi} + y &amp;=&amp;
0 \\
\ddot{\varphi} + e\,y\sin(\varphi) - e\,x\cos(\varphi) &amp;=&amp; t
\end{vmatrix}
\\
\begin{vmatrix}
\ddot{x} + \cos(\varphi)\ddot{\varphi} &amp;=&amp;
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
\ddot{y} - \sin(\varphi)\ddot{\varphi} &amp;=&amp;
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
\ddot{\varphi} &amp;=&amp; t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
\end{vmatrix}\end{split}\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{M}(\mathbf{x}) \cdot \mathbf{\ddot{x}} &amp;=
\mathbf{f}(\mathbf{x}, \mathbf{\dot{x}})
\\
\begin{bmatrix}
1 &amp; 0 &amp; \cos \varphi \\
0 &amp; 1 &amp; -\sin \varphi \\
0 &amp; 0 &amp; 1
\end{bmatrix} \cdot
\begin{bmatrix}
\ddot{x} \\ \ddot{y} \\ \ddot{\varphi}
\end{bmatrix} &amp;= \begin{bmatrix}
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
\end{bmatrix}\end{split}\]</div>
</div></blockquote>
<p>returns</p>
<blockquote>
<div><div class="math notranslate nohighlight">
\[\begin{split}x_1 &amp;= x &amp;\quad x_4 &amp;= \dot{x}_1 = \dot{x} &amp;\quad \dot{x}_4 &amp;= \ddot{x} \\
x_2 &amp;= y &amp;\quad x_5 &amp;= \dot{x}_2 = \dot{y} &amp;\quad \dot{x}_5 &amp;= \ddot{y} \\
x_3 &amp;= \varphi &amp;\quad x_6 &amp;= \dot{x}_3 = \dot{\varphi} &amp;\quad \dot{x}_6 &amp;= \ddot{\varphi} \\\end{split}\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}\dot{q} &amp;= f(x) \\
\begin{bmatrix}
\dot{x}_1 \\
\dot{x}_2 \\
\dot{x}_3 \\
\dot{x}_4 \\
\dot{x}_5 \\
\dot{x}_6
\end{bmatrix} &amp;= \begin{bmatrix}
x_4 \\
x_5 \\
x_6 \\
\begin{bmatrix}
1 &amp; 0 &amp; \cos x_3 \\
0 &amp; 1 &amp; -\sin x_3 \\
0 &amp; 0 &amp; 1
\end{bmatrix}^{-1} \cdot \begin{bmatrix}
-2d \,x_4 + \sin(x_3) \,x_6^2 -2d\cos(x_3)\, x_6 - x_1 \\
-2d \,x_5 + \cos(x_3) \,x_6^2 -2d\sin(x_3)\, x_6 - x_2 \\
t - e\,x_2\sin(x_3) + e\,x_1\cos(x_3)
\end{bmatrix}
\end{bmatrix}\end{split}\]</div>
</div></blockquote>
<p>Three explicit differential equations of order 2 reducted to a
system of 3x2 first-order differential equations.</p>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson" title="pylib.numerical.ode.newmark_newtonraphson"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.numerical.ode.newmark_newtonraphson()</span></code></a> and
<a class="reference internal" href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk" title="pylib.numerical.ode.newmark_newtonraphson_mdk"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.numerical.ode.newmark_newtonraphson_mdk()</span></code></a></p>
</div>
</dd></dl>
</div>

File diff suppressed because one or more lines are too long