Repository navigation
Expand file tree
/
Copy pathbuild_rules.wls
More file actions
52 lines (44 loc) · 2.09 KB
/
Copy pathbuild_rules.wls
File metadata and controls
52 lines (44 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env wolframscript
root = DirectoryName[$InputFileName];
PacletDirectoryLoad[root];
Needs["Lightmarey`FormulaTransformEngine`"];
sourceFiles = Sort@FileNames["*.ftr.md", FileNameJoin[{root, "Registry", "Sources"}]];
irFiles = Sort@FileNames[{"*.family.json", "*.monotonicity.json"}, FileNameJoin[{root, "Registry", "IR"}]];
sourceCompiled = CompileFormulaTransformSource /@ sourceFiles;
irData = Import[#, "RawJSON"] & /@ irFiles;
irCompiled = Map[Switch[Lookup[#, "Kind", None],
"TransformFamily", CompileFormulaTransformFamily[#],
"MonotonicityDescriptor", CompileFormulaTransformMonotonicityDescriptor[#],
_, Failure["InvalidRuleIR", <||>]] &, irData];
failures = Select[Join[sourceCompiled, irCompiled], FailureQ];
If[failures =!= {},
Scan[
If[KeyExistsQ[Lightmarey`FormulaTransformEngine`Private`FTFailureData[#], "File"],
Print[Lightmarey`FormulaTransformEngine`Private`FTFormatRuleSourceDiagnostic[#]],
Print[InputForm[#]]
] &,
failures
];
Exit[1]
];
ruleDigestView[rule_] := KeyTake[rule, {
"RuleId", "SemanticDigest", "ExecutionDigest", "RecordDigest", "SourceDigest",
"Tags", "Meta"
}];
digestView[item_] := If[Lookup[item, "Kind"] === "TransformFamily",
<|"Kind" -> "TransformFamily", "Name" -> item["Name"],
"Parameters" -> item["Parameters"], "GeneratedParameters" -> item["GeneratedParameters"],
"Tags" -> item["Tags"], "Meta" -> item["Meta"], "SourceDigest" -> item["SourceDigest"],
"Variants" -> SortBy[ruleDigestView /@ item["Variants"], Lookup[#, "RuleId"] &],
"Heuristics" -> SortBy[ruleDigestView /@ item["Heuristics"], Lookup[#, "RuleId"] &]|>,
KeyTake[item, {"Kind", "Name", "SemanticDigest", "RecordDigest", "SourceDigest", "Meta"}]
];
sourceView = SortBy[digestView /@ sourceCompiled, Lookup[#, "Name"] &];
irView = SortBy[digestView /@ irCompiled, Lookup[#, "Name"] &];
If[sourceView =!= irView,
Print["Rule source and JSON IR are out of sync."];
Print[InputForm[<|"Source" -> sourceView, "IR" -> irView|>]];
Exit[1]
];
Print["Rule source and JSON IR are synchronized: ", Length[sourceFiles], " compiled items."];
Exit[0];