draftwright 0.5.0rc4__tar.gz → 0.5.0rc5__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.0rc4 → draftwright-0.5.0rc5}/PKG-INFO +1 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/pyproject.toml +1 -1
- draftwright-0.5.0rc5/src/draftwright/_pmi_datum_geometry.py +174 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_gdt.py +95 -79
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/layout_selection.py +18 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/detect.py +45 -4
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/ir.py +1 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/pmi_lowering.py +75 -11
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/pmi.py +89 -36
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_feature_lines.py +2 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_complexity_baseline.json +0 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_tier_manifest.py +5 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_dimension_lane_canary_issue_1757.py +3 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_build.py +9 -3
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_gdt_placement.py +79 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_import_boundaries.py +1 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1357_pmi_frame.py +20 -2
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_manufacturing_pmi_lowering.py +57 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi.py +10 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi_datum_lowering.py +139 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pre_render_profile_choice.py +50 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_source_shape.py +1 -1
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_tier_manifest.py +5 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/.gitignore +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/CHANGELOG.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/LICENSE +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/README.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/docs/adr/README.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/docs/reference/recogniser-capabilities.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/docs/reference/sheet.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/skills/SKILL.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_core.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_pmi_linear_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_pmi_schema.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_pmi_support_blockers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_pmi_topology.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/analysis.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotate.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotation_layout_profile.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_axial_render.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_circular_recesses.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_common.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_diameters.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_dimension_ink.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_dimension_ink_repair.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_edge_callouts.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_envelope.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_height_ladder.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_hole_leader_placement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_leader_candidates.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_leader_commit.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_leader_fixed_ink.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_locations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_machined_leaders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_patterns.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_placement_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_placement_occupancy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_pmi_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_pocket_pad.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_polygonal_prisms.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_slots.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_step_lengths.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_strip_postsolve.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/_thin_profiles.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/drawing_port.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/from_model.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/hole_leader_candidates.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/hole_locations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/holes.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/orchestrator.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/routed.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/sections.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/annotations/solve_trace.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/audit.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/build_once.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/build_options.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/build_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/builder.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/cli.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/compose.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/contract_values.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/document.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/document_input.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing_diagnostics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing_export.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing_state.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/drawing_tables.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_double_d_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_edge_profile_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_flat_polygonal_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_groove_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_hole_family_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_pocket_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_prismatic_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/_turned_step_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/explicit_scale.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/export.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/family_table.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/feature_identity.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fits.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/inspection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/inspection_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/intent_drain.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/intent_routing.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/intents.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/layout_safety.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/layout_scheme.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/leader_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/_coverage_common.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/_parameter_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/boss_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/envelope_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/orchestration.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/quality.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/requirements.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/section_recess_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/structural.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/linting/turned_step_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/compiled.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/declare.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/detect_inventory.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/detect_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/dimension_intent.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/ir_foundation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/oriented_slot_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/model/planner.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/obligations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/pdf_text.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/progress.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/projection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/py.typed +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recogniser_schema.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/recognition_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/registry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/repair.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/replay_assessment.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/reporting.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/score.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/section_recess_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_emit.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_features.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_layout_controls.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_metadata.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_object_source.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/sheet_views.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_burden_report.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_corpus_cover.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_drawing_helpers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_evidence_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_function_length_baseline.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_issue_module_baseline.txt +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_kernel.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_layout_helpers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_layout_sig.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_pad_rendering_fixtures.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_parts.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_pattern_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/_unit_manifest.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/conftest.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/annotation-layout-corpus-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/annotation-layout-corpus-v2.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/annotation-layout-holdout-ftc09-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/annotation-layout-holdout-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/nist_ftc_09_asme1_ap242-e1.stp +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/flange_dense.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_add_dimension.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_adr0018_view_selection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_agents_guide.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_analysis_geometry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_angle_patterns.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_angular_references.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_angular_rendering.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_box_composition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_box_corpus.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_layout_product.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_scheme_compare_script.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_scheme_corpus_script.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_annotation_scheme_shadow_script.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_api_docs.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_arrangement_gate.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_assessment_comparison_issue_1712.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_audit_differential.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_auxiliary_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_axial_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_blind_slot_completeness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_blind_slot_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_boss_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_build_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_burden_report.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_candidate_evidence_issue_1726.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_candidate_preview_sheet_holdout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_canonical_angles.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_channel_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_circular_blind_step_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_cli_behavior.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_cli_report_sidecar.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_clone_budget.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_compiled_plan_boundary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_compose_then_pack.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_contract_values.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_corpus_cover.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_counting_calls.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_coverage_mode.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_declaration_identity_issue_1710.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_declaration_report_issue_1710.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_declare.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_declared_report_issue_1688.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_deferred_edits.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_depth_estimators.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_derived_view_integration.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_derived_view_planning.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_detail_views.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_detect_once.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_detect_registry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_diameter_deduplication.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_diameter_leaders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_dimension_intent_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_claim_authority.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_claims.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_report.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_document_report_authority.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_drawing_operations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_drawing_state.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_dynamic_corridors.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_edge_profile_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_envelope_view_route_issue_1813.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_export_formats.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_export_shape.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_family_table.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_edit_corridors.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_edit_replay.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_edit_verbs.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_leader_candidate_regions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_provenance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_feature_queries.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_fit_calculations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_fits.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_flat_callout_precision.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_format_selector.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_formatting.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_framed_step_family_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_gdt_ink_shared.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_groove_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_groove_profile.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_gusset_rib_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_hole_annotations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_hole_pattern_callouts.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_hole_table.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_inspection_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_interior_label_placement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_ir_foundation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_iso_detail_growth.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_iso_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_isometric_orientation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_isometric_placement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1143_hole_completeness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1146_scale_completeness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1157_no_implicit_general_tolerance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1298_manufacturing_requirements.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1299_page_escalation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1308_machined_leader_analytics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1333_bounded_ink_repair.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1351_structured_note_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1357_framed_activation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1396_layout_advisories.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1433_blend_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1450_boss_blend_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1460_step_inspection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1466_semantic_sides.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1485_curved_pockets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1516_dimension_text.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1536_title_overflow.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1543_schedule_requirements.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1544_frame_document_canary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1560_envelope_axes.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1585_title_block_date.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1593_title_block_keepout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1598_hex_pockets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1604_internal_section.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1612_sheet_margins.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_1613_circular_channel.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_740_leader_assignment.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_798_silhouette_lint.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_label_provenance.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_constants.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_evidence_issue_1711.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_generalisation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_override_lane_issue_1757.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_override_side_issue_1757.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_property.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_safety.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_layout_scheme.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_leader_region_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_coverage_common.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_structural.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_suggestions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_lint_summary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_linting.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_location_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_machined_feature_callouts.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_make_drawing_entrypoints.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_manufacturing_schedule.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_nested_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_nominal_step_pmi.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_note_verb.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_object_aspects.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_occurrence_recognition_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pad_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pad_rendering.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_paired_ramp_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_parameter_id.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pareto_loop_canary_issue_1753.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_part_classification.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_part_model.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pattern_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pattern_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_place_dimension.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_plate_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi_common_labels.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pmi_records.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pocket_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_prismatic_boss_diameter.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_prismatic_classification.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_prismatic_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_profile_angles.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_quality_components.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_quiddity_lifecycle_boundary.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_real_part_fixtures.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recogniser_capabilities.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recogniser_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recogniser_step_inventory.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recognition_boundary_failures.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recognition_evidence_schema.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recognition_policy_dispositions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_recognition_result.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_registry.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_remaining_ink_overlaps.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_render_seam.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_repair.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_replay_assessment_issue_1715.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_report_projection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_report_status_reasons_issue_1618.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_report_writer.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_requirement_applicability.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_requirement_carriers.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_requirement_catalog.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_requirement_catalog_families.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_requirement_dimension_sharing.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_scale_policy.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_scale_selection.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_score.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_section_hatching.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_section_recess_contract.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_section_recess_pockets.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_shared_drawing_cache.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_emit.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_fallback_issue_1797.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_furniture.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_generation_snapshot.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_identity_invariant.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_of.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_section.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_slot_recognition.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_solve_trace.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_step_profile_grouping.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_strip_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_strip_zones.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_suite_shape.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_through_step_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_through_step_semantics.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_title_block_units_format.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_tolerances.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_turned_diameters.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_turned_lengths.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_turned_step_ownership.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_turned_steps.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_two_pass_layout.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_typ_dimensions.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_view_blocks.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_view_coordinates.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_view_plan.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.5.0rc4 → draftwright-0.5.0rc5}/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.0rc5
|
|
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
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"""Exact imported datum attachment geometry in source or recognition frame."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
from typing import cast
|
|
7
|
+
|
|
8
|
+
from quiddity import PartFrame
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _bbox_centroid(bbox: tuple) -> tuple[float, float, float]:
|
|
12
|
+
xmin, ymin, zmin, xmax, ymax, zmax = bbox
|
|
13
|
+
return ((xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _frame_point(
|
|
17
|
+
point: tuple[float, float, float], frame: PartFrame | None
|
|
18
|
+
) -> tuple[float, float, float]:
|
|
19
|
+
"""Express one source-space point in *frame*, preserving default extraction exactly."""
|
|
20
|
+
if frame is None:
|
|
21
|
+
return point
|
|
22
|
+
return frame.to_local(point)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _frame_vector(
|
|
26
|
+
vector: tuple[float, float, float], frame: PartFrame | None
|
|
27
|
+
) -> tuple[float, float, float]:
|
|
28
|
+
"""Express one free vector in *frame* without applying the frame origin."""
|
|
29
|
+
if frame is None:
|
|
30
|
+
return vector
|
|
31
|
+
return cast(
|
|
32
|
+
tuple[float, float, float],
|
|
33
|
+
tuple(
|
|
34
|
+
sum(component * basis[index] for index, component in enumerate(vector))
|
|
35
|
+
for basis in (frame.x, frame.y, frame.z)
|
|
36
|
+
),
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _cylindrical_datum_site(face, bbox, axis_index, frame):
|
|
41
|
+
"""Find a normal axis-aligned projection site on the exact trimmed face."""
|
|
42
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
43
|
+
from OCP.BRepBuilderAPI import BRepBuilderAPI_MakeVertex
|
|
44
|
+
from OCP.BRepExtrema import BRepExtrema_DistShapeShape
|
|
45
|
+
from OCP.gp import gp_Pnt
|
|
46
|
+
|
|
47
|
+
cylinder = BRepAdaptor_Surface(face).Cylinder()
|
|
48
|
+
centre = _bbox_centroid(bbox)
|
|
49
|
+
location = cylinder.Axis().Location()
|
|
50
|
+
axis_site = _frame_point((location.X(), location.Y(), location.Z()), frame)
|
|
51
|
+
radial_index = 2 if axis_index < 2 else 0
|
|
52
|
+
preferred_signs = (-1, 1) if axis_index < 2 else (1, -1)
|
|
53
|
+
# The upper station avoids CTC-01's lower source label, but a trimmed
|
|
54
|
+
# sidewall may lose that station to a cross-hole. Try the midpoint too.
|
|
55
|
+
stations: tuple[float, ...] = (centre[axis_index],)
|
|
56
|
+
if axis_index == 2:
|
|
57
|
+
stations = (centre[axis_index] + min((bbox[5] - bbox[2]) / 4, 10.0), *stations)
|
|
58
|
+
for station in stations:
|
|
59
|
+
for sign in preferred_signs:
|
|
60
|
+
silhouette = list(axis_site)
|
|
61
|
+
silhouette[axis_index] = station
|
|
62
|
+
silhouette[radial_index] += sign * cylinder.Radius()
|
|
63
|
+
local_site = tuple(silhouette)
|
|
64
|
+
if not all(
|
|
65
|
+
bbox[index] - 1e-6 <= local_site[index] <= bbox[index + 3] + 1e-6
|
|
66
|
+
for index in range(3)
|
|
67
|
+
):
|
|
68
|
+
continue
|
|
69
|
+
world_site = local_site if frame is None else frame.to_world(local_site)
|
|
70
|
+
vertex = BRepBuilderAPI_MakeVertex(gp_Pnt(*world_site)).Vertex()
|
|
71
|
+
distance = BRepExtrema_DistShapeShape(vertex, face)
|
|
72
|
+
distance.Perform()
|
|
73
|
+
if distance.IsDone() and distance.Value() <= 1e-6:
|
|
74
|
+
return local_site
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _datum_face_site(shape, bbox, kind, axis_index, frame):
|
|
79
|
+
"""Choose a proven face site, on the projected silhouette for cylinders."""
|
|
80
|
+
from OCP.BRep import BRep_Tool
|
|
81
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
82
|
+
from OCP.BRepClass import BRepClass_FaceClassifier
|
|
83
|
+
from OCP.BRepMesh import BRepMesh_IncrementalMesh
|
|
84
|
+
from OCP.BRepTools import BRepTools
|
|
85
|
+
from OCP.gp import gp_Pnt, gp_Pnt2d
|
|
86
|
+
from OCP.TopAbs import TopAbs_IN
|
|
87
|
+
from OCP.TopLoc import TopLoc_Location
|
|
88
|
+
from OCP.TopoDS import TopoDS
|
|
89
|
+
|
|
90
|
+
face = TopoDS.Face_s(shape)
|
|
91
|
+
if kind == "cylinder":
|
|
92
|
+
return _cylindrical_datum_site(face, bbox, axis_index, frame)
|
|
93
|
+
u0, u1, v0, v1 = BRepTools.UVBounds_s(face)
|
|
94
|
+
surface = BRepAdaptor_Surface(face)
|
|
95
|
+
classifier = BRepClass_FaceClassifier()
|
|
96
|
+
centre = _bbox_centroid(bbox)
|
|
97
|
+
candidates = []
|
|
98
|
+
if all(math.isfinite(value) for value in (u0, u1, v0, v1)):
|
|
99
|
+
for ui in range(13):
|
|
100
|
+
u = u0 + (ui + 0.5) * (u1 - u0) / 13
|
|
101
|
+
for vi in range(13):
|
|
102
|
+
v = v0 + (vi + 0.5) * (v1 - v0) / 13
|
|
103
|
+
classifier.Perform(face, gp_Pnt2d(u, v), 1e-7)
|
|
104
|
+
if classifier.State() == TopAbs_IN:
|
|
105
|
+
point = surface.Value(u, v)
|
|
106
|
+
candidates.append((point.X(), point.Y(), point.Z()))
|
|
107
|
+
if not candidates:
|
|
108
|
+
# A narrow ring can lie entirely between grid samples. Mesh triangles
|
|
109
|
+
# cover the trimmed face, and their centroids supply interior sites.
|
|
110
|
+
for deflection in (0.1, 0.01, 0.001, 0.0001):
|
|
111
|
+
BRepMesh_IncrementalMesh(face, deflection, False, 0.5, False).Perform()
|
|
112
|
+
location = TopLoc_Location()
|
|
113
|
+
mesh = BRep_Tool.Triangulation_s(face, location)
|
|
114
|
+
if mesh is None:
|
|
115
|
+
continue
|
|
116
|
+
transform = location.Transformation()
|
|
117
|
+
for index in range(1, mesh.NbTriangles() + 1):
|
|
118
|
+
vertices = mesh.Triangle(index).Get()
|
|
119
|
+
nodes = [mesh.Node(vertex).Transformed(transform) for vertex in vertices]
|
|
120
|
+
point = tuple(sum(node.Coord()[axis] for node in nodes) / 3 for axis in range(3))
|
|
121
|
+
classifier.Perform(face, gp_Pnt(*point), 1e-7)
|
|
122
|
+
if classifier.State() == TopAbs_IN:
|
|
123
|
+
candidates.append(point)
|
|
124
|
+
if candidates:
|
|
125
|
+
break
|
|
126
|
+
sites = []
|
|
127
|
+
for point in candidates:
|
|
128
|
+
site = _frame_point(point, frame)
|
|
129
|
+
hidden = 0 if axis_index == 1 else 1
|
|
130
|
+
key = (
|
|
131
|
+
abs(site[hidden] - centre[hidden]),
|
|
132
|
+
sum((site[i] - centre[i]) ** 2 for i in range(3)),
|
|
133
|
+
)
|
|
134
|
+
sites.append((key, site))
|
|
135
|
+
return min(sites)[1] if sites else None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _datum_reference_normal(shapes, points, frame) -> tuple[tuple[float, ...], str]:
|
|
139
|
+
"""Measure a planar datum's oriented outward normal."""
|
|
140
|
+
from OCP.BRepAdaptor import BRepAdaptor_Surface
|
|
141
|
+
from OCP.GeomAbs import GeomAbs_Cylinder, GeomAbs_Plane
|
|
142
|
+
from OCP.TopAbs import TopAbs_FORWARD, TopAbs_REVERSED
|
|
143
|
+
from OCP.TopoDS import TopoDS
|
|
144
|
+
|
|
145
|
+
normals = []
|
|
146
|
+
for shape, _site in zip(shapes, points, strict=True):
|
|
147
|
+
face = TopoDS.Face_s(shape)
|
|
148
|
+
surface = BRepAdaptor_Surface(face)
|
|
149
|
+
kind = surface.GetType()
|
|
150
|
+
if kind == GeomAbs_Cylinder:
|
|
151
|
+
continue
|
|
152
|
+
if kind != GeomAbs_Plane:
|
|
153
|
+
return (), "datum reference surface has no supported oriented normal"
|
|
154
|
+
direction = surface.Plane().Axis().Direction()
|
|
155
|
+
vector: tuple[float, ...] = _frame_vector(
|
|
156
|
+
(direction.X(), direction.Y(), direction.Z()), frame
|
|
157
|
+
)
|
|
158
|
+
orientation = face.Orientation()
|
|
159
|
+
if orientation == TopAbs_REVERSED:
|
|
160
|
+
vector = tuple(-component for component in vector)
|
|
161
|
+
elif orientation != TopAbs_FORWARD:
|
|
162
|
+
return (), "datum reference surface has no outward orientation"
|
|
163
|
+
magnitude = math.sqrt(sum(component * component for component in vector))
|
|
164
|
+
if magnitude < 1e-9:
|
|
165
|
+
return (), "datum reference surface has no usable normal"
|
|
166
|
+
normals.append(tuple(component / magnitude for component in vector))
|
|
167
|
+
if not normals:
|
|
168
|
+
return (), ""
|
|
169
|
+
if any(
|
|
170
|
+
sum(a * b for a, b in zip(normals[0], normal, strict=True)) < 0.999
|
|
171
|
+
for normal in normals[1:]
|
|
172
|
+
):
|
|
173
|
+
return (), "datum reference faces disagree about outward normal"
|
|
174
|
+
return normals[0], ""
|
|
@@ -298,6 +298,72 @@ def _attach_gdt_text_evidence(leader, glyph, item, draft) -> None:
|
|
|
298
298
|
leader.gdt_visual_zone = zone if leader.gdt_visual_tolerance else ""
|
|
299
299
|
|
|
300
300
|
|
|
301
|
+
def _gdt_retry_sides(side: str, *, normal_side_only: bool) -> tuple[str, ...]:
|
|
302
|
+
"""Imported datums keep their proven outward side; other glyphs may relax."""
|
|
303
|
+
if normal_side_only:
|
|
304
|
+
return (side,)
|
|
305
|
+
return {
|
|
306
|
+
"above": ("below", "right", "left"),
|
|
307
|
+
"below": ("above", "right", "left"),
|
|
308
|
+
"left": ("right", "above", "below"),
|
|
309
|
+
"right": ("left", "above", "below"),
|
|
310
|
+
}[side]
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
def _gdt_retry_geometry(state, tier, alt):
|
|
314
|
+
"""Give the deferred carve its strip and glyph extent."""
|
|
315
|
+
alt_strip = getattr(state.zones, alt, None)
|
|
316
|
+
if alt_strip is None:
|
|
317
|
+
return None
|
|
318
|
+
hz = alt in ("above", "below")
|
|
319
|
+
axis = "y" if hz else "x"
|
|
320
|
+
extent = state.size[1] if hz else state.size[0]
|
|
321
|
+
perp = (
|
|
322
|
+
(state.px, state.px + state.size[0])
|
|
323
|
+
if hz
|
|
324
|
+
else (state.py - state.size[1] / 2, state.py + state.size[1] / 2)
|
|
325
|
+
)
|
|
326
|
+
return alt_strip, hz, axis, max(tier, extent), perp
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
def _gdt_retry_blocker(dwg, state, dim) -> str | None:
|
|
330
|
+
"""Check a post-drain glyph against the title block and settled ink."""
|
|
331
|
+
if _box_hits(_anno_box(dim), (state.title_block_box,)):
|
|
332
|
+
return "title_block_conflict"
|
|
333
|
+
if not annotation_ink_clear(dwg, dim):
|
|
334
|
+
return "ink_conflict"
|
|
335
|
+
return None
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def _gdt_retry_trace(ctx, state, nm):
|
|
339
|
+
"""Start one optional trace entry for the deferred retry."""
|
|
340
|
+
trace = getattr(ctx, "trace", None)
|
|
341
|
+
event = (
|
|
342
|
+
trace.pass_event("gdt_post_drain_fallback", view=state.view, requested_side=state.side)
|
|
343
|
+
if trace is not None
|
|
344
|
+
else None
|
|
345
|
+
)
|
|
346
|
+
trace_item = {"name": nm, "outcome": "unmet", "attempts": []} if event is not None else None
|
|
347
|
+
if event is not None:
|
|
348
|
+
event["items"].append(trace_item)
|
|
349
|
+
return trace_item
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def _gdt_retry_unmet(ctx, state, nm, normal_side_only):
|
|
353
|
+
"""Record why a required glyph could not stay on its legal corridor."""
|
|
354
|
+
ctx.record_issue(
|
|
355
|
+
"warning",
|
|
356
|
+
"pmi_dropped" if state.source_ids else "gdt_dropped",
|
|
357
|
+
(
|
|
358
|
+
f"{nm} not placed (no legible room on its surface-normal {state.side} strip)"
|
|
359
|
+
if normal_side_only
|
|
360
|
+
else f"{nm} not placed (no legible room in any {state.view} strip or sheet fallback)"
|
|
361
|
+
),
|
|
362
|
+
source=state.source_ids,
|
|
363
|
+
outcome_stage="placement",
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
|
|
301
367
|
def _gdt_drop_callback(
|
|
302
368
|
dwg,
|
|
303
369
|
ctx,
|
|
@@ -318,7 +384,6 @@ def _gdt_drop_callback(
|
|
|
318
384
|
build_routed,
|
|
319
385
|
):
|
|
320
386
|
"""Return the deferred shared-solver fallback for one declared GD&T candidate."""
|
|
321
|
-
|
|
322
387
|
state = _GdtDropState(
|
|
323
388
|
view=item.view,
|
|
324
389
|
side=item.side,
|
|
@@ -337,72 +402,24 @@ def _gdt_drop_callback(
|
|
|
337
402
|
)
|
|
338
403
|
|
|
339
404
|
def _drop(nm):
|
|
340
|
-
# Fallthrough: the declared/derived side is full — try the OPPOSITE side of
|
|
341
|
-
# the same view before dropping, so a congested default still places somewhere
|
|
342
|
-
# legible rather than vanishing. DEFERRED via ctx.post_drain (the plate
|
|
343
|
-
# pattern): the carve then runs after EVERY corridor has drained, so it cannot
|
|
344
|
-
# preempt a corner a later sibling's force candidate needs. Force semantics
|
|
345
|
-
# (no corridor-cross check) match the primary path, BUT reject a spot over the
|
|
346
|
-
# (not-yet-placed) title block — a below/right strip runs into it, and the
|
|
347
|
-
# carve can't see it.
|
|
348
405
|
def _retry():
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
if trace is not None
|
|
355
|
-
else None
|
|
356
|
-
)
|
|
357
|
-
trace_item = (
|
|
358
|
-
{"name": nm, "outcome": "unmet", "attempts": []} if event is not None else None
|
|
359
|
-
)
|
|
360
|
-
if event is not None:
|
|
361
|
-
event["items"].append(trace_item)
|
|
362
|
-
|
|
363
|
-
# Relax the requested side when its strip is full, so
|
|
364
|
-
# try the OPPOSITE side, then the two PERPENDICULAR sides, placing on the first
|
|
365
|
-
# with room. A note the caller asked to see should appear somewhere legible
|
|
366
|
-
# rather than vanish; when the requested strip has no room, an explicit `side=`
|
|
367
|
-
# is a preference, not a hard constraint. A perpendicular side flips the leader
|
|
368
|
-
# orientation (`state.build(pos, _hz=hz)`). If the placement lands on a side other than
|
|
369
|
-
# requested, record an INFO issue so the relaxation is visible.
|
|
370
|
-
# A requested annotation must never be silently lost.
|
|
371
|
-
relax_order = {
|
|
372
|
-
"above": ("below", "right", "left"),
|
|
373
|
-
"below": ("above", "right", "left"),
|
|
374
|
-
"left": ("right", "above", "below"),
|
|
375
|
-
"right": ("left", "above", "below"),
|
|
376
|
-
}[state.side]
|
|
377
|
-
for alt in relax_order:
|
|
378
|
-
alt_strip = getattr(state.zones, alt, None)
|
|
379
|
-
if alt_strip is None:
|
|
406
|
+
trace_item = _gdt_retry_trace(ctx, state, nm)
|
|
407
|
+
normal_side_only = item.kind == "datum_ref" and bool(item.reference_surface_kind)
|
|
408
|
+
for alt in _gdt_retry_sides(state.side, normal_side_only=normal_side_only):
|
|
409
|
+
geometry = _gdt_retry_geometry(state, tier, alt)
|
|
410
|
+
if geometry is None:
|
|
380
411
|
continue
|
|
381
|
-
hz
|
|
382
|
-
|
|
383
|
-
extent = (
|
|
384
|
-
state.size[1] if axis2 == "y" else state.size[0]
|
|
385
|
-
) # the glyph's stacking-axis size
|
|
386
|
-
perp = (
|
|
387
|
-
(state.px, state.px + state.size[0])
|
|
388
|
-
if hz
|
|
389
|
-
else (state.py - state.size[1] / 2, state.py + state.size[1] / 2)
|
|
390
|
-
)
|
|
391
|
-
pos = carve_position(dwg, alt_strip, state.view, axis2, max(tier, extent), perp)
|
|
412
|
+
strip, hz, axis, extent, perp = geometry
|
|
413
|
+
pos = carve_position(dwg, strip, state.view, axis, extent, perp)
|
|
392
414
|
if pos is None:
|
|
393
415
|
if trace_item is not None:
|
|
394
416
|
trace_item["attempts"].append({"side": alt, "outcome": "no_free_position"})
|
|
395
417
|
continue
|
|
396
418
|
dim = state.build(pos, _hz=hz)
|
|
397
|
-
|
|
419
|
+
blocker = _gdt_retry_blocker(dwg, state, dim)
|
|
420
|
+
if blocker:
|
|
398
421
|
if trace_item is not None:
|
|
399
|
-
trace_item["attempts"].append(
|
|
400
|
-
{"side": alt, "outcome": "title_block_conflict"}
|
|
401
|
-
)
|
|
402
|
-
continue
|
|
403
|
-
if not annotation_ink_clear(dwg, dim):
|
|
404
|
-
if trace_item is not None:
|
|
405
|
-
trace_item["attempts"].append({"side": alt, "outcome": "ink_conflict"})
|
|
422
|
+
trace_item["attempts"].append({"side": alt, "outcome": blocker})
|
|
406
423
|
continue
|
|
407
424
|
ctx.place(
|
|
408
425
|
dim,
|
|
@@ -411,23 +428,28 @@ def _gdt_drop_callback(
|
|
|
411
428
|
feature=state.feature,
|
|
412
429
|
satisfaction=state.satisfaction,
|
|
413
430
|
declaration=state.declaration,
|
|
414
|
-
) # relaxed side
|
|
415
|
-
ctx.record_issue(
|
|
416
|
-
"info",
|
|
417
|
-
"gdt_side_relaxed",
|
|
418
|
-
f"{nm}: the {state.view} {state.side} strip was full — placed on {alt} instead",
|
|
419
431
|
)
|
|
432
|
+
if alt != state.side:
|
|
433
|
+
ctx.record_issue(
|
|
434
|
+
"info",
|
|
435
|
+
"gdt_side_relaxed",
|
|
436
|
+
f"{nm}: the {state.view} {state.side} strip was full — placed on {alt} instead",
|
|
437
|
+
)
|
|
420
438
|
if trace_item is not None:
|
|
421
439
|
trace_item["attempts"].append({"side": alt, "outcome": "placed"})
|
|
422
440
|
trace_item.update(outcome="placed", side=alt)
|
|
423
441
|
return
|
|
424
|
-
fallback =
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
442
|
+
fallback = (
|
|
443
|
+
sheet_fallback(
|
|
444
|
+
dwg,
|
|
445
|
+
(state.px, state.py),
|
|
446
|
+
state.view,
|
|
447
|
+
state.build_at,
|
|
448
|
+
state.build_routed,
|
|
449
|
+
state.size,
|
|
450
|
+
)
|
|
451
|
+
if not normal_side_only
|
|
452
|
+
else None
|
|
431
453
|
)
|
|
432
454
|
if fallback is not None:
|
|
433
455
|
ctx.place(
|
|
@@ -448,15 +470,9 @@ def _gdt_drop_callback(
|
|
|
448
470
|
trace_item["attempts"].append({"side": "sheet", "outcome": "placed"})
|
|
449
471
|
trace_item.update(outcome="placed", side="sheet")
|
|
450
472
|
return
|
|
451
|
-
if trace_item is not None:
|
|
473
|
+
if trace_item is not None and not normal_side_only:
|
|
452
474
|
trace_item["attempts"].append({"side": "sheet", "outcome": "no_clear_route"})
|
|
453
|
-
ctx
|
|
454
|
-
"warning",
|
|
455
|
-
"pmi_dropped" if state.source_ids else "gdt_dropped",
|
|
456
|
-
f"{nm} not placed (no legible room in any {state.view} strip or sheet fallback)",
|
|
457
|
-
source=state.source_ids,
|
|
458
|
-
outcome_stage="placement",
|
|
459
|
-
)
|
|
475
|
+
_gdt_retry_unmet(ctx, state, nm, normal_side_only)
|
|
460
476
|
|
|
461
477
|
ctx.post_drain.append(_retry)
|
|
462
478
|
|
|
@@ -42,6 +42,14 @@ def choose_pre_render_profile(
|
|
|
42
42
|
scheme = strips.scheme
|
|
43
43
|
demand_count = len(scheme.demands) if scheme is not None else 0
|
|
44
44
|
under_reserved_count = len(report.under_reserved)
|
|
45
|
+
only_unroutable_raw_pmi = (
|
|
46
|
+
scheme is not None
|
|
47
|
+
and bool(scheme.unplanned)
|
|
48
|
+
and all(
|
|
49
|
+
item.family == "pmi" and item.reason == "raw PMI has no typed corridor"
|
|
50
|
+
for item in scheme.unplanned
|
|
51
|
+
)
|
|
52
|
+
)
|
|
45
53
|
missing_views = (
|
|
46
54
|
sorted({demand.view for demand in scheme.demands} - set(views))
|
|
47
55
|
if scheme is not None
|
|
@@ -87,6 +95,16 @@ def choose_pre_render_profile(
|
|
|
87
95
|
# can displace the required mark even though the original strip fits it.
|
|
88
96
|
# Keep those strips while allowing the ISO to use free space.
|
|
89
97
|
profile, reason = "iso-growth", "sparse_authored_corridor"
|
|
98
|
+
elif (
|
|
99
|
+
demand_count <= 25
|
|
100
|
+
and under_reserved_count >= 3
|
|
101
|
+
and 6 * under_reserved_count >= demand_count
|
|
102
|
+
and only_unroutable_raw_pmi
|
|
103
|
+
):
|
|
104
|
+
# Raw source PMI with no drawable carrier has no corridor to protect.
|
|
105
|
+
# When several typed corridors are short of space, reserve their planned
|
|
106
|
+
# depths before rendering the single normal build.
|
|
107
|
+
profile, reason = "planned", "sparse_typed_corridor_pressure"
|
|
90
108
|
elif demand_count <= 25 and report.unplanned_count <= 5 and 0 < under_reserved_count <= 3:
|
|
91
109
|
# Sparse uncertain routes keep baseline annotation placement while
|
|
92
110
|
# granting the isometric view any sheet slack it can safely consume.
|
|
@@ -479,11 +479,52 @@ def build_pmi_features(
|
|
|
479
479
|
continue
|
|
480
480
|
if r.source_category == "datum" and not r.lowering_blockers and r.reference_axis:
|
|
481
481
|
edge_view = {"X": "front", "Y": "side", "Z": "front"}[r.reference_axis]
|
|
482
|
-
vertical_index = 2 if edge_view in ("front", "side") else 1
|
|
483
482
|
center = bbox.center()
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
483
|
+
center_point = (center.X, center.Y, center.Z)
|
|
484
|
+
site = r.ref_pts[0] if r.ref_pts else pmi_origin
|
|
485
|
+
axial_index = "XYZ".index(r.reference_axis)
|
|
486
|
+
surface_kind = r.reference_surface_kind
|
|
487
|
+
if not surface_kind:
|
|
488
|
+
# Compatibility for hand-constructed records predating exact kind.
|
|
489
|
+
surface_kind = (
|
|
490
|
+
"plane"
|
|
491
|
+
if r.ref_bbox is not None
|
|
492
|
+
and r.ref_bbox[axial_index + 3] - r.ref_bbox[axial_index] < 1e-4
|
|
493
|
+
else "cylinder"
|
|
494
|
+
)
|
|
495
|
+
planar = surface_kind == "plane"
|
|
496
|
+
# A plane's leader follows its normal in the edge-on view. A
|
|
497
|
+
# cylindrical datum instead attaches radially to its profile.
|
|
498
|
+
if planar and axial_index < 2:
|
|
499
|
+
side_index = axial_index
|
|
500
|
+
low_side, high_side = "left", "right"
|
|
501
|
+
elif not planar and axial_index == 2:
|
|
502
|
+
side_index = 0
|
|
503
|
+
low_side, high_side = "left", "right"
|
|
504
|
+
else:
|
|
505
|
+
side_index = 2
|
|
506
|
+
low_side, high_side = "below", "above"
|
|
507
|
+
if len(r.reference_normal) == 3 and abs(r.reference_normal[side_index]) < 0.9:
|
|
508
|
+
out.append(
|
|
509
|
+
replace(
|
|
510
|
+
raw,
|
|
511
|
+
lowering_blockers=(
|
|
512
|
+
"datum surface normal cannot be shown by an axial leader in this view",
|
|
513
|
+
),
|
|
514
|
+
)
|
|
515
|
+
)
|
|
516
|
+
continue
|
|
517
|
+
if len(r.reference_normal) == 3:
|
|
518
|
+
side = high_side if r.reference_normal[side_index] > 0 else low_side
|
|
519
|
+
else:
|
|
520
|
+
side = high_side if site[side_index] >= center_point[side_index] else low_side
|
|
521
|
+
datum_item = datum(
|
|
522
|
+
r.label,
|
|
523
|
+
replace(raw, frame=Frame(origin=site, axis=ax)),
|
|
524
|
+
view=edge_view,
|
|
525
|
+
side=side,
|
|
526
|
+
)
|
|
527
|
+
datum_item = replace(datum_item, reference_surface_kind=surface_kind)
|
|
487
528
|
out.append(
|
|
488
529
|
replace(
|
|
489
530
|
datum_item,
|
|
@@ -916,14 +916,9 @@ def _structured_thread_extent(
|
|
|
916
916
|
if through:
|
|
917
917
|
raise ValueError("structured external thread cannot be a through tap")
|
|
918
918
|
if "thread length" in fields:
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
- feature.cylindrical_refs[0].axial_interval[0],
|
|
923
|
-
length,
|
|
924
|
-
abs_tol=0.01,
|
|
925
|
-
):
|
|
926
|
-
raise ValueError("structured thread length disagrees with source cylinder")
|
|
919
|
+
_structured_number(fields, "thread length")
|
|
920
|
+
# A tip chamfer can shorten the source face. Check its full owner span
|
|
921
|
+
# only after a unique geometric owner match is established.
|
|
927
922
|
elif prose is None or not prose.full_available_length:
|
|
928
923
|
raise ValueError("structured external thread has no length requirement")
|
|
929
924
|
return (
|
|
@@ -1184,7 +1179,51 @@ def _remap_model_features(model: PartModel, replacements: dict[int, Feature]) ->
|
|
|
1184
1179
|
)
|
|
1185
1180
|
|
|
1186
1181
|
|
|
1187
|
-
def
|
|
1182
|
+
def _turned_tip_chamfers_cover_gap(
|
|
1183
|
+
reference: CylindricalReference,
|
|
1184
|
+
owner: StepFeature | BossFeature,
|
|
1185
|
+
chamfers: tuple[ChamferFeature, ...],
|
|
1186
|
+
) -> bool:
|
|
1187
|
+
"""Require recognised equal-leg end chamfers for a shortened source cylinder."""
|
|
1188
|
+
span = owner.span
|
|
1189
|
+
if span is None:
|
|
1190
|
+
return False
|
|
1191
|
+
axis_index = "xyz".index(owner.frame.axis)
|
|
1192
|
+
owner_lo, owner_hi = sorted((span[0][axis_index], span[1][axis_index]))
|
|
1193
|
+
source_lo, source_hi = reference.axial_interval
|
|
1194
|
+
gaps = ((owner_lo, source_lo), (source_hi, owner_hi))
|
|
1195
|
+
found_gap = False
|
|
1196
|
+
for gap_lo, gap_hi in gaps:
|
|
1197
|
+
gap = gap_hi - gap_lo
|
|
1198
|
+
if gap <= 0.01:
|
|
1199
|
+
continue
|
|
1200
|
+
found_gap = True
|
|
1201
|
+
station = (gap_lo + gap_hi) / 2
|
|
1202
|
+
if not any(
|
|
1203
|
+
chamfer.turned
|
|
1204
|
+
and chamfer.axis == owner.frame.axis
|
|
1205
|
+
and _same_number(chamfer.leg1, gap, abs_tol=0.01)
|
|
1206
|
+
and _same_number(chamfer.leg2, gap, abs_tol=0.01)
|
|
1207
|
+
and _same_number(chamfer.angle, 45.0, abs_tol=0.01)
|
|
1208
|
+
and _same_number(chamfer.frame.origin[axis_index], station, abs_tol=0.01)
|
|
1209
|
+
and _same_number(
|
|
1210
|
+
math.sqrt(
|
|
1211
|
+
sum(
|
|
1212
|
+
(chamfer.frame.origin[index] - reference.axis_origin[index]) ** 2
|
|
1213
|
+
for index in range(3)
|
|
1214
|
+
if index != axis_index
|
|
1215
|
+
)
|
|
1216
|
+
),
|
|
1217
|
+
reference.radius - gap / 2,
|
|
1218
|
+
abs_tol=0.01,
|
|
1219
|
+
)
|
|
1220
|
+
for chamfer in chamfers
|
|
1221
|
+
):
|
|
1222
|
+
return False
|
|
1223
|
+
return found_gap
|
|
1224
|
+
|
|
1225
|
+
|
|
1226
|
+
def _manufacturing_proposal(feature: PmiFeature, owners, chamfers, bbox):
|
|
1188
1227
|
"""Validate one source against its exact cylinder and unique canonical owner."""
|
|
1189
1228
|
requirement = (
|
|
1190
1229
|
_knurl_requirement(feature)
|
|
@@ -1226,7 +1265,31 @@ def _manufacturing_proposal(feature: PmiFeature, owners, bbox):
|
|
|
1226
1265
|
if not matches
|
|
1227
1266
|
else f"ambiguous manufacturing requirement: source topology matches {len(matches)} canonical features"
|
|
1228
1267
|
)
|
|
1229
|
-
|
|
1268
|
+
owner = matches[0]
|
|
1269
|
+
if (
|
|
1270
|
+
isinstance(requirement, ThreadRequirement)
|
|
1271
|
+
and requirement.application == "external"
|
|
1272
|
+
and isinstance(owner, (StepFeature, BossFeature))
|
|
1273
|
+
and "thread length" in dict(feature.structured_fields)
|
|
1274
|
+
):
|
|
1275
|
+
length = _structured_number(dict(feature.structured_fields), "thread length")
|
|
1276
|
+
source_length = reference.axial_interval[1] - reference.axial_interval[0]
|
|
1277
|
+
span = owner.span
|
|
1278
|
+
if span is None:
|
|
1279
|
+
raise ValueError("external thread owner has no axial span")
|
|
1280
|
+
axis_index = "xyz".index(owner.frame.axis)
|
|
1281
|
+
owner_length = abs(span[1][axis_index] - span[0][axis_index])
|
|
1282
|
+
if not (
|
|
1283
|
+
_same_number(source_length, length, abs_tol=0.01)
|
|
1284
|
+
or (
|
|
1285
|
+
_same_number(owner_length, length, abs_tol=0.01)
|
|
1286
|
+
and _turned_tip_chamfers_cover_gap(reference, owner, chamfers)
|
|
1287
|
+
)
|
|
1288
|
+
):
|
|
1289
|
+
raise ValueError(
|
|
1290
|
+
"structured thread length disagrees with source cylinder or evidenced owner span"
|
|
1291
|
+
)
|
|
1292
|
+
return owner, requirement
|
|
1230
1293
|
|
|
1231
1294
|
|
|
1232
1295
|
def lower_ap242_manufacturing_requirements(
|
|
@@ -1248,6 +1311,7 @@ def lower_ap242_manufacturing_requirements(
|
|
|
1248
1311
|
for feature in model.features
|
|
1249
1312
|
if isinstance(feature, (StepFeature, BossFeature, HoleFeature, PatternFeature))
|
|
1250
1313
|
]
|
|
1314
|
+
chamfers = tuple(feature for feature in model.features if isinstance(feature, ChamferFeature))
|
|
1251
1315
|
replacements: dict[int, Feature] = {}
|
|
1252
1316
|
consumed: set[int] = set()
|
|
1253
1317
|
blocked: dict[int, str] = {}
|
|
@@ -1265,7 +1329,7 @@ def lower_ap242_manufacturing_requirements(
|
|
|
1265
1329
|
if feature.lowering_blockers:
|
|
1266
1330
|
continue
|
|
1267
1331
|
try:
|
|
1268
|
-
owner, requirement = _manufacturing_proposal(feature, owners, model.bbox)
|
|
1332
|
+
owner, requirement = _manufacturing_proposal(feature, owners, chamfers, model.bbox)
|
|
1269
1333
|
except ValueError as exc:
|
|
1270
1334
|
blocked[index] = str(exc)
|
|
1271
1335
|
continue
|