Skip to content

feat: Hamiltonian mechanics, backward reachability, audit fixes, ecosystem docs#147

Merged
rororowyourboat merged 9 commits intomainfrom
dev
Mar 28, 2026
Merged

feat: Hamiltonian mechanics, backward reachability, audit fixes, ecosystem docs#147
rororowyourboat merged 9 commits intomainfrom
dev

Conversation

@rororowyourboat
Copy link
Copy Markdown
Collaborator

Summary

  • Hamiltonian mechanics (feat: optimal control / Hamiltonian mechanics layer #124): derive_hamiltonian() in gds-symbolic — Pontryagin's principle via SymPy symbolic differentiation, costate dynamics, conservation verification. 10 tests.
  • Backward reachable sets (feat(gds-control): backward reachable set computation #127): backward_reachable_set() + extract_isochrones() in gds-analysis — backward ODE integration from target sets. 9 tests.
  • Equilibrium validation: extract_payoff_matrices() now raises on unrecognized actions and incomplete payoff matrices instead of silent zeros. 3 new tests.
  • Repo hygiene: .hypothesis/ removed from tracking, added to .gitignore. F841 lint fix.
  • Landing page: docs/index.md updated with full 14-package ecosystem.
  • Journal: Entry 009.

Test plan

  • 1,428 tests pass across 8 packages
  • Ruff lint + format clean

rohan added 9 commits March 28, 2026 19:10
- Remove .hypothesis/ from tracking, add to .gitignore
- Fix F841: remove unused r1 variable in test_float_tolerance
- ogs/equilibrium.py: raise ValueError on unrecognized actions
  (was silently skipping → zero payoff)
- ogs/equilibrium.py: validate payoff matrix completeness
  (raise on missing action profiles instead of silent zeros)
- ogs/equilibrium.py: guard numpy import in extract_payoff_matrices
- Add 3 tests for incomplete games (missing TC, typo action,
  missing player)
Pontryagin's Maximum Principle via symbolic differentiation:

- HamiltonianSpec: Lagrangian, terminal cost, control bounds
- derive_hamiltonian(): symbolic H = L + p^T f, costate dp/dt = -dH/dx,
  compiled augmented ODE for (x, p) integration via lambdify
- derive_from_model(): convenience wrapper for SymbolicControlModel
- verify_conservation(): check H = const along trajectories

10 new tests: 1D LQR, 2D harmonic, parameterized dynamics, missing
equations, SymbolicControlModel integration, conservation verification,
end-to-end ODE integration.
Root CLAUDE.md:
- Update packages table from 8 to 14 packages
- Update dependency graph to show full ecosystem
- Add test commands for gds-continuous, gds-symbolic, gds-analysis, gds-owl

New CLAUDE.md files (6):
- gds-analysis, gds-symbolic, gds-viz, gds-owl, gds-psuu, gds-sim

New docs/ pages (7):
- docs/continuous/ (index + getting-started)
- docs/symbolic/ (index + getting-started)
- docs/analysis/ (index + getting-started)
- docs/games/equilibrium.md

mkdocs.yml: add nav entries for Continuous-Time, Symbolic Math,
Analysis sections + equilibrium page under Games.

Docs build passes (mkdocs build).
backward_reachability.py in gds-analysis:

- backward_reachable_set(): integrates dynamics backward from target set
  boundary points using gds-continuous ODE engine. Returns trajectories
  with metadata.
- extract_isochrones(): extracts level sets B(t) at requested times from
  backward trajectories, with time-matching tolerance.
- BackwardReachableSet / Isochrone dataclasses for results.

9 tests: 1D decay, 2D harmonic (energy conservation), HC capture circle,
custom t_eval, multiple targets, isochrone extraction at specific times,
backward-increasing values, tolerance filtering.

gds-continuous[scipy] + numpy as optional extras for gds-analysis.
@rororowyourboat rororowyourboat merged commit a8956c6 into main Mar 28, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant