draftwright 0.5.0rc7__tar.gz → 0.5.0rc8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/PKG-INFO +1 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/pyproject.toml +1 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_linear_geometry.py +31 -3
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_support_blockers.py +17 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_topology.py +78 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/analysis.py +30 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_step_lengths.py +19 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/builder.py +43 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing.py +10 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/coverage.py +113 -44
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/turned_step_coverage.py +10 -4
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/callout.py +3 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/compiled.py +51 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/declare.py +2 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/detect.py +1 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/ir.py +6 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/ir_foundation.py +50 -5
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/planner.py +485 -2
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/pmi_lowering.py +282 -108
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/pmi.py +38 -40
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/reporting.py +92 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet.py +11 -7
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_emit.py +33 -12
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_feature_lines.py +9 -2
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_complexity_baseline.json +3 -4
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_function_length_baseline.json +1 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_tier_manifest.py +1 -0
- draftwright-0.5.0rc8/tests/test_authored_pmi_precedence.py +866 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1209_linear_pmi_witnesses.py +141 -1
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/.gitignore +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/CHANGELOG.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/LICENSE +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/README.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/docs/adr/README.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/docs/reference/recogniser-capabilities.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/docs/reference/sheet.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/skills/SKILL.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_core.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_datum_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_pmi_schema.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotate.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotation_layout_profile.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_axial_render.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_circular_recesses.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_common.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_diameters.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_dimension_ink.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_dimension_ink_repair.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_edge_callouts.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_envelope.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_gdt.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_height_ladder.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_hole_leader_placement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_leader_candidates.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_leader_commit.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_leader_fixed_ink.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_locations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_machined_leaders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_patterns.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_placement_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_placement_occupancy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_pmi_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_pocket_pad.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_polygonal_prisms.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_slots.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_strip_postsolve.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/_thin_profiles.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/drawing_port.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/from_model.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/hole_leader_candidates.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/hole_locations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/holes.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/orchestrator.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/routed.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/sections.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/annotations/solve_trace.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/audit.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/build_once.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/build_options.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/build_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/cli.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/compose.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/contract_values.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/document.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/document_input.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing_diagnostics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing_export.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing_state.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/drawing_tables.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_double_d_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_edge_profile_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_flat_polygonal_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_groove_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_hole_family_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_pocket_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_prismatic_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/_turned_step_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/explicit_scale.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/export.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/family_table.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/feature_identity.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fits.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/inspection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/inspection_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/intent_drain.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/intent_routing.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/intents.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/layout_safety.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/layout_scheme.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/layout_selection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/leader_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/_coverage_common.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/_parameter_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/boss_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/envelope_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/orchestration.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/quality.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/requirements.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/section_recess_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/structural.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/detect_inventory.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/detect_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/dimension_intent.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/model/oriented_slot_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/obligations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/pdf_text.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/progress.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/projection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/py.typed +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recogniser_schema.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/recognition_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/registry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/repair.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/replay_assessment.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/score.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/section_recess_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_features.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_layout_controls.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_metadata.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_object_source.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/sheet_views.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_burden_report.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_corpus_cover.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_drawing_helpers.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_evidence_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_issue_module_baseline.txt +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_kernel.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_layout_helpers.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_layout_sig.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_pad_rendering_fixtures.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_parts.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_pattern_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/_unit_manifest.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/conftest.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/annotation-layout-corpus-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/annotation-layout-corpus-v2.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/annotation-layout-holdout-ftc09-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/annotation-layout-holdout-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/grm03_edge_face_finish_ap242.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/grm03_specify_pmi_ap242.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/nist_ftc_09_asme1_ap242-e1.stp +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/flange_dense.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_add_dimension.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_adr0018_view_selection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_agents_guide.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_analysis_geometry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_angle_patterns.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_angular_references.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_angular_rendering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_box_composition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_box_corpus.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_layout_product.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_scheme_compare_script.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_scheme_corpus_script.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_annotation_scheme_shadow_script.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_api_docs.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_arrangement_gate.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_assessment_comparison_issue_1712.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_audit_differential.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_axial_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_blind_slot_completeness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_blind_slot_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_boss_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_build_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_burden_report.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_candidate_evidence_issue_1726.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_candidate_preview_sheet_holdout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_canonical_angles.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_channel_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_circular_blind_step_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_cli_behavior.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_cli_report_sidecar.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_clone_budget.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_compiled_plan_boundary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_compose_then_pack.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_contract_values.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_corpus_cover.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_counting_calls.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_coverage_mode.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_declaration_identity_issue_1710.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_declaration_report_issue_1710.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_declare.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_declared_report_issue_1688.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_deferred_edits.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_depth_estimators.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_derived_view_integration.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_derived_view_planning.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_detail_views.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_detect_once.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_detect_registry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_diameter_deduplication.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_diameter_leaders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_dimension_intent_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_dimension_lane_canary_issue_1757.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_build.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_claim_authority.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_claims.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_report.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_document_report_authority.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_drawing_operations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_drawing_state.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_dynamic_corridors.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_edge_profile_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_envelope_view_route_issue_1813.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_export_formats.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_export_shape.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_family_table.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_edit_corridors.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_edit_replay.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_edit_verbs.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_leader_candidate_regions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_provenance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_feature_queries.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_fit_calculations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_fits.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_flat_callout_precision.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_format_selector.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_formatting.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_framed_step_family_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_gdt_ink_shared.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_groove_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_groove_profile.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_gusset_rib_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_hole_annotations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_hole_pattern_callouts.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_hole_table.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_import_boundaries.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_inspection_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_interior_label_placement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_ir_foundation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_iso_detail_growth.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_iso_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_isometric_orientation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_isometric_placement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1143_hole_completeness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1146_scale_completeness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1157_no_implicit_general_tolerance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1298_manufacturing_requirements.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1299_page_escalation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1308_machined_leader_analytics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1333_bounded_ink_repair.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1351_structured_note_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1357_framed_activation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1357_pmi_frame.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1396_layout_advisories.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1433_blend_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1460_step_inspection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1466_semantic_sides.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1485_curved_pockets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1516_dimension_text.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1536_title_overflow.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1543_schedule_requirements.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1544_frame_document_canary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1560_envelope_axes.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1585_title_block_date.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1593_title_block_keepout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1598_hex_pockets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1604_internal_section.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1612_sheet_margins.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_1613_circular_channel.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_740_leader_assignment.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_798_silhouette_lint.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_label_provenance.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_constants.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_evidence_issue_1711.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_generalisation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_override_lane_issue_1757.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_override_side_issue_1757.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_property.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_safety.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_layout_scheme.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_leader_region_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_coverage_common.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_structural.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_suggestions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_lint_summary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_linting.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_location_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_machined_feature_callouts.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_make_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_manufacturing_pmi_lowering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_nested_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_nominal_step_pmi.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_note_verb.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_object_aspects.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_occurrence_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pad_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pad_rendering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_paired_ramp_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_parameter_id.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pareto_loop_canary_issue_1753.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_part_classification.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_part_model.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pattern_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pattern_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_place_dimension.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_plate_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_common_labels.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_manufacturing_finish.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pmi_records.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pocket_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_pre_render_profile_choice.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_prismatic_boss_diameter.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_prismatic_classification.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_prismatic_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_profile_angles.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_quality_components.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_quiddity_lifecycle_boundary.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_real_part_fixtures.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recogniser_capabilities.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recogniser_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recogniser_step_inventory.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recognition_boundary_failures.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recognition_evidence_schema.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recognition_policy_dispositions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_recognition_result.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_registry.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_remaining_ink_overlaps.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_render_seam.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_repair.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_replay_assessment_issue_1715.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_report_projection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_report_status_reasons_issue_1618.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_report_writer.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_requirement_applicability.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_requirement_carriers.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_requirement_catalog.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_requirement_catalog_families.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_requirement_dimension_sharing.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_scale_policy.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_scale_selection.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_score.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_section_hatching.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_section_recess_contract.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_section_recess_pockets.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_shared_drawing_cache.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_emit.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_fallback_issue_1797.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_generation_snapshot.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_identity_invariant.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_of.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_section.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_slot_recognition.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_solve_trace.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_source_shape.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_step_profile_grouping.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_strip_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_strip_zones.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_suite_shape.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_through_step_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_through_step_semantics.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_tier_manifest.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_title_block_units_format.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_tolerances.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_turned_diameters.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_turned_lengths.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_turned_step_ownership.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_turned_steps.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_two_pass_layout.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_typ_dimensions.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_view_blocks.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_view_coordinates.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_view_plan.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/tests/test_workflows.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: draftwright
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.0rc8
|
|
4
4
|
Summary: Automated technical-drawing generation for build123d
|
|
5
5
|
Project-URL: Homepage, https://github.com/pzfreo/draftwright
|
|
6
6
|
Project-URL: Repository, https://github.com/pzfreo/draftwright
|
|
@@ -14,7 +14,10 @@ _LINEAR_OBLIQUE_VALUE_ABS_TOL = 0.05
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def _linear_reference_stations(
|
|
17
|
-
stations: tuple[tuple[float, float, float] | None, ...],
|
|
17
|
+
stations: tuple[tuple[float, float, float] | None, ...],
|
|
18
|
+
nominal: float,
|
|
19
|
+
*,
|
|
20
|
+
plane_axis: str | None = None,
|
|
18
21
|
) -> tuple[tuple[tuple[float, float, float], ...], str, tuple[str, ...]]:
|
|
19
22
|
"""Prove a truthful principal-axis span from the two authored reference groups.
|
|
20
23
|
|
|
@@ -35,14 +38,20 @@ def _linear_reference_stations(
|
|
|
35
38
|
first, second = measurable
|
|
36
39
|
delta = tuple(second[index] - first[index] for index in range(3))
|
|
37
40
|
magnitudes = tuple(abs(value) for value in delta)
|
|
38
|
-
axis_index =
|
|
41
|
+
axis_index = (
|
|
42
|
+
"XYZ".index(plane_axis)
|
|
43
|
+
if plane_axis is not None
|
|
44
|
+
else max(range(3), key=magnitudes.__getitem__)
|
|
45
|
+
)
|
|
39
46
|
primary = magnitudes[axis_index]
|
|
40
47
|
if primary <= 1e-9:
|
|
41
48
|
return measurable, "?", ("linear reference groups occupy the same station",)
|
|
42
49
|
|
|
43
50
|
transverse = max(value for index, value in enumerate(magnitudes) if index != axis_index)
|
|
44
51
|
direction_tol = max(_LINEAR_AXIS_ABS_TOL, primary * _LINEAR_AXIS_REL_TOL)
|
|
45
|
-
|
|
52
|
+
# Parallel planar supports establish their distance along the plane normal.
|
|
53
|
+
# Their finite face centres can be offset arbitrarily within either plane.
|
|
54
|
+
oblique = plane_axis is None and transverse > direction_tol
|
|
46
55
|
if oblique and _linear_projection_view(measurable) is None:
|
|
47
56
|
return (
|
|
48
57
|
measurable,
|
|
@@ -69,3 +78,22 @@ def _linear_reference_stations(
|
|
|
69
78
|
),
|
|
70
79
|
)
|
|
71
80
|
return measurable, axis, ()
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _dimension_reference_stations(
|
|
84
|
+
stations: tuple[tuple[float, float, float] | None, ...],
|
|
85
|
+
nominal: float,
|
|
86
|
+
kind: str,
|
|
87
|
+
*,
|
|
88
|
+
plane_axis: str | None = None,
|
|
89
|
+
) -> tuple[tuple[tuple[float, float, float], ...], str, tuple[str, ...]]:
|
|
90
|
+
"""Apply the dimension kind's wording to the shared station proof."""
|
|
91
|
+
points, axis, reasons = _linear_reference_stations(stations, nominal, plane_axis=plane_axis)
|
|
92
|
+
if kind == "thickness":
|
|
93
|
+
reasons = tuple(
|
|
94
|
+
reason.replace("linear dimension", "thickness dimension").replace(
|
|
95
|
+
"linear reference", "thickness reference"
|
|
96
|
+
)
|
|
97
|
+
for reason in reasons
|
|
98
|
+
)
|
|
99
|
+
return points, axis, reasons
|
|
@@ -141,6 +141,23 @@ def _is_direct_xcaf_angular_failure(reason: str) -> bool:
|
|
|
141
141
|
return reason.startswith(prefixes)
|
|
142
142
|
|
|
143
143
|
|
|
144
|
+
def _direct_xcaf_support_is_incomplete(record) -> bool:
|
|
145
|
+
"""Whether direct XCAF failed to supply all support geometry, independent of rendering."""
|
|
146
|
+
reasons = (*record.lowering_blockers, *record.rendering_blockers)
|
|
147
|
+
missing_groups = (
|
|
148
|
+
"linear dimension needs two measurable authored reference groups",
|
|
149
|
+
"thickness dimension needs two measurable authored reference groups",
|
|
150
|
+
"diameter dimension needs a measurable",
|
|
151
|
+
)
|
|
152
|
+
return any(
|
|
153
|
+
_is_direct_xcaf_reference_failure(reason)
|
|
154
|
+
or _is_direct_xcaf_diameter_failure(reason)
|
|
155
|
+
or _is_direct_xcaf_angular_failure(reason)
|
|
156
|
+
or reason.startswith(missing_groups)
|
|
157
|
+
for reason in reasons
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
144
161
|
def _without_direct_xcaf_angular_failures(reasons: tuple[str, ...]) -> tuple[str, ...]:
|
|
145
162
|
"""Drop angular XCAF failures superseded by exact Part21 member supports."""
|
|
146
163
|
return tuple(reason for reason in reasons if not _is_direct_xcaf_angular_failure(reason))
|
|
@@ -6,6 +6,7 @@ B-rep; geometric likeness alone cannot establish source ownership.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
from draftwright._pmi_datum_geometry import _frame_vector
|
|
9
10
|
from draftwright._pmi_support_blockers import _failure_reason
|
|
10
11
|
|
|
11
12
|
try:
|
|
@@ -17,6 +18,83 @@ except ImportError:
|
|
|
17
18
|
pass
|
|
18
19
|
|
|
19
20
|
|
|
21
|
+
def _parallel_planar_reference_support(groups, frame, shape_bbox) -> tuple[str | None, str | None]:
|
|
22
|
+
"""Find the common principal normal and any required witness view."""
|
|
23
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
24
|
+
from OCP.GeomAbs import GeomAbs_Plane
|
|
25
|
+
from OCP.TopoDS import TopoDS
|
|
26
|
+
|
|
27
|
+
if len(groups) != 2 or not all(groups):
|
|
28
|
+
return None, None
|
|
29
|
+
axes: list[int] = []
|
|
30
|
+
group_boxes = []
|
|
31
|
+
for shapes in groups:
|
|
32
|
+
group_axis = None
|
|
33
|
+
group_station = None
|
|
34
|
+
boxes = []
|
|
35
|
+
for shape in shapes:
|
|
36
|
+
try:
|
|
37
|
+
if shape.ShapeType() != TopAbs_FACE:
|
|
38
|
+
return None, None
|
|
39
|
+
surface = BRepAdaptor_Surface(TopoDS.Face_s(shape))
|
|
40
|
+
if surface.GetType() != GeomAbs_Plane:
|
|
41
|
+
return None, None
|
|
42
|
+
direction = surface.Plane().Axis().Direction()
|
|
43
|
+
local = _frame_vector((direction.X(), direction.Y(), direction.Z()), frame)
|
|
44
|
+
axis_index = max(range(3), key=lambda index: abs(local[index]))
|
|
45
|
+
if abs(abs(local[axis_index]) - 1.0) > 1e-6:
|
|
46
|
+
return None, None
|
|
47
|
+
if any(abs(local[index]) > 1e-6 for index in range(3) if index != axis_index):
|
|
48
|
+
return None, None
|
|
49
|
+
box = shape_bbox(shape) if frame is None else shape_bbox(shape, frame)
|
|
50
|
+
boxes.append(box)
|
|
51
|
+
station = (box[axis_index] + box[axis_index + 3]) / 2
|
|
52
|
+
if box[axis_index + 3] - box[axis_index] > 1e-5:
|
|
53
|
+
return None, None
|
|
54
|
+
except Exception:
|
|
55
|
+
return None, None
|
|
56
|
+
if group_axis is not None and group_axis != axis_index:
|
|
57
|
+
return None, None
|
|
58
|
+
if group_station is not None and abs(group_station - station) > 1e-5:
|
|
59
|
+
return None, None
|
|
60
|
+
group_axis, group_station = axis_index, station
|
|
61
|
+
assert group_axis is not None # Each validated source group contains a face.
|
|
62
|
+
axes.append(group_axis)
|
|
63
|
+
group_boxes.append(boxes)
|
|
64
|
+
if axes[0] != axes[1]:
|
|
65
|
+
return None, None
|
|
66
|
+
return _supported_planar_view("XYZ"[axes[0]], group_boxes)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _supported_planar_view(axis: str, group_boxes) -> tuple[str | None, str | None]:
|
|
70
|
+
"""Select only projection views whose shared witness touches both groups."""
|
|
71
|
+
if axis in {"X", "Z"}:
|
|
72
|
+
return (
|
|
73
|
+
(axis, None)
|
|
74
|
+
if _midpoint_witness_supported(group_boxes, 2 if axis == "X" else 0)
|
|
75
|
+
else (None, None)
|
|
76
|
+
)
|
|
77
|
+
side = _midpoint_witness_supported(group_boxes, 2)
|
|
78
|
+
plan = _midpoint_witness_supported(group_boxes, 0)
|
|
79
|
+
if side and plan:
|
|
80
|
+
return axis, None
|
|
81
|
+
if side or plan:
|
|
82
|
+
return axis, "side" if side else "plan"
|
|
83
|
+
return None, None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _midpoint_witness_supported(group_boxes, index: int) -> bool:
|
|
87
|
+
"""Require a projected face in each group at the renderer's bbox midpoint."""
|
|
88
|
+
all_boxes = [box for boxes in group_boxes for box in boxes]
|
|
89
|
+
midpoint = (
|
|
90
|
+
min(box[index] for box in all_boxes) + max(box[index + 3] for box in all_boxes)
|
|
91
|
+
) / 2
|
|
92
|
+
return all(
|
|
93
|
+
any(box[index] - 1e-6 <= midpoint <= box[index + 3] + 1e-6 for box in boxes)
|
|
94
|
+
for boxes in group_boxes
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
20
98
|
class _DatumTopologyResolver:
|
|
21
99
|
"""Resolve Part21 face labels through OCCT's native transfer binders.
|
|
22
100
|
|
|
@@ -1566,6 +1566,33 @@ def _with_blind_axial_bore_support(model: PartModel, cyls) -> PartModel:
|
|
|
1566
1566
|
)
|
|
1567
1567
|
|
|
1568
1568
|
|
|
1569
|
+
def _sizing_model_pmi_visibility(model, cyls, layout_model, pmi_mode, document_input):
|
|
1570
|
+
hidden = (
|
|
1571
|
+
frozenset(id(feature) for feature in document_input.source_annotations())
|
|
1572
|
+
if document_input is not None and pmi_mode != "annotate"
|
|
1573
|
+
else frozenset()
|
|
1574
|
+
)
|
|
1575
|
+
prepared = _with_blind_axial_bore_support(model, cyls)
|
|
1576
|
+
enabled = layout_model is not None or pmi_mode == "annotate"
|
|
1577
|
+
if (
|
|
1578
|
+
prepared.pmi_annotations_enabled != enabled
|
|
1579
|
+
or prepared.hidden_authored_dimension_ids != hidden
|
|
1580
|
+
):
|
|
1581
|
+
prepared = replace(
|
|
1582
|
+
prepared,
|
|
1583
|
+
pmi_annotations_enabled=enabled,
|
|
1584
|
+
hidden_authored_dimension_ids=hidden,
|
|
1585
|
+
)
|
|
1586
|
+
if not enabled or not any(
|
|
1587
|
+
feature.kind == "authored_dimension" and id(feature) not in hidden
|
|
1588
|
+
for feature in prepared.features
|
|
1589
|
+
):
|
|
1590
|
+
return prepared
|
|
1591
|
+
from draftwright.model.pmi_lowering import add_authored_step_positions
|
|
1592
|
+
|
|
1593
|
+
return add_authored_step_positions(prepared)
|
|
1594
|
+
|
|
1595
|
+
|
|
1569
1596
|
def _build_sizing_model(r: _AnalysisRequest, s: _SourceState) -> _ModelState:
|
|
1570
1597
|
text_position = r.metadata.text_position
|
|
1571
1598
|
text_orientation = r.metadata.text_orientation
|
|
@@ -1732,7 +1759,9 @@ def _build_sizing_model(r: _AnalysisRequest, s: _SourceState) -> _ModelState:
|
|
|
1732
1759
|
cyls=shared_cyls,
|
|
1733
1760
|
)
|
|
1734
1761
|
)
|
|
1735
|
-
sizing_model =
|
|
1762
|
+
sizing_model = _sizing_model_pmi_visibility(
|
|
1763
|
+
sizing_model, shared_cyls, layout_model, pmi_mode, _document_input
|
|
1764
|
+
)
|
|
1736
1765
|
recognition_ownership = (
|
|
1737
1766
|
None
|
|
1738
1767
|
if layout_model is not None
|
|
@@ -425,6 +425,7 @@ def _render_single_profile(
|
|
|
425
425
|
) -> int:
|
|
426
426
|
"""Place one axial profile and request details for crowded shoulders."""
|
|
427
427
|
rows: list[tuple[str, _StepChainSegment]] = []
|
|
428
|
+
has_baseline_position = False
|
|
428
429
|
step_origins = []
|
|
429
430
|
step_geometry = []
|
|
430
431
|
for g in plan.of_kind("step"):
|
|
@@ -435,6 +436,9 @@ def _render_single_profile(
|
|
|
435
436
|
length = g.dim(kind="length")
|
|
436
437
|
if length is None or length.span is None:
|
|
437
438
|
continue
|
|
439
|
+
has_baseline_position |= (
|
|
440
|
+
length.id is not None and length.id.parameter == "step_position.length"
|
|
441
|
+
)
|
|
438
442
|
rows.append(
|
|
439
443
|
(
|
|
440
444
|
g.facts.frame.axis,
|
|
@@ -512,6 +516,21 @@ def _render_single_profile(
|
|
|
512
516
|
else _profile_bounds_hint
|
|
513
517
|
)
|
|
514
518
|
|
|
519
|
+
if has_baseline_position:
|
|
520
|
+
# The crowded-head and repeated-run transforms describe a contiguous
|
|
521
|
+
# step chain. A datum-to-shoulder baseline has different witnesses.
|
|
522
|
+
return _draw_step_chain(
|
|
523
|
+
dwg,
|
|
524
|
+
view,
|
|
525
|
+
fsegs,
|
|
526
|
+
"m_steplen",
|
|
527
|
+
allow_collapse=False,
|
|
528
|
+
ctx=ctx,
|
|
529
|
+
start=start,
|
|
530
|
+
profile_bounds=profile_bounds,
|
|
531
|
+
placement_bounds=_profile_bounds_hint,
|
|
532
|
+
)
|
|
533
|
+
|
|
515
534
|
y_result = _render_y_profile(
|
|
516
535
|
dwg,
|
|
517
536
|
view,
|
|
@@ -723,6 +723,49 @@ def _assembly_model(a: Analysis, model, decorations, requested, authored) -> Par
|
|
|
723
723
|
else ()
|
|
724
724
|
),
|
|
725
725
|
)
|
|
726
|
+
if model is not None or a.model is None:
|
|
727
|
+
pm = replace(
|
|
728
|
+
pm,
|
|
729
|
+
pmi_annotations_enabled=model is not None or a.pmi_mode == "annotate",
|
|
730
|
+
hidden_authored_dimension_ids=(
|
|
731
|
+
frozenset(id(feature) for feature in a.document_source_annotations)
|
|
732
|
+
if a.document_member and a.pmi_mode != "annotate"
|
|
733
|
+
else frozenset()
|
|
734
|
+
),
|
|
735
|
+
)
|
|
736
|
+
# A caller may supply a PartModel that already contains raw imported PMI. That
|
|
737
|
+
# path skips the extraction/lowering branch above but still needs baseline gap
|
|
738
|
+
# identities before the compiled plan is built.
|
|
739
|
+
if any(feature.kind == "authored_dimension" for feature in pm.features):
|
|
740
|
+
from draftwright.model.pmi_lowering import add_authored_step_positions
|
|
741
|
+
|
|
742
|
+
identities = pm.declaration_identities
|
|
743
|
+
identity_by_feature = {
|
|
744
|
+
id(feature): identity
|
|
745
|
+
for feature, identity in (
|
|
746
|
+
zip(pm.features, identities, strict=True) if identities else ()
|
|
747
|
+
)
|
|
748
|
+
if identity is not None
|
|
749
|
+
}
|
|
750
|
+
step_remapped_identities: dict[int, DeclarationIdentity] = {}
|
|
751
|
+
|
|
752
|
+
def preserve_step_identity(source, replacements, _member_groups) -> None:
|
|
753
|
+
identity = identity_by_feature.get(id(source))
|
|
754
|
+
if identity is not None and replacements:
|
|
755
|
+
step_remapped_identities[id(replacements[0])] = identity
|
|
756
|
+
|
|
757
|
+
updated = add_authored_step_positions(
|
|
758
|
+
pm, feature_remap=preserve_step_identity if identities else None
|
|
759
|
+
)
|
|
760
|
+
if updated is not pm and identities:
|
|
761
|
+
updated = replace(
|
|
762
|
+
updated,
|
|
763
|
+
declaration_identities=tuple(
|
|
764
|
+
identity_by_feature.get(id(feature), step_remapped_identities.get(id(feature)))
|
|
765
|
+
for feature in updated.features
|
|
766
|
+
),
|
|
767
|
+
)
|
|
768
|
+
pm = updated
|
|
726
769
|
return _with_blind_axial_bore_support(pm, a.cyls)
|
|
727
770
|
|
|
728
771
|
|
|
@@ -735,6 +735,16 @@ class Drawing:
|
|
|
735
735
|
|
|
736
736
|
return self._diagnostics().report()
|
|
737
737
|
|
|
738
|
+
def dimension_sources(self) -> list[dict[str, object]]:
|
|
739
|
+
"""Placed measurements and their exact AP242 or planner provenance.
|
|
740
|
+
|
|
741
|
+
One row is returned per measured term, including each term of a compound
|
|
742
|
+
callout. This is a read-only inventory for inspection-list consumers.
|
|
743
|
+
"""
|
|
744
|
+
from draftwright.reporting import placed_dimension_sources
|
|
745
|
+
|
|
746
|
+
return placed_dimension_sources(self._part_model, self._registry)
|
|
747
|
+
|
|
738
748
|
def requirement_snapshot(self, *, include_lint=False):
|
|
739
749
|
|
|
740
750
|
return self._diagnostics().requirement_snapshot(include_lint=include_lint)
|
|
@@ -1909,18 +1909,122 @@ def _profile_projection(dwg, view: str, origin, axis: str) -> tuple[bool, float]
|
|
|
1909
1909
|
|
|
1910
1910
|
|
|
1911
1911
|
def _step_length_owners(dwg, name: str) -> tuple[object, ...]:
|
|
1912
|
-
"""Exact step features whose
|
|
1912
|
+
"""Exact step features whose axial claim produced annotation *name*."""
|
|
1913
1913
|
registry = getattr(dwg, "registry", None)
|
|
1914
1914
|
if registry is None:
|
|
1915
1915
|
return ()
|
|
1916
1916
|
return tuple(
|
|
1917
1917
|
identity.feature
|
|
1918
1918
|
for identity in registry.measurement_of(name)
|
|
1919
|
-
if getattr(identity, "parameter", None)
|
|
1919
|
+
if getattr(identity, "parameter", None) in {"step.length", "step_position.length"}
|
|
1920
1920
|
and getattr(identity.feature, "kind", None) == "step"
|
|
1921
1921
|
)
|
|
1922
1922
|
|
|
1923
1923
|
|
|
1924
|
+
def _authored_axial_witness_on_profile(dwg, name: str, prof, origin, tol: float) -> bool:
|
|
1925
|
+
"""Check a source dimension's two witnesses against this profile's shoulder faces."""
|
|
1926
|
+
feature = dwg.registry.feature_of(name)
|
|
1927
|
+
points: tuple = tuple(getattr(feature, "ref_pts", ()))
|
|
1928
|
+
if (
|
|
1929
|
+
getattr(feature, "kind", None) != "authored_dimension"
|
|
1930
|
+
or getattr(feature, "dimension_kind", None) != "linear"
|
|
1931
|
+
or getattr(feature, "dominant_axis", None) != prof.axis.upper()
|
|
1932
|
+
or len(points) != 2
|
|
1933
|
+
):
|
|
1934
|
+
return False
|
|
1935
|
+
axis = "xyz".index(prof.axis)
|
|
1936
|
+
if abs(abs(float(points[1][axis]) - float(points[0][axis])) - float(feature.value)) > tol:
|
|
1937
|
+
return False
|
|
1938
|
+
transverse = tuple(index for index in range(3) if index != axis)
|
|
1939
|
+
for point in points:
|
|
1940
|
+
station = float(point[axis])
|
|
1941
|
+
touching = [
|
|
1942
|
+
step
|
|
1943
|
+
for step in prof.steps
|
|
1944
|
+
if abs(float(step.lo) - station) <= tol or abs(float(step.hi) - station) <= tol
|
|
1945
|
+
]
|
|
1946
|
+
if not touching:
|
|
1947
|
+
return False
|
|
1948
|
+
radius = max(float(step.diameter) / 2 for step in touching)
|
|
1949
|
+
radial = sqrt(
|
|
1950
|
+
sum((float(point[index]) - float(origin[index])) ** 2 for index in transverse)
|
|
1951
|
+
)
|
|
1952
|
+
if radial > radius + tol:
|
|
1953
|
+
return False
|
|
1954
|
+
return True
|
|
1955
|
+
|
|
1956
|
+
|
|
1957
|
+
def _axial_view_dimensions(part, dwg, prof, view, base, shoulder_c, sibling_profiles, tol):
|
|
1958
|
+
horizontal, own_cross = _profile_projection(dwg, view, base, prof.axis)
|
|
1959
|
+
eligible = []
|
|
1960
|
+
station_edges = set()
|
|
1961
|
+
for name, ann in dwg.annotations_in_view(view):
|
|
1962
|
+
if not isinstance(ann, Dimension):
|
|
1963
|
+
continue
|
|
1964
|
+
vertices = _dim_vertices(ann, dwg.registry.dimension_spec_of(name))
|
|
1965
|
+
cs = {x if horizontal else y for x, y in vertices}
|
|
1966
|
+
cross_coords = {y if horizontal else x for x, y in vertices}
|
|
1967
|
+
owners = _step_length_owners(dwg, name)
|
|
1968
|
+
if owners and not any(_feature_on_turned_axis(owner, prof) for owner in owners):
|
|
1969
|
+
continue
|
|
1970
|
+
authored = getattr(dwg.registry.feature_of(name), "kind", None) == "authored_dimension"
|
|
1971
|
+
if authored and not _authored_axial_witness_on_profile(dwg, name, prof, base, tol):
|
|
1972
|
+
continue
|
|
1973
|
+
if not owners and getattr(prof, "profile", None) is not None and cross_coords:
|
|
1974
|
+
dim_cross = sum(cross_coords) / len(cross_coords)
|
|
1975
|
+
own_distance = abs(dim_cross - own_cross)
|
|
1976
|
+
sibling_distances = [
|
|
1977
|
+
abs(
|
|
1978
|
+
dim_cross
|
|
1979
|
+
- _profile_projection(
|
|
1980
|
+
dwg, view, _turned_axis_origin(part, sibling), sibling.axis
|
|
1981
|
+
)[1]
|
|
1982
|
+
)
|
|
1983
|
+
for sibling in sibling_profiles
|
|
1984
|
+
if sibling is not prof and sibling.axis == prof.axis
|
|
1985
|
+
]
|
|
1986
|
+
if any(distance <= own_distance + tol for distance in sibling_distances):
|
|
1987
|
+
continue
|
|
1988
|
+
eligible.append((name, str(getattr(ann, "label", "") or ""), cs))
|
|
1989
|
+
if len(cs) != 2 or not (owners or authored):
|
|
1990
|
+
continue
|
|
1991
|
+
stations = []
|
|
1992
|
+
for coordinate in sorted(cs):
|
|
1993
|
+
matches = [
|
|
1994
|
+
station
|
|
1995
|
+
for station, projected in shoulder_c.items()
|
|
1996
|
+
if abs(coordinate - projected) <= tol
|
|
1997
|
+
]
|
|
1998
|
+
if len(matches) != 1:
|
|
1999
|
+
break
|
|
2000
|
+
stations.append(matches[0])
|
|
2001
|
+
if len(stations) == 2 and stations[0] != stations[1]:
|
|
2002
|
+
station_edges.add(tuple(sorted(stations)))
|
|
2003
|
+
return eligible, station_edges
|
|
2004
|
+
|
|
2005
|
+
|
|
2006
|
+
def _axial_connected_steps(prof, station_edges) -> set[int]:
|
|
2007
|
+
linked = {station: {station} for station in prof.shoulders}
|
|
2008
|
+
for first, second in station_edges:
|
|
2009
|
+
linked[first].add(second)
|
|
2010
|
+
linked[second].add(first)
|
|
2011
|
+
connected = set()
|
|
2012
|
+
for index, step in enumerate(prof.steps):
|
|
2013
|
+
start, end = float(step.lo), float(step.hi)
|
|
2014
|
+
if start not in linked or end not in linked:
|
|
2015
|
+
continue
|
|
2016
|
+
reached = {start}
|
|
2017
|
+
pending = [start]
|
|
2018
|
+
while pending:
|
|
2019
|
+
current = pending.pop()
|
|
2020
|
+
for neighbour in linked[current] - reached:
|
|
2021
|
+
reached.add(neighbour)
|
|
2022
|
+
pending.append(neighbour)
|
|
2023
|
+
if end in reached:
|
|
2024
|
+
connected.add(index)
|
|
2025
|
+
return connected
|
|
2026
|
+
|
|
2027
|
+
|
|
1924
2028
|
def _axial_covered_from_drawing(
|
|
1925
2029
|
part, dwg, prof, *, sibling_profiles=(), tol: float = 0.6
|
|
1926
2030
|
) -> set[int]:
|
|
@@ -1934,12 +2038,6 @@ def _axial_covered_from_drawing(
|
|
|
1934
2038
|
idx = "xyz".index(prof.axis)
|
|
1935
2039
|
base = list(_turned_axis_origin(part, prof))
|
|
1936
2040
|
|
|
1937
|
-
def profile_cross(profile, view: str) -> float:
|
|
1938
|
-
_horizontal, cross = _profile_projection(
|
|
1939
|
-
dwg, view, _turned_axis_origin(part, profile), profile.axis
|
|
1940
|
-
)
|
|
1941
|
-
return cross
|
|
1942
|
-
|
|
1943
2041
|
def shoulder_coord(view: str, s: float, *, horizontal: bool) -> float:
|
|
1944
2042
|
pt = list(base)
|
|
1945
2043
|
pt[idx] = s
|
|
@@ -1952,26 +2050,14 @@ def _axial_covered_from_drawing(
|
|
|
1952
2050
|
views = [view for view in _turned_profile_views(prof.axis) if view in dwg.views]
|
|
1953
2051
|
views += sorted(v for v in dwg.views if v.startswith("detail_"))
|
|
1954
2052
|
covered_steps: set[int] = set()
|
|
2053
|
+
station_edges: set[tuple[float, float]] = set()
|
|
1955
2054
|
for view in views:
|
|
1956
2055
|
horizontal, _own_cross = _profile_projection(dwg, view, base, prof.axis)
|
|
1957
2056
|
shoulder_c = {s: shoulder_coord(view, s, horizontal=horizontal) for s in prof.shoulders}
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
{
|
|
1963
|
-
(x if horizontal else y)
|
|
1964
|
-
for x, y in _dim_vertices(ann, dwg.registry.dimension_spec_of(name))
|
|
1965
|
-
},
|
|
1966
|
-
{
|
|
1967
|
-
(y if horizontal else x)
|
|
1968
|
-
for x, y in _dim_vertices(ann, dwg.registry.dimension_spec_of(name))
|
|
1969
|
-
},
|
|
1970
|
-
_step_length_owners(dwg, name),
|
|
1971
|
-
)
|
|
1972
|
-
for name, ann in dwg.annotations_in_view(view)
|
|
1973
|
-
if isinstance(ann, Dimension)
|
|
1974
|
-
]
|
|
2057
|
+
eligible, edges = _axial_view_dimensions(
|
|
2058
|
+
part, dwg, prof, view, base, shoulder_c, sibling_profiles, tol
|
|
2059
|
+
)
|
|
2060
|
+
station_edges.update(edges)
|
|
1975
2061
|
for i, step in enumerate(prof.steps):
|
|
1976
2062
|
clo, chi = shoulder_c.get(step.lo), shoulder_c.get(step.hi)
|
|
1977
2063
|
if clo is None or chi is None:
|
|
@@ -1984,26 +2070,9 @@ def _axial_covered_from_drawing(
|
|
|
1984
2070
|
# An end-on detail projects both shoulder stations onto one
|
|
1985
2071
|
# point. Coincident witnesses cannot establish an axial length.
|
|
1986
2072
|
continue
|
|
1987
|
-
for name, label, cs
|
|
2073
|
+
for name, label, cs in eligible:
|
|
1988
2074
|
if not cs:
|
|
1989
2075
|
continue
|
|
1990
|
-
if owners and not any(_feature_on_turned_axis(owner, prof) for owner in owners):
|
|
1991
|
-
continue
|
|
1992
|
-
# Parallel profiles can have identical axial ordinates. A dimension belongs to
|
|
1993
|
-
# the nearest visible axis line in this profile view; without this gate one
|
|
1994
|
-
# shaft's two witnesses would certify every sibling at the same stations.
|
|
1995
|
-
if not owners and getattr(prof, "profile", None) is not None and cross_coords:
|
|
1996
|
-
dim_cross = sum(cross_coords) / len(cross_coords)
|
|
1997
|
-
own_distance = abs(dim_cross - profile_cross(prof, view))
|
|
1998
|
-
sibling_distances = [
|
|
1999
|
-
abs(dim_cross - profile_cross(sibling, view))
|
|
2000
|
-
for sibling in sibling_profiles
|
|
2001
|
-
if sibling is not prof and sibling.axis == prof.axis
|
|
2002
|
-
]
|
|
2003
|
-
if any(distance < own_distance - tol for distance in sibling_distances) or any(
|
|
2004
|
-
abs(distance - own_distance) <= tol for distance in sibling_distances
|
|
2005
|
-
):
|
|
2006
|
-
continue
|
|
2007
2076
|
# A plain dim locates the step when it has a witness at each shoulder.
|
|
2008
2077
|
if any(abs(v - clo) <= tol for v in cs) and any(abs(v - chi) <= tol for v in cs):
|
|
2009
2078
|
covered_steps.add(i)
|
|
@@ -2022,7 +2091,7 @@ def _axial_covered_from_drawing(
|
|
|
2022
2091
|
):
|
|
2023
2092
|
covered_steps.add(i)
|
|
2024
2093
|
break
|
|
2025
|
-
return covered_steps
|
|
2094
|
+
return covered_steps | _axial_connected_steps(prof, station_edges)
|
|
2026
2095
|
|
|
2027
2096
|
|
|
2028
2097
|
def _overall_axial_extent_is_dimensioned(
|
{draftwright-0.5.0rc7 → draftwright-0.5.0rc8}/src/draftwright/linting/turned_step_coverage.py
RENAMED
|
@@ -272,10 +272,16 @@ def physical_turned_steps(recognition: RecognitionResult) -> tuple[tuple[object,
|
|
|
272
272
|
|
|
273
273
|
def _has_parameters(feature) -> bool:
|
|
274
274
|
try:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
"step.diameter"
|
|
278
|
-
|
|
275
|
+
parameters = {parameter.parameter_id for parameter in feature.parameters()}
|
|
276
|
+
return (
|
|
277
|
+
{"step.length", "step.diameter"}
|
|
278
|
+
<= parameters
|
|
279
|
+
<= {
|
|
280
|
+
"step.length",
|
|
281
|
+
"step.diameter",
|
|
282
|
+
"step_position.length",
|
|
283
|
+
}
|
|
284
|
+
)
|
|
279
285
|
except (AttributeError, TypeError):
|
|
280
286
|
return False
|
|
281
287
|
|
|
@@ -102,6 +102,8 @@ def _merge_member_pattern_batches(batches: list[HoleCalloutBatch]) -> list[HoleC
|
|
|
102
102
|
|
|
103
103
|
def bore_callout_value(spec: dict, tolerance_suffix=lambda _value: "") -> str:
|
|
104
104
|
"""Format the bore value after the callout's leading diameter symbol."""
|
|
105
|
+
if spec.get("authored_diameter_label") and spec.get("tolerance") is None:
|
|
106
|
+
return str(spec["authored_diameter_label"])[1:]
|
|
105
107
|
if limits := spec.get("diameter_limits"):
|
|
106
108
|
lower, upper = limits
|
|
107
109
|
nominal = spec["diameter"]
|
|
@@ -797,6 +799,7 @@ def hole_callout_spec(
|
|
|
797
799
|
)
|
|
798
800
|
spec = {
|
|
799
801
|
"diameter": bore,
|
|
802
|
+
"authored_diameter_label": bore_pd.param.source_label if bore_pd is not None else None,
|
|
800
803
|
"diameter_decimals": _display_decimals(group, "diameter", "bore"),
|
|
801
804
|
"count": count if count and count > 1 else None,
|
|
802
805
|
"through": hole.through, # the feature's fact, not the param list's shape (#868)
|
|
@@ -65,6 +65,7 @@ from draftwright.measurement_support import coincident_location_axes
|
|
|
65
65
|
from draftwright.model.callout import resolved_through_indicator
|
|
66
66
|
from draftwright.model.ir import (
|
|
67
67
|
AngularReference,
|
|
68
|
+
AuthoredDimension,
|
|
68
69
|
ChamferFeature,
|
|
69
70
|
CircularChannelFeature,
|
|
70
71
|
EnvelopeFeature,
|
|
@@ -89,6 +90,9 @@ from draftwright.model.planner import (
|
|
|
89
90
|
CORRELATED_SETS,
|
|
90
91
|
DimensionId,
|
|
91
92
|
_authored_for,
|
|
93
|
+
_authored_linear_stations,
|
|
94
|
+
_authored_location_matches,
|
|
95
|
+
_authored_same_span,
|
|
92
96
|
_decorated,
|
|
93
97
|
_extent_can_convey,
|
|
94
98
|
_is_zero_step_position,
|
|
@@ -1212,7 +1216,9 @@ def _compile_overall_height(
|
|
|
1212
1216
|
return None, None, []
|
|
1213
1217
|
mark = marked.get((id(env), "height.length")) if env is not None else None
|
|
1214
1218
|
if env is not None:
|
|
1215
|
-
if mark is not None and
|
|
1219
|
+
if mark is not None and (
|
|
1220
|
+
mark[1] == _AUTHORED_OMISSION or mark[1].startswith("authored PMI dimension ")
|
|
1221
|
+
):
|
|
1216
1222
|
return None, None, [Omission(env, "height.length", mark[0], mark[1])]
|
|
1217
1223
|
elif model.authored_dimensions is not None:
|
|
1218
1224
|
# No `EnvelopeFeature`, so the height falls back to the bounding box and no
|
|
@@ -2062,6 +2068,50 @@ def compile_dimensions(
|
|
|
2062
2068
|
off_axis, off_axis_omissions = _compile_off_axis_hole_locations(model)
|
|
2063
2069
|
locations.extend(off_axis)
|
|
2064
2070
|
location_omissions.extend(off_axis_omissions)
|
|
2071
|
+
# A source location may cover one directional component without covering its
|
|
2072
|
+
# orthogonal sibling. Only exact witness correspondence can remove that component.
|
|
2073
|
+
sources = tuple(
|
|
2074
|
+
f
|
|
2075
|
+
for f in model.features
|
|
2076
|
+
if isinstance(f, AuthoredDimension)
|
|
2077
|
+
and model.pmi_annotations_enabled
|
|
2078
|
+
and id(f) not in model.hidden_authored_dimension_ids
|
|
2079
|
+
)
|
|
2080
|
+
if sources and model.authored_dimensions is None:
|
|
2081
|
+
unique_cover: dict[int, list[AuthoredDimension]] = {}
|
|
2082
|
+
for source in sources:
|
|
2083
|
+
stations = _authored_linear_stations(source)
|
|
2084
|
+
if stations is None:
|
|
2085
|
+
continue
|
|
2086
|
+
matching = [
|
|
2087
|
+
location
|
|
2088
|
+
for location in locations
|
|
2089
|
+
if location.discriminator == "xyz"[stations[0]]
|
|
2090
|
+
and location.span is not None
|
|
2091
|
+
and (
|
|
2092
|
+
_authored_same_span(source, location.span, location.value)
|
|
2093
|
+
or _authored_location_matches(
|
|
2094
|
+
source, location.span, location.discriminator, location.value
|
|
2095
|
+
)
|
|
2096
|
+
)
|
|
2097
|
+
]
|
|
2098
|
+
if len(matching) == 1:
|
|
2099
|
+
unique_cover.setdefault(id(matching[0]), []).append(source)
|
|
2100
|
+
uncovered = []
|
|
2101
|
+
for location in locations:
|
|
2102
|
+
covering = unique_cover.get(id(location), [])
|
|
2103
|
+
if len(covering) != 1 or location.id is None:
|
|
2104
|
+
uncovered.append(location)
|
|
2105
|
+
else:
|
|
2106
|
+
location_omissions.append(
|
|
2107
|
+
Omission(
|
|
2108
|
+
location.id.feature,
|
|
2109
|
+
location.id.parameter,
|
|
2110
|
+
location.value,
|
|
2111
|
+
f"authored PMI dimension {covering[0].source_id} covers this location",
|
|
2112
|
+
)
|
|
2113
|
+
)
|
|
2114
|
+
locations = uncovered
|
|
2065
2115
|
result = RenderableDimensionPlan(
|
|
2066
2116
|
groups=tuple(groups_out),
|
|
2067
2117
|
ladders=tuple(ladders),
|