Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
87e5ed5
fix: __version__ guard catches everything and leaves it unset on failure
petercorke Aug 17, 2026
8c9f35f
test: add regression coverage for trlog near-identity division
petercorke Aug 20, 2026
457128f
refactor(base): collapse the three-way Python-version type shim into …
petercorke Aug 20, 2026
8f1ab30
perf(base): speed up isR/ishom/ishom2 orthogonality checks
petercorke Aug 21, 2026
af473db
perf(base): speed up trnorm and tr2adjoint
petercorke Aug 21, 2026
9f13356
perf(base): speed up qqmul and qvmul
petercorke Aug 21, 2026
764e7f5
perf(base): speed up isskewa and cache identity matrix in trexp/trlog…
petercorke Aug 21, 2026
e6ce47f
chore: switch docs build to PyPI sphinx-pyrunblock instead of git+https
petercorke Sep 15, 2026
890d078
docs: add sphinx-copybutton and sphinx-codeautolink to docs deps
petercorke Sep 15, 2026
0c8b16a
docs: register sphinx_copybutton/sphinx_codeautolink extensions
petercorke Sep 15, 2026
21ba463
docs: configure sphinx-codeautolink and sphinx-copybutton options
petercorke Sep 15, 2026
563de34
docs: fix :linenos: indentation mismatch in intro.rst
petercorke Sep 16, 2026
e5abf12
fix: broken docstring examples in Twist2/Twist3/DualQuaternion, and t…
petercorke Sep 16, 2026
283f4ad
docs: note conj()'s sign fix as a versionchanged, bug present in 1.1.…
petercorke Sep 16, 2026
bde3690
chore: declare Python 3.13 and 3.14 support, add 3.14 to CI matrix
petercorke Sep 18, 2026
dbaaaf1
chore: reorganize timing.py into per-category tables, collapse test b…
petercorke Aug 21, 2026
5f5a893
chore: move timing.py to benchmarks/benchmark_smtb.py
petercorke Sep 18, 2026
a3f828f
feat(benchmarks): print machine and version summary before results
petercorke Sep 18, 2026
2c46775
fix: trplot/trplot2 silently swallowed unknown keyword arguments
petercorke Sep 26, 2026
3deefc8
Make Line3 relation tests invariant to Plucker scale
Doribelove Sep 27, 2026
149653a
test: avoid round-off in scaled Line3 fixture
Doribelove Sep 28, 2026
b91dcd8
Fix double transform of animation start pose in Animate.trplot
RoboX2020 Oct 9, 2026
c08331f
Add regression test for animation start pose
RoboX2020 Oct 9, 2026
c8d7188
Reject unsupported ndarray ranks in isvector
MokiMeow Oct 9, 2026
56c5f21
test: add direct tests for e2h/h2e; fix docstring seealso
petercorke Oct 10, 2026
e7682ea
fix: h2e rejects input with fewer than 2 rows; state e2h/h2e contract
petercorke Oct 10, 2026
f829872
Strengthen animation start-pose test against static trplot geometry
RoboX2020 Oct 10, 2026
73222bf
Accept a stacked (N, r, c) array as a sequence of poses
RoboX2020 Oct 10, 2026
1057abf
SE3: accept a stacked (N, 4, 4) array and say what is accepted in the…
RoboX2020 Oct 10, 2026
3f06d5e
Test SE3 and SO3 construction from a stacked array
RoboX2020 Oct 10, 2026
08cb279
Defer scipy imports in spline.py
RoboX2020 Oct 11, 2026
a105dbb
Defer scipy.interpolate import in quaternions
RoboX2020 Oct 11, 2026
e5802a5
Add test that importing spatialmath does not load scipy
RoboX2020 Oct 11, 2026
d8bb1ad
Merge PR #206: fix: __version__ guard catches everything and leaves i…
Copilot Oct 11, 2026
7dc65e3
Merge PR #208: test: add regression coverage for trlog near-identity …
Copilot Oct 11, 2026
d805d37
Merge PR #212: refactor(base): collapse the three-way Python-version …
Copilot Oct 11, 2026
31df473
Merge PR #213: perf(base): speed up isR/ishom/ishom2 orthogonality ch…
Copilot Oct 11, 2026
e5ec7fa
Merge PR #214: perf(base): speed up trnorm and tr2adjoint
Copilot Oct 11, 2026
ea2f29d
Merge PR #215: perf(base): speed up qqmul and qvmul
Copilot Oct 11, 2026
d8287e9
Merge PR #216: perf(base): speed up isskewa, cache identity in trexp/…
Copilot Oct 11, 2026
c6f3195
Merge PR #221: chore: switch docs build to PyPI sphinx-pyrunblock ins…
Copilot Oct 11, 2026
ea4d487
Merge PR #223: docs: add sphinx-copybutton and sphinx-codeautolink
Copilot Oct 11, 2026
3a47f8e
Merge PR #225: fix: broken docstring examples in Twist2/Twist3/DualQu…
Copilot Oct 11, 2026
67338f2
Merge PR #228: chore: declare Python 3.13/3.14 support, add 3.14 to CI
Copilot Oct 11, 2026
590e3d4
Merge PR #229: chore: reorganize timing script as benchmarks/benchmar…
Copilot Oct 11, 2026
bc04e03
Merge PR #230: fix: trplot/trplot2 silently swallowed unknown keyword…
Copilot Oct 11, 2026
14bd3e1
Merge PR #232: Make Line3 relation tests invariant to Plücker scale
Copilot Oct 11, 2026
1ccc728
Merge PR #238: Fix animation start pose being applied twice in Animat…
Copilot Oct 11, 2026
e9ef1af
Merge PR #239: Reject unsupported ndarray ranks in isvector
Copilot Oct 11, 2026
347769a
Merge PR #240: test+fix: direct tests for e2h/h2e, h2e rejects <2 row…
Copilot Oct 11, 2026
961e94b
Merge PR #243: Accept a stacked (N, r, c) ndarray as a sequence of po…
Copilot Oct 11, 2026
6a7cd4b
Merge PR #244: Defer scipy imports so import spatialmath is faster
Copilot Oct 11, 2026
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
Prev Previous commit
Next Next commit
chore: reorganize timing.py into per-category tables, collapse test b…
…oilerplate

Reworks the ad hoc, partly-commented-out timing script (which had been
manually re-enabled with a couple of tweaks, uncommitted, sitting in
the working tree across several perf PRs this session) into something
that's actually a useful reference:

- Split into separate tables, one per category (SO(3)/SE(3) base
  functions, SE3 class, quaternion base functions, UnitQuaternion
  class, twist/exponential-map base functions, Twist3 class, NumPy
  baseline), printed with a plain header between each. Base-level
  (module functions on raw arrays) and class-level (constructors/
  operators/properties on instances) are now consistently separated
  throughout, rather than mixed together - the old Twist3 section in
  particular had base functions (skew, trlog, trexp, rodrigues, ...)
  interleaved with class-level operations.
- Fixed a corrupted docstring header left over from a bad find/replace
  on upstream (`# -*- coding", t)` / `@author", t)`), unrelated to any
  of this but noticed while rewriting the file.
- Fixed mislabelled/ambiguous rows: `inner()` -> `np.inner(s, s).sum()`,
  bare `cross()` -> `base.cross(a, b)` (paired explicitly against
  `np.cross(a, b)`), and rows comparing decomposed-(R,t) vs full-4x4
  composition that had identical labels for different code paths.
- Added coverage that didn't exist before: SE3 <-> RPY, SE3 <-> Euler,
  SE3 -> UnitQuaternion, UnitQuaternion <-> rotation matrix,
  UnitQuaternion -> SE3, and SE3 @ SE3 (normalized compose) alongside
  SE3 * SE3.
- Collapsed the `timeit.timeit(...); result(...)` two-line-per-test
  boilerplate into a single `timeit(stmt, label, setup)` call (module
  import aliased to `_timeit` to free up the name). Replaced the
  single `timeit.timeit(..., number=N)` run per test with
  `min(timeit.repeat(..., number=N, repeat=REPEATS))` - a single long
  run doesn't distinguish real cost from a GC pause or OS scheduling
  hiccup, min-of-repeats does. N dropped from 100_000 to 10_000 (an
  arbitrary starting point either way) since the repeats now do the
  work of suppressing noise that a bigger N was being used for.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
  • Loading branch information
petercorke and claude committed Sep 18, 2026
commit dbaaaf1a42d6d433947d9e602238e77e582ac120
Loading