draftwright 0.5.0rc8__tar.gz → 0.5.0rc9__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.0rc8 → draftwright-0.5.0rc9}/PKG-INFO +1 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/pyproject.toml +1 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_linear_geometry.py +46 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_topology.py +193 -12
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_common.py +27 -26
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_gdt.py +96 -50
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_placement_geometry.py +25 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_placement_occupancy.py +44 -2
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_pmi_dimensions.py +33 -17
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/orchestrator.py +3 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/build_policy.py +15 -7
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/builder.py +7 -8
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/compose.py +21 -4
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/detect.py +6 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/dimension_intent.py +6 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/pmi.py +23 -20
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_complexity_baseline.json +1 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_function_length_baseline.json +1 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_dimension_intent_contract.py +3 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_gdt_ink_shared.py +26 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_gdt_placement.py +87 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_hole_table.py +0 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1146_scale_completeness.py +17 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1155_grm04_sheet_use.py +3 -3
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1209_linear_pmi_witnesses.py +2 -2
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1338_scale_before_page_escalation.py +6 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1516_dimension_text.py +12 -2
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_563_placement_intent.py +21 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi.py +277 -1
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_gtol_lowering.py +8 -2
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_strip_layout.py +141 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/.gitignore +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/CHANGELOG.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/LICENSE +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/README.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/docs/adr/README.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/docs/reference/recogniser-capabilities.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/docs/reference/sheet.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/skills/SKILL.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_core.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_datum_geometry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_schema.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_pmi_support_blockers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/analysis.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotate.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotation_layout_profile.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_axial_render.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_circular_recesses.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_diameters.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_dimension_ink.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_dimension_ink_repair.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_edge_callouts.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_envelope.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_height_ladder.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_hole_leader_placement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_leader_candidates.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_leader_commit.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_leader_fixed_ink.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_locations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_machined_leaders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_patterns.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_pocket_pad.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_polygonal_prisms.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_slots.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_step_lengths.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_strip_postsolve.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/_thin_profiles.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/drawing_port.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/from_model.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/hole_leader_candidates.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/hole_locations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/holes.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/routed.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/sections.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/annotations/solve_trace.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/audit.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/build_once.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/build_options.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/cli.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/contract_values.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/document.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/document_input.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing_diagnostics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing_export.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing_state.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/drawing_tables.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_double_d_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_edge_profile_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_flat_polygonal_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_groove_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_hole_family_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_pocket_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_prismatic_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/_turned_step_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/explicit_scale.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/export.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/family_table.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/feature_identity.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fits.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/inspection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/inspection_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/intent_drain.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/intent_routing.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/intents.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/layout_safety.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/layout_scheme.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/layout_selection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/leader_policy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/_coverage_common.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/_parameter_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/boss_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/envelope_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/orchestration.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/quality.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/requirements.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/section_recess_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/structural.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/linting/turned_step_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/compiled.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/declare.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/detect_inventory.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/detect_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/ir.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/ir_foundation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/oriented_slot_geometry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/planner.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/model/pmi_lowering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/obligations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/pdf_text.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/progress.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/projection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/py.typed +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recogniser_schema.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/recognition_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/registry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/repair.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/replay_assessment.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/reporting.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/score.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/section_recess_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_emit.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_feature_lines.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_features.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_layout_controls.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_metadata.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_object_source.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/sheet_views.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_burden_report.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_corpus_cover.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_drawing_helpers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_evidence_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_issue_module_baseline.txt +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_kernel.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_layout_helpers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_layout_sig.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_pad_rendering_fixtures.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_parts.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_pattern_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_tier_manifest.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/_unit_manifest.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/conftest.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/annotation-layout-corpus-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/annotation-layout-corpus-v2.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/annotation-layout-holdout-ftc09-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/annotation-layout-holdout-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/grm03_edge_face_finish_ap242.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/grm03_specify_pmi_ap242.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/nist_ftc_09_asme1_ap242-e1.stp +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/flange_dense.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_add_dimension.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_adr0018_view_selection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_agents_guide.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_analysis_geometry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_angle_patterns.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_angular_references.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_angular_rendering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_box_composition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_box_corpus.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_layout_product.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_scheme_compare_script.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_scheme_corpus_script.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_annotation_scheme_shadow_script.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_api_docs.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_arrangement_gate.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_assessment_comparison_issue_1712.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_audit_differential.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_authored_pmi_precedence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_axial_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_blind_slot_completeness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_blind_slot_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_boss_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_build_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_burden_report.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_candidate_evidence_issue_1726.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_candidate_preview_sheet_holdout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_canonical_angles.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_channel_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_circular_blind_step_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_cli_behavior.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_cli_report_sidecar.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_clone_budget.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_compiled_plan_boundary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_compose_then_pack.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_contract_values.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_corpus_cover.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_counting_calls.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_coverage_mode.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_declaration_identity_issue_1710.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_declaration_report_issue_1710.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_declare.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_declared_report_issue_1688.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_deferred_edits.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_depth_estimators.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_derived_view_integration.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_derived_view_planning.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_detail_views.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_detect_once.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_detect_registry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_diameter_deduplication.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_diameter_leaders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_dimension_lane_canary_issue_1757.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_build.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_claim_authority.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_claims.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_report.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_document_report_authority.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_drawing_operations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_drawing_state.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_dynamic_corridors.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_edge_profile_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_envelope_view_route_issue_1813.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_export_formats.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_export_shape.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_family_table.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_edit_corridors.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_edit_replay.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_edit_verbs.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_leader_candidate_regions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_provenance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_feature_queries.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_fit_calculations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_fits.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_flat_callout_precision.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_format_selector.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_formatting.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_framed_step_family_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_groove_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_groove_profile.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_gusset_rib_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_hole_annotations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_hole_pattern_callouts.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_import_boundaries.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_inspection_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_interior_label_placement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_ir_foundation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_iso_detail_growth.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_iso_layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_isometric_orientation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_isometric_placement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1143_hole_completeness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1157_no_implicit_general_tolerance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1298_manufacturing_requirements.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1299_page_escalation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1308_machined_leader_analytics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1333_bounded_ink_repair.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1351_structured_note_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1357_framed_activation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1357_pmi_frame.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1396_layout_advisories.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1433_blend_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1460_step_inspection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1466_semantic_sides.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1485_curved_pockets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1536_title_overflow.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1543_schedule_requirements.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1544_frame_document_canary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1560_envelope_axes.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1585_title_block_date.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1593_title_block_keepout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1598_hex_pockets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1604_internal_section.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1612_sheet_margins.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_1613_circular_channel.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_740_leader_assignment.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_798_silhouette_lint.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_label_provenance.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_constants.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_evidence_issue_1711.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_generalisation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_override_lane_issue_1757.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_override_side_issue_1757.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_property.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_safety.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_layout_scheme.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_leader_region_policy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_coverage_common.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_structural.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_suggestions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_lint_summary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_linting.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_location_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_machined_feature_callouts.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_make_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_manufacturing_pmi_lowering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_nested_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_nominal_step_pmi.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_note_verb.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_object_aspects.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_occurrence_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pad_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pad_rendering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_paired_ramp_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_parameter_id.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pareto_loop_canary_issue_1753.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_part_classification.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_part_model.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pattern_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pattern_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_place_dimension.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_plate_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_common_labels.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_manufacturing_finish.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pmi_records.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pocket_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_pre_render_profile_choice.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_prismatic_boss_diameter.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_prismatic_classification.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_prismatic_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_profile_angles.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_quality_components.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_quiddity_lifecycle_boundary.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_real_part_fixtures.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recogniser_capabilities.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recogniser_policy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recogniser_step_inventory.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recognition_boundary_failures.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recognition_evidence_schema.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recognition_policy_dispositions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_recognition_result.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_registry.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_remaining_ink_overlaps.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_render_seam.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_repair.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_replay_assessment_issue_1715.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_report_projection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_report_status_reasons_issue_1618.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_report_writer.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_requirement_applicability.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_requirement_carriers.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_requirement_catalog.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_requirement_catalog_families.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_requirement_dimension_sharing.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_scale_policy.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_scale_selection.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_score.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_section_hatching.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_section_recess_contract.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_section_recess_pockets.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_shared_drawing_cache.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_emit.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_fallback_issue_1797.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_generation_snapshot.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_identity_invariant.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_of.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_section.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_slot_recognition.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_solve_trace.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_source_shape.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_step_profile_grouping.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_strip_zones.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_suite_shape.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_through_step_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_through_step_semantics.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_tier_manifest.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_title_block_units_format.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_tolerances.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_turned_diameters.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_turned_lengths.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_turned_step_ownership.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_turned_steps.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_two_pass_layout.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_typ_dimensions.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_view_blocks.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_view_coordinates.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_view_plan.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.5.0rc8 → draftwright-0.5.0rc9}/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.0rc9
|
|
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
|
|
@@ -4,6 +4,11 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import math
|
|
6
6
|
|
|
7
|
+
from draftwright._pmi_topology import (
|
|
8
|
+
_is_mixed_planar_bore,
|
|
9
|
+
_parallel_planar_reference_witness,
|
|
10
|
+
_planar_bore_axis_witness,
|
|
11
|
+
)
|
|
7
12
|
from draftwright.model.ir import _linear_projection_view
|
|
8
13
|
|
|
9
14
|
_LINEAR_AXIS_ABS_TOL = 0.005
|
|
@@ -13,6 +18,47 @@ _LINEAR_VALUE_REL_TOL = 5e-4
|
|
|
13
18
|
_LINEAR_OBLIQUE_VALUE_ABS_TOL = 0.05
|
|
14
19
|
|
|
15
20
|
|
|
21
|
+
def _proved_planar_linear(groups, stations, nominal, kind, frame, shape_bbox):
|
|
22
|
+
"""Resolve the normal span and a face-supported projected witness together."""
|
|
23
|
+
axis, view, witness = _parallel_planar_reference_witness(groups, frame, shape_bbox)
|
|
24
|
+
if witness is None:
|
|
25
|
+
return (
|
|
26
|
+
tuple(point for point in stations if point is not None),
|
|
27
|
+
"?",
|
|
28
|
+
None,
|
|
29
|
+
("parallel planar source faces have no proven shared witness",),
|
|
30
|
+
)
|
|
31
|
+
if axis is None and kind == "linear" and _is_mixed_planar_bore(groups):
|
|
32
|
+
bore_support = _planar_bore_axis_witness(groups, frame, shape_bbox)
|
|
33
|
+
if bore_support is None:
|
|
34
|
+
points, dominant, reasons = _dimension_reference_stations(
|
|
35
|
+
tuple(stations), nominal, kind
|
|
36
|
+
)
|
|
37
|
+
return (
|
|
38
|
+
points,
|
|
39
|
+
dominant,
|
|
40
|
+
None,
|
|
41
|
+
(
|
|
42
|
+
*reasons,
|
|
43
|
+
"plane-to-bore location has no proven face-supported axis witness",
|
|
44
|
+
),
|
|
45
|
+
)
|
|
46
|
+
stations, axis, view = bore_support
|
|
47
|
+
if witness:
|
|
48
|
+
stations = tuple(
|
|
49
|
+
tuple(
|
|
50
|
+
next((value for index, value in witness if index == i), point[i]) for i in range(3)
|
|
51
|
+
)
|
|
52
|
+
if point is not None
|
|
53
|
+
else None
|
|
54
|
+
for point in stations
|
|
55
|
+
)
|
|
56
|
+
points, dominant, reasons = _dimension_reference_stations(
|
|
57
|
+
tuple(stations), nominal, kind, plane_axis=axis
|
|
58
|
+
)
|
|
59
|
+
return points, dominant, view, reasons
|
|
60
|
+
|
|
61
|
+
|
|
16
62
|
def _linear_reference_stations(
|
|
17
63
|
stations: tuple[tuple[float, float, float] | None, ...],
|
|
18
64
|
nominal: float,
|
|
@@ -6,7 +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
|
+
from draftwright._pmi_datum_geometry import _frame_point, _frame_vector
|
|
10
10
|
from draftwright._pmi_support_blockers import _failure_reason
|
|
11
11
|
|
|
12
12
|
try:
|
|
@@ -20,14 +20,21 @@ except ImportError:
|
|
|
20
20
|
|
|
21
21
|
def _parallel_planar_reference_support(groups, frame, shape_bbox) -> tuple[str | None, str | None]:
|
|
22
22
|
"""Find the common principal normal and any required witness view."""
|
|
23
|
+
axis, view, _witness = _parallel_planar_reference_witness(groups, frame, shape_bbox)
|
|
24
|
+
return axis, view
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _parallel_planar_reference_witness(groups, frame, shape_bbox):
|
|
28
|
+
"""Prove a view and, when its default midpoint misses, a shared face witness."""
|
|
23
29
|
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
24
30
|
from OCP.GeomAbs import GeomAbs_Plane
|
|
25
31
|
from OCP.TopoDS import TopoDS
|
|
26
32
|
|
|
27
33
|
if len(groups) != 2 or not all(groups):
|
|
28
|
-
return None, None
|
|
34
|
+
return None, None, ()
|
|
29
35
|
axes: list[int] = []
|
|
30
36
|
group_boxes = []
|
|
37
|
+
group_faces = []
|
|
31
38
|
for shapes in groups:
|
|
32
39
|
group_axis = None
|
|
33
40
|
group_station = None
|
|
@@ -35,35 +42,209 @@ def _parallel_planar_reference_support(groups, frame, shape_bbox) -> tuple[str |
|
|
|
35
42
|
for shape in shapes:
|
|
36
43
|
try:
|
|
37
44
|
if shape.ShapeType() != TopAbs_FACE:
|
|
38
|
-
return None, None
|
|
45
|
+
return None, None, ()
|
|
39
46
|
surface = BRepAdaptor_Surface(TopoDS.Face_s(shape))
|
|
40
47
|
if surface.GetType() != GeomAbs_Plane:
|
|
41
|
-
return None, None
|
|
48
|
+
return None, None, ()
|
|
42
49
|
direction = surface.Plane().Axis().Direction()
|
|
43
50
|
local = _frame_vector((direction.X(), direction.Y(), direction.Z()), frame)
|
|
44
51
|
axis_index = max(range(3), key=lambda index: abs(local[index]))
|
|
45
52
|
if abs(abs(local[axis_index]) - 1.0) > 1e-6:
|
|
46
|
-
return None, None
|
|
53
|
+
return None, None, ()
|
|
47
54
|
if any(abs(local[index]) > 1e-6 for index in range(3) if index != axis_index):
|
|
48
|
-
return None, None
|
|
55
|
+
return None, None, ()
|
|
49
56
|
box = shape_bbox(shape) if frame is None else shape_bbox(shape, frame)
|
|
50
57
|
boxes.append(box)
|
|
51
58
|
station = (box[axis_index] + box[axis_index + 3]) / 2
|
|
52
59
|
if box[axis_index + 3] - box[axis_index] > 1e-5:
|
|
53
|
-
return None, None
|
|
60
|
+
return None, None, ()
|
|
54
61
|
except Exception:
|
|
55
|
-
return None, None
|
|
62
|
+
return None, None, ()
|
|
56
63
|
if group_axis is not None and group_axis != axis_index:
|
|
57
|
-
return None, None
|
|
64
|
+
return None, None, ()
|
|
58
65
|
if group_station is not None and abs(group_station - station) > 1e-5:
|
|
59
|
-
return None, None
|
|
66
|
+
return None, None, ()
|
|
60
67
|
group_axis, group_station = axis_index, station
|
|
61
68
|
assert group_axis is not None # Each validated source group contains a face.
|
|
62
69
|
axes.append(group_axis)
|
|
63
70
|
group_boxes.append(boxes)
|
|
71
|
+
group_faces.append(shapes)
|
|
64
72
|
if axes[0] != axes[1]:
|
|
65
|
-
return None, None
|
|
66
|
-
|
|
73
|
+
return None, None, ()
|
|
74
|
+
axis = "XYZ"[axes[0]]
|
|
75
|
+
if axis == "X":
|
|
76
|
+
return _principal_x_planar_witness(group_boxes, group_faces, frame)
|
|
77
|
+
view_axis, view = _supported_planar_view(axis, group_boxes)
|
|
78
|
+
return view_axis, view, ()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _principal_x_planar_witness(group_boxes, group_faces, frame):
|
|
82
|
+
# A front projection only needs both planes represented at the same Z;
|
|
83
|
+
# parallel face patches may be offset in Y (#2184). The plan fallback,
|
|
84
|
+
# however, claims one shared Y/Z point and must prove it on both trims.
|
|
85
|
+
if _midpoint_witness_supported(group_boxes, 2):
|
|
86
|
+
return "X", None, ()
|
|
87
|
+
common = _common_x_face_witness(group_boxes, group_faces, frame)
|
|
88
|
+
if common is not None:
|
|
89
|
+
y, z = common
|
|
90
|
+
return "X", "plan", ((1, y), (2, z))
|
|
91
|
+
return None, None, None
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _common_x_face_witness(group_boxes, group_faces, frame):
|
|
95
|
+
"""Find a point in the interiors of both exact, trimmed X faces."""
|
|
96
|
+
candidates = [
|
|
97
|
+
(
|
|
98
|
+
(min(a[4], b[4]) - max(a[1], b[1])) * (min(a[5], b[5]) - max(a[2], b[2])),
|
|
99
|
+
max(a[1], b[1]),
|
|
100
|
+
max(a[2], b[2]),
|
|
101
|
+
min(a[4], b[4]),
|
|
102
|
+
min(a[5], b[5]),
|
|
103
|
+
a,
|
|
104
|
+
b,
|
|
105
|
+
group_faces[0][i],
|
|
106
|
+
group_faces[1][j],
|
|
107
|
+
)
|
|
108
|
+
for i, a in enumerate(group_boxes[0])
|
|
109
|
+
for j, b in enumerate(group_boxes[1])
|
|
110
|
+
if min(a[4], b[4]) >= max(a[1], b[1]) and min(a[5], b[5]) >= max(a[2], b[2])
|
|
111
|
+
]
|
|
112
|
+
for _area, y0, z0, y1, z1, a, b, first, second in sorted(
|
|
113
|
+
candidates, key=lambda item: (-item[0], item[1], item[2])
|
|
114
|
+
):
|
|
115
|
+
# Start at the overlap centre, then sample its interior deterministically.
|
|
116
|
+
# A bounding box may contain a face hole or a concavity; only OCC's
|
|
117
|
+
# trimmed-face classifier can establish a real common witness.
|
|
118
|
+
for y_fraction, z_fraction in ((0.5, 0.5),) + tuple(
|
|
119
|
+
(i / 10, j / 10) for i in range(1, 10) for j in range(1, 10)
|
|
120
|
+
):
|
|
121
|
+
y = y0 + (y1 - y0) * y_fraction
|
|
122
|
+
z = z0 + (z1 - z0) * z_fraction
|
|
123
|
+
if all(
|
|
124
|
+
_point_inside_x_face(face, (box[0] + box[3]) / 2, y, z, frame)
|
|
125
|
+
for face, box in ((first, a), (second, b))
|
|
126
|
+
):
|
|
127
|
+
return y, z
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _point_inside_x_face(face, x, y, z, frame):
|
|
132
|
+
from OCP.BRepClass import BRepClass_FaceClassifier
|
|
133
|
+
from OCP.gp import gp_Pnt
|
|
134
|
+
from OCP.TopAbs import TopAbs_IN
|
|
135
|
+
from OCP.TopoDS import TopoDS
|
|
136
|
+
|
|
137
|
+
local = (x, y, z)
|
|
138
|
+
world = local if frame is None else frame.to_world(local)
|
|
139
|
+
classifier = BRepClass_FaceClassifier()
|
|
140
|
+
try:
|
|
141
|
+
classifier.Perform(TopoDS.Face_s(face), gp_Pnt(*world), 1e-7)
|
|
142
|
+
return classifier.State() == TopAbs_IN
|
|
143
|
+
except Exception:
|
|
144
|
+
return False
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _planar_bore_axis_witness(groups, frame, shape_bbox):
|
|
148
|
+
"""Prove a location from one principal plane to one finite Z-bore axis.
|
|
149
|
+
|
|
150
|
+
A cylindrical face's bbox centre is its axial *height*, not the location
|
|
151
|
+
station. The plane must actually contain the axis-aligned witness point;
|
|
152
|
+
a bounding-box overlap alone would invent a witness through a trimmed face.
|
|
153
|
+
"""
|
|
154
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
155
|
+
from OCP.BRepClass import BRepClass_FaceClassifier
|
|
156
|
+
from OCP.GeomAbs import GeomAbs_Cylinder, GeomAbs_Plane
|
|
157
|
+
from OCP.gp import gp_Pnt
|
|
158
|
+
from OCP.TopAbs import TopAbs_IN, TopAbs_ON
|
|
159
|
+
from OCP.TopoDS import TopoDS
|
|
160
|
+
|
|
161
|
+
if len(groups) != 2 or any(len(group) != 1 for group in groups):
|
|
162
|
+
return None
|
|
163
|
+
try:
|
|
164
|
+
faces = tuple(TopoDS.Face_s(group[0]) for group in groups)
|
|
165
|
+
surfaces = tuple(BRepAdaptor_Surface(face) for face in faces)
|
|
166
|
+
kinds = tuple(surface.GetType() for surface in surfaces)
|
|
167
|
+
if kinds not in ((GeomAbs_Plane, GeomAbs_Cylinder), (GeomAbs_Cylinder, GeomAbs_Plane)):
|
|
168
|
+
return None
|
|
169
|
+
plane_i = kinds.index(GeomAbs_Plane)
|
|
170
|
+
bore_i = 1 - plane_i
|
|
171
|
+
normal = surfaces[plane_i].Plane().Axis().Direction()
|
|
172
|
+
normal = _frame_vector((normal.X(), normal.Y(), normal.Z()), frame)
|
|
173
|
+
axis = max(range(3), key=lambda index: abs(normal[index]))
|
|
174
|
+
if axis not in (0, 1) or abs(abs(normal[axis]) - 1) > 1e-6:
|
|
175
|
+
return None
|
|
176
|
+
bore = surfaces[bore_i].Cylinder().Axis()
|
|
177
|
+
direction = bore.Direction()
|
|
178
|
+
direction = _frame_vector((direction.X(), direction.Y(), direction.Z()), frame)
|
|
179
|
+
if abs(abs(direction[2]) - 1) > 1e-6 or max(abs(value) for value in direction[:2]) > 1e-6:
|
|
180
|
+
return None
|
|
181
|
+
point = bore.Location()
|
|
182
|
+
centre = _frame_point((point.X(), point.Y(), point.Z()), frame)
|
|
183
|
+
boxes = tuple(
|
|
184
|
+
shape_bbox(group[0]) if frame is None else shape_bbox(group[0], frame)
|
|
185
|
+
for group in groups
|
|
186
|
+
)
|
|
187
|
+
plane_box, bore_box = boxes[plane_i], boxes[bore_i]
|
|
188
|
+
z0 = max(plane_box[2], bore_box[2])
|
|
189
|
+
z1 = min(plane_box[5], bore_box[5])
|
|
190
|
+
if z1 - z0 <= 1e-6:
|
|
191
|
+
return None
|
|
192
|
+
station = (plane_box[axis] + plane_box[axis + 3]) / 2
|
|
193
|
+
if plane_box[axis + 3] - plane_box[axis] > 1e-5:
|
|
194
|
+
return None
|
|
195
|
+
witness = list(centre)
|
|
196
|
+
witness[axis] = station
|
|
197
|
+
witness[2] = (z0 + z1) / 2
|
|
198
|
+
world = witness if frame is None else frame.to_world(tuple(witness))
|
|
199
|
+
classifier = BRepClass_FaceClassifier()
|
|
200
|
+
classifier.Perform(faces[plane_i], gp_Pnt(*world), 1e-7)
|
|
201
|
+
if classifier.State() not in (TopAbs_IN, TopAbs_ON):
|
|
202
|
+
return None
|
|
203
|
+
points = [tuple(witness), tuple(witness)]
|
|
204
|
+
bore_point = list(witness)
|
|
205
|
+
bore_point[axis] = centre[axis]
|
|
206
|
+
points[bore_i] = tuple(bore_point)
|
|
207
|
+
return tuple(points), "XYZ"[axis], "plan"
|
|
208
|
+
except Exception:
|
|
209
|
+
return None
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def _is_mixed_planar_bore(groups):
|
|
213
|
+
"""Recognise the mixed support even when its location proof fails."""
|
|
214
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
215
|
+
from OCP.GeomAbs import GeomAbs_Cylinder, GeomAbs_Plane
|
|
216
|
+
from OCP.TopoDS import TopoDS
|
|
217
|
+
|
|
218
|
+
if len(groups) != 2 or any(len(group) != 1 for group in groups):
|
|
219
|
+
return False
|
|
220
|
+
try:
|
|
221
|
+
kinds = tuple(BRepAdaptor_Surface(TopoDS.Face_s(group[0])).GetType() for group in groups)
|
|
222
|
+
return kinds in ((GeomAbs_Plane, GeomAbs_Cylinder), (GeomAbs_Cylinder, GeomAbs_Plane))
|
|
223
|
+
except Exception:
|
|
224
|
+
return False
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def _common_principal_cylinder_axis(references):
|
|
228
|
+
"""Return a shared principal axis only when every exact cylinder proves it."""
|
|
229
|
+
axes = []
|
|
230
|
+
for reference in references:
|
|
231
|
+
vector = reference.axis_direction
|
|
232
|
+
axis = max(range(3), key=lambda index: abs(vector[index]))
|
|
233
|
+
if abs(abs(vector[axis]) - 1.0) > 1e-6 or any(
|
|
234
|
+
abs(vector[index]) > 1e-6 for index in range(3) if index != axis
|
|
235
|
+
):
|
|
236
|
+
return ""
|
|
237
|
+
axes.append("XYZ"[axis])
|
|
238
|
+
return axes[0] if axes and len(set(axes)) == 1 else ""
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _optional_cylinder_support(probe):
|
|
242
|
+
"""Keep an optional axis probe from erasing otherwise valid source PMI."""
|
|
243
|
+
try:
|
|
244
|
+
references, reasons = probe()
|
|
245
|
+
return references if not reasons else ()
|
|
246
|
+
except Exception:
|
|
247
|
+
return ()
|
|
67
248
|
|
|
68
249
|
|
|
69
250
|
def _supported_planar_view(axis: str, group_boxes) -> tuple[str | None, str | None]:
|
|
@@ -51,6 +51,10 @@ from draftwright.annotations._placement_geometry import (
|
|
|
51
51
|
from draftwright.annotations._placement_geometry import (
|
|
52
52
|
_box_hits as _box_hits,
|
|
53
53
|
)
|
|
54
|
+
from draftwright.annotations._placement_geometry import (
|
|
55
|
+
_box_outside_explicit_drawable_bounds,
|
|
56
|
+
_first_box_conflict,
|
|
57
|
+
)
|
|
54
58
|
from draftwright.annotations._placement_geometry import (
|
|
55
59
|
_geom_box as _geom_box,
|
|
56
60
|
)
|
|
@@ -78,6 +82,7 @@ from draftwright.annotations._placement_geometry import (
|
|
|
78
82
|
from draftwright.annotations._placement_occupancy import ( # noqa: F401 — stable _common imports
|
|
79
83
|
_PAGE_SPANNING_RIDERS,
|
|
80
84
|
CROSSABLE_TYPES,
|
|
85
|
+
DeferredCompactCandidate,
|
|
81
86
|
annotation_ink_clear,
|
|
82
87
|
annotation_ink_obstacles,
|
|
83
88
|
annotation_obstacle_boxes,
|
|
@@ -85,6 +90,7 @@ from draftwright.annotations._placement_occupancy import ( # noqa: F401 — sta
|
|
|
85
90
|
balloon_annotation_label_boxes,
|
|
86
91
|
balloon_geometry_hits_annotation_labels,
|
|
87
92
|
box_within_page_and_clear,
|
|
93
|
+
compact_probe_clear,
|
|
88
94
|
corridor_blockers,
|
|
89
95
|
full_strip_message,
|
|
90
96
|
is_page_spanning_rider,
|
|
@@ -1889,26 +1895,11 @@ def _prepare_strip_candidate_run(run) -> None:
|
|
|
1889
1895
|
if r is not None and r[perp] < band_hi and r[perp + 2] > band_lo
|
|
1890
1896
|
]
|
|
1891
1897
|
blockers = () if force else corridor_blockers(dwg, view, exact_leaders=bool(exact_ink))
|
|
1892
|
-
# The title block is drawn
|
|
1893
|
-
#
|
|
1894
|
-
#
|
|
1895
|
-
#
|
|
1896
|
-
#
|
|
1897
|
-
# `_real_box_conflict` below, the way `forbid` guards this same block for GD&T frames
|
|
1898
|
-
# — not an entry in the carve. The carve inflates by `pad`, the separation two
|
|
1899
|
-
# dimension LINES need from each other, and projects onto the stacking axis, claiming
|
|
1900
|
-
# every position at that coordinate; against a block this large both over-claim
|
|
1901
|
-
# badly, refusing dims that clear it by a millimetre. A 2-D test against the
|
|
1902
|
-
# candidate's own footprint refuses exactly the dims that land on it.
|
|
1903
|
-
#
|
|
1904
|
-
# `forbid` also pre-checks the PREDICTED box inside the segment solve, so a rejection
|
|
1905
|
-
# frees its slot for a refill in the same pass. Not mirrored here: on this corpus
|
|
1906
|
-
# either check alone catches every case (measured by deleting each in turn), and an
|
|
1907
|
-
# untested second branch is worth less than the packing it might win. The real-box
|
|
1908
|
-
# check is the one kept because it cannot be defeated by a prediction miss.
|
|
1909
|
-
#
|
|
1910
|
-
# Honoured under `force` too, for the reason `forbid` is: a dim kept on its natural
|
|
1911
|
-
# view as a last resort must still not print over the block.
|
|
1898
|
+
# The title block is drawn after this pass, so it is absent from occupancy.
|
|
1899
|
+
# Check its fixed 2-D box against REAL candidate ink, not the inflated strip
|
|
1900
|
+
# carve: projection would reject dimensions that clear it. A predicted-box
|
|
1901
|
+
# precheck would permit refill, but the real-box check alone is sufficient and
|
|
1902
|
+
# cannot miss underpredicted ink. Even forced candidates must respect the block.
|
|
1912
1903
|
_tb = pending_title_block_box(dwg)
|
|
1913
1904
|
keep_out = (_tb,) if _tb is not None else ()
|
|
1914
1905
|
segs = _reserved_strip_segments(lo, hi, occupied, idx, pad)
|
|
@@ -1926,18 +1917,20 @@ def _prepare_strip_candidate_run(run) -> None:
|
|
|
1926
1917
|
todo = list(cands)
|
|
1927
1918
|
|
|
1928
1919
|
def _real_box_conflict(name, real, annotation=None):
|
|
1929
|
-
"""Return the hard-obstacle reason for a built survivor, if any."""
|
|
1930
1920
|
if real is None:
|
|
1931
1921
|
return None
|
|
1922
|
+
# A bounded strip does not bound oblique witness ink; check even under force.
|
|
1923
|
+
if _box_outside_explicit_drawable_bounds(dwg, real):
|
|
1924
|
+
return "real_box_page_bounds"
|
|
1932
1925
|
if not force and _box_hits(real, blockers):
|
|
1933
1926
|
return "real_box_corridor_blocked"
|
|
1934
1927
|
fb = (forbid or {}).get(name)
|
|
1935
1928
|
if fb is not None and _box_hits(real, (fb,)):
|
|
1936
1929
|
return "real_box_forbid"
|
|
1937
|
-
if
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
return
|
|
1930
|
+
if reason := _first_box_conflict(
|
|
1931
|
+
real, (("real_box_out_of_band", out_of_band), ("real_box_title_block", keep_out))
|
|
1932
|
+
):
|
|
1933
|
+
return reason
|
|
1941
1934
|
if (
|
|
1942
1935
|
annotation is not None
|
|
1943
1936
|
and not force
|
|
@@ -2262,7 +2255,15 @@ def _compact_strip_candidate_ink(run) -> None:
|
|
|
2262
2255
|
index = next((i for i, (key, _dim) in enumerate(solved) if key == name), None)
|
|
2263
2256
|
original = solved[index][1] if index is not None else None
|
|
2264
2257
|
others = [item for key, item in solved if key != name]
|
|
2265
|
-
for
|
|
2258
|
+
for proposal in alternatives(original):
|
|
2259
|
+
if isinstance(proposal, DeferredCompactCandidate):
|
|
2260
|
+
if not compact_probe_clear(
|
|
2261
|
+
dwg, proposal, others, (forbid or {}).get(name), label_clear
|
|
2262
|
+
):
|
|
2263
|
+
continue
|
|
2264
|
+
candidate = proposal.materialize()
|
|
2265
|
+
else:
|
|
2266
|
+
candidate = proposal
|
|
2266
2267
|
if (
|
|
2267
2268
|
original is not None
|
|
2268
2269
|
and hasattr(candidate, "arc_radius")
|