93bda28f67
feat(mates): add mate-level ground truth labels
...
CI / lint (push) Successful in 1m45s
CI / type-check (push) Successful in 2m32s
CI / test (push) Failing after 3m36s
MateLabel and MateAssemblyLabels dataclasses with label_mate_assembly()
that back-attributes joint-level independence to originating mates.
Detects redundant and degenerate mates with pattern membership tracking.
Closes #15
2026-02-03 13:08:23 -06:00
239e45c7f9
feat(mates): add mate-based synthetic assembly generator
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
SyntheticMateGenerator wraps existing joint generator with reverse
mapping (joint->mates) and configurable noise injection (redundant,
missing, incompatible mates). Batch generation via
generate_mate_training_batch().
Closes #14
2026-02-03 13:05:58 -06:00
118474f892
feat(mates): add mate-to-joint conversion and assembly analysis
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
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
2026-02-03 13:03:13 -06:00
e8143cf64c
feat(mates): add joint pattern recognition
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
JointPattern enum (9 patterns), PatternMatch dataclass, and
recognize_patterns() function with data-driven pattern rules.
Supports canonical, partial, and ambiguous pattern matching.
Closes #12
2026-02-03 12:59:53 -06:00
9f53fdb154
feat(mates): add mate type definitions and geometry references
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
MateType enum (8 types), GeometryType enum (5 types), GeometryRef and
Mate dataclasses with validation, serialization, and context-dependent
DOF removal via dof_removed().
Closes #11
2026-02-03 12:55:37 -06:00
5d1988b513
Merge remote-tracking branch 'public/main'
...
CI / lint (push) Successful in 38s
CI / type-check (push) Successful in 1m47s
CI / test (push) Failing after 3m2s
# Conflicts:
# .gitignore
# README.md
2026-02-03 10:53:48 -06:00
f29060491e
feat(datagen): add dataset generation CLI with sharding and checkpointing
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
- Add solver/datagen/dataset.py with DatasetConfig, DatasetGenerator,
ShardSpec/ShardResult dataclasses, parallel shard generation via
ProcessPoolExecutor, checkpoint/resume support, index and stats output
- Add scripts/generate_synthetic.py CLI entry point with Hydra-first
and argparse fallback modes
- Add minimal YAML parser (parse_simple_yaml) for config loading
without PyYAML dependency
- Add progress display with tqdm fallback to print-based ETA
- Update configs/dataset/synthetic.yaml with shard_size, checkpoint_every
- Update solver/datagen/__init__.py with DatasetConfig, DatasetGenerator
exports
- Add tests/datagen/test_dataset.py with 28 tests covering config,
YAML parsing, seed derivation, end-to-end generation, resume,
stats/index structure, determinism, and CLI integration
Closes #10
2026-02-03 08:44:31 -06:00
8a49f8ef40
feat: ground truth labeling pipeline
...
CI / lint (push) Failing after 25m6s
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
- Create solver/datagen/labeling.py with label_assembly() function
- Add dataclasses: ConstraintLabel, JointLabel, BodyDofLabel,
AssemblyLabel, AssemblyLabels
- Per-constraint labels: pebble_independent + jacobian_independent
- Per-joint labels: aggregated independent/redundant/total counts
- Per-body DOF: translational + rotational from nullspace projection
- Assembly label: classification, total_dof, has_degeneracy flag
- AssemblyLabels.to_dict() for JSON-serializable output
- Integrate into generate_training_batch (adds 'labels' field)
- Export AssemblyLabels and label_assembly from datagen package
- Add 25 labeling tests + 1 batch structure test (184 total)
Closes #9
2026-02-02 15:20:02 -06:00
78289494e2
feat: geometric diversity for synthetic assembly generation
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
- Add AxisStrategy type (cardinal, random, near_parallel)
- Add random body orientations via scipy.spatial.transform.Rotation
- Add parallel axis injection with configurable probability
- Add grounded parameter on all 7 generators (grounded/floating)
- Add axis sampling strategies: cardinal, random, near-parallel
- Update _create_joint with orientation-aware anchor offsets
- Add _resolve_axis helper for parallel axis propagation
- Update generate_training_batch with axis_strategy, parallel_axis_prob,
grounded_ratio parameters
- Add body_orientations and grounded fields to batch output
- Export AxisStrategy from datagen package
- Add 28 new tests (72 total generator tests, 158 total)
Closes #8
2026-02-02 14:57:49 -06:00
0b5813b5a9
feat: parameterized assembly templates and complexity tiers
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
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
2026-02-02 14:38:05 -06:00
dc742bfc82
test: add unit tests for datagen modules
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
- test_types.py: JointType enum values/count, dataclass defaults/isolation
- test_pebble_game.py: DOF accounting, rigidity, classification, edge results
- test_jacobian.py: Jacobian shape per joint type, rank, parallel axis degeneracy
- test_analysis.py: demo scenarios (revolute, fixed, triangle, parallel axes)
- test_generator.py: chain/rigid/overconstrained generation, training batch
Bug fixes found during testing:
- JointType enum: duplicate int values caused aliasing (SLIDER=REVOLUTE etc).
Changed to (ordinal, dof) tuple values with a .dof property.
- pebble_game.py: .value -> .dof for constraint count
- analysis.py: classify from effective DOF (not raw pebble game with virtual
ground body skew)
105 tests, all passing.
Closes #6
2026-02-02 14:08:22 -06:00
363b49281b
build: phase 0 infrastructure setup
...
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / test (push) Has been cancelled
- Project structure: solver/, freecad/, export/, configs/, scripts/, tests/, docs/
- pyproject.toml with dependency groups: core, train, freecad, dev
- Hydra configs: dataset (synthetic, fusion360), model (baseline, gat), training (pretrain, finetune), export (production)
- Dockerfile with CUDA+PyG GPU and CPU-only targets
- docker-compose.yml for train, test, data-gen services
- Makefile with targets: train, test, lint, format, type-check, data-gen, export, check
- Pre-commit hooks: ruff, mypy, conventional commits
- Gitea Actions CI: lint, type-check, test on push/PR
- README with setup and usage instructions
2026-02-02 13:26:38 -06:00
aiksiongkoh
3d6a23a678
Cmake gtest ( #72 )
...
* 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
---------
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 >
2024-07-30 14:45:59 -06:00