994d06aaea
- 新增 selector_candidate_demo,移除 provenance intent 后枚举候选 selector - 对候选分支执行有界重建与严格 STEP 比较 - 仅在候选遍历完整且唯一 strict 通过时生成 selector 映射记录 - 增加 selector 候选搜索、预算限制和记录生成的测试 - 保持生产 selector resolver 不受 Demo 逻辑影响 - 更新 CADFS 能力台账,记录 IMPRINT 派生 profile 的 lineage selector 缺口
72 lines
3.5 KiB
Python
72 lines
3.5 KiB
Python
from __future__ import annotations
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from cadfs_to_cdsl.dataset import Sample
|
|
from cadfs_to_cdsl.reports import read_json
|
|
from cadfs_to_cdsl.selector_candidate_demo import _search_candidate_records, run_geometry_probe, strip_provenance_intents
|
|
|
|
|
|
def _contains_selector_intent(value: object) -> bool:
|
|
if isinstance(value, dict):
|
|
return "selector_intent" in value or any(_contains_selector_intent(child) for child in value.values())
|
|
if isinstance(value, list):
|
|
return any(_contains_selector_intent(child) for child in value)
|
|
return False
|
|
|
|
|
|
class SelectorCandidateDemoTests(unittest.TestCase):
|
|
def test_search_candidates_excludes_records_below_normal_resolution_threshold(self) -> None:
|
|
resolution = type("Resolution", (), {
|
|
"candidates": (
|
|
{"record_id": "low", "score": 0.5},
|
|
{"record_id": "high-b", "score": 1.0},
|
|
{"record_id": "high-a", "score": 1.0},
|
|
{"record_id": "zero", "score": 0.0},
|
|
),
|
|
})()
|
|
candidates, count = _search_candidate_records(resolution, maximum=8)
|
|
self.assertEqual(count, 2)
|
|
self.assertEqual([item["record_id"] for item in candidates], ["high-a", "high-b"])
|
|
|
|
def test_strip_provenance_intents_removes_nested_selector_metadata(self) -> None:
|
|
value = {
|
|
"selector_intent": {"version": "1.0"},
|
|
"params": {"reference": {"selector_intent_version": "1.0"}},
|
|
}
|
|
self.assertEqual(strip_provenance_intents(value), 2)
|
|
self.assertEqual(value, {"params": {"reference": {}}})
|
|
|
|
def test_geometry_probe_keeps_heuristic_success_separate_from_provenance(self) -> None:
|
|
root = Path(__file__).parents[2] / "data/cadfs-sample/CADFS_test"
|
|
feature = root / "featurescript_rp/0000/00002243.txt"
|
|
step = root / "step_abc/0000/00002243.step"
|
|
if not feature.exists() or not step.exists():
|
|
self.skipTest("CADFS sample is not installed")
|
|
sample = Sample("00002243", {"featurescript": str(feature), "step": str(step)})
|
|
with tempfile.TemporaryDirectory() as temporary:
|
|
output = Path(temporary)
|
|
report = run_geometry_probe(sample, output)
|
|
record = read_json(output / "samples" / sample.sample_id / "selector-record.json")
|
|
compiled = read_json(output / "samples" / sample.sample_id / "selector_record.compiled.cdsl.json")
|
|
self.assertEqual(report["provenance"]["rebuild_status"], "rebuild_failed")
|
|
self.assertEqual(report["geometry_probe"]["rebuild_status"], "rebuilt")
|
|
self.assertEqual(report["geometry_probe"]["comparison"], {
|
|
"decision": "strict_pass",
|
|
"strict_passed": True,
|
|
"rp_passed": True,
|
|
})
|
|
self.assertEqual(report["strategy"]["classification"], "heuristic_only")
|
|
self.assertEqual(report["selector_record"]["status"], "strict_replayed")
|
|
self.assertEqual(report["selector_record"]["record_count"], 2)
|
|
self.assertEqual(record["verification"], {
|
|
"geometry_probe_strict": True,
|
|
"compiled_cdsl_strict": True,
|
|
"compiled_cdsl": report["selector_record"]["compiled_cdsl"],
|
|
})
|
|
self.assertEqual([entry["mapping"] for entry in record["records"]], ["one_to_one", "one_to_one"])
|
|
self.assertTrue(all(entry["source_selector"]["selector_intent"]["query_family"] == "CAP_EDGE" for entry in record["records"]))
|
|
self.assertFalse(_contains_selector_intent(compiled))
|