Skip to content

Changelog

All notable changes to this project are documented here.

0.4.0 (2026-03-16)

Features

  • add optional per-point weights to all alignment functions (#173) (bdf1ed7)

Bug Fixes

  • clamp scale factor before half-precision downcast (#170) (08d7120)
  • MLX SVD backward, global device leak, and NaN abort (#168) (d050b9a)
  • reject 1D inputs with ValueError instead of IndexError (#171) (7b53608)
  • remove CLAUDE.md from tracking and add to .gitignore (#177) (8503f4c)
  • remove local-only files from tracking and add to .gitignore (#176) (db5ad2f)
  • replace in-place mutation of B_diag and S_corr in PyTorch backend (cba6362), closes #151

Documentation

  • annotate backward-pass sign conventions per framework (#157) (#172) (0dafc71)
  • document per-point weights across all markdown files (#175) (6633915)
  • fix consistency, missing content, and clarity across markdown files (#174) (d151c64)

0.3.0 (2026-03-14)

Features

  • mlx: warn when float64 silently falls back to CPU (#103) (6a36177)

Bug Fixes

  • autograd: gradient correctness, NaN shape hardening, and sign-symmetric safe denominators (#131) (503d95e)
  • horn/kabsch: batch dims, cross-framework validation, and RMSD consistency (#108) (0bedf35)
  • jax: add shape validation to horn, extract _horn_core, and clean up idioms (#109) (9cae22a)
  • jax: replace vmap_diag conditional with eye-broadcast in SVD backward (#107) (442f2dd), closes #31
  • P1 correctness bugs and review follow-ups (#128, #127, #130) (#133) (4a51e89)
  • pytorch,tensorflow: remove in-place view mutations and tf.rank tracing bug (#132) (65d92ca), closes #111 #124
  • pytorch: correct SVD backward comment, document higher-order grads, replace deprecated torch.det (#139) (ba75971)
  • replace hardcoded eps=1e-12 with dtype-aware finfo(dtype).eps (#110) (#136) (d34759d)
  • switch RMSD sqrt guard from max(mse, eps) to mse + eps (#137) (#138) (219ded6)
  • tensorflow: runtime shape validation for dynamic shapes (#134) (#135) (d5e5e9b)
  • tests: guard nearly_coplanar_nd against dim < 3 (#102) (042652f), closes #93

Performance Improvements

  • replace repeated ones-stack pattern with single-allocation in all frameworks (#143) (420dcd3), closes #30

Documentation

  • add MkDocs Material documentation site (#142) (b553a2e)
  • docstrings, normalization notes, compile/jit guidance (#141) (0236c37)
  • document cross-covariance conditioning requirement for rotation stability (#105) (0f45c53)

0.2.0 (2026-03-08)

Features

  • expose version on the kabsch_horn package (#77) (3586908)
  • tooling: add pre-commit config with hygiene, secret-scan, and ruff hooks (#86) (fe0e7a3)

Bug Fixes

  • add [tool.pytest.ini_options] with testpaths to pyproject.toml (#75) (24ac798)
  • build all dynamically inside each try block (#67) (48761d6)
  • ci: drop push trigger on dev to eliminate duplicate runs (#87) (f367bf5)
  • ci: replace uv sync --all-extras --dev with uv sync --dev (#76) (c454078)
  • correct GitHub username in pyproject.toml URLs (#63) (e8cdd9c)
  • enforce NaN-propagation contract in test_propagates_nans_gracefully (#42) (#73) (3d8e62b)
  • move shape check before auto-batching unsqueeze in all frameworks (#69) (f60d0fc), closes #49
  • remove dead _B = P.shape[0] assignments across all frameworks (#71) (f0cde24), closes #50
  • remove dead assignment in PyTorch SVD backward (#65) (9ccb02a), closes #33
  • testing: extend error handling coverage for horn shape mismatch and dim mismatch (#84) (3aed5ef)
  • testing: guard framework imports in adapters.py with try/except (#68) (68ce6b5), closes #46
  • testing: parametrize reference validation tests over multiple seeds (#83) (8aa00f6)
  • testing: raise Hypothesis example counts and consolidate numpy settings (#82) (f50ef9e)
  • testing: remove inline imports and replace class-name dispatch in test_error_handling.py (#80) (a7775fd)
  • tests: restructure nearly_coplanar_hypothesis to use _inner() pattern (#98) (8d577cd), closes #94 #95 #96
  • tests: strengthen assume guard to require sigma_min > 1e-3 (#72) (c7c7350), closes #70
  • tests: use Haar-uniform rotation sampler and add ND recovery tests (#61) (8c5ea10), closes #10
  • wrap numpy imports in try/except like all other backends (#64) (a3cecef)

Documentation

  • update numpy docstrings to [..., N, D] shape notation (#74) (17cc99c)

0.1.0 (2026-03-07)

Features

  • jax: Implement JAX backend with correct autodiff and tests (8c7b4c4)
  • mlx: Implement MLX backend with custom autodiff and tests (b9306cf)
  • setup project correctly and add working PyTorch implementation with SafeSVD (3cd857d)
  • tf: Implement TensorFlow backend with correct autodiff and tests (53e7f97)

Bug Fixes