convert_mates_to_joints() bridges mate-level constraints to the existing
joint-based analysis pipeline. analyze_mate_assembly() orchestrates the
full pipeline with bidirectional mate-joint traceability.
Closes#13
Add 4 new topology generators to SyntheticAssemblyGenerator:
- generate_tree_assembly: random spanning tree with configurable branching
- generate_loop_assembly: closed ring producing overconstrained data
- generate_star_assembly: hub-and-spoke topology
- generate_mixed_assembly: tree + loops with configurable edge density
Each accepts joint_types as JointType | list[JointType] for per-joint
type sampling.
Add complexity tiers (simple/medium/complex) with predefined body count
ranges via COMPLEXITY_RANGES dict and ComplexityTier type alias.
Update generate_training_batch with 7-way generator selection,
complexity_tier parameter, and generator_type field in output dicts.
Extract private helpers (_random_position, _random_axis,
_select_joint_type, _create_joint) to reduce duplication.
44 generator tests, 130 total — all passing.
Closes#7
Port chain, rigid, and overconstrained assembly generators plus
the training batch generation from data/synthetic/pebble-game.py.
- Refactored rng.choice on enums/callables to integer indexing (mypy)
- Typed n_bodies_range as tuple[int, int]
- Typed batch return as list[dict[str, Any]]
- Full type annotations (mypy strict)
- Re-exported from solver.datagen.__init__
Closes#5
Port the combined pebble game + Jacobian verification entry point from
data/synthetic/pebble-game.py. Ties PebbleGame3D and JacobianVerifier
together with virtual ground body support.
- Optional[int] -> int | None (UP007)
- GROUND_ID constant extracted to module level
- Full type annotations (mypy strict)
- Re-exported from solver.datagen.__init__
Closes#4
Port the constraint Jacobian builder and numerical rank verifier from
data/synthetic/pebble-game.py. All 11 joint type builders, SVD rank
computation, and incremental dependency detection.
- Full type annotations (mypy strict)
- Ruff lint and format clean
- Re-exported from solver.datagen.__init__
Closes#3
Port the (6,6)-pebble game implementation from data/synthetic/pebble-game.py.
Imports shared types from solver.datagen.types. No behavioral changes.
- Full type annotations on all methods (mypy strict)
- Ruff-compliant: ternary, combined if, unpacking
- Re-exported from solver.datagen.__init__
Closes#2
Port JointType, RigidBody, Joint, PebbleState, and ConstraintAnalysis
from data/synthetic/pebble-game.py into the solver package.
- Add __all__ export list
- Put typing.Any behind TYPE_CHECKING (ruff TCH003)
- Parameterize list[dict] as list[dict[str, Any]] (mypy strict)
- Re-export all types from solver.datagen.__init__
Closes#1
isConvergedToNumericalLimit() compared dxNorms->at(iterNo) to itself
instead of comparing current vs previous iteration. This prevented
the solver from detecting convergence improvement, causing it to
exhaust its iteration limit on assemblies with many constraints.
Fix: read dxNorms->at(iterNo - 1) for the previous iteration's norm.
* Check rackpin and gear for zero radii
* rebase zero-radii-check (#69)
* contributing
* Update push-freecad.yml
updated actions/checkout to v4
* dragging log for debugging
* fix calcdxNorm crash
* setDebug and remove MBDyn*
* Update cmakelists.txt
* fix includes for gcc-14
gcc-14 is more disciplined about not including <algorithm> transitively.
* fix runDragStep
* backhoe files (#65)
* Mark unused variables to silence compiler warnings. (#64)
* Backhoe issues (#67)
* backhoe issues
* runDragStep edit
* backhoe issues
* runDragStep edit
* Reduce large drag step progressively until convergence.
* Switch to using built-in M_PI, even on MSVC (#68)
---------
Co-authored-by: Brad Collette <bradcollette@pop-os.localdomain>
Co-authored-by: mosfet80 <realeandrea@yahoo.it>
Co-authored-by: PaddleStroke <pierrelouis.boyer@gmail.com>
Co-authored-by: Jed Brown <jed@jedbrown.org>
Co-authored-by: sliptonic <shopinthewoods@gmail.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* in progress
* Gtest added
* With changes from Assembly
* WinMerge main and this branch
* Add flag for GTest
* Flag to suppress OndselSolverMain
* rebase zero-radii-check (#69)
* contributing
* Update push-freecad.yml
updated actions/checkout to v4
* dragging log for debugging
* fix calcdxNorm crash
* setDebug and remove MBDyn*
* Update cmakelists.txt
* fix includes for gcc-14
gcc-14 is more disciplined about not including <algorithm> transitively.
* fix runDragStep
* backhoe files (#65)
* Mark unused variables to silence compiler warnings. (#64)
* Backhoe issues (#67)
* backhoe issues
* runDragStep edit
* backhoe issues
* runDragStep edit
* Reduce large drag step progressively until convergence.
* Switch to using built-in M_PI, even on MSVC (#68)
---------
Co-authored-by: Brad Collette <bradcollette@pop-os.localdomain>
Co-authored-by: mosfet80 <realeandrea@yahoo.it>
Co-authored-by: PaddleStroke <pierrelouis.boyer@gmail.com>
Co-authored-by: Jed Brown <jed@jedbrown.org>
Co-authored-by: sliptonic <shopinthewoods@gmail.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* in progress
* Gtest added
* With changes from Assembly
* Add flag for GTest
* Flag to suppress OndselSolverMain
---------
Co-authored-by: Brad Collette <bradcollette@pop-os.localdomain>
Co-authored-by: mosfet80 <realeandrea@yahoo.it>
Co-authored-by: PaddleStroke <pierrelouis.boyer@gmail.com>
Co-authored-by: Jed Brown <jed@jedbrown.org>
Co-authored-by: sliptonic <shopinthewoods@gmail.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>