feat: integrate SimpleCADAPI 2.0.2 CAD workflows
This commit is contained in:
@@ -46,6 +46,12 @@ class UploadedStepRuntimeTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual("accepted", result["status"])
|
||||
self.assertTrue(result["geometry_accepted"])
|
||||
self.assertEqual("passed", result["brep_comparison"]["status"])
|
||||
self.assertTrue(
|
||||
result["brep_comparison"]["hard_gate_passed"]
|
||||
)
|
||||
self.assertEqual("brep_exact", result["quality_tier"])
|
||||
self.assertTrue(Path(result["brep_report"]).is_file())
|
||||
self.assertFalse(
|
||||
result["source_independence"][
|
||||
"rebuild_command_received_teacher_path"
|
||||
@@ -63,6 +69,18 @@ class UploadedStepRuntimeTests(unittest.TestCase):
|
||||
self.assertFalse(
|
||||
(task_dir / "validation" / ".geometry-work").exists()
|
||||
)
|
||||
self.assertFalse(
|
||||
(task_dir / "validation" / ".strategy-work").exists()
|
||||
)
|
||||
strategy_report = json.loads(
|
||||
(task_dir / "validation" / "strategies.json").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
"exact_3d_pcurve", strategy_report["selected_strategy"]
|
||||
)
|
||||
self.assertGreaterEqual(len(strategy_report["attempts"]), 2)
|
||||
|
||||
parameters = json.loads(
|
||||
Path(result["parameters"]).read_text(encoding="utf-8")
|
||||
@@ -76,6 +94,13 @@ class UploadedStepRuntimeTests(unittest.TestCase):
|
||||
)
|
||||
self.assertEqual(1, geometry["geometry_pass_count"])
|
||||
self.assertEqual(0, geometry["geometry_fail_count"])
|
||||
task_manifest = json.loads(
|
||||
Path(result["task_manifest"]).read_text(encoding="utf-8")
|
||||
)
|
||||
self.assertIn(
|
||||
"simplecadapi_brep_compare",
|
||||
task_manifest["route"]["validation_adapters"],
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -24,6 +24,32 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(self.parse("生成一个模数 2 的人字齿轮"))
|
||||
self.assertEqual("simplecadapi", result["selected_backend"])
|
||||
|
||||
def test_routes_new_standard_factories_to_simplecadapi(self) -> None:
|
||||
for request in (
|
||||
"生成一个 M8 六角螺栓",
|
||||
"生成一个 08B 滚子链轮",
|
||||
"生成一个模数 2 的直齿锥齿轮",
|
||||
):
|
||||
with self.subTest(request=request):
|
||||
result = route_module.route(self.parse(request))
|
||||
self.assertEqual("simplecadapi", result["selected_backend"])
|
||||
|
||||
def test_routes_semantic_units_and_tolerances_to_simplecadapi(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse("生成参数化法兰,保留语义标签、毫米单位和公差链")
|
||||
)
|
||||
self.assertEqual("simplecadapi", result["selected_backend"])
|
||||
self.assertIn(
|
||||
"semantic_graph_and_replay",
|
||||
result["routing_policy"]["requirements"],
|
||||
)
|
||||
|
||||
def test_routes_custom_freeform_surface_to_build123d(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse("生成带 NURBS 自由曲面的定制外壳")
|
||||
)
|
||||
self.assertEqual("build123d", result["selected_backend"])
|
||||
|
||||
def test_routes_connecting_rod_to_build123d(self) -> None:
|
||||
result = route_module.route(self.parse("生成中心距 120mm 的发动机连杆"))
|
||||
self.assertEqual("build123d", result["selected_backend"])
|
||||
@@ -32,6 +58,49 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(self.parse("修改现有零件的孔径", "--existing-model"))
|
||||
self.assertEqual("build123d", result["selected_backend"])
|
||||
|
||||
def test_uploaded_step_uses_surfaceir_and_simplecad_brep_validation(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"重建上传的零件",
|
||||
"--edit-source",
|
||||
"/tmp/source.step",
|
||||
)
|
||||
)
|
||||
policy = result["routing_policy"]
|
||||
self.assertEqual("surfaceir", policy["effective_execution_engine"])
|
||||
self.assertEqual(
|
||||
[
|
||||
"surfaceir_geometry_acceptance",
|
||||
"simplecadapi_brep_compare",
|
||||
],
|
||||
policy["validation_engines"],
|
||||
)
|
||||
self.assertEqual(
|
||||
"SimpleCADAPI 2.0.2",
|
||||
result["execution_adapter"]["supplemental_brep_acceptance"],
|
||||
)
|
||||
|
||||
def test_existing_designir_preserves_simplecadapi_backend(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
source = Path(directory) / "part.designir.json"
|
||||
source.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"schema_version": "3.0",
|
||||
"backend_hint": "simplecadapi",
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
result = route_module.route(
|
||||
self.parse("把孔径增加 1mm", "--edit-source", str(source))
|
||||
)
|
||||
self.assertEqual("simplecadapi", result["selected_backend"])
|
||||
self.assertEqual(
|
||||
"simplecadapi",
|
||||
result["routing_policy"]["native_source_backend"],
|
||||
)
|
||||
|
||||
def test_every_route_has_fixed_step_artifact_contract(self) -> None:
|
||||
result = route_module.route(self.parse("做一个参数化旋钮"))
|
||||
self.assertEqual(
|
||||
@@ -55,6 +124,13 @@ class CadRouterTests(unittest.TestCase):
|
||||
selected = next(item for item in result["backend_scores"] if item["backend"] == "build123d")
|
||||
self.assertIn("explicit backend override", selected["reasons"])
|
||||
|
||||
def test_probe_reports_simplecadapi_202_capability_contract(self) -> None:
|
||||
result = route_module.route(self.parse("生成一个齿轮", "--probe"))
|
||||
simplecad = result["availability"]["simplecadapi"]
|
||||
self.assertTrue(simplecad["available"])
|
||||
self.assertTrue(simplecad["compatible"])
|
||||
self.assertEqual("2.0.2", simplecad["minimum_version"])
|
||||
|
||||
def test_generalized_experience_is_loaded_without_case_geometry(self) -> None:
|
||||
payload = {
|
||||
"schema_version": "2.0",
|
||||
|
||||
Reference in New Issue
Block a user