Skip to content

Commit d39743b

Browse files
authored
Merge pull request #89 from C4dynamics/dev
update paper affiliation, add autopilot example
2 parents fa151d1 + 7822604 commit d39743b

File tree

131 files changed

+355
-628
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+355
-628
lines changed

c4dynamics/states/state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ def store(self, t = -1):
524524
525525
526526
'''
527-
527+
# FIXME: make that when t is not provided a counter is used instead.
528528

529529
self._data.append([t] + self.X.tolist())
530530

docs/_modules/c4dynamics/datasets/_manager.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -1073,7 +1073,7 @@ <h1>Source code for c4dynamics.datasets._manager</h1><div class="highlight"><pre
10731073

10741074
<div class="footer-item">
10751075
<p class="last-updated">
1076-
Last updated on Sep 30, 2025.
1076+
Last updated on Oct 13, 2025.
10771077
<br/>
10781078
</p>
10791079
</div>

docs/_modules/c4dynamics/detectors/yolo3_opencv.html

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -403,6 +403,7 @@ <h1>Source code for c4dynamics.detectors.yolo3_opencv</h1><div class="highlight"
403403
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">c4d</span>
404404
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">pixelpoint</span>
405405
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Optional</span>
406+
<span class="kn">import</span><span class="w"> </span><span class="nn">importlib.resources</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">resources</span>
406407

407408
<span class="n">MODEL_SIZE</span> <span class="o">=</span> <span class="p">(</span><span class="mi">416</span><span class="p">,</span> <span class="mi">416</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
408409

@@ -616,18 +617,13 @@ <h1>Source code for c4dynamics.detectors.yolo3_opencv</h1><div class="highlight"
616617
<span class="n">weights_path</span> <span class="o">=</span> <span class="n">c4d</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">nn_model</span><span class="p">(</span><span class="s1">&#39;YOLOv3&#39;</span><span class="p">)</span>
617618
<span class="n">errormsg</span> <span class="o">=</span> <span class="s2">&quot;Try to clear the cache by &#39;c4dynamics.datasets.clear_cache()&#39;&quot;</span>
618619

619-
620-
621620
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">weights_path</span><span class="p">):</span>
622621
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The file &#39;yolov3.weights&#39; does not &quot;</span>
623622
<span class="sa">f</span><span class="s2">&quot;exist in: &#39;</span><span class="si">{</span><span class="n">weights_path</span><span class="si">}</span><span class="s2">&#39;. </span><span class="si">{</span><span class="n">errormsg</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
624623

625-
626-
<span class="n">cfg_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">),</span> <span class="s1">&#39;yolov3.cfg&#39;</span><span class="p">)</span>
627-
<span class="c1"># cfg_path = &#39;yolov3.cfg&#39;</span>
628-
<span class="c1"># coconames = os.path.join(yolodir, &#39;coco.names&#39;)</span>
629-
630-
<span class="bp">self</span><span class="o">.</span><span class="n">net</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">dnn</span><span class="o">.</span><span class="n">readNetFromDarknet</span><span class="p">(</span><span class="n">cfg_path</span><span class="p">,</span> <span class="n">weights_path</span><span class="p">)</span>
624+
<span class="k">with</span> <span class="n">resources</span><span class="o">.</span><span class="n">path</span><span class="p">(</span><span class="s1">&#39;c4dynamics.detectors&#39;</span><span class="p">,</span> <span class="s1">&#39;yolov3.cfg&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">cfgpath</span><span class="p">:</span>
625+
<span class="bp">self</span><span class="o">.</span><span class="n">net</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">dnn</span><span class="o">.</span><span class="n">readNetFromDarknet</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">cfgpath</span><span class="p">),</span> <span class="n">weights_path</span><span class="p">)</span>
626+
631627
<span class="bp">self</span><span class="o">.</span><span class="n">net</span><span class="o">.</span><span class="n">setPreferableBackend</span><span class="p">(</span><span class="n">cv2</span><span class="o">.</span><span class="n">dnn</span><span class="o">.</span><span class="n">DNN_BACKEND_OPENCV</span><span class="p">)</span>
632628
<span class="n">ln</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">net</span><span class="o">.</span><span class="n">getLayerNames</span><span class="p">()</span>
633629
<span class="bp">self</span><span class="o">.</span><span class="n">ln</span> <span class="o">=</span> <span class="p">[</span><span class="n">ln</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">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">net</span><span class="o">.</span><span class="n">getUnconnectedOutLayers</span><span class="p">()]</span>
@@ -1064,26 +1060,6 @@ <h1>Source code for c4dynamics.detectors.yolo3_opencv</h1><div class="highlight"
10641060

10651061
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
10661062

1067-
<span class="c1"># import doctest, contextlib</span>
1068-
<span class="c1"># from c4dynamics import IgnoreOutputChecker, cprint</span>
1069-
1070-
<span class="c1"># # Register the custom OutputChecker</span>
1071-
<span class="c1"># doctest.OutputChecker = IgnoreOutputChecker</span>
1072-
1073-
<span class="c1"># tofile = False </span>
1074-
<span class="c1"># optionflags = doctest.FAIL_FAST</span>
1075-
1076-
<span class="c1"># if tofile: </span>
1077-
<span class="c1"># with open(os.path.join(&#39;tests&#39;, &#39;_out&#39;, &#39;output.txt&#39;), &#39;w&#39;) as f:</span>
1078-
<span class="c1"># with contextlib.redirect_stdout(f), contextlib.redirect_stderr(f):</span>
1079-
<span class="c1"># result = doctest.testmod(optionflags = optionflags) </span>
1080-
<span class="c1"># else: </span>
1081-
<span class="c1"># result = doctest.testmod(optionflags = optionflags)</span>
1082-
1083-
<span class="c1"># if result.failed == 0:</span>
1084-
<span class="c1"># cprint(os.path.basename(__file__) + &quot;: all tests passed!&quot;, &#39;g&#39;)</span>
1085-
<span class="c1"># else:</span>
1086-
<span class="c1"># print(f&quot;{result.failed}&quot;)</span>
10871063
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">rundoctests</span>
10881064
<span class="n">rundoctests</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">])</span>
10891065

@@ -1136,7 +1112,7 @@ <h1>Source code for c4dynamics.detectors.yolo3_opencv</h1><div class="highlight"
11361112

11371113
<div class="footer-item">
11381114
<p class="last-updated">
1139-
Last updated on Sep 30, 2025.
1115+
Last updated on Oct 13, 2025.
11401116
<br/>
11411117
</p>
11421118
</div>

docs/_modules/c4dynamics/eqm/derivs.html

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -591,30 +591,6 @@ <h1>Source code for c4dynamics.eqm.derivs</h1><div class="highlight"><pre>
591591

592592
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
593593

594-
595-
<span class="c1"># import matplotlib</span>
596-
<span class="c1"># matplotlib.use(&quot;TkAgg&quot;) # keep interactive</span>
597-
<span class="c1"># import matplotlib.pyplot as plt </span>
598-
599-
<span class="c1"># import doctest, contextlib, os</span>
600-
<span class="c1"># from c4dynamics import IgnoreOutputChecker, cprint</span>
601-
<span class="c1"># # Register the custom OutputChecker</span>
602-
<span class="c1"># doctest.OutputChecker = IgnoreOutputChecker</span>
603-
604-
<span class="c1"># tofile = False </span>
605-
<span class="c1"># optionflags = doctest.FAIL_FAST</span>
606-
607-
<span class="c1"># if tofile: </span>
608-
<span class="c1"># with open(os.path.join(&#39;tests&#39;, &#39;_out&#39;, &#39;output.txt&#39;), &#39;w&#39;) as f:</span>
609-
<span class="c1"># with contextlib.redirect_stdout(f), contextlib.redirect_stderr(f):</span>
610-
<span class="c1"># result = doctest.testmod(optionflags = optionflags) </span>
611-
<span class="c1"># else: </span>
612-
<span class="c1"># result = doctest.testmod(optionflags = optionflags)</span>
613-
614-
<span class="c1"># if result.failed == 0:</span>
615-
<span class="c1"># cprint(os.path.basename(__file__) + &quot;: all tests passed!&quot;, &#39;g&#39;)</span>
616-
<span class="c1"># else:</span>
617-
<span class="c1"># print(f&quot;{result.failed}&quot;)</span>
618594
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">rundoctests</span>
619595
<span class="n">rundoctests</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">])</span>
620596

@@ -666,7 +642,7 @@ <h1>Source code for c4dynamics.eqm.derivs</h1><div class="highlight"><pre>
666642

667643
<div class="footer-item">
668644
<p class="last-updated">
669-
Last updated on Sep 30, 2025.
645+
Last updated on Oct 13, 2025.
670646
<br/>
671647
</p>
672648
</div>

docs/_modules/c4dynamics/eqm/integrate.html

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -738,26 +738,6 @@ <h1>Source code for c4dynamics.eqm.integrate</h1><div class="highlight"><pre>
738738

739739
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
740740

741-
<span class="c1"># import doctest, contextlib, os</span>
742-
<span class="c1"># from c4dynamics import IgnoreOutputChecker, cprint</span>
743-
744-
<span class="c1"># # Register the custom OutputChecker</span>
745-
<span class="c1"># doctest.OutputChecker = IgnoreOutputChecker</span>
746-
747-
<span class="c1"># tofile = False </span>
748-
<span class="c1"># optionflags = doctest.FAIL_FAST</span>
749-
750-
<span class="c1"># if tofile: </span>
751-
<span class="c1"># with open(os.path.join(&#39;tests&#39;, &#39;_out&#39;, &#39;output.txt&#39;), &#39;w&#39;) as f:</span>
752-
<span class="c1"># with contextlib.redirect_stdout(f), contextlib.redirect_stderr(f):</span>
753-
<span class="c1"># result = doctest.testmod(optionflags = optionflags) </span>
754-
<span class="c1"># else: </span>
755-
<span class="c1"># result = doctest.testmod(optionflags = optionflags)</span>
756-
757-
<span class="c1"># if result.failed == 0:</span>
758-
<span class="c1"># cprint(os.path.basename(__file__) + &quot;: all tests passed!&quot;, &#39;g&#39;)</span>
759-
<span class="c1"># else:</span>
760-
<span class="c1"># print(f&quot;{result.failed}&quot;)</span>
761741
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">rundoctests</span>
762742
<span class="n">rundoctests</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">])</span>
763743

@@ -809,7 +789,7 @@ <h1>Source code for c4dynamics.eqm.integrate</h1><div class="highlight"><pre>
809789

810790
<div class="footer-item">
811791
<p class="last-updated">
812-
Last updated on Sep 30, 2025.
792+
Last updated on Oct 13, 2025.
813793
<br/>
814794
</p>
815795
</div>

docs/_modules/c4dynamics/filters/ekf.html

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -699,26 +699,6 @@ <h1>Source code for c4dynamics.filters.ekf</h1><div class="highlight"><pre>
699699

700700
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
701701

702-
<span class="c1"># import doctest, contextlib, os</span>
703-
<span class="c1"># from c4dynamics import IgnoreOutputChecker, cprint</span>
704-
705-
<span class="c1"># # Register the custom OutputChecker</span>
706-
<span class="c1"># doctest.OutputChecker = IgnoreOutputChecker</span>
707-
708-
<span class="c1"># tofile = False </span>
709-
<span class="c1"># optionflags = doctest.FAIL_FAST</span>
710-
711-
<span class="c1"># if tofile: </span>
712-
<span class="c1"># with open(os.path.join(&#39;tests&#39;, &#39;_out&#39;, &#39;output.txt&#39;), &#39;w&#39;) as f:</span>
713-
<span class="c1"># with contextlib.redirect_stdout(f), contextlib.redirect_stderr(f):</span>
714-
<span class="c1"># result = doctest.testmod(optionflags = optionflags) </span>
715-
<span class="c1"># else: </span>
716-
<span class="c1"># result = doctest.testmod(optionflags = optionflags)</span>
717-
718-
<span class="c1"># if result.failed == 0:</span>
719-
<span class="c1"># cprint(os.path.basename(__file__) + &quot;: all tests passed!&quot;, &#39;g&#39;)</span>
720-
<span class="c1"># else:</span>
721-
<span class="c1"># print(f&quot;{result.failed}&quot;)</span>
722702
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">rundoctests</span>
723703
<span class="n">rundoctests</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">])</span>
724704

@@ -773,7 +753,7 @@ <h1>Source code for c4dynamics.filters.ekf</h1><div class="highlight"><pre>
773753

774754
<div class="footer-item">
775755
<p class="last-updated">
776-
Last updated on Sep 30, 2025.
756+
Last updated on Oct 13, 2025.
777757
<br/>
778758
</p>
779759
</div>

docs/_modules/c4dynamics/filters/kalman.html

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -1107,26 +1107,6 @@ <h1>Source code for c4dynamics.filters.kalman</h1><div class="highlight"><pre>
11071107

11081108
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
11091109

1110-
<span class="c1"># import doctest, contextlib, os</span>
1111-
<span class="c1"># from c4dynamics import IgnoreOutputChecker, cprint</span>
1112-
1113-
<span class="c1"># # Register the custom OutputChecker</span>
1114-
<span class="c1"># doctest.OutputChecker = IgnoreOutputChecker</span>
1115-
1116-
<span class="c1"># tofile = False </span>
1117-
<span class="c1"># optionflags = doctest.FAIL_FAST</span>
1118-
1119-
<span class="c1"># if tofile: </span>
1120-
<span class="c1"># with open(os.path.join(&#39;tests&#39;, &#39;_out&#39;, &#39;output.txt&#39;), &#39;w&#39;) as f:</span>
1121-
<span class="c1"># with contextlib.redirect_stdout(f), contextlib.redirect_stderr(f):</span>
1122-
<span class="c1"># result = doctest.testmod(optionflags = optionflags) </span>
1123-
<span class="c1"># else: </span>
1124-
<span class="c1"># result = doctest.testmod(optionflags = optionflags)</span>
1125-
1126-
<span class="c1"># if result.failed == 0:</span>
1127-
<span class="c1"># cprint(os.path.basename(__file__) + &quot;: all tests passed!&quot;, &#39;g&#39;)</span>
1128-
<span class="c1"># else:</span>
1129-
<span class="c1"># print(f&quot;{result.failed}&quot;)</span>
11301110
<span class="kn">from</span><span class="w"> </span><span class="nn">c4dynamics</span><span class="w"> </span><span class="kn">import</span> <span class="n">rundoctests</span>
11311111
<span class="n">rundoctests</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">modules</span><span class="p">[</span><span class="vm">__name__</span><span class="p">])</span>
11321112

@@ -1183,7 +1163,7 @@ <h1>Source code for c4dynamics.filters.kalman</h1><div class="highlight"><pre>
11831163

11841164
<div class="footer-item">
11851165
<p class="last-updated">
1186-
Last updated on Sep 30, 2025.
1166+
Last updated on Oct 13, 2025.
11871167
<br/>
11881168
</p>
11891169
</div>

docs/_modules/c4dynamics/filters/lowpass.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<link rel="search" title="Search" href="../../../search.html" />
5050
<meta name="viewport" content="width=device-width, initial-scale=1"/>
5151
<meta name="docsearch:language" content="en"/>
52-
<meta name="docbuild:last-update" content="Sep 30, 2025"/>
52+
<meta name="docbuild:last-update" content="Oct 13, 2025"/>
5353
</head>
5454

5555

@@ -571,7 +571,7 @@ <h1>Source code for c4dynamics.filters.lowpass</h1><div class="highlight"><pre>
571571

572572
<div class="footer-item">
573573
<p class="last-updated">
574-
Last updated on Sep 30, 2025.
574+
Last updated on Oct 13, 2025.
575575
<br/>
576576
</p>
577577
</div>

0 commit comments

Comments
 (0)