mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-07-31 01:25:21 +00:00
fix: match predictions to manifold by object_id
Use object_id from invariant_receipt as the lookup key instead of equation_id from equation_record. This aligns the predictions JSON with the manifold findMatrix calls. Build passes 3307 jobs.
This commit is contained in:
parent
862992ec98
commit
4d0afdf90a
3 changed files with 15 additions and 12 deletions
|
|
@ -98,14 +98,14 @@ def lean_str_list(xs: list[str]) -> str:
|
||||||
|
|
||||||
|
|
||||||
def load_matrices(path: Path) -> dict[str, list[list[int]]]:
|
def load_matrices(path: Path) -> dict[str, list[list[int]]]:
|
||||||
"""Load predictions JSON into equation_id → matrix lookup."""
|
"""Load predictions JSON into object_id → matrix lookup."""
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
return {}
|
return {}
|
||||||
data = json.loads(path.read_text())
|
data = json.loads(path.read_text())
|
||||||
return {
|
return {
|
||||||
p.get("equation_id", ""): p.get("matrix_8x8", [])
|
p.get("object_id") or p.get("equation_id", ""): p.get("matrix_8x8", [])
|
||||||
for p in data.get("predictions", [])
|
for p in data.get("predictions", [])
|
||||||
if p.get("equation_id")
|
if p.get("object_id") or p.get("equation_id")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,15 @@ def main() -> int:
|
||||||
raw = preds.get("predictions", [])
|
raw = preds.get("predictions", [])
|
||||||
print(f"Loaded {len(raw)} predictions from {args.predictions}", file=sys.stderr)
|
print(f"Loaded {len(raw)} predictions from {args.predictions}", file=sys.stderr)
|
||||||
|
|
||||||
raw_sorted = sorted(raw, key=lambda p: p.get("equation_id", ""))
|
raw_sorted = sorted(raw, key=lambda p: p.get("object_id", p.get("equation_id", "")))
|
||||||
|
|
||||||
defs: list[str] = []
|
defs: list[str] = []
|
||||||
find_cases: list[str] = []
|
find_cases: list[str] = []
|
||||||
for p in raw_sorted:
|
for p in raw_sorted:
|
||||||
eid = p.get("equation_id", "")
|
eid = p.get("object_id") or p.get("equation_id", "")
|
||||||
mat = p.get("matrix_8x8", [])
|
mat = p.get("matrix_8x8", [])
|
||||||
if not eid or len(mat) != 8:
|
if not eid or len(mat) != 8:
|
||||||
print(f"WARNING: skipping malformed entry {eid}", file=sys.stderr)
|
print(f"WARNING: skipping malformed entry {p.get('equation_id', '?')}", file=sys.stderr)
|
||||||
continue
|
continue
|
||||||
name = lean_matrix_def_name(eid)
|
name = lean_matrix_def_name(eid)
|
||||||
defs.append(f"def {name} : Array (Array Int) :=\n {lean_matrix_rows(mat)}")
|
defs.append(f"def {name} : Array (Array Int) :=\n {lean_matrix_rows(mat)}")
|
||||||
|
|
|
||||||
|
|
@ -41,13 +41,14 @@ def canonical_json_matrix(matrix: list[list[int]]) -> str:
|
||||||
return json.dumps(matrix, separators=(",", ":"))
|
return json.dumps(matrix, separators=(",", ":"))
|
||||||
|
|
||||||
|
|
||||||
def build_record(text: str, equation_id: str, name: str) -> dict:
|
def build_record(text: str, equation_id: str, object_id: str, name: str) -> dict:
|
||||||
tokens = tokenize(text)
|
tokens = tokenize(text)
|
||||||
vocab = sorted(set(tokens))
|
vocab = sorted(set(tokens))
|
||||||
matrix = build_matrix(tokens)
|
matrix = build_matrix(tokens)
|
||||||
matrix_json = canonical_json_matrix(matrix)
|
matrix_json = canonical_json_matrix(matrix)
|
||||||
return {
|
return {
|
||||||
"equation_id": equation_id,
|
"equation_id": equation_id,
|
||||||
|
"object_id": object_id,
|
||||||
"name": name,
|
"name": name,
|
||||||
"equation": text,
|
"equation": text,
|
||||||
"schema": "rrc_pist_predictions_250_v1",
|
"schema": "rrc_pist_predictions_250_v1",
|
||||||
|
|
@ -77,21 +78,23 @@ def main():
|
||||||
|
|
||||||
print(f"Loaded {len(equations)} source equations", file=sys.stderr)
|
print(f"Loaded {len(equations)} source equations", file=sys.stderr)
|
||||||
|
|
||||||
# Dedup by equation_id: deterministic representative selection per AGENTS.md
|
# Dedup by object_id (invariant receipt) which matches the manifold's lookup key.
|
||||||
# representative = min(records, key = equation_record.equation_id)
|
|
||||||
merged: dict[str, dict] = OrderedDict()
|
merged: dict[str, dict] = OrderedDict()
|
||||||
for eq in equations:
|
for eq in equations:
|
||||||
rec = eq.get("equation_record", eq)
|
rec = eq.get("equation_record", eq)
|
||||||
eid = rec["equation_id"]
|
ir = eq.get("invariant_receipt", {})
|
||||||
|
eid = ir.get("object_id", rec["equation_id"]) # use object_id for lookup match
|
||||||
name = rec.get("name", eid)
|
name = rec.get("name", eid)
|
||||||
text = rec.get("equation", "")
|
text = rec.get("equation", "")
|
||||||
|
|
||||||
if eid not in merged:
|
if eid not in merged:
|
||||||
merged[eid] = build_record(text, eid, name)
|
oid = ir.get("object_id", rec["equation_id"])
|
||||||
|
merged[eid] = build_record(text, rec["equation_id"], oid, name)
|
||||||
merged[eid]["source_records"] = []
|
merged[eid]["source_records"] = []
|
||||||
|
|
||||||
merged[eid]["source_records"].append({
|
merged[eid]["source_records"].append({
|
||||||
"equation_record_id": eid,
|
"equation_record_id": rec["equation_id"],
|
||||||
|
"object_id": ir.get("object_id", rec["equation_id"]),
|
||||||
"name": name,
|
"name": name,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue