Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ the [Deprecations](https://hugofara.github.io/pylinkage/deprecations.html) page.

## [Unreleased]

## [1.3.0] - 2026-10-25

### Added

- **Python 3.15 support.** It is tested in CI. On 3.15 the `cad` extra
Expand All @@ -17,9 +19,12 @@ the [Deprecations](https://hugofara.github.io/pylinkage/deprecations.html) page.

### Changed

- **Breaking:** Dropped Python 3.10 support, which reached end of life in
October 2026. Minimum version is now Python 3.11. `typing_extensions` is no
longer a dependency.
- **Python 3.11 or later is required.** Python 3.10 reached end of life in
October 2026. pip keeps a 3.10 environment on 1.2.2. `typing_extensions` is
no longer a dependency.
- The development lockfile is refreshed. It moves pillow to 13.0.0, along with
certifi, tornado, urllib3 and nbconvert, past the advisories Dependabot
reported. None of them reach the published package.

### Fixed

Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ authors:
given-names: Hugo
orcid: "https://orcid.org/0009-0001-0769-4434"
affiliation: "Independent Researcher, France"
version: 1.2.2
date-released: "2026-09-18"
version: 1.3.0
date-released: "2026-10-25"
identifiers:
- type: doi
value: "10.5281/zenodo.21207486"
Expand Down
2 changes: 1 addition & 1 deletion docs/_static/documentation_options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '1.2.2',
VERSION: '1.3.0',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
Expand Down
4 changes: 2 additions & 2 deletions docs/api/modules.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pylinkage &mdash; pylinkage 1.2.2 documentation</title>
<title>pylinkage &mdash; pylinkage 1.3.0 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />


<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=fd7cadf9"></script>
<script src="../_static/documentation_options.js?v=1f29e9d3"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/js/theme.js"></script>
Expand Down
68 changes: 57 additions & 11 deletions docs/api/pylinkage.actuators.html

Large diffs are not rendered by default.

184 changes: 92 additions & 92 deletions docs/api/pylinkage.assur.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/api/pylinkage.bridge.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pylinkage.bridge package &mdash; pylinkage 1.2.2 documentation</title>
<title>pylinkage.bridge package &mdash; pylinkage 1.3.0 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />


<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=fd7cadf9"></script>
<script src="../_static/documentation_options.js?v=1f29e9d3"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/js/theme.js"></script>
Expand Down
4 changes: 2 additions & 2 deletions docs/api/pylinkage.cam.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pylinkage.cam package &mdash; pylinkage 1.2.2 documentation</title>
<title>pylinkage.cam package &mdash; pylinkage 1.3.0 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />


<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=fd7cadf9"></script>
<script src="../_static/documentation_options.js?v=1f29e9d3"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/js/theme.js"></script>
Expand Down
24 changes: 12 additions & 12 deletions docs/api/pylinkage.components.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pylinkage.components package &mdash; pylinkage 1.2.2 documentation</title>
<title>pylinkage.components package &mdash; pylinkage 1.3.0 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />


<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=fd7cadf9"></script>
<script src="../_static/documentation_options.js?v=1f29e9d3"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/js/theme.js"></script>
Expand Down Expand Up @@ -141,8 +141,8 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this headi
They don’t move during simulation and serve as anchors for other
kinematic elements like actuators and dyads.</p>
<p class="rubric">Example</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">&quot;O1&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;O2&quot;</span><span class="p">)</span>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">"O1"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"O2"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span><span class="o">.</span><span class="n">position</span>
<span class="go">(0.0, 0.0)</span>
</pre></div>
Expand Down Expand Up @@ -201,16 +201,16 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this headi
</dd>
</dl>
<p class="rubric">Example</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">&quot;O1&quot;</span><span class="p">)</span>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">"O1"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">crank</span> <span class="o">=</span> <span class="n">Crank</span><span class="p">(</span><span class="n">anchor</span><span class="o">=</span><span class="n">O1</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;O2&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"O2"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Track a point at 45 degrees from crank-&gt;O2 line</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">tracker</span> <span class="o">=</span> <span class="n">PointTracker</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">anchor1</span><span class="o">=</span><span class="n">crank</span><span class="o">.</span><span class="n">output</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">anchor2</span><span class="o">=</span><span class="n">O2</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">distance</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">angle</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">4</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;tracer_point&quot;</span>
<span class="gp">... </span> <span class="n">name</span><span class="o">=</span><span class="s2">"tracer_point"</span>
<span class="gp">... </span><span class="p">)</span>
</pre></div>
</div>
Expand Down Expand Up @@ -433,8 +433,8 @@ <h2>Module contents<a class="headerlink" href="#module-contents" title="Link to
They don’t move during simulation and serve as anchors for other
kinematic elements like actuators and dyads.</p>
<p class="rubric">Example</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">&quot;O1&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;O2&quot;</span><span class="p">)</span>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">"O1"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"O2"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span><span class="o">.</span><span class="n">position</span>
<span class="go">(0.0, 0.0)</span>
</pre></div>
Expand Down Expand Up @@ -486,16 +486,16 @@ <h2>Module contents<a class="headerlink" href="#module-contents" title="Link to
</dd>
</dl>
<p class="rubric">Example</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">&quot;O1&quot;</span><span class="p">)</span>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">O1</span> <span class="o">=</span> <span class="n">Ground</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="n">name</span><span class="o">=</span><span class="s2">"O1"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">crank</span> <span class="o">=</span> <span class="n">Crank</span><span class="p">(</span><span class="n">anchor</span><span class="o">=</span><span class="n">O1</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;O2&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">O2</span> <span class="o">=</span> <span class="n">Ground</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"O2"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Track a point at 45 degrees from crank-&gt;O2 line</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">tracker</span> <span class="o">=</span> <span class="n">PointTracker</span><span class="p">(</span>
<span class="gp">... </span> <span class="n">anchor1</span><span class="o">=</span><span class="n">crank</span><span class="o">.</span><span class="n">output</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">anchor2</span><span class="o">=</span><span class="n">O2</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">distance</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">angle</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">4</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;tracer_point&quot;</span>
<span class="gp">... </span> <span class="n">name</span><span class="o">=</span><span class="s2">"tracer_point"</span>
<span class="gp">... </span><span class="p">)</span>
</pre></div>
</div>
Expand Down
Loading
Loading