feat(solver): Phase 4+5 — diagnostics, preferences, assembly integration #34

Merged
forbes merged 3 commits from feat/phase5-assembly-integration into main 2026-02-21 05:48:26 +00:00
Owner

Summary

Phases 4 and 5 of the KCSolve solver addon.

Phase 4: Diagnostics & Preferences

  • Per-entity DOF analysis via Jacobian SVD (diagnostics.py)
  • Overconstrained detection: redundant vs conflicting constraints
  • Half-space tracking to preserve configuration branch (preference.py)
  • Minimum-movement weighting for least-squares solve
  • BFGS fallback extended with weight vector and quaternion renormalization
  • Snapshot/restore and env accessor on ParamTable

Phase 5: Assembly Integration

  • Extract _build_system() from solve() for reuse by diagnose()
  • Add diagnose(ctx): runs find_overconstrained() unconditionally
  • Add interactive drag protocol: pre_drag(), drag_step(), post_drag()
  • Log warning when joint limits are present (not yet enforced)
  • KindredSolver now implements all IKCSolver methods needed for full Assembly workbench integration

Tests

  • In-client console test script (tests/console_test_phase5.py)
  • Unit tests for diagnostics and preference modules

Depends on

Create repo PR with C++ preference wiring and integration tests.

## Summary Phases 4 and 5 of the KCSolve solver addon. ### Phase 4: Diagnostics & Preferences - Per-entity DOF analysis via Jacobian SVD (`diagnostics.py`) - Overconstrained detection: redundant vs conflicting constraints - Half-space tracking to preserve configuration branch (`preference.py`) - Minimum-movement weighting for least-squares solve - BFGS fallback extended with weight vector and quaternion renormalization - Snapshot/restore and env accessor on ParamTable ### Phase 5: Assembly Integration - Extract `_build_system()` from `solve()` for reuse by `diagnose()` - Add `diagnose(ctx)`: runs `find_overconstrained()` unconditionally - Add interactive drag protocol: `pre_drag()`, `drag_step()`, `post_drag()` - Log warning when joint limits are present (not yet enforced) - KindredSolver now implements all IKCSolver methods needed for full Assembly workbench integration ### Tests - In-client console test script (`tests/console_test_phase5.py`) - Unit tests for diagnostics and preference modules ### Depends on Create repo PR with C++ preference wiring and integration tests.
forbes added 3 commits 2026-02-21 05:46:30 +00:00
- Add per-entity DOF analysis via Jacobian SVD (diagnostics.py)
- Add overconstrained detection: redundant vs conflicting constraints
- Add half-space tracking to preserve configuration branch (preference.py)
- Add minimum-movement weighting for least-squares solve
- Extend BFGS fallback with weight vector and quaternion renormalization
- Add snapshot/restore and env accessor to ParamTable
- Fix DistancePointPointConstraint sign for half-space tracking
- Extract _build_system() from solve() to enable reuse by diagnose()
- Add diagnose(ctx) method: runs find_overconstrained() unconditionally
- Add interactive drag protocol: pre_drag(), drag_step(), post_drag()
- Add _run_diagnostics() and _extract_placements() helpers
- Log warning when joint limits are present (not yet enforced)
- KindredSolver now implements all IKCSolver methods needed for
  full Assembly workbench integration
Paste-into-console test script exercising the full pipeline:
- Solver registry and loading
- Preference switching between kindred/ondsel
- Fixed joint placement matching
- Revolute joint DOF reporting
- No-ground error code
- Solve determinism/stability
- Standalone kcsolve API (no FreeCAD Assembly objects)
- Diagnose API for overconstrained detection
forbes merged commit 318a1c17da into main 2026-02-21 05:48:26 +00:00
forbes deleted branch feat/phase5-assembly-integration 2026-02-21 05:48:27 +00:00
Sign in to join this conversation.