> python run.py
{
  "selected": {
    "candidate": 33,
    "velocity_m_s": 0.5,
    "acceleration_m_s2": 2.4,
    "jerk_m_s3": 48.0,
    "accepted": true,
    "duration_s": 2.396666666666667,
    "worst_rms_torque_Nm": 0.2600026774108349,
    "worst_peak_torque_Nm": 0.5582672974555974
  },
  "accepted_candidates": 35,
  "corner_runs": 240
}


> python verify.py
test_dissipative_energy_balance (test_planner.SizingTests.test_dissipative_energy_balance) ... ok
test_dwell_changes_rms_not_energy (test_planner.SizingTests.test_dwell_changes_rms_not_energy) ... ok
test_efficiency_sign (test_planner.SizingTests.test_efficiency_sign) ... ok
test_invalid_axis (test_planner.SizingTests.test_invalid_axis) ... ok
test_lossless_energy_balance (test_planner.SizingTests.test_lossless_energy_balance) ... ok
test_peak_matches_dense_sample (test_planner.SizingTests.test_peak_matches_dense_sample) ... ok
test_quadrature_independent_integral (test_planner.SizingTests.test_quadrature_independent_integral) ... ok
test_signed_duty_symmetry (test_planner.SizingTests.test_signed_duty_symmetry) ... ok
test_zero_cycle (test_planner.SizingTests.test_zero_cycle) ... ok
test_acceleration_limited (test_planner.TrajectoryTests.test_acceleration_limited) ... ok
test_breakpoint_continuity (test_planner.TrajectoryTests.test_breakpoint_continuity) ... ok
test_derivatives (test_planner.TrajectoryTests.test_derivatives) ... ok
test_full_profile (test_planner.TrajectoryTests.test_full_profile) ... ok
test_invalid_limits (test_planner.TrajectoryTests.test_invalid_limits) ... ok
test_parameter_grid_limits (test_planner.TrajectoryTests.test_parameter_grid_limits) ... ok
test_signed_symmetry (test_planner.TrajectoryTests.test_signed_symmetry) ... ok
test_time_bounds_and_resource_limit (test_planner.TrajectoryTests.test_time_bounds_and_resource_limit) ... ok
test_triangular_closed_form (test_planner.TrajectoryTests.test_triangular_closed_form) ... ok
test_velocity_limited (test_planner.TrajectoryTests.test_velocity_limited) ... ok
test_zero (test_planner.TrajectoryTests.test_zero) ... ok

----------------------------------------------------------------------
Ran 20 tests in 0.133s

OK



> python complete_validation.py
{
  "passed": true,
  "checks": 15,
  "tracking": [
    {
      "bandwidth_hz": 35,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.04991720150532286,
      "accepted": true,
      "expected": "accepted"
    },
    {
      "bandwidth_hz": 25,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.09806687745672962,
      "accepted": true,
      "expected": "accepted"
    },
    {
      "bandwidth_hz": 8,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.9709794229880528,
      "accepted": false,
      "expected": "rejected"
    }
  ]
}


