From ab113ab02338bd7fc554d618276401d289cfba30 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Mon, 27 Jul 2026 19:21:48 +0800 Subject: [PATCH 1/7] Register RIIR Occam Rust port challenge --- .../solutions/RIIR-occam-rust-port/README.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md new file mode 100644 index 000000000..d00bc5fae --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -0,0 +1,21 @@ +## Team + +| | | +|---|---| +| **Team name** | Rewrite It In Rust! | +| **Members** | Chenxi Wan, Yedi Shen, Junkai Wang | + +## Challenge + +| Row | | +|---|---| +| **Challenge** | Port the Occam's Circuit verifier workflow to Rust: reuse the #71 Julia data and verifier as an oracle, implement a Rust netlist parser/evaluator, add bit-parallel verification, and report correctness/runtime gaps. | +| **Catalog issue** | Addresses #115 — "Port any challenge of this school to Rust", released by Hiroshi Shinaoka. The source challenge for the port is #71, "Occam's Circuit". | +| **Track** | `agent-kb`, chosen by the team because #115 is an agentic migration and Rust-ecosystem case study with `Method` field `Other`. | + +## Scope Note + +This registration targets the #115 migration deliverable, not a full solution of +the hardest #71 hidden-function discovery task. The first milestone is a +bit-exact Rust verifier and benchmark report against the original Julia +workflow. From afb9e098ef4a4d94fae2fb70bc391dca188232c3 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Mon, 27 Jul 2026 21:33:24 +0800 Subject: [PATCH 2/7] Link RIIR Occam Rust port workspace --- tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md index d00bc5fae..428220018 100644 --- a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -19,3 +19,9 @@ This registration targets the #115 migration deliverable, not a full solution of the hardest #71 hidden-function discovery task. The first milestone is a bit-exact Rust verifier and benchmark report against the original Julia workflow. + +## Working Repository + +Development starts in the private AGPL-3.0 repository +`JunkaiWang-TheoPhy/quantum-harness-215-occam-rust-port`. The #71 implementation +line lives under the `challenge-71-occam/` subfolder. From 53fbd2115c86da306ce68bf2daedf1cddbae6297 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Mon, 27 Jul 2026 21:41:45 +0800 Subject: [PATCH 3/7] Use issue number for Occam Rust port repo --- tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md index 428220018..ace198e02 100644 --- a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -23,5 +23,5 @@ workflow. ## Working Repository Development starts in the private AGPL-3.0 repository -`JunkaiWang-TheoPhy/quantum-harness-215-occam-rust-port`. The #71 implementation +`JunkaiWang-TheoPhy/quantum-harness-115-occam-rust-port`. The #71 implementation line lives under the `challenge-71-occam/` subfolder. From 433b4bcb7fbd313916ce3b575435c97b8ed26063 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Tue, 28 Jul 2026 16:48:11 +0800 Subject: [PATCH 4/7] Mark Occam Rust port v0.5.0 completed --- .../solutions/RIIR-occam-rust-port/README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md index ace198e02..78643e76e 100644 --- a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -15,13 +15,18 @@ ## Scope Note -This registration targets the #115 migration deliverable, not a full solution of -the hardest #71 hidden-function discovery task. The first milestone is a -bit-exact Rust verifier and benchmark report against the original Julia -workflow. +**Status: Completed — v0.5.0 (July 28, 2026).** + +The completed #115 migration now includes the bit-exact Rust verifier, +bit-parallel and compiled evaluation backends, deterministic benchmark and +evidence pipelines, pinned ABC/Yosys/Espresso provenance, bounded fuzzing, and +the measured, auditable Occam generalization study. The companion #71 solution +is submitted in [PR #220](https://github.com/QuantumBFS/quantum.harness/pull/220). ## Working Repository -Development starts in the private AGPL-3.0 repository +The completed implementation is maintained in the private AGPL-3.0 repository `JunkaiWang-TheoPhy/quantum-harness-115-occam-rust-port`. The #71 implementation -line lives under the `challenge-71-occam/` subfolder. +line lives under the `challenge-71-occam/` subfolder. The audited v0.5.0 source +commit is `e9120224fe0b1f45ed309ad6b40bf7c9c381af38`; private CI and Release +links are available to authorized reviewers. From 1663cbd840ed359a10d474f80544a441a72c8272 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Tue, 28 Jul 2026 18:04:52 +0800 Subject: [PATCH 5/7] Rename Occam Rust port team to Ranger --- tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md index 78643e76e..a96096893 100644 --- a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -2,7 +2,7 @@ | | | |---|---| -| **Team name** | Rewrite It In Rust! | +| **Team name** | Ranger | | **Members** | Chenxi Wan, Yedi Shen, Junkai Wang | ## Challenge From 07acef1d6ebeb4d0eb030ed0d2b75288781bbb59 Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Fri, 31 Jul 2026 07:46:52 +0800 Subject: [PATCH 6/7] Publish #115 Rust port source snapshot Export the audited v0.5.0 parser, evaluators, tests, fuzz targets, benchmarks, Julia oracle scripts, and bounded-synthesis evidence directly into the public #115 submission. Constraint: keep inverse-relation and DRAT/LRAT follow-up work outside this stable verifier-port snapshot. Co-authored-by: OmX --- .../solutions/RIIR-occam-rust-port/README.md | 110 +- .../public-source/.gitignore | 7 + .../public-source/CHANGELOG.md | 65 + .../public-source/Cargo.lock | 874 + .../public-source/Cargo.toml | 3 + .../public-source/LICENSE | 661 + .../public-source/README.md | 108 + .../public-source/SOURCE-MANIFEST.sha256 | 326 + .../public-source/benchmarks/README.md | 49 + .../add-16-100000-compiled.json | 191 + .../add-16-100000-packed.json | 191 + .../add-8-100000-compiled.json | 191 + .../add-8-100000-packed.json | 191 + .../mul-4-100000-compiled.json | 191 + .../mul-4-100000-packed.json | 191 + .../official-add-8-compiled.json | 191 + .../official-add-8-packed.json | 191 + .../report.md | 47 + .../add-8-100000.json | 257 + .../add-8-1000000.json | 257 + .../mul-4-100000.json | 257 + .../mul-4-1000000.json | 257 + .../process.json | 162 + .../report.md | 36 + .../add-16-100000-packed-reference.json | 191 + .../add-16-100000-packed.json | 191 + .../add-8-100000-packed-reference.json | 191 + .../add-8-100000-packed.json | 191 + .../mul-4-100000-packed-reference.json | 191 + .../mul-4-100000-packed.json | 191 + .../official-add-8-packed-reference.json | 191 + .../official-add-8-packed.json | 191 + .../2026-07-28-flat-wire-apple-m4/report.md | 39 + .../benchmarks/protocols/apple-m4.json | 23 + .../challenge-71-occam/Cargo.toml | 18 + .../proptest-regressions/properties.txt | 1 + .../solutions/rewrite-it-in-rust/README.md | 180 + .../rewrite-it-in-rust/circuits/mystery-A.txt | 39 + .../rewrite-it-in-rust/circuits/mystery-B.txt | 52 + .../rewrite-it-in-rust/circuits/mystery-C.txt | 169 + .../rewrite-it-in-rust/circuits/mystery-D.txt | 188 + .../rewrite-it-in-rust/manifest.json | 68 + .../mdl-reports/mystery-A.json | 90 + .../mdl-reports/mystery-B.json | 96 + .../mdl-reports/mystery-C.json | 90 + .../mdl-reports/mystery-D.json | 102 + .../optimization/baseline.json | 17 + .../optimization/mystery-A.json | 1032 + .../optimization/mystery-B.json | 1440 + .../optimization/mystery-C.json | 3412 ++ .../optimization/mystery-D.json | 4398 ++ .../optimization/report.json | 10295 +++++ .../predictions/mystery-A/test_outputs.csv | 2001 + .../predictions/mystery-B/test_outputs.csv | 2001 + .../predictions/mystery-C/test_outputs.csv | 1501 + .../predictions/mystery-D/test_outputs.csv | 625 + .../rewrite-it-in-rust/reports/mystery-A.json | 39 + .../rewrite-it-in-rust/reports/mystery-B.json | 39 + .../rewrite-it-in-rust/reports/mystery-C.json | 39 + .../rewrite-it-in-rust/reports/mystery-D.json | 39 + .../rewrite-it-in-rust/research-manifest.json | 47 + .../rewrite-it-in-rust/research/aggregate.csv | 1025 + .../research/aggregate.json | 33804 ++++++++++++++++ .../rewrite-it-in-rust/research/config.json | 17 + .../research/environment.json | 6 + .../research/figures/description-vs-gates.svg | 433 + .../research/figures/fraction-vs-recovery.svg | 13 + .../research/figures/gates-vs-accuracy.svg | 433 + .../rewrite-it-in-rust/research/manifest.json | 21 + .../rewrite-it-in-rust/research/report.md | 22 + .../rewrite-it-in-rust/research/tasks.json | 21 + .../rewrite-it-in-rust/search/.gitignore | 1 + .../rewrite-it-in-rust/search/Cargo.lock | 874 + .../rewrite-it-in-rust/search/Cargo.toml | 21 + .../search/conversion-manifest.json | 155 + .../rewrite-it-in-rust/search/run-all.sh | 18 + .../search/src/benchmark.rs | 447 + .../search/src/bin/tool_audit.rs | 547 + .../rewrite-it-in-rust/search/src/circuit.rs | 63 + .../rewrite-it-in-rust/search/src/compiled.rs | 280 + .../rewrite-it-in-rust/search/src/dataset.rs | 146 + .../search/src/dataset_scan.rs | 133 + .../rewrite-it-in-rust/search/src/error.rs | 48 + .../search/src/expression/ast.rs | 134 + .../search/src/expression/canonical.rs | 123 + .../search/src/expression/compile.rs | 286 + .../search/src/expression/enumerate.rs | 408 + .../search/src/expression/evaluate.rs | 110 + .../search/src/expression/mod.rs | 16 + .../search/src/expression/parse.rs | 189 + .../search/src/expression/report.rs | 95 + .../rewrite-it-in-rust/search/src/generate.rs | 184 + .../search/src/learning/family.rs | 152 + .../search/src/learning/inputs.rs | 213 + .../search/src/learning/learner.rs | 173 + .../search/src/learning/mdl.rs | 183 + .../search/src/learning/mod.rs | 20 + .../search/src/learning/prediction.rs | 88 + .../search/src/learning/report.rs | 465 + .../rewrite-it-in-rust/search/src/lib.rs | 82 + .../rewrite-it-in-rust/search/src/limits.rs | 88 + .../search/src/logic/abc.rs | 576 + .../search/src/logic/blif.rs | 83 + .../search/src/logic/library.rs | 23 + .../search/src/logic/mapped.rs | 522 + .../search/src/logic/mod.rs | 14 + .../search/src/logic/report.rs | 139 + .../rewrite-it-in-rust/search/src/main.rs | 865 + .../rewrite-it-in-rust/search/src/metrics.rs | 150 + .../rewrite-it-in-rust/search/src/netlist.rs | 334 + .../search/src/optimization/equivalence.rs | 90 + .../search/src/optimization/mod.rs | 13 + .../search/src/optimization/peephole.rs | 275 + .../search/src/optimization/report.rs | 61 + .../search/src/optimization/rewrite.rs | 133 + .../search/src/optimization/window.rs | 333 + .../rewrite-it-in-rust/search/src/optimize.rs | 334 + .../rewrite-it-in-rust/search/src/packed.rs | 530 + .../search/src/reference.rs | 419 + .../search/src/research/abc_dont_care.rs | 227 + .../search/src/research/adapters.rs | 130 + .../search/src/research/bdd.rs | 327 + .../search/src/research/evolution.rs | 551 + .../search/src/research/learner.rs | 83 + .../search/src/research/memory.rs | 156 + .../search/src/research/mod.rs | 40 + .../search/src/research/process.rs | 443 + .../search/src/research/projection.rs | 106 + .../search/src/research/rss.rs | 31 + .../search/src/research/runner.rs | 285 + .../search/src/research/sampling.rs | 44 + .../search/src/research/sat_cegis.rs | 149 + .../search/src/research/tasks.rs | 208 + .../search/src/research/trial.rs | 158 + .../rewrite-it-in-rust/search/src/scalar.rs | 127 + .../search/src/synthesis/certificate.rs | 72 + .../search/src/synthesis/cnf.rs | 372 + .../search/src/synthesis/mod.rs | 10 + .../search/src/synthesis/problem.rs | 297 + .../search/src/synthesis/solver.rs | 578 + .../search/tests/release_artifacts.rs | 92 + .../challenge-71-occam/src/benchmark.rs | 447 + .../challenge-71-occam/src/bin/tool_audit.rs | 547 + .../challenge-71-occam/src/circuit.rs | 63 + .../challenge-71-occam/src/compiled.rs | 280 + .../challenge-71-occam/src/dataset.rs | 146 + .../challenge-71-occam/src/dataset_scan.rs | 133 + .../challenge-71-occam/src/error.rs | 48 + .../challenge-71-occam/src/expression/ast.rs | 134 + .../src/expression/canonical.rs | 123 + .../src/expression/compile.rs | 286 + .../src/expression/enumerate.rs | 408 + .../src/expression/evaluate.rs | 110 + .../challenge-71-occam/src/expression/mod.rs | 16 + .../src/expression/parse.rs | 189 + .../src/expression/report.rs | 95 + .../challenge-71-occam/src/generate.rs | 184 + .../challenge-71-occam/src/learning/family.rs | 152 + .../challenge-71-occam/src/learning/inputs.rs | 213 + .../src/learning/learner.rs | 173 + .../challenge-71-occam/src/learning/mdl.rs | 183 + .../challenge-71-occam/src/learning/mod.rs | 20 + .../src/learning/prediction.rs | 88 + .../challenge-71-occam/src/learning/report.rs | 465 + .../challenge-71-occam/src/lib.rs | 82 + .../challenge-71-occam/src/limits.rs | 88 + .../challenge-71-occam/src/logic/abc.rs | 576 + .../challenge-71-occam/src/logic/blif.rs | 83 + .../challenge-71-occam/src/logic/library.rs | 23 + .../challenge-71-occam/src/logic/mapped.rs | 522 + .../challenge-71-occam/src/logic/mod.rs | 14 + .../challenge-71-occam/src/logic/report.rs | 139 + .../challenge-71-occam/src/main.rs | 865 + .../challenge-71-occam/src/metrics.rs | 150 + .../challenge-71-occam/src/netlist.rs | 334 + .../src/optimization/equivalence.rs | 90 + .../src/optimization/mod.rs | 13 + .../src/optimization/peephole.rs | 275 + .../src/optimization/report.rs | 61 + .../src/optimization/rewrite.rs | 133 + .../src/optimization/window.rs | 333 + .../challenge-71-occam/src/optimize.rs | 334 + .../challenge-71-occam/src/packed.rs | 530 + .../challenge-71-occam/src/reference.rs | 419 + .../src/research/abc_dont_care.rs | 227 + .../src/research/adapters.rs | 130 + .../challenge-71-occam/src/research/bdd.rs | 327 + .../src/research/evolution.rs | 551 + .../src/research/learner.rs | 83 + .../challenge-71-occam/src/research/memory.rs | 156 + .../challenge-71-occam/src/research/mod.rs | 40 + .../src/research/process.rs | 443 + .../src/research/projection.rs | 106 + .../challenge-71-occam/src/research/rss.rs | 31 + .../challenge-71-occam/src/research/runner.rs | 285 + .../src/research/sampling.rs | 44 + .../src/research/sat_cegis.rs | 149 + .../challenge-71-occam/src/research/tasks.rs | 208 + .../challenge-71-occam/src/research/trial.rs | 158 + .../challenge-71-occam/src/scalar.rs | 127 + .../src/synthesis/certificate.rs | 72 + .../challenge-71-occam/src/synthesis/cnf.rs | 372 + .../challenge-71-occam/src/synthesis/mod.rs | 10 + .../src/synthesis/problem.rs | 297 + .../src/synthesis/solver.rs | 578 + .../challenge-71-occam/tests/abc_lock.rs | 99 + .../tests/abc_optimization.rs | 110 + .../challenge-71-occam/tests/benchmark_cli.rs | 74 + .../tests/blif_roundtrip.rs | 159 + .../challenge-71-occam/tests/cli.rs | 108 + .../challenge-71-occam/tests/common/mod.rs | 102 + .../tests/compiled_differential.rs | 35 + .../tests/direct_packed_parse.rs | 142 + .../tests/expression_compiler.rs | 124 + .../tests/fixtures/add-n2.csv | 17 + .../tests/fixtures/add-n2.txt | 10 + .../tests/fixtures/half-adder.csv | 5 + .../tests/fixtures/mdl-tasks.json | 18 + .../tests/fixtures/redundant-xor.txt | 7 + .../tests/fixtures/window-shared.txt | 11 + .../challenge-71-occam/tests/learning.rs | 402 + .../challenge-71-occam/tests/learning_cli.rs | 151 + .../challenge-71-occam/tests/mdl_cli.rs | 150 + .../tests/mdl_enumerator.rs | 136 + .../tests/mdl_expression.rs | 247 + .../challenge-71-occam/tests/mdl_learning.rs | 147 + .../challenge-71-occam/tests/mdl_official.rs | 69 + .../challenge-71-occam/tests/mdl_synthetic.rs | 202 + .../tests/official_compat.rs | 39 + .../tests/optimized_artifacts.rs | 106 + .../tests/oracle_manifest.rs | 27 + .../tests/packed_differential.rs | 102 + .../challenge-71-occam/tests/packed_layout.rs | 74 + .../tests/peephole_optimization.rs | 86 + .../challenge-71-occam/tests/properties.rs | 210 + .../tests/release_version.rs | 36 + .../tests/report_consistency.rs | 49 + .../tests/research_artifacts.rs | 210 + .../tests/research_circuit_learners.rs | 107 + .../tests/research_evolution.rs | 54 + .../tests/research_learners.rs | 29 + .../tests/research_logic_baselines.rs | 155 + .../tests/research_projection.rs | 76 + .../tests/research_protocol.rs | 57 + .../tests/research_runner.rs | 93 + .../tests/research_tasks.rs | 34 + .../tests/research_v2_artifacts.rs | 150 + .../challenge-71-occam/tests/sat_synthesis.rs | 117 + .../tests/solution_artifacts.rs | 238 + .../tests/submission_snapshot.rs | 34 + .../challenge-71-occam/tests/synthesis_cli.rs | 116 + .../challenge-71-occam/tests/tool_audit.rs | 110 + .../tests/window_extraction.rs | 52 + .../public-source/docs/challenge-115-brief.md | 26 + .../public-source/docs/gap-report.md | 49 + .../public-source/docs/oracle-results.md | 68 + .../public-source/docs/port-plan.md | 35 + .../public-source/docs/releases/v0.5.0.md | 167 + .../public-source/docs/synthesis/README.md | 92 + .../synthesis/half-adder-certificate.json | 49 + .../docs/synthesis/half-adder.txt | 4 + .../synthesis/two-bit-adder-certificate.json | 75 + .../occam-generalization/tasks.json | 21 + .../public-source/fuzz/Cargo.lock | 789 + .../public-source/fuzz/Cargo.toml | 64 + .../fuzz/corpus/dataset/invalid-fields | 2 + .../fuzz/corpus/dataset/valid-basic | 5 + .../fuzz/corpus/netlist/all-ops-inversion | 8 + .../fuzz/corpus/netlist/invalid-forward-wire | 3 + .../fuzz/corpus/packed_dataset/invalid-width | 3 + .../packed_dataset/valid-boundary-small | 6 + .../fuzz/corpus/parse_evaluate/valid-inverted | 10 + .../fuzz/corpus/parse_evaluate/valid-xor | 10 + .../fuzz/fuzz_targets/dataset.rs | 18 + .../fuzz/fuzz_targets/learner.rs | 35 + .../fuzz/fuzz_targets/mapped_blif.rs | 19 + .../fuzz/fuzz_targets/netlist.rs | 15 + .../fuzz/fuzz_targets/packed_dataset.rs | 24 + .../fuzz/fuzz_targets/parse_evaluate.rs | 39 + .../fuzz/fuzz_targets/test_inputs.rs | 10 + .../scripts/audit-external-logic-tools.sh | 38 + .../public-source/scripts/audit-occam-v030.sh | 180 + .../public-source/scripts/audit-occam-v050.sh | 230 + .../scripts/build-release-evidence | 80 + .../public-source/scripts/fetch-abc.sh | 121 + .../public-source/scripts/fetch-occam-data.sh | 25 + .../scripts/learn-occam71-mdl.sh | 62 + .../public-source/scripts/optimize-occam71.sh | 106 + .../scripts/render-benchmark-report | 307 + .../scripts/render-ingestion-report | 185 + .../scripts/render-occam-research | 347 + .../scripts/render-oracle-report | 178 + .../scripts/root-occam-research-evidence | 165 + .../public-source/scripts/run-benchmarks.sh | 104 + .../scripts/run-ingestion-benchmarks.sh | 111 + .../scripts/run-occam-experiments.sh | 47 + .../scripts/run-portable-benchmarks.sh | 98 + .../public-source/scripts/solve-occam71.sh | 57 + .../scripts/summarize-process-results | 79 + .../update-occam71-submission-snapshot | 126 + .../public-source/scripts/verify-occam71.jl | 52 + .../public-source/scripts/verify-oracles.jl | 239 + .../public-source/scripts/verify-oracles.sh | 9 + .../scripts/verify-synthesis-evidence.sh | 39 + .../public-source/tests/oracles/occam-v1.json | 48 + .../public-source/tools/abc/LICENSE.url | 1 + .../public-source/tools/abc/LOCK.json | 9 + .../public-source/tools/abc/occam.genlib | 10 + 308 files changed, 109053 insertions(+), 22 deletions(-) create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/.gitignore create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/CHANGELOG.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.lock create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.toml create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/LICENSE create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/README.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/SOURCE-MANIFEST.sha256 create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/README.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-compiled.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-compiled.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-compiled.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-compiled.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-100000.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-1000000.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-100000.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-1000000.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/process.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed-reference.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed-reference.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed-reference.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed-reference.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/protocols/apple-m4.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/Cargo.toml create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/proptest-regressions/properties.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/README.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-A.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-B.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-C.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-D.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/manifest.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-A.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-B.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-C.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-D.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/baseline.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-A.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-B.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-C.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-D.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-A/test_outputs.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-B/test_outputs.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-C/test_outputs.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-D/test_outputs.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-A.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-B.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-C.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-D.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/config.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/environment.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/description-vs-gates.svg create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/fraction-vs-recovery.svg create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/gates-vs-accuracy.svg create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/manifest.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/tasks.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/.gitignore create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/conversion-manifest.json create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/benchmark.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/bin/tool_audit.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/circuit.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/compiled.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset_scan.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/error.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/ast.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/canonical.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/compile.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/enumerate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/evaluate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/parse.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/generate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/family.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/inputs.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/learner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mdl.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/prediction.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/lib.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/limits.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/abc.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/blif.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/library.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mapped.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/main.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/metrics.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/netlist.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/equivalence.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/peephole.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/rewrite.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/window.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimize.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/packed.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/reference.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/abc_dont_care.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/adapters.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/bdd.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/evolution.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/learner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/memory.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/process.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/projection.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/rss.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/runner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sampling.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sat_cegis.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/tasks.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/trial.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/scalar.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/certificate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/cnf.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/problem.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/solver.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/tests/release_artifacts.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/benchmark.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/bin/tool_audit.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/circuit.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/compiled.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset_scan.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/error.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/ast.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/canonical.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/compile.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/enumerate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/evaluate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/parse.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/generate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/family.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/inputs.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/learner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mdl.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/prediction.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/lib.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/limits.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/abc.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/blif.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/library.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mapped.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/main.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/metrics.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/netlist.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/equivalence.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/peephole.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/report.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/rewrite.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/window.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimize.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/packed.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/reference.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/abc_dont_care.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/adapters.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/bdd.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/evolution.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/learner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/memory.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/process.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/projection.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/rss.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/runner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sampling.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sat_cegis.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/tasks.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/trial.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/scalar.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/certificate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/cnf.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/problem.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/solver.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_lock.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_optimization.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/benchmark_cli.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/blif_roundtrip.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/cli.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/common/mod.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/compiled_differential.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/direct_packed_parse.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/expression_compiler.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/half-adder.csv create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/mdl-tasks.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/redundant-xor.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/window-shared.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning_cli.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_cli.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_enumerator.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_expression.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_learning.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_official.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_synthetic.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/official_compat.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/optimized_artifacts.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/oracle_manifest.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_differential.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_layout.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/peephole_optimization.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/properties.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/release_version.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/report_consistency.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_artifacts.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_circuit_learners.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_evolution.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_learners.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_logic_baselines.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_projection.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_protocol.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_runner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_tasks.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_v2_artifacts.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/sat_synthesis.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/solution_artifacts.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/submission_snapshot.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/synthesis_cli.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/tool_audit.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/window_extraction.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/challenge-115-brief.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/gap-report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/oracle-results.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/port-plan.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/releases/v0.5.0.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/README.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder-certificate.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder.txt create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/two-bit-adder-certificate.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/experiments/occam-generalization/tasks.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.lock create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.toml create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/invalid-fields create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/valid-basic create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/all-ops-inversion create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/invalid-forward-wire create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/invalid-width create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/valid-boundary-small create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-inverted create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-xor create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/dataset.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/learner.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/mapped_blif.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/netlist.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/packed_dataset.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/parse_evaluate.rs create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/test_inputs.rs create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-external-logic-tools.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v030.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v050.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/build-release-evidence create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-abc.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-occam-data.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/learn-occam71-mdl.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/optimize-occam71.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-benchmark-report create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-ingestion-report create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-occam-research create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-oracle-report create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/root-occam-research-evidence create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-benchmarks.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-ingestion-benchmarks.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-occam-experiments.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-portable-benchmarks.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/solve-occam71.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/summarize-process-results create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/update-occam71-submission-snapshot create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-occam71.jl create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.jl create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.sh create mode 100755 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-synthesis-evidence.sh create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tests/oracles/occam-v1.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LICENSE.url create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LOCK.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/occam.genlib diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md index a96096893..3051d95ba 100644 --- a/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/README.md @@ -1,32 +1,98 @@ +# Issue #115 — Public Rust Occam Verifier Port + ## Team -| | | +| Field | Value | |---|---| -| **Team name** | Ranger | -| **Members** | Chenxi Wan, Yedi Shen, Junkai Wang | +| Team | Wander (漫步者) | +| Members | Chenxi Wan, Yedi Shen, Junkai Wang | +| Track | `agent-kb` | +| Source challenge | #71 Occam's Circuit | -## Challenge +## Public review status -| Row | | -|---|---| -| **Challenge** | Port the Occam's Circuit verifier workflow to Rust: reuse the #71 Julia data and verifier as an oracle, implement a Rust netlist parser/evaluator, add bit-parallel verification, and report correctness/runtime gaps. | -| **Catalog issue** | Addresses #115 — "Port any challenge of this school to Rust", released by Hiroshi Shinaoka. The source challenge for the port is #71, "Occam's Circuit". | -| **Track** | `agent-kb`, chosen by the team because #115 is an agentic migration and Rust-ecosystem case study with `Method` field `Other`. | +This PR now contains the complete, self-contained Rust source-and-evidence +snapshot for the #115 port. Review no longer depends on access to a private +companion repository or Release. + +The snapshot was exported from the audited `v0.5.0` implementation commit +`e9120224fe0b1f45ed309ad6b40bf7c9c381af38`. It contains the Rust crate, +locked dependencies, tests, fuzz targets, benchmark records, Julia oracle +scripts, migration reports, bounded-synthesis evidence, and an AGPL-3.0 +license under [`public-source/`](public-source/). + +## What #115 implements + +- a strict parser for the official CSV and gate-netlist formats; +- all six fan-in-two gate operations with free input inversion; +- scalar, sample-packed, compiled, and cross-check evaluators; +- gate count, exact-match accuracy, and bit accuracy; +- deterministic reference-circuit and benchmark generation; +- Julia/Rust differential checks; +- resource limits, property tests, malformed-input tests, and fuzz targets; +- pinned logic-tool provenance and reproducible benchmark records; +- bounded exact SAT synthesis with independent extracted-circuit verification. + +## Clean-checkout reproduction + +From the root of a checkout of this PR branch: + +```bash +cd tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source +cargo fmt --all --check +cargo test -p occam71_rust --lib --locked +cargo clippy --workspace --all-targets --locked -- -D warnings +``` + +The most relevant verifier checks can also be run directly: + +```bash +cargo test -p occam71_rust \ + --test cli \ + --test compiled_differential \ + --test direct_packed_parse \ + --test official_compat \ + --test packed_differential \ + --test packed_layout \ + --test properties \ + --test sat_synthesis \ + --locked +``` + +Fetch the official #71 data and run the cross-language oracle checks with: + +```bash +./scripts/fetch-occam-data.sh +./scripts/verify-oracles.sh +``` + +The dataset downloader verifies the organizer-published SHA-256 before +installing files under the ignored `vendor/occam-circuit/` directory. + +## Evidence map -## Scope Note +- [`public-source/README.md`](public-source/README.md) — CLI usage and detailed + implementation map. +- [`public-source/docs/oracle-results.md`](public-source/docs/oracle-results.md) + — Julia/Rust compatibility results. +- [`public-source/docs/gap-report.md`](public-source/docs/gap-report.md) — + migration differences and explicit proof boundary. +- [`public-source/benchmarks/results/`](public-source/benchmarks/results/) — raw + Apple M4 and Linux x86-64 benchmark evidence. +- [`public-source/docs/synthesis/`](public-source/docs/synthesis/) — bounded SAT + examples and their limitations. +- [`public-source/SOURCE-MANIFEST.sha256`](public-source/SOURCE-MANIFEST.sha256) + — hashes for every published snapshot file. -**Status: Completed — v0.5.0 (July 28, 2026).** +## Scope boundary -The completed #115 migration now includes the bit-exact Rust verifier, -bit-parallel and compiled evaluation backends, deterministic benchmark and -evidence pipelines, pinned ABC/Yosys/Espresso provenance, bounded fuzzing, and -the measured, auditable Occam generalization study. The companion #71 solution -is submitted in [PR #220](https://github.com/QuantumBFS/quantum.harness/pull/220). +This PR proves that the #71 verifier workflow was ported to Rust and is +publicly reproducible. It does not claim that the four large #71 circuits are +globally minimal, and its internal SAT/UNSAT status records are not DRAT/LRAT +proof objects. The public forward challenge submission remains PR #220; the +later inverse-relation certified-optimum work is a separate follow-up. -## Working Repository +## License -The completed implementation is maintained in the private AGPL-3.0 repository -`JunkaiWang-TheoPhy/quantum-harness-115-occam-rust-port`. The #71 implementation -line lives under the `challenge-71-occam/` subfolder. The audited v0.5.0 source -commit is `e9120224fe0b1f45ed309ad6b40bf7c9c381af38`; private CI and Release -links are available to authorized reviewers. +The public snapshot is licensed under the GNU Affero General Public License +v3.0; see [`public-source/LICENSE`](public-source/LICENSE). diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/.gitignore b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/.gitignore new file mode 100644 index 000000000..c7936b2ab --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/.gitignore @@ -0,0 +1,7 @@ +/target/ +/fuzz/target/ +/vendor/ +/benchmarks/generated/ +/benchmarks/results/raw/ +__pycache__/ +*.pyc diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/CHANGELOG.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/CHANGELOG.md new file mode 100644 index 000000000..ed4d0753d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/CHANGELOG.md @@ -0,0 +1,65 @@ +# Changelog + +All notable releases of the implementation lineage are documented here. The +stable #115 v0.5.0 source is also published as a self-contained PR snapshot. + +## [0.5.0] - 2026-07-28 + +### Added + +- Genuine partial-PLA ABC, ROBDD, bounded SAT/CEGIS, seeded + grammar-evolution, and explicit memorization research learners. +- One isolated child process per trial with positive wall-clock runtime and + peak-RSS measurements. +- A deterministic, host-independent semantic projection linked one-to-one + with the measured trial records. +- A complete measured study with 16 tasks, 8 fractions, 20 seeds, and 8 + methods: 20,480 total trials. +- Independent, provenance-locked Yosys, Yosys-ABC, and CHIPS Alliance + Espresso audits whose outputs are reparsed and evaluated in Rust. +- Linux CI gates for full semantic reproduction and positive performance + measurements. +- A standalone source snapshot containing the complete research + implementation. + +### Changed + +- The Rust package and CLI version are now `0.5.0`. +- Runtime and RSS aggregates now use real successful-child measurements + instead of deterministic zero placeholders. +- The research conclusion is restricted to grammar alignment on the declared + tasks, grammar, completion rules, and search bounds. +- ABC output hashing records and removes only its volatile timestamp banner + before hashing; the logic body remains unchanged. + +### Preserved + +- The four #71 solutions and organizer commitment hashes. +- Final gate counts `37`, `50`, `167`, and `186`. +- The immutable `v0.3.0` tag, original matrix, figures, report, and release + assets. +- The checksum-pinned ABC optimization and Rust/Julia/full-domain evidence + chain. + +`v0.4.0` was a working candidate name for Scheme A and was superseded before +any tag or Release was created. + +## [0.3.0] - 2026-07-28 + +- Added generic MDL recovery for all four official #71 tasks. +- Reduced verified official circuits to `37`, `50`, `167`, and `186` gates. +- Added the original deterministic 20,480-trial generalization matrix. +- Published the hash-locked source-and-evidence release lineage. + +## [0.2.0] - 2026-07-28 + +- Completed all four #71 hidden-function instances. +- Matched every frozen prediction commitment. +- Added deterministic solution generation and exhaustive-domain validation. + +## [0.1.0] - 2026-07-28 + +- Delivered the audited #115 migration from the Julia verification workflow + to Rust. +- Added scalar, packed, and cross-check verification backends. +- Added reproducible benchmarks, Oracle comparisons, CI, and fuzz targets. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.lock b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.lock new file mode 100644 index 000000000..bbbc53aae --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.lock @@ -0,0 +1,874 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clap" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "leb128" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "occam71_rust" +version = "0.5.0" +dependencies = [ + "clap", + "libc", + "proptest", + "rand", + "rand_chacha", + "serde", + "serde_json", + "sha2", + "thiserror 2.0.19", + "varisat", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "partial_ref" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f728bc9b1479656e40cba507034904a8c44027c0efdbbaf6a4bdc5f2d3a910c" +dependencies = [ + "partial_ref_derive", +] + +[[package]] +name = "partial_ref_derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e1d2cb5b898b5a5342e994e0d0c367dbfe69cbf717cd307045ec9fb057581" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa 1.0.18", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl 2.0.19", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "varisat" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe609851d1e9196674ac295f656bd8601200a1077343d22b345013497807caf" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "leb128", + "log", + "ordered-float", + "partial_ref", + "rustc-hash", + "serde", + "thiserror 1.0.69", + "varisat-checker", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-macros", + "varisat-internal-proof", + "vec_mut_scan", +] + +[[package]] +name = "varisat-checker" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135c977c5913ed6e98f6b81b8e4d322211303b7d40dae773caef7ad1de6c763b" +dependencies = [ + "anyhow", + "log", + "partial_ref", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-proof", +] + +[[package]] +name = "varisat-dimacs" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1dee4e21be1f04c0a939f7ae710cced47233a578de08a1b3c7d50848402636" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "thiserror 1.0.69", + "varisat-formula", +] + +[[package]] +name = "varisat-formula" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395c5543b9bfd9076d6d3af49d6c34a4b91b0b355998c0a5ec6ed7265d364520" + +[[package]] +name = "varisat-internal-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602ece773543d066aa7848455486c6c0422a3f214da7a2b899100f3c4f12408d" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "varisat-internal-proof" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6163bb7bc9018af077b76d64f976803d141c36a27d640f1437dddc4fd527d207" +dependencies = [ + "anyhow", + "varisat-formula", +] + +[[package]] +name = "vec_mut_scan" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ed610a8d5e63d9c0e31300e8fdb55104c5f21e422743a9dc74848fa8317fd2" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zerocopy" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.toml b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.toml new file mode 100644 index 000000000..40c512424 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/Cargo.toml @@ -0,0 +1,3 @@ +[workspace] +members = ["challenge-71-occam"] +resolver = "2" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/LICENSE b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/LICENSE new file mode 100644 index 000000000..0ad25db4b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/README.md new file mode 100644 index 000000000..505787622 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/README.md @@ -0,0 +1,108 @@ +# Public v0.5.0 Occam Rust Port Snapshot + +This directory is a self-contained public export of implementation commit +`e9120224fe0b1f45ed309ad6b40bf7c9c381af38` for Quantum Harness issue #115. +It is intentionally frozen before the separate inverse-relation extension. + +## Layout + +- `challenge-71-occam/src/` — parser, scalar/packed/compiled evaluators, + verifier, circuit generators, learning code, optimizer, and bounded SAT + synthesis. +- `challenge-71-occam/tests/` — CLI, property, differential, artifact, and + synthesis tests. +- `fuzz/` — isolated cargo-fuzz package and seed corpus. +- `benchmarks/` — protocols, raw JSON records, and rendered reports. +- `scripts/verify-oracles.sh` — Rust/Julia oracle compatibility check. +- `docs/oracle-results.md` — recorded oracle results. +- `docs/gap-report.md` — migration gaps and formal-proof limitations. +- `docs/synthesis/` — small exact-synthesis examples. +- `SOURCE-MANIFEST.sha256` — hash manifest for the public snapshot. + +## Build and test + +Rust stable is sufficient for the main workspace: + +```bash +cargo fmt --all --check +cargo test -p occam71_rust --lib --locked +cargo clippy --workspace --all-targets --locked -- -D warnings +``` + +Run the core differential suite: + +```bash +cargo test -p occam71_rust \ + --test cli \ + --test compiled_differential \ + --test direct_packed_parse \ + --test official_compat \ + --test packed_differential \ + --test packed_layout \ + --test properties \ + --test sat_synthesis \ + --locked +``` + +## Official data and cross-language verification + +```bash +./scripts/fetch-occam-data.sh +./scripts/verify-oracles.sh +``` + +The fetch script downloads the organizer release and checks SHA-256 +`c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b` +before extraction. Julia is needed only for the cross-language oracle command. + +Verify an official circuit with all Rust backends: + +```bash +cargo run --release -p occam71_rust -- verify \ + --backend cross-check \ + --circuit vendor/occam-circuit/adder8.txt \ + --dataset vendor/occam-circuit/datasets/mystery-A/train.csv +``` + +`cross-check` evaluates through the scalar and packed paths and rejects any +disagreement. `--backend scalar` and `--backend packed` are also available. + +## Benchmarks + +Correctness preflight: + +```bash +./scripts/run-benchmarks.sh --verify-only +``` + +Full Julia/Rust benchmark: + +```bash +./scripts/run-benchmarks.sh +``` + +Recorded Apple M4 results are in +`benchmarks/results/2026-07-28-apple-m4.md`; independently executed Linux +x86-64 records are in `benchmarks/results/linux-x86-runner/`. + +## Fuzzing + +With nightly Rust and `cargo-fuzz` installed: + +```bash +cargo fuzz check --fuzz-dir fuzz +cargo fuzz run --fuzz-dir fuzz parse_evaluate -- -max_total_time=30 +``` + +## Exact-synthesis boundary + +The checked-in half-adder example records UNSAT at gate bounds 0 and 1, SAT +at bound 2, and independent exhaustive verification of the extracted circuit. +This is solver-backed development evidence within the implemented encoding. +It is not a machine-checkable minimality theorem because no DRAT/LRAT proof +object is emitted or checked. See `docs/synthesis/README.md` and +`docs/gap-report.md`. + +## License + +GNU Affero General Public License v3.0; see `LICENSE`. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/SOURCE-MANIFEST.sha256 b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/SOURCE-MANIFEST.sha256 new file mode 100644 index 000000000..34cdf8ea8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/SOURCE-MANIFEST.sha256 @@ -0,0 +1,326 @@ +a54327533e1e5173920db3136c302e1c8ffe3c854cdfa6d10d7b80d4daec5dd2 ./.gitignore +e193a3c564a17dfebe1bea9151bc2d352cdb1521236f30fed5028c0b41ada540 ./CHANGELOG.md +9ddd82e73623e058c22261ce6331b267035cb00fe1fa68857542829a89d84d98 ./Cargo.lock +cceb9317ade9293ad2a10ae0cd937901308b1525979602a842f1c6cc926a4722 ./Cargo.toml +8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef ./LICENSE +5e4ed3f940637158eca3f5f8390628758bf3cb24516fe78d5ee3ff6bcf744ca4 ./README.md +d954d75076675e2f5759ba84d626f9509d3582afca74b979d1b49cb3065655be ./benchmarks/README.md +24f58059c3b7ca0c1fc53005b2352bd8bfba00ab78e1263c812839af06118fa1 ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-compiled.json +7b27c6b9a54329766e190ff479e4b942af547233641bdc84fd8c0df3cc06fdd2 ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-packed.json +dffd051ec4efdc8e253d17e9d218adf5f54a5035d319c21be9adbd061416a381 ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-compiled.json +623d5674b7bb5f5d0d222e322fde4b823eb63a0b8fd586289915335c3abfa64e ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-packed.json +86f6f89d4f2d5ccad627b7bdf377aa1719e1b96912092213006e878b3a2fba98 ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-compiled.json +7c36b214b91853500ea449b60bbbdde369f271682baf8dc2a1ce3f80fefd176f ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-packed.json +12c42e5f025329be320fc9b317f808f9540fa874d02b881b57c03f359c341b0f ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-compiled.json +ef897cf2dd1433b4f45c0439521286c800df09376d7ef85a3d309dd8fc4a6fcc ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-packed.json +fef8dad8ae2b83aee744700e8d04013ff4cf4460dbb4629af4cd347fc0e7e676 ./benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/report.md +106adc4e22312416d60e817e5ca0e590a8f5227a1cfaa563c326ed0f2103d03b ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-100000.json +f2e5268b88c4cd6613312175c73bd92248d6f2f09b5f2d1c516548f64411d84e ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-1000000.json +4b5c471f4bb11f3aa7a18abb91038a613172740517f517230cbbd3029e850185 ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-100000.json +a58e799fa1ac91b87e247bb6befd03d08a3fa25dbe6061385fa7b573bed9bde9 ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-1000000.json +1f22378745ddf1bad6c38c100904a8c4edfcf18560efcfa2aa6b55e6c4ed6cac ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/process.json +bc51e3d9eb45718f8e34a1188d2eefa33ca679bd2048ac117ab5f4fe105bc18d ./benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md +b9414422ee1c15fd8e3a7bbb8197042491918d04800ae26108988d896ba36260 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed-reference.json +2ca8ac274bb5a8d36eebbe9fa92364e49891d683af7842a76122a04ca9fe25c1 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed.json +b8320b433a51f415b07f345e8765da58ab8016899b494272164c5e821dd5cd98 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed-reference.json +910cbc6863b7b25f8a0666cbace7fdb14d7343d42cad898f075b95c6893b2c17 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed.json +e3311cd38b63c71086975a2b2839e8c6b0abba7ed39dc56256f938f5f05a59ae ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed-reference.json +68bee3170862bc26f61f10dbd92aeb86618d6ebce79131b2fbc8a667a21c7dd9 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed.json +e86e6561f7cf15935db93f606115eafbe1c7cf987277373649e5640a537a6d83 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed-reference.json +776798ec888d183db9698af983f72f4031f2a867759757fc84c1c398203c95f5 ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed.json +06473bd23f876eb7d0062b6cd8d7870d8ef32b073c3bfd76de89bf683ffed05d ./benchmarks/experiments/2026-07-28-flat-wire-apple-m4/report.md +f2514b72db9c2c6e2e194c9ab2b9adfdf4261f2a26f23afe91f973343af00958 ./benchmarks/protocols/apple-m4.json +cb59fff5b4090aac7c283bc944ba3b0eb3f57ca142ff77938e8d5ebf87a5e5f5 ./benchmarks/results/2026-07-28-apple-m4.md +36ba64519ac05c581ebd36b3888f619a516f86d7901c26ca50f397c3c15790e7 ./benchmarks/results/add-16-100000-packed.json +5b0394df6c15912ff93378723e02e9d936393aaa4743cced40f79d1c0561ed1d ./benchmarks/results/add-16-100000-scalar.json +d752b48f4a67bbd91c8a26cde4f93db27916e66b0f94465570f22d20818f0b93 ./benchmarks/results/add-8-100000-packed.json +6626cdbc39bf07b07357a98e28979f823f79b63fd029c0b0608f35e1082a8abe ./benchmarks/results/add-8-100000-scalar.json +82b9d3dbc3593da0359e1adcf4f48a1eb6b6af015af2e3b4c1a9ba4399a63e6d ./benchmarks/results/apple-m4-process.json +24d717f448c96f177ac74abe6647270436e5bb66df3576807df5aacd73847dc5 ./benchmarks/results/linux-x86-runner/add-16-100000-packed.json +8d61a1ca4b1348ba57cbdb01cc3dbe303a2a090c8287e26769bd71f8c8d64cf2 ./benchmarks/results/linux-x86-runner/add-16-100000-scalar.json +3a0303b43c0a687cba5a694629847f7b55bcb85f544f36e23170f5be6fafd69d ./benchmarks/results/linux-x86-runner/add-8-100000-packed.json +554e87e1f21d1d554be059af97990f5e680264e075903921bd07ebc4a3485b10 ./benchmarks/results/linux-x86-runner/add-8-100000-scalar.json +4740bfcd575e8e5b23b5b469603f7d599f50f291515bb8534ba3f45836238268 ./benchmarks/results/linux-x86-runner/mul-4-100000-packed.json +72ca0ed188f5303ba0d26fa49e837f642cfe9214bd10c582d20d95ede9a4aba7 ./benchmarks/results/linux-x86-runner/mul-4-100000-scalar.json +d41c4ece633408e1ee05bf6d69ee212c68eca84b1f0f2c6b4bc57b1e31e2e20b ./benchmarks/results/linux-x86-runner/official-add-8-packed.json +9389fb08a8e576d917df4170d9e7549463e3c69aace967e21a41f34dbaaf2c2b ./benchmarks/results/linux-x86-runner/official-add-8-scalar.json +ef83607cbaea0a153befb1da87f9f7e7d53107328146cbc6e3cd9cef140e969f ./benchmarks/results/linux-x86-runner/protocol.json +73af596a7cba5b8a816a7516bc92e135f3ad102b7f25d24f9a0b796d34fc381c ./benchmarks/results/linux-x86-runner/report.md +1da59ae7470da0196a147bab8eae3504d8294b6a7756690061adb33c4e92eae5 ./benchmarks/results/mul-4-100000-packed.json +9d03bbc8614f2e45c82df0f8dafe120a945e5a1d00364cd6fb45047e5ca32544 ./benchmarks/results/mul-4-100000-scalar.json +3062f02a3166d611e8b655ae7137646fe8a41cccda85e126bf5dc4fc071e077f ./benchmarks/results/official-add-8-packed.json +07f98f59c918bdae993e19d44879e376b44e8797e62b6862d5f234a087db8f0f ./benchmarks/results/official-add-8-scalar.json +f00bad655e867765ce7285cf558d0cb7629fc948284c5285e62e8ea0854f9ab7 ./challenge-71-occam/Cargo.toml +2d09a1d5e034210e09e581759a121e8ff0e3c23b0f41a06e53014810e1f8be67 ./challenge-71-occam/proptest-regressions/properties.txt +cd62e1b6cb8d9fa8f0a88d008dc74fc87d09ea3ffad6b9ce1aa6dd9054448d6a ./challenge-71-occam/solutions/rewrite-it-in-rust/README.md +143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af ./challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-A.txt +6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90 ./challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-B.txt +f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78 ./challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-C.txt +1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206 ./challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-D.txt +66e0a1241a6867864d1fead356d366e92ea53b0d35a88b1e7134d697dc5ae890 ./challenge-71-occam/solutions/rewrite-it-in-rust/manifest.json +bc6e402e55544b2c3d3fc54a928e66e862f0671d560011e70fbea6ea02a5e0be ./challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-A.json +bbb478d0fde1d2fba17e990b90a9070c03b153d162a035bb202fb62ecea68b0d ./challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-B.json +ceb82c9af97328aaa329cf2f0473adf7cdb64ec1710a913de0cb4054338f5bf7 ./challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-C.json +52f158ed0b132ee955b9b36284c3e602067307c990cc3a2b8fb19d20d341cc42 ./challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-D.json +620b13c6ef9182eed52c0dcf158bb9f0dad479706e9cd2dc987d07079fdeb898 ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/baseline.json +3dae6d4d8eae7e87734ea3c5746be18c880d8690debab5fbcfe606f561c18d57 ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-A.json +90da49d7343b8ac26f8fbd5e51cf6fdb775d2aa269d037c90a4496f54e16a3cd ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-B.json +0d4ee05aa3abda2501587efb53dada7e933bcf77fb8d27417b3a73df672f94ee ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-C.json +6ebe2e1d59536847a6efd069617e178091599bac54f63455fb20d7173684cb04 ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-D.json +960484ba8cdfc51ecf2d42140b41dfbf8163178250951e461fcac590ae1d4788 ./challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json +51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7 ./challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-A/test_outputs.csv +e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28 ./challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-B/test_outputs.csv +c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d ./challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-C/test_outputs.csv +b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580 ./challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-D/test_outputs.csv +f7e1d995f57c461b310ef96eb3c0f3cacfd46edd3baba188d1bc78b1968f6744 ./challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-A.json +3062208898583ef422291f7c5fd2ca6b321836e4296e85f47483b2711b1ee968 ./challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-B.json +e88e97faceeec1bc2fa1a52bbc7eca185d64dbd966e790566c6a5a020383eacf ./challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-C.json +1585ab7796c5ef94ba04e6c8184563215863c71760aa905e3d283371433bbf9c ./challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-D.json +d8b5ad1183943a2f445169bf2487e8fc0103b4f78a65b44b198da83eb74047aa ./challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json +7ee693513505712cd773d7a01abfdd86896a544df50086a2828ca41cf7e22d04 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.csv +78c99e656fa325860741d30119d429f181a44e45b884c061581886412e6de1ec ./challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.json +3f0baed1eda5d86b5c03ea76074fe2882a5143ed6df177c1a3f6b1510112d14a ./challenge-71-occam/solutions/rewrite-it-in-rust/research/config.json +748e2bbb30b69426cbd298bf97f569a300789f3587637ff16b600d214fcb95f3 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/environment.json +cb1cfc2ee27085e4f833dbd00a86589ed95af6565ffb9c94bd115438e177ca94 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/description-vs-gates.svg +2e5de8a53cb2abd2754dd8a7e7d0c82b143efb04c3ed132a4432dbbe121f4b18 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/fraction-vs-recovery.svg +d65f85600e34fe9146f7e4efa61fd72ad36298914aee863a2d6b7849577a4017 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/gates-vs-accuracy.svg +3d31eb6a01fd5deb1c44b583267b29793b10cd24ff2a11295469e340e3acd042 ./challenge-71-occam/solutions/rewrite-it-in-rust/research/manifest.json +19a03bccb9245e5fbd033e839600064de3c4f0a113baf3e14f73d0346d9202fa ./challenge-71-occam/solutions/rewrite-it-in-rust/research/report.md +f0510a535870087e5dcbce5f617c20024412018b671871d782979a3ef17e3e5a ./challenge-71-occam/solutions/rewrite-it-in-rust/research/tasks.json +306fd52e74fca6746e12acc750f232de15e71da917756a1270d74c91f5eb7368 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/.gitignore +9ddd82e73623e058c22261ce6331b267035cb00fe1fa68857542829a89d84d98 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock +dae36b3252dd97a1daf081cd3bc3fa458a6c1979b48c7e5b0bf0fb23e1343f68 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml +dec908db716ecdd355b37a8bcf072af5ed9ad9b4c44a9f73feff3956be73ca72 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/conversion-manifest.json +24c47e7d67c462edeab840e2fa8d6b181d1d4751eabf8ffb32da168a31df0eb0 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh +d965668b2f7d458daaa4e588a58ffbce0f377caa3ca4a3a75ae21c2485772b4c ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/benchmark.rs +84fd08112c38d31641fc4f9b49bf4f6303ee02f4163eb0d76236cdfef694d2ec ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/bin/tool_audit.rs +2cbe783c0c8aeb7bb30ca56f96bb2ac5e86c8bab28c7a14233ebf514353dc66d ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/circuit.rs +bc5d144611fdc63060a5bb83d2fbc2707f7f478645c88523cea43ba5bd839ffd ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/compiled.rs +a1adb153a85c4d40792f17210d88f6b351872f6665c864019ea1fe7c8bc3dacb ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset.rs +124701ce5e809b77cb9d19d7353e85fe09ff08d936209620bc4c0893dab095bc ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset_scan.rs +ae56e8c02ec9d370bbed839cea492e629ed576859c9a611b63391daae5283035 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/error.rs +17053a852ed2bee7d00d66a4133ce761d0cbb66ea146d628dae764ab8d3f7e85 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/ast.rs +50cbebff7007862bd5cd6cf8e6c876638a31caf83f656ef8b96a3c621a5f5139 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/canonical.rs +ddc385e8c5991fa7aac66c3748a5bd7bde61b8c23caefb6445969bd21a164537 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/compile.rs +cd2a6834f61ebfb66d569d9acf7911ef9419b33838751cd6410422926437179a ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/enumerate.rs +f48c751e92395e6479c1cc9769e1f7bfec9c0a17a456baa1248d7a9ce39c0e5e ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/evaluate.rs +ddd92e2c186571da9587a4192a025a90006ef00c92f1b1150fb2ec8089413778 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/mod.rs +37839a0510c251da1df27df444f36b98021e0a3d70aafe2bab01785d2ddc143c ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/parse.rs +d7b6f915b6fa42b51f8679c9398c3ca1a6ee982b2f0abd0e3cbb7f7e79a8937f ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/report.rs +fa73f18c842ebbe0a8ca8c16249db8c100f0bf9e56f6c7948057d1597f086ae3 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/generate.rs +fb752cf4052c6251f54c863f3e91677f5f9339b1aa93c2ef117cdb28059224cf ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/family.rs +34aecf2619d72489f6f6b6b7fe86f292c5f09414621f95e9002a34bac92813d3 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/inputs.rs +9e4d9feea9e879173448a9c4ee06e273bf6269247b501aa6a329cded2547a15b ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/learner.rs +5be2da84057c370c083110e5b8af5d76f83e55d82bb5c59623c24736f93d1b68 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mdl.rs +7847b9767f638b4be28c402bfc59a1c593a9ea3632fc733e7ef72dc50307cdb9 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mod.rs +33be1a7de4cd9bc8996b5f902c7db4579cf82a3271cec1ed4cd1023bd21ec6cd ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/prediction.rs +818d3c33659115f95a04658c09052c0024a1669518c31f47b7275be26122f415 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/report.rs +677dfab8152c1d6131c783bdba5351aa88fd344714168d8d3aa625ea616b0347 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/lib.rs +24a4561f5d087ecbb7408382fb1e4df4b9ba415a570ec757158d3ee573e89d30 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/limits.rs +109e3d7305ae83e5f10ec3895070da5f93f18a97d6eaee446e0428be4320eefc ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/abc.rs +de5a4ae612ea3f22f91026f87ee8d7951cd3a7333147143ef34536b137362cc0 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/blif.rs +80528e0ccd5a0e8bdd79d4248bfd21156e286fd4ec9b0c822b0ab54dcd6801b6 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/library.rs +47b9e79c83b5ecd0c71b6a4fb8f95758218ce54c05ef7639d2fcafb9f274c09e ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mapped.rs +2e328c6ab8558a6d862f501c65ccd8f6bc62a00fa37d7a6ee1eb1f9be712f847 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mod.rs +3f6f4bf5262ddd25c8817180d264cb1173738e0922e2a0c85d80c43f078a4131 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/report.rs +f3282fa61641df9ee5d79bd7c7940fd38e380cbd76c4f9b023ac699c30f18efa ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/main.rs +b42852c6daddbe3de28f64f2b88f8ee2d61f922edd5e6caa67d2e892dca508e4 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/metrics.rs +d33a9d24b943ce3a5a6da90ed5cbd04e527f96cf8fa597395e9698bc666d8e4f ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/netlist.rs +98225dd5bd842b0e7f444dde828ae6ca8caa541fcbddee178e822df71e93e2e6 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/equivalence.rs +da5f3670763ffb97df72d9592c22aa61d9d4ef5a8389ebd244d29f773b168e63 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/mod.rs +b18bb4900607af9d94c8ef58a6399800d29e08dd35afe45e4ca47a78bcedbe69 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/peephole.rs +ee1bac46124715e95d3bc7a42a24e0554d279176e6b0d1eb0da304005a746ee1 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/report.rs +61dae64a0ff2b856c1d803cba89477aee779797c477b77167245419e448f3ff4 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/rewrite.rs +851d3bfd073a6aeec9e9a4f819528ada5ba52cf7e92b18d7ad851a018fd99906 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/window.rs +2c04f4e13af40747dc58256012e252e891c2abd71fc90c798972c85615b2d4f2 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimize.rs +142195bad7049ad597d7af9f25edc4ed4ed0b3ae557d8e86dca2436f38fd0e0e ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/packed.rs +cc6b881449265c079145e6ec4c539c75892d1d5ca3f3e320a313fef17eb70231 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/reference.rs +3605a0469553701fdf881957bd4e735d07da205fc38a5bb196a72765a3189901 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/abc_dont_care.rs +7bdc0d552c53188fbbe3e16c80b3deff59f2db7fbbf184f156238cc3532e7e06 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/adapters.rs +5fcc7b4092358e5eb9b42884ec563e7981f5809a61d97756326ea1b2253cd8f9 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/bdd.rs +170b37782f3128efa3eb601ff1631989293dd536639e5e23aebd9743d969c762 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/evolution.rs +5e279f6c9edb33c0331df969251b7279051b45e8ebd2634a4d6781dc04b1ee4e ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/learner.rs +842635886b3d4fb177e692ad158943a21db79ebf7a29928f9e3fb2325a2cfd95 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/memory.rs +904044f45ded68563ee059225d7475e96cb48befbd4475d5a3c0793abfdf81e9 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/mod.rs +1933aacf98017cd0ae23212a033455e137e05593d24e56746ff012f14d939ab6 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/process.rs +8bbf83d971ca21f021c19c8de4e0883def2f87203569e93be196d5ddbb0ffa6c ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/projection.rs +cadf1ea98898f84d643526d32252ce2eb885c7600b5fd08700b654d9f326fe19 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/rss.rs +3c8399b6441340ebc5fe660fd365e6950b8c5920cb3d1ee211116a68b536f7eb ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/runner.rs +4e5efce21174a3c5d6ffe89d83e66883378e1a915cab89d97f39158730cbe5b4 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sampling.rs +807ea94ddb40f4d6f544abd3f0a61db57fdcdef6fb95f9777bfcb91fb373f4a9 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sat_cegis.rs +931625569d9f294503242b1376084f77c0c360d2c2ebf9d54fdac75f907aa2d3 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/tasks.rs +42ab525b2c5115f03627e3f7476c5716704ec540ff13fc5016dac88d2728c185 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/trial.rs +e890d2796513e57788ffa4e89906afd3aba0b25e4f6fa0295880628d4f1f3475 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/scalar.rs +64b690c979c46d3c17e8a6c5d70806363046ff63ec1a7a23b89951d4284f08c5 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/certificate.rs +0e969a5f4175edc2daf778a288cd741afb1517a3615637d01f350d0bc35b0e30 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/cnf.rs +4e5838a54719eebdffd2cbc025986d862997333b6c487a8cfb2b1721f4b6c49b ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/mod.rs +e8a9e27638c53db27fd735ed1cea960dc12f35503afc8fce0cc84992765c36f6 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/problem.rs +791a36578d012d9150817f0bd8cd6edb12e6a005e6bded6bcb2dc803980a4c28 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/solver.rs +02157cad50a5d7babeb13c0090d9b44e39b6cac023079b75bd115d6500a09187 ./challenge-71-occam/solutions/rewrite-it-in-rust/search/tests/release_artifacts.rs +d965668b2f7d458daaa4e588a58ffbce0f377caa3ca4a3a75ae21c2485772b4c ./challenge-71-occam/src/benchmark.rs +84fd08112c38d31641fc4f9b49bf4f6303ee02f4163eb0d76236cdfef694d2ec ./challenge-71-occam/src/bin/tool_audit.rs +2cbe783c0c8aeb7bb30ca56f96bb2ac5e86c8bab28c7a14233ebf514353dc66d ./challenge-71-occam/src/circuit.rs +bc5d144611fdc63060a5bb83d2fbc2707f7f478645c88523cea43ba5bd839ffd ./challenge-71-occam/src/compiled.rs +a1adb153a85c4d40792f17210d88f6b351872f6665c864019ea1fe7c8bc3dacb ./challenge-71-occam/src/dataset.rs +124701ce5e809b77cb9d19d7353e85fe09ff08d936209620bc4c0893dab095bc ./challenge-71-occam/src/dataset_scan.rs +ae56e8c02ec9d370bbed839cea492e629ed576859c9a611b63391daae5283035 ./challenge-71-occam/src/error.rs +17053a852ed2bee7d00d66a4133ce761d0cbb66ea146d628dae764ab8d3f7e85 ./challenge-71-occam/src/expression/ast.rs +50cbebff7007862bd5cd6cf8e6c876638a31caf83f656ef8b96a3c621a5f5139 ./challenge-71-occam/src/expression/canonical.rs +ddc385e8c5991fa7aac66c3748a5bd7bde61b8c23caefb6445969bd21a164537 ./challenge-71-occam/src/expression/compile.rs +cd2a6834f61ebfb66d569d9acf7911ef9419b33838751cd6410422926437179a ./challenge-71-occam/src/expression/enumerate.rs +f48c751e92395e6479c1cc9769e1f7bfec9c0a17a456baa1248d7a9ce39c0e5e ./challenge-71-occam/src/expression/evaluate.rs +ddd92e2c186571da9587a4192a025a90006ef00c92f1b1150fb2ec8089413778 ./challenge-71-occam/src/expression/mod.rs +37839a0510c251da1df27df444f36b98021e0a3d70aafe2bab01785d2ddc143c ./challenge-71-occam/src/expression/parse.rs +d7b6f915b6fa42b51f8679c9398c3ca1a6ee982b2f0abd0e3cbb7f7e79a8937f ./challenge-71-occam/src/expression/report.rs +fa73f18c842ebbe0a8ca8c16249db8c100f0bf9e56f6c7948057d1597f086ae3 ./challenge-71-occam/src/generate.rs +fb752cf4052c6251f54c863f3e91677f5f9339b1aa93c2ef117cdb28059224cf ./challenge-71-occam/src/learning/family.rs +34aecf2619d72489f6f6b6b7fe86f292c5f09414621f95e9002a34bac92813d3 ./challenge-71-occam/src/learning/inputs.rs +9e4d9feea9e879173448a9c4ee06e273bf6269247b501aa6a329cded2547a15b ./challenge-71-occam/src/learning/learner.rs +5be2da84057c370c083110e5b8af5d76f83e55d82bb5c59623c24736f93d1b68 ./challenge-71-occam/src/learning/mdl.rs +7847b9767f638b4be28c402bfc59a1c593a9ea3632fc733e7ef72dc50307cdb9 ./challenge-71-occam/src/learning/mod.rs +33be1a7de4cd9bc8996b5f902c7db4579cf82a3271cec1ed4cd1023bd21ec6cd ./challenge-71-occam/src/learning/prediction.rs +818d3c33659115f95a04658c09052c0024a1669518c31f47b7275be26122f415 ./challenge-71-occam/src/learning/report.rs +677dfab8152c1d6131c783bdba5351aa88fd344714168d8d3aa625ea616b0347 ./challenge-71-occam/src/lib.rs +24a4561f5d087ecbb7408382fb1e4df4b9ba415a570ec757158d3ee573e89d30 ./challenge-71-occam/src/limits.rs +109e3d7305ae83e5f10ec3895070da5f93f18a97d6eaee446e0428be4320eefc ./challenge-71-occam/src/logic/abc.rs +de5a4ae612ea3f22f91026f87ee8d7951cd3a7333147143ef34536b137362cc0 ./challenge-71-occam/src/logic/blif.rs +80528e0ccd5a0e8bdd79d4248bfd21156e286fd4ec9b0c822b0ab54dcd6801b6 ./challenge-71-occam/src/logic/library.rs +47b9e79c83b5ecd0c71b6a4fb8f95758218ce54c05ef7639d2fcafb9f274c09e ./challenge-71-occam/src/logic/mapped.rs +2e328c6ab8558a6d862f501c65ccd8f6bc62a00fa37d7a6ee1eb1f9be712f847 ./challenge-71-occam/src/logic/mod.rs +3f6f4bf5262ddd25c8817180d264cb1173738e0922e2a0c85d80c43f078a4131 ./challenge-71-occam/src/logic/report.rs +f3282fa61641df9ee5d79bd7c7940fd38e380cbd76c4f9b023ac699c30f18efa ./challenge-71-occam/src/main.rs +b42852c6daddbe3de28f64f2b88f8ee2d61f922edd5e6caa67d2e892dca508e4 ./challenge-71-occam/src/metrics.rs +d33a9d24b943ce3a5a6da90ed5cbd04e527f96cf8fa597395e9698bc666d8e4f ./challenge-71-occam/src/netlist.rs +98225dd5bd842b0e7f444dde828ae6ca8caa541fcbddee178e822df71e93e2e6 ./challenge-71-occam/src/optimization/equivalence.rs +da5f3670763ffb97df72d9592c22aa61d9d4ef5a8389ebd244d29f773b168e63 ./challenge-71-occam/src/optimization/mod.rs +b18bb4900607af9d94c8ef58a6399800d29e08dd35afe45e4ca47a78bcedbe69 ./challenge-71-occam/src/optimization/peephole.rs +ee1bac46124715e95d3bc7a42a24e0554d279176e6b0d1eb0da304005a746ee1 ./challenge-71-occam/src/optimization/report.rs +61dae64a0ff2b856c1d803cba89477aee779797c477b77167245419e448f3ff4 ./challenge-71-occam/src/optimization/rewrite.rs +851d3bfd073a6aeec9e9a4f819528ada5ba52cf7e92b18d7ad851a018fd99906 ./challenge-71-occam/src/optimization/window.rs +2c04f4e13af40747dc58256012e252e891c2abd71fc90c798972c85615b2d4f2 ./challenge-71-occam/src/optimize.rs +142195bad7049ad597d7af9f25edc4ed4ed0b3ae557d8e86dca2436f38fd0e0e ./challenge-71-occam/src/packed.rs +cc6b881449265c079145e6ec4c539c75892d1d5ca3f3e320a313fef17eb70231 ./challenge-71-occam/src/reference.rs +3605a0469553701fdf881957bd4e735d07da205fc38a5bb196a72765a3189901 ./challenge-71-occam/src/research/abc_dont_care.rs +7bdc0d552c53188fbbe3e16c80b3deff59f2db7fbbf184f156238cc3532e7e06 ./challenge-71-occam/src/research/adapters.rs +5fcc7b4092358e5eb9b42884ec563e7981f5809a61d97756326ea1b2253cd8f9 ./challenge-71-occam/src/research/bdd.rs +170b37782f3128efa3eb601ff1631989293dd536639e5e23aebd9743d969c762 ./challenge-71-occam/src/research/evolution.rs +5e279f6c9edb33c0331df969251b7279051b45e8ebd2634a4d6781dc04b1ee4e ./challenge-71-occam/src/research/learner.rs +842635886b3d4fb177e692ad158943a21db79ebf7a29928f9e3fb2325a2cfd95 ./challenge-71-occam/src/research/memory.rs +904044f45ded68563ee059225d7475e96cb48befbd4475d5a3c0793abfdf81e9 ./challenge-71-occam/src/research/mod.rs +c155883306eefa5716d2f8894419e29b3ea85668682d2960338770edf5cdfbb2 ./challenge-71-occam/src/research/process.rs +8bbf83d971ca21f021c19c8de4e0883def2f87203569e93be196d5ddbb0ffa6c ./challenge-71-occam/src/research/projection.rs +cadf1ea98898f84d643526d32252ce2eb885c7600b5fd08700b654d9f326fe19 ./challenge-71-occam/src/research/rss.rs +3c8399b6441340ebc5fe660fd365e6950b8c5920cb3d1ee211116a68b536f7eb ./challenge-71-occam/src/research/runner.rs +4e5efce21174a3c5d6ffe89d83e66883378e1a915cab89d97f39158730cbe5b4 ./challenge-71-occam/src/research/sampling.rs +807ea94ddb40f4d6f544abd3f0a61db57fdcdef6fb95f9777bfcb91fb373f4a9 ./challenge-71-occam/src/research/sat_cegis.rs +4805a1cac8b285245de78a4f37953a5219bde7aca4f1a816a912b11630b98044 ./challenge-71-occam/src/research/tasks.rs +42ab525b2c5115f03627e3f7476c5716704ec540ff13fc5016dac88d2728c185 ./challenge-71-occam/src/research/trial.rs +e890d2796513e57788ffa4e89906afd3aba0b25e4f6fa0295880628d4f1f3475 ./challenge-71-occam/src/scalar.rs +64b690c979c46d3c17e8a6c5d70806363046ff63ec1a7a23b89951d4284f08c5 ./challenge-71-occam/src/synthesis/certificate.rs +0e969a5f4175edc2daf778a288cd741afb1517a3615637d01f350d0bc35b0e30 ./challenge-71-occam/src/synthesis/cnf.rs +4e5838a54719eebdffd2cbc025986d862997333b6c487a8cfb2b1721f4b6c49b ./challenge-71-occam/src/synthesis/mod.rs +e8a9e27638c53db27fd735ed1cea960dc12f35503afc8fce0cc84992765c36f6 ./challenge-71-occam/src/synthesis/problem.rs +791a36578d012d9150817f0bd8cd6edb12e6a005e6bded6bcb2dc803980a4c28 ./challenge-71-occam/src/synthesis/solver.rs +0e727e7d12fd2802fc601f9ed927de661d7b09b217bfd9692de996bc28913203 ./challenge-71-occam/tests/abc_lock.rs +ed5870b8d4d4343f9e1e1317fd7721eb3a31c705cb1327b976b4b7ff8baf495c ./challenge-71-occam/tests/abc_optimization.rs +bd5c0f7959de55a73437081c4fa2d753c201cd72e5f80df2eeb42711c92ae9e4 ./challenge-71-occam/tests/benchmark_cli.rs +46bc8b0e601b0ee65551562ae2401578a64bb6ba4227f7639f6392e0f84db7cb ./challenge-71-occam/tests/blif_roundtrip.rs +89f4dde6fad37e27b92017601c85bba10cdca48e0c51fe24d9ae102f2536703d ./challenge-71-occam/tests/cli.rs +2485a86de31587ab4919e45b062d5a981d85c62ffe864c5f3466f0fddecccd12 ./challenge-71-occam/tests/common/mod.rs +c7245e71ff6e661824ef7bf9719fac2d208ed1691258c14dfd358c239af512e6 ./challenge-71-occam/tests/compiled_differential.rs +36a2ff6270c2157099f8e678a464f29df9849b9d63b44be371ee06528377a2cf ./challenge-71-occam/tests/direct_packed_parse.rs +d65ae89949415cd6df9bd324b8db8ba01a91f8f62e344784cd812c725a1fd41a ./challenge-71-occam/tests/expression_compiler.rs +39720bd9972c489b98ac3529ee1c058b1b53972880b047a95ac6f12f50d053a7 ./challenge-71-occam/tests/fixtures/add-n2.csv +03eeaf3af46914ad345f40f00a18a65a0ce71f3e3bd53e10aba69c79c041a23d ./challenge-71-occam/tests/fixtures/add-n2.txt +e67fe139959b68b5d3e994d0450af7816ec20262d8c3d7d8f7bc9be524723a8e ./challenge-71-occam/tests/fixtures/half-adder.csv +4d3fd18e4aa23a01484ec66d73979678ef2a51acb5bc5f6e0b06e120e0d1651c ./challenge-71-occam/tests/fixtures/mdl-tasks.json +80f2c83a848551bc06c1ae84abfb78de1f7c64acb77cb7fe26ecc1ee7b0b85d2 ./challenge-71-occam/tests/fixtures/redundant-xor.txt +25ecb84fd1bec5cb3d64be6a88510743b927a4210268de8f95cd35fc40cd7e61 ./challenge-71-occam/tests/fixtures/window-shared.txt +91c3d0fd53c1475097f3918be1e10fb32d8fca8e7b6412f6463df43f1064ab0b ./challenge-71-occam/tests/learning.rs +7f67eb2fe12e19c45138bff4b990c726e83f4a2350975fcc95be42e16fb2d5d3 ./challenge-71-occam/tests/learning_cli.rs +c0b716618b43b6875dae2888732b101269401503be549575dab816f91a0c5766 ./challenge-71-occam/tests/mdl_cli.rs +c42b780879c61b1994ed6d4e898c21e038c32628062d56add8b802aec219a71d ./challenge-71-occam/tests/mdl_enumerator.rs +7c5205f1e72e5c630a982c2b81c8a3bc308685929df63e40e5a6c537bba37a56 ./challenge-71-occam/tests/mdl_expression.rs +0859e768fff6815d8778fe674a5b6ed45145a067f615c541cdb138f418918d86 ./challenge-71-occam/tests/mdl_learning.rs +d00b3e2e1f8cb2cd3f48d3b845b251a7568be9cb8f44bdd9444836bac1f8aa55 ./challenge-71-occam/tests/mdl_official.rs +c7d3d7b568263403d953375d5d07e76defd44d5b4aca5fe46115f36661b98c65 ./challenge-71-occam/tests/mdl_synthetic.rs +7c16c938d64097418f383bdeef37f2c7d007ac324352247510d7fc8bbfd9a201 ./challenge-71-occam/tests/official_compat.rs +ae026f8b9bf6ef1305f9525f33227ac5f325c080a409773c6d23a52f1ea57731 ./challenge-71-occam/tests/optimized_artifacts.rs +8df57a766617ab865c2846fa396378d66bd7f68fcf2baf75a7386cc50f015e49 ./challenge-71-occam/tests/oracle_manifest.rs +3d03677719a0d0860eac94b82d4acbff2f2ff5704e292831790780fac41ec80b ./challenge-71-occam/tests/packed_differential.rs +6016e87ffdb73aa29487b58c6b4a95874b10818e2ef4c659708650608233b728 ./challenge-71-occam/tests/packed_layout.rs +e91c3b26b114658dd3fedf4098d0628811cafcdb6b3dc07793a81bbb45cfee9f ./challenge-71-occam/tests/peephole_optimization.rs +925f4ac091a9a5d528b532d80378e6aa50a9fb8a835114a6bbd233ec21b81552 ./challenge-71-occam/tests/properties.rs +72058cdc8194b409ead05cfdc4b4011c84281803a47a7e572402140153c68f3e ./challenge-71-occam/tests/release_version.rs +cd1662bd036cd85bfc4818a54772ff528630a10f21f3d8254eb637aacf7a891f ./challenge-71-occam/tests/report_consistency.rs +d3db2abd88d46559ab964ff9eb563223f30e3d1a4ed66609e644e15dbad077c3 ./challenge-71-occam/tests/research_artifacts.rs +34ee0369aad9de1cab15facddf2ec9aa251a36935634059610029e1702ce9cde ./challenge-71-occam/tests/research_circuit_learners.rs +3499a66b5dd5caea9e77dac8820475b2c41835df9e165ed765073d8b1055ccdd ./challenge-71-occam/tests/research_evolution.rs +ee1d6c50c1ad8a90b9ce92c26aba01cd3d2f7337aeb75b8293d575bbaaa0fbbc ./challenge-71-occam/tests/research_learners.rs +18fd2af82862b06ae58585220b6f35e6ede030907adf0b234248987e1baf045c ./challenge-71-occam/tests/research_logic_baselines.rs +dc8c34e380fcf51b774145801aa8d14d52eae90b9b345c752fce9d14f5e89607 ./challenge-71-occam/tests/research_projection.rs +a27ccf700ae7a6f558f10a7da3f12e454e3791db68dce9ae56b11403fa232f28 ./challenge-71-occam/tests/research_protocol.rs +815af33c38ce8f24604a9d16742f3ec49db84b2dd909828ecbed394b972e9fc4 ./challenge-71-occam/tests/research_runner.rs +8cc9e1f872be25b0d0bd9923060fdc0d9f608f564b1452822d333fd717458a4c ./challenge-71-occam/tests/research_tasks.rs +5c6a42f5938c4aae9b9caa59bf64f292cc262fbd718319dec7bf445e486681e0 ./challenge-71-occam/tests/research_v2_artifacts.rs +0f99144d6555445df72e2fd1b560009b4fb4ef3afcd58f21d9b7c9943c4e5fc1 ./challenge-71-occam/tests/sat_synthesis.rs +4d5242c893bde9ea8f8354f7ab3dcdf49ed92862ab9b1d170890667391267fb4 ./challenge-71-occam/tests/solution_artifacts.rs +ba1316dac06b5c0e30e3cd883cb04b158c31de780f7a167d333ef2715330b51f ./challenge-71-occam/tests/submission_snapshot.rs +a6d7ba3f0755540ea171c06dd302589cdb2c7fa7ff8db3fd980089a1d3e81927 ./challenge-71-occam/tests/synthesis_cli.rs +40bf52165eea058b64910c5e5f61fb40145fec5b5fac190735c44deb3b1fe4dd ./challenge-71-occam/tests/tool_audit.rs +8711c19e1457475035788ca673abf1c0e6228d5742085df3fb6ba0165db54bb8 ./challenge-71-occam/tests/window_extraction.rs +ad158aab698f397c1362f62b1eaf981f9721bb0f888b587f7b651a6845f9be35 ./docs/challenge-115-brief.md +8ebcb825a2724d959b71d7f71368e9dea56d470da8f9f938e43097fbb88be99a ./docs/gap-report.md +36732586bff0cf519c093526aeddd635847c873d8805fe36c5b03528e61d9d84 ./docs/oracle-results.md +ab5d005d1cf777602787764ff8c53e5192cc7328b6c578a7229fac9c29c689d1 ./docs/port-plan.md +84a9153e6616fc6012424f05f5a4b97b87a658c87bd2ce24929cb80af829fbf6 ./docs/releases/v0.5.0.md +056ef4f8319d1d5f46a96c46e6561e1f170f25aaf1a930edb57775be05ac5f12 ./docs/synthesis/README.md +c1cbbdf0c449da44d4fec9200dd67e9c21fe0720e146a7f63cde3e27e9069ce3 ./docs/synthesis/half-adder-certificate.json +8b957ea66b8b7bec9211e6806877ea3e5679670e03794fc8eddbd3c1c4cc2273 ./docs/synthesis/half-adder.txt +60605eb82e849dcfbcb0f0f1ec207d9bf235761408b3adc2d3951dae09ef1690 ./docs/synthesis/two-bit-adder-certificate.json +f0510a535870087e5dcbce5f617c20024412018b671871d782979a3ef17e3e5a ./experiments/occam-generalization/tasks.json +45bb9b5798546096376d0b12f43ad905794b61c9be48d25eadd7771800d8bc55 ./fuzz/Cargo.lock +cb0214a3529aad1151a1438c6bd85b60357b655cc7176e3d9144b9da2b7581cb ./fuzz/Cargo.toml +9a1e6d0236fdcebf197ff8a8636f24a2f7f893c83b79b50fc16ad7128acf7bfa ./fuzz/corpus/dataset/invalid-fields +5de0efbe731e3033ee77ab51757d939e31b0bb6784abe617d47c7404f55d222d ./fuzz/corpus/dataset/valid-basic +595fc5bcbcf03a77e64035c45abbe8895e270f75a9176ddfda99b02179cc569d ./fuzz/corpus/netlist/all-ops-inversion +b20857c20f6128a48d4d560d6a7aa12593d1cb1482f84f76c2eb2cb3559b71cb ./fuzz/corpus/netlist/invalid-forward-wire +7021f0446a862ee5164758b0e3e64632f089e554dfb42e5d238b8cbecd4e503b ./fuzz/corpus/packed_dataset/invalid-width +d4b1d7bfde9017c8084821072e72568aa0b51950101983df7c37a8402f798389 ./fuzz/corpus/packed_dataset/valid-boundary-small +eeb3a608d3700c706ca971e6f67c18ab31049c5cdc1a825aa2b097bbdf68f7b3 ./fuzz/corpus/parse_evaluate/valid-inverted +15c49b4ac30b58875ac15d017ab391b6174ec5f9c0c02a243e267210ab20e4c8 ./fuzz/corpus/parse_evaluate/valid-xor +80458febd451941646558e89eab546342665f9a9fb009e17769955e819d6d08c ./fuzz/fuzz_targets/dataset.rs +20c01e01a609c04b2961dfd31740472d00308319939c0dc74f5754273dcab60f ./fuzz/fuzz_targets/learner.rs +1ac578e1ffb95e0ce7ee86b417639cd933ef254a481fc1c2679445b5c6a590aa ./fuzz/fuzz_targets/mapped_blif.rs +52d108a25b012784c9594c891823565b0b46ac3c956deb1f63d61017e1b3f80a ./fuzz/fuzz_targets/netlist.rs +9dbaeccd0e143e860577f877098b036338c64af2ff08f23c7d586e46059f881d ./fuzz/fuzz_targets/packed_dataset.rs +31bc8b318554faebf8d666accfca60b5b9379b3f684349ee772a2d50154842fb ./fuzz/fuzz_targets/parse_evaluate.rs +4c38851f129a5892c5de64746ca68c75f1626062a208c398ab508615689155f3 ./fuzz/fuzz_targets/test_inputs.rs +dce3870f0e229e62c300527c76083d07c5d0f77e526e1bdf49207ae7ab52c418 ./scripts/audit-external-logic-tools.sh +1bf6f000776ce6a9dda9bff94c54e88db51e99d0e4d71ff9a7927ee0039d806a ./scripts/audit-occam-v030.sh +74b476b010359545d6106868953198a39219d6f1cb709136edb0608342ca3f6c ./scripts/audit-occam-v050.sh +65fe41fc43a557e22d6c15f843190897b1272872684274e129979c0c14f2d4dc ./scripts/build-release-evidence +8b3a63206ea0ac5cbb05320b5b8d2bd0ee269d86f04537fb2f9b9a744d6afafd ./scripts/fetch-abc.sh +1d4fc3d2db0d2baaae89ffa368601375d964c385b79c2f8324e2d92db20db826 ./scripts/fetch-occam-data.sh +bf216833c7b88577fc2d6532c1c808dbfdbbddbbd98429f7761970ce5dc01e3e ./scripts/learn-occam71-mdl.sh +8ade547e27ead72aa9138ce08fc6b1e8b74dbd25fb988f69a8990d885453d31e ./scripts/optimize-occam71.sh +5e45af05015a90e61ec7f45dfb1d77cc5a5ce58b14815a3951e543b3e16407d6 ./scripts/render-benchmark-report +014fd52651f946c00982e8617f548f4bb6365758f070cc256aba7affa7acdb0f ./scripts/render-ingestion-report +5a868868ff891bf7348ee0a22c81555d7a380ea54905b937d36515b6c0d48d6d ./scripts/render-occam-research +683110b08cec914541d02071b3613411aea9af1169c178621ff9457805edf4fa ./scripts/render-oracle-report +c1afcfe229e4682c5c1563ccee5c4b229b619ca64503263a13aa2005169fe6a2 ./scripts/root-occam-research-evidence +848ecfcbff768dca41262c5624e1b585ab9a7f02c691fb9e6021fc012da31b20 ./scripts/run-benchmarks.sh +06526ddae2814600e9cd5319b667273ac71be0d719f2ea46845f2f2482e902fd ./scripts/run-ingestion-benchmarks.sh +e40ca1a06c7e1583dc51a893fc52724bc89565129f8b0986251622e885e80c60 ./scripts/run-occam-experiments.sh +5b95123c07b4e1f59213c815cd2789b9e79e0b6a86b95567c6415a64a2de0908 ./scripts/run-portable-benchmarks.sh +81794de3be4bebea24f9d970362e346faaaab82e1b75f5d468aafcf0e1cd3c47 ./scripts/solve-occam71.sh +bc556f46e3f76fbbbd9b4dd585ad180e51d5a041aaaf18ed74b044179c013001 ./scripts/summarize-process-results +a587c5d3ba05830ec8790e9b725d25a130f497ff6f45480c94f8ef7d14d102c9 ./scripts/update-occam71-submission-snapshot +c6a625a0d871dae4af9ed15d084647f0dcf9226cab17971ef39a71938fc1e992 ./scripts/verify-occam71.jl +474ce337d5f32c050e440fa7e9a3f7229d5b71f481b278206da8d6fa04cb5940 ./scripts/verify-oracles.jl +3b543e91e0ca44ff187621fe45dd58c7fee32c60d3d1d0b35fcb875605b275b3 ./scripts/verify-oracles.sh +510fef22e9155c354b0baf2fa4b1ff6237d2107d6a2e4ab7af6411e39e2e6b30 ./scripts/verify-synthesis-evidence.sh +2ffac76ba40c72689c9fc81f5e93bb3d5cdcb6ddddbac9d66dc222de60625556 ./tests/oracles/occam-v1.json +fed1be2e49ddf7e62713ba24fdeb5990f2d7bf5e7ca003a0bc9dc5326cd48808 ./tools/abc/LICENSE.url +010acbb7d9c9ad4ce3211c2e6316bcd197f9dfe2e8746fc6d0c287476fa64f7a ./tools/abc/LOCK.json +59809801529a2fe5e5f6c7e966310f3785c1b75e24d5fde4d20cfabb34fe325f ./tools/abc/occam.genlib diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/README.md new file mode 100644 index 000000000..c9f5060d0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/README.md @@ -0,0 +1,49 @@ +# Verifier Benchmarks + +Run the complete correctness and performance suite: + +```bash +./scripts/run-benchmarks.sh +``` + +Run only the Julia/Rust correctness preflight: + +```bash +./scripts/run-benchmarks.sh --verify-only +``` + +The driver builds the release binary and creates these deterministic cases: + +| Label | Operation | Bits | Samples | Seed | +|---|---|---:|---:|---:| +| `official-add-8` | disclosed official adder/mystery-A training data | 8 | 2,000 | official | +| `add-8-100000` | addition | 8 | 100,000 | 115008 | +| `add-16-100000` | addition | 16 | 100,000 | 115016 | +| `mul-4-100000` | multiplication | 4 | 100,000 | 115004 | + +Every case must pass Rust scalar/packed cross-check and the official Julia +verifier before it is timed. + +Run the manifest-driven Julia oracle suite independently: + +```bash +./scripts/verify-oracles.sh +``` + +Rust JSON files under `results/` contain evaluator-only statistics after +parsing and, for the packed backend, after packing. Generated CSV/netlist files +and raw process logs are ignored. The raw logs include startup-inclusive Julia +and Rust wall time plus macOS peak process RSS from `/usr/bin/time -l`. + +Reported timings are machine-specific and must not be compared across hardware +without recording a new environment profile. + +Optimization A/B evidence is retained separately under `experiments/`. +In particular, the +[flat wire arena retention report](experiments/2026-07-28-flat-wire-apple-m4/report.md) +records the predeclared decision gate and all raw measurements for the current +packed wire layout. The subsequent +[compiled execution retention report](experiments/2026-07-28-compiled-execution-apple-m4/report.md) +records why the compiled plan became the packed evaluator default. +Run `./scripts/run-ingestion-benchmarks.sh` to regenerate the 100k/1M-row +direct-ingestion, one-shot, and fresh-process RSS comparison. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-compiled.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-compiled.json new file mode 100644 index 000000000..a4a100c05 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-compiled.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "compiled", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 316458, + 541750, + 333292, + 324000, + 298875, + 291667, + 281083, + 273083, + 265625, + 265625, + 277834, + 273250, + 264125, + 290875, + 288667, + 286208, + 293208, + 295083, + 285125, + 298583, + 288541, + 272667, + 313541, + 301417, + 269167, + 295916, + 290583, + 319292, + 332125, + 313708, + 306125, + 366125, + 359416, + 322917, + 279416, + 269000, + 273208, + 275000, + 304625, + 299250, + 307333, + 299167, + 324208, + 294041, + 273000, + 281458, + 282666, + 262750, + 270125, + 261625, + 379417, + 445083, + 284709, + 287667, + 283166, + 283667, + 280584, + 269834, + 282750, + 264542, + 294333, + 297791, + 291708, + 288917, + 278500, + 276375, + 274583, + 276417, + 271875, + 295209, + 302750, + 299000, + 279834, + 290417, + 328875, + 381958, + 361833, + 301750, + 297958, + 295375, + 278500, + 281500, + 274708, + 324458, + 363958, + 356333, + 278667, + 271417, + 299833, + 338667, + 279333, + 281875, + 281667, + 276792, + 274541, + 308000, + 292208, + 289875, + 302459, + 305125, + 285125, + 301916, + 271542, + 274542, + 265000, + 259625, + 263375, + 300375, + 277500, + 274833, + 292667, + 288292, + 284208, + 289208, + 279250, + 270709, + 271042, + 273500, + 263666, + 262792, + 300000, + 377084, + 361084, + 293667, + 295375, + 289875, + 278917, + 277041, + 278792, + 370084, + 346042, + 332250, + 281500, + 282125, + 289042, + 305625, + 299917, + 291292, + 286666, + 268417, + 278917, + 271500, + 275500, + 272917, + 261291, + 276667, + 268917, + 289125, + 291375, + 288416 + ], + "batch_medians_ns": [ + 291271, + 283416, + 294771, + 279291, + 288729 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 17605625, + "packing_ns": 3464250, + "evaluation": { + "minimum_ns": 259625, + "mean_ns": 295921.38666666666, + "median_ns": 288354, + "p95_ns": 363958, + "standard_deviation_ns": 35278.83394894388, + "median_absolute_deviation_ns": 12437 + }, + "samples_per_second_at_median": 346795952.19764596, + "gate_evaluations_per_second_at_median": 26703288319.21874, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-packed.json new file mode 100644 index 000000000..0f5234601 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-16-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 875333, + 852000, + 922625, + 863750, + 993875, + 923292, + 882750, + 876667, + 867583, + 906042, + 921583, + 1473333, + 850458, + 810167, + 784459, + 780709, + 783625, + 825750, + 883916, + 888834, + 915375, + 895209, + 936000, + 900375, + 892125, + 884042, + 891041, + 889125, + 879208, + 881917, + 877625, + 884708, + 880042, + 880792, + 931292, + 897209, + 890375, + 978375, + 907417, + 906916, + 899583, + 880542, + 879500, + 938042, + 994125, + 879417, + 879291, + 879417, + 878792, + 880750, + 1025708, + 977625, + 1036417, + 1016000, + 959000, + 1064542, + 1000709, + 958459, + 944375, + 940875, + 1005709, + 955292, + 933792, + 920833, + 934208, + 929250, + 879459, + 961667, + 855000, + 851209, + 911542, + 917166, + 853542, + 841875, + 840333, + 910000, + 898958, + 850792, + 849959, + 848125, + 922250, + 904792, + 853667, + 981458, + 877458, + 918083, + 971166, + 881083, + 850542, + 831000, + 890917, + 901292, + 861167, + 836583, + 852916, + 905333, + 910583, + 900083, + 840750, + 862166, + 926917, + 911167, + 883000, + 835125, + 846375, + 934791, + 904667, + 851542, + 848541, + 875875, + 910875, + 875166, + 844542, + 850583, + 881500, + 923542, + 930333, + 863333, + 857750, + 897917, + 895125, + 856667, + 830625, + 829167, + 903166, + 899708, + 852500, + 835583, + 849416, + 933958, + 924667, + 865167, + 853792, + 865209, + 918375, + 939250, + 895167, + 852000, + 859542, + 883250, + 1114666, + 883000, + 841625, + 825417, + 848625, + 904833, + 888792, + 846334, + 914667, + 886291 + ], + "batch_medians_ns": [ + 883979, + 907166, + 901875, + 878687, + 874104 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 21568875, + "packing_ns": 3502250, + "evaluation": { + "minimum_ns": 780709, + "mean_ns": 898208.0866666667, + "median_ns": 885499, + "p95_ns": 1000709, + "standard_deviation_ns": 69711.39173859956, + "median_absolute_deviation_ns": 31894 + }, + "samples_per_second_at_median": 112930675.2463865, + "gate_evaluations_per_second_at_median": 8695661993.97176, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-compiled.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-compiled.json new file mode 100644 index 000000000..36c630254 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-compiled.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "compiled", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 301333, + 191542, + 196125, + 191334, + 188750, + 185250, + 197583, + 201791, + 189625, + 186250, + 185667, + 185708, + 184166, + 297917, + 321750, + 262250, + 203792, + 329958, + 250125, + 177833, + 176208, + 172708, + 179458, + 183000, + 170791, + 172375, + 169000, + 170917, + 185625, + 178125, + 225208, + 176750, + 178291, + 177792, + 168459, + 178750, + 189875, + 204542, + 192708, + 218833, + 209541, + 194375, + 209125, + 193584, + 187959, + 182750, + 172125, + 176458, + 182666, + 172917, + 177084, + 169417, + 178541, + 168250, + 174083, + 161166, + 169958, + 172208, + 172500, + 176000, + 261750, + 393209, + 215875, + 413042, + 415542, + 224834, + 318458, + 548291, + 368875, + 509167, + 302500, + 185208, + 168750, + 167875, + 167083, + 169708, + 169000, + 168083, + 184916, + 190417, + 195709, + 196084, + 278709, + 1694167, + 202959, + 179959, + 327334, + 232250, + 206083, + 189708, + 213417, + 220667, + 247542, + 192541, + 180750, + 182291, + 198000, + 177583, + 178125, + 172375, + 176625, + 174750, + 170875, + 187708, + 208208, + 205875, + 191875, + 196125, + 184667, + 192875, + 205042, + 196959, + 176000, + 174583, + 175583, + 183875, + 186000, + 190250, + 197250, + 186916, + 286334, + 311750, + 433042, + 251500, + 170584, + 175459, + 241625, + 189041, + 171125, + 171791, + 168292, + 173292, + 218917, + 198250, + 193125, + 197333, + 194041, + 180000, + 187958, + 182958, + 179916, + 180208, + 179542, + 175167, + 171542, + 173208, + 172375, + 171584, + 179375, + 169167 + ], + "batch_medians_ns": [ + 185979, + 178041, + 210979, + 187312, + 179958 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 23908125, + "packing_ns": 1907459, + "evaluation": { + "minimum_ns": 161166, + "mean_ns": 218121.66, + "median_ns": 185854, + "p95_ns": 368875, + "standard_deviation_ns": 136644.2818534719, + "median_absolute_deviation_ns": 12271 + }, + "samples_per_second_at_median": 538056754.2264358, + "gate_evaluations_per_second_at_median": 19908099906.378124, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-packed.json new file mode 100644 index 000000000..d3f7434a2 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/add-8-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 497375, + 499250, + 513875, + 499625, + 497458, + 496833, + 508917, + 500084, + 497917, + 498125, + 503834, + 500959, + 497250, + 498250, + 497458, + 498041, + 499375, + 498500, + 498584, + 501750, + 452250, + 434333, + 430250, + 430875, + 433000, + 454458, + 472917, + 440167, + 435791, + 433792, + 444500, + 439875, + 432917, + 432500, + 431584, + 430000, + 428625, + 430000, + 429917, + 431709, + 429208, + 429583, + 428583, + 428916, + 429333, + 434750, + 429291, + 430958, + 429583, + 429042, + 429208, + 429250, + 434792, + 439375, + 435542, + 431666, + 428917, + 436500, + 429541, + 448208, + 429125, + 429125, + 431041, + 431417, + 429667, + 430166, + 430292, + 429666, + 469917, + 491834, + 490292, + 475041, + 465250, + 460250, + 455542, + 456417, + 451459, + 448709, + 478167, + 504208, + 486458, + 464708, + 461708, + 458041, + 453625, + 476875, + 462875, + 458625, + 478583, + 525417, + 469791, + 484833, + 470000, + 470833, + 472250, + 497709, + 511042, + 644916, + 525958, + 462000, + 455125, + 454625, + 452667, + 476584, + 508209, + 487584, + 468250, + 464125, + 458000, + 456333, + 455625, + 453917, + 456958, + 500666, + 528000, + 510084, + 481709, + 485875, + 465917, + 463000, + 498500, + 473667, + 465292, + 459959, + 456042, + 451458, + 493458, + 465916, + 505125, + 496458, + 475083, + 470541, + 462250, + 460333, + 451583, + 454708, + 454041, + 495250, + 499250, + 479209, + 464792, + 459916, + 456584, + 457625, + 463500, + 473292, + 456750, + 477250, + 493167, + 528166 + ], + "batch_medians_ns": [ + 497687, + 430000, + 459437, + 470416, + 465604 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 18129041, + "packing_ns": 1780416, + "evaluation": { + "minimum_ns": 428583, + "mean_ns": 466009.44, + "median_ns": 461854, + "p95_ns": 510084, + "standard_deviation_ns": 31288.593773126566, + "median_absolute_deviation_ns": 27312 + }, + "samples_per_second_at_median": 216518640.08972535, + "gate_evaluations_per_second_at_median": 8011189683.319838, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-compiled.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-compiled.json new file mode 100644 index 000000000..93059160c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-compiled.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "compiled", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 403875, + 520500, + 694166, + 456542, + 455250, + 434375, + 442208, + 410417, + 481334, + 629666, + 554083, + 548417, + 435500, + 399250, + 446375, + 459333, + 422833, + 413333, + 420625, + 421875, + 416500, + 408042, + 415584, + 402917, + 418250, + 427125, + 414000, + 546833, + 776666, + 528542, + 418042, + 429208, + 686916, + 521667, + 408791, + 438583, + 414542, + 413333, + 410125, + 411916, + 422834, + 409667, + 400041, + 398458, + 415542, + 414542, + 482041, + 414625, + 419292, + 409417, + 420792, + 422458, + 418666, + 422875, + 418250, + 414041, + 427584, + 409167, + 417583, + 407083, + 702625, + 834375, + 562792, + 498084, + 793917, + 644542, + 485292, + 526666, + 575250, + 1050125, + 735542, + 1251875, + 641125, + 570375, + 648625, + 814500, + 682000, + 884917, + 805792, + 1436833, + 662000, + 626250, + 643208, + 1038709, + 550917, + 427541, + 1038292, + 967791, + 745250, + 626417, + 592584, + 501791, + 545958, + 573250, + 574291, + 558500, + 535958, + 539083, + 502625, + 510167, + 529166, + 529125, + 549083, + 535166, + 548208, + 756209, + 753542, + 565000, + 504250, + 765292, + 751208, + 535500, + 522625, + 531333, + 1542500, + 834500, + 811459, + 653875, + 546791, + 546500, + 572959, + 558625, + 530875, + 586084, + 517458, + 574417, + 1015083, + 659500, + 785666, + 924541, + 718000, + 487542, + 521083, + 556125, + 572500, + 568667, + 546792, + 575208, + 581875, + 679084, + 604709, + 506209, + 577375, + 547083, + 566250, + 517458, + 517958, + 516500, + 559375, + 499250 + ], + "batch_medians_ns": [ + 434937, + 416562, + 672000, + 547499, + 567458 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 13959584, + "packing_ns": 991667, + "evaluation": { + "minimum_ns": 398458, + "mean_ns": 575226.0933333334, + "median_ns": 535333, + "p95_ns": 967791, + "standard_deviation_ns": 190159.80444602718, + "median_absolute_deviation_ns": 107770 + }, + "samples_per_second_at_median": 186799618.18158042, + "gate_evaluations_per_second_at_median": 23910351127.242294, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-packed.json new file mode 100644 index 000000000..865c7750d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/mul-4-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 2855291, + 2358750, + 1455500, + 1392792, + 1391458, + 1400167, + 1452041, + 6201125, + 2355167, + 2348292, + 3103791, + 5230709, + 2889583, + 2491834, + 2396916, + 2575459, + 5011916, + 1707542, + 1609375, + 1581708, + 1558250, + 1594208, + 2429416, + 2895875, + 6019500, + 1736333, + 1533583, + 1592208, + 2238333, + 2894500, + 1480334, + 1383208, + 1438250, + 1654167, + 1670916, + 14964500, + 3550916, + 2466083, + 2683042, + 3590416, + 1651625, + 1483292, + 1763125, + 1664167, + 1661292, + 6531833, + 2352000, + 2347167, + 2520834, + 2351917, + 3540125, + 1801500, + 1804500, + 1713792, + 1837958, + 3852000, + 1909583, + 2105625, + 2034125, + 1664750, + 1828583, + 1890458, + 1766667, + 1902333, + 1779083, + 1755333, + 1611541, + 1618917, + 1743750, + 1736833, + 1625625, + 1674334, + 1609084, + 1598917, + 1638500, + 1622042, + 1646750, + 2211125, + 1761458, + 1696125, + 1599417, + 1591083, + 1595166, + 1592250, + 1598333, + 1596750, + 1593334, + 1845917, + 1783291, + 1875958, + 1826292, + 1806833, + 1871750, + 1748416, + 1822625, + 1794791, + 1832291, + 1786792, + 1751834, + 1834917, + 1788833, + 1831959, + 1769500, + 1905208, + 1764916, + 1841458, + 1795375, + 1801917, + 1771042, + 1802625, + 1793000, + 1844000, + 1802583, + 1866000, + 1864667, + 1808833, + 1830125, + 1721917, + 1699208, + 1871416, + 1846208, + 1744875, + 1874791, + 1777750, + 1923625, + 1759417, + 1636125, + 1537667, + 1621959, + 1509542, + 1609458, + 1519041, + 1636958, + 1533500, + 1661750, + 1640208, + 1576500, + 1622584, + 1604000, + 1542583, + 1608958, + 1507292, + 1624625, + 1542250, + 1573792, + 1599625, + 1490583, + 1377250, + 1392000, + 1377583 + ], + "batch_medians_ns": [ + 2351729, + 1873770, + 1660542, + 1804729, + 1606479 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 14703250, + "packing_ns": 2473417, + "evaluation": { + "minimum_ns": 1377250, + "mean_ns": 2077914.9533333334, + "median_ns": 1762291, + "p95_ns": 3590416, + "standard_deviation_ns": 1349509.9756044454, + "median_absolute_deviation_ns": 149021 + }, + "samples_per_second_at_median": 56744317.48218654, + "gate_evaluations_per_second_at_median": 7263272637.719877, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-compiled.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-compiled.json new file mode 100644 index 000000000..fc0f6ecd6 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-compiled.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "compiled", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 4834, + 4834, + 4708, + 3916, + 3833, + 3833, + 4250, + 4750, + 4709, + 4000, + 3791, + 3792, + 3834, + 3792, + 3833, + 4041, + 3792, + 3792, + 4583, + 4708, + 4750, + 4709, + 4708, + 4000, + 3792, + 3791, + 3792, + 4417, + 4666, + 4750, + 3791, + 4833, + 4708, + 4708, + 4750, + 4750, + 3833, + 3750, + 3791, + 3792, + 4709, + 4792, + 4458, + 3791, + 3833, + 3833, + 3833, + 3833, + 3792, + 3834, + 4084, + 4750, + 4750, + 4750, + 4708, + 4500, + 3875, + 3792, + 3750, + 3875, + 3875, + 3708, + 3791, + 3917, + 4500, + 4958, + 4708, + 4708, + 4750, + 4042, + 3833, + 3791, + 3792, + 3792, + 4625, + 4792, + 4500, + 3917, + 3833, + 3791, + 3833, + 4000, + 3791, + 4042, + 4709, + 4750, + 4750, + 4709, + 4458, + 3792, + 4708, + 3958, + 3708, + 3833, + 3708, + 3833, + 3875, + 3833, + 3958, + 4708, + 4791, + 4708, + 4792, + 4541, + 3792, + 3834, + 3750, + 3792, + 4250, + 4792, + 4708, + 4042, + 3834, + 3875, + 3875, + 3875, + 3834, + 3834, + 4542, + 4791, + 3750, + 3834, + 3834, + 3792, + 3792, + 3792, + 3833, + 3875, + 3834, + 3792, + 4583, + 4791, + 4791, + 4208, + 3792, + 3750, + 3833, + 3750, + 3791, + 3792, + 3834, + 4167, + 4750, + 4666, + 4667, + 4750, + 4292, + 3791, + 3833, + 3792 + ], + "batch_medians_ns": [ + 4020, + 3875, + 4021, + 3875, + 3833 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 690208, + "packing_ns": 143291, + "evaluation": { + "minimum_ns": 3708, + "mean_ns": 4172.2, + "median_ns": 3875, + "p95_ns": 4792, + "standard_deviation_ns": 423.90459618488063, + "median_absolute_deviation_ns": 125 + }, + "samples_per_second_at_median": 516129032.2580645, + "gate_evaluations_per_second_at_median": 19096774193.548386, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-packed.json new file mode 100644 index 000000000..f60cb6aa4 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/official-add-8-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 14583, + 14875, + 14666, + 14542, + 14625, + 14542, + 14500, + 14542, + 14584, + 14417, + 14500, + 14541, + 14542, + 14500, + 14459, + 14500, + 14500, + 14459, + 14459, + 14417, + 14541, + 14792, + 14792, + 14708, + 14666, + 14458, + 14500, + 14416, + 14750, + 14708, + 14542, + 14542, + 14500, + 14500, + 14583, + 14541, + 14542, + 15292, + 14500, + 14500, + 14500, + 14708, + 14708, + 25583, + 86000, + 36292, + 15125, + 26917, + 31917, + 133250, + 14959, + 14584, + 27917, + 14875, + 14625, + 14750, + 71417, + 65666, + 17709, + 11250, + 11917, + 11000, + 11000, + 11041, + 11083, + 10958, + 11000, + 11041, + 11000, + 10958, + 10958, + 10958, + 11041, + 10958, + 11000, + 10958, + 10958, + 11000, + 11042, + 10958, + 11875, + 12750, + 11000, + 10958, + 11583, + 13166, + 11000, + 11041, + 10958, + 10958, + 11041, + 11042, + 11084, + 10959, + 60625, + 15500, + 13708, + 11041, + 11083, + 12250, + 41125, + 11584, + 11125, + 11083, + 11083, + 11083, + 11042, + 10958, + 12542, + 12042, + 10958, + 11000, + 11084, + 11000, + 36417, + 11292, + 11250, + 13667, + 11375, + 11042, + 12792, + 11042, + 11000, + 10959, + 10959, + 10959, + 10959, + 11042, + 11000, + 11042, + 11000, + 11041, + 11042, + 10959, + 10959, + 11000, + 11000, + 10916, + 10917, + 10959, + 11000, + 11042, + 10959, + 11000, + 10917, + 10959, + 11000, + 11000, + 11041, + 11000 + ], + "batch_medians_ns": [ + 14541, + 14729, + 11000, + 11084, + 11000 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 2255458, + "packing_ns": 52416, + "evaluation": { + "minimum_ns": 10916, + "mean_ns": 15790.306666666667, + "median_ns": 11479, + "p95_ns": 36292, + "standard_deviation_ns": 14224.69132878773, + "median_absolute_deviation_ns": 521 + }, + "samples_per_second_at_median": 174231204.80878127, + "gate_evaluations_per_second_at_median": 6446554577.924907, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/report.md new file mode 100644 index 000000000..2e2c153d7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-compiled-execution-apple-m4/report.md @@ -0,0 +1,47 @@ +# Compiled Packed Execution Retention Experiment + +Date: 2026-07-28 + +Candidate parent: `1ec2bc1` (`Use evidence-backed flat packed wires`) + +Environment: + +- Apple M4, aarch64 +- macOS 15.6 +- `rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)` +- release profile + +Method: + +- Compare the flat interpreted packed evaluator (`packed`) with a compiled + execution plan (`compiled`). +- The compiled plan maps inputs and wires to unified column identifiers, + turns inversion branches into XOR masks, and hoists column-offset + calculations outside block loops. +- Compile once outside the evaluator timing, as a circuit is normally reused + for all samples and repeated evaluations. Dataset packing is also outside + evaluator timing for both sides. +- Run five warmups before each of five batches of 30 measurements. +- Alternate invocation order by case: interpreted/compiled, + compiled/interpreted, interpreted/compiled, compiled/interpreted. +- Require exact metrics from both implementations. +- Retain compiled execution as the packed default only if at least three cases + improve by more than the sum of both median absolute deviations, with no + meaningful regression in the fourth case. + +| Case | Samples | Gates | Interpreted median (ms) | Interpreted MAD (ms) | Compiled median (ms) | Compiled MAD (ms) | Speedup | +|---|---:|---:|---:|---:|---:|---:|---:| +| official-add-8 | 2,000 | 37 | 0.011479 | 0.000521 | 0.003875 | 0.000125 | 2.96× | +| add-8-100000 | 100,000 | 37 | 0.461854 | 0.027312 | 0.185854 | 0.012271 | 2.49× | +| add-16-100000 | 100,000 | 77 | 0.885499 | 0.031894 | 0.288354 | 0.012437 | 3.07× | +| mul-4-100000 | 100,000 | 128 | 1.762291 | 0.149021 | 0.535333 | 0.107770 | 3.29× | + +All eight reports contain 150 raw timings and exact verification metrics. +The difference exceeds the combined MAD in all four cases, so compiled +execution passes the predeclared retention gate and becomes the packed +evaluator default. The interpreted implementation remains available for +differential tests and future A/B measurements. + +This is evaluator-only evidence. Compilation cost is deliberately excluded +and is charged separately in the direct-ingestion/end-to-end experiment. +The JSON files beside this report are the primary evidence. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-100000.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-100000.json new file mode 100644 index 000000000..fdfa8e0fd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-100000.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 122667, + 122792, + 122958, + 122958, + 122708, + 122958, + 122750, + 122875, + 122833, + 123250, + 122750, + 122917, + 170250, + 160458, + 122666, + 123042, + 122541, + 123042, + 122417, + 123208, + 122542, + 122459, + 122666, + 122417, + 122583, + 122750, + 122250, + 122709, + 122167, + 122666, + 122167, + 122500, + 122834, + 122583, + 122416, + 122542, + 122458, + 122208, + 122625, + 122542, + 122333, + 122250, + 122334, + 122375, + 122333, + 122334, + 122542, + 122208, + 122458, + 122416, + 122250, + 122666, + 122250, + 122375, + 122250, + 122542, + 122583, + 122041, + 122625, + 122375, + 121875, + 123167, + 122750, + 160334, + 234750, + 123000, + 122583, + 122083, + 122458, + 122125, + 122500, + 122708, + 122416, + 122417, + 122250, + 122125, + 122000, + 122417, + 122167, + 122291, + 122334, + 122042, + 124041, + 122500, + 122375, + 122375, + 122000, + 122750, + 122291, + 122083, + 122291, + 122250, + 122666, + 123000, + 122541, + 122917, + 122292, + 122625, + 123250, + 122625, + 122792, + 122667, + 122833, + 122458, + 122542, + 122250, + 122625, + 122458, + 122541, + 122292, + 122583, + 122500, + 122542, + 122167, + 122541, + 122834, + 122375, + 122458, + 122834, + 122625, + 123041, + 122750, + 122416, + 122417, + 122583, + 122583, + 122541, + 122167, + 122083, + 122291, + 122750, + 122375, + 122458, + 122458, + 122083, + 122291, + 122083, + 122292, + 122709, + 122750, + 122667, + 122542, + 122708, + 122250, + 122625, + 122375, + 122250, + 122625, + 122750, + 122500 + ], + "batch_medians_ns": [ + 122750, + 122395, + 122395, + 122542, + 122479 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 13001249, + "packing_ns": 12921833, + "circuit_parse_ns": 84541, + "scalar_dataset_parse_ns": 10263708, + "legacy_pack_ns": 1359542, + "direct_packed_parse_ns": 12916708, + "compilation_ns": 5125, + "one_shot_ns": 13128915, + "scalar_dataset_parse_iterations_ns": [ + 13095916, + 21456792, + 9614125, + 10263708, + 9846459 + ], + "legacy_pack_iterations_ns": [ + 1359542, + 1327750, + 1394584, + 1660291, + 1253750 + ], + "direct_packed_parse_iterations_ns": [ + 16016250, + 15048833, + 12115292, + 12916708, + 12156208 + ], + "compilation_iterations_ns": [ + 31833, + 3000, + 2875, + 5125, + 25292 + ], + "scalar_dataset_parse": { + "minimum_ns": 9614125, + "mean_ns": 12855400.0, + "median_ns": 10263708, + "p95_ns": 21456792, + "standard_deviation_ns": 4479246.572223726, + "median_absolute_deviation_ns": 649583 + }, + "legacy_pack": { + "minimum_ns": 1253750, + "mean_ns": 1399183.4, + "median_ns": 1359542, + "p95_ns": 1660291, + "standard_deviation_ns": 138580.9354299501, + "median_absolute_deviation_ns": 35042 + }, + "direct_packed_parse": { + "minimum_ns": 12115292, + "mean_ns": 13650658.2, + "median_ns": 12916708, + "p95_ns": 16016250, + "standard_deviation_ns": 1592503.1240185872, + "median_absolute_deviation_ns": 801416 + }, + "compilation": { + "minimum_ns": 2875, + "mean_ns": 13625.0, + "median_ns": 5125, + "p95_ns": 31833, + "standard_deviation_ns": 12396.396879738886, + "median_absolute_deviation_ns": 2250 + }, + "evaluation": { + "minimum_ns": 121875, + "mean_ns": 124097.72, + "median_ns": 122541, + "p95_ns": 123208, + "standard_deviation_ns": 10765.007922660036, + "median_absolute_deviation_ns": 207 + }, + "samples_per_second_at_median": 816053402.5346619, + "gate_evaluations_per_second_at_median": 30193975893.78249, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-1000000.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-1000000.json new file mode 100644 index 000000000..871df779f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/add-8-1000000.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-1000000.csv", + "samples": 1000000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 1612375, + 1755000, + 1570458, + 1636083, + 1520917, + 1523084, + 1517042, + 1497750, + 1518167, + 1560167, + 1527459, + 1534750, + 1549375, + 1483791, + 1480250, + 1475458, + 1493916, + 1512667, + 1528250, + 1495083, + 1480375, + 1517500, + 1599750, + 1557042, + 1635958, + 1614500, + 1576709, + 1664875, + 1500875, + 1488292, + 1576667, + 3811125, + 3779583, + 10061459, + 3412250, + 4562083, + 1801750, + 1685125, + 1547292, + 1551750, + 1565250, + 1870292, + 6118875, + 7873167, + 1649000, + 6120875, + 4124750, + 1775750, + 1669958, + 1592125, + 1556625, + 1694125, + 1557083, + 1574625, + 4798875, + 1992583, + 1638417, + 1613250, + 1623042, + 1592834, + 1892917, + 1652417, + 1585375, + 1596333, + 1541125, + 1565250, + 1605375, + 1861500, + 1608083, + 1753833, + 1621125, + 1780583, + 1739458, + 1713708, + 1699833, + 1663083, + 2169708, + 1657125, + 1643542, + 1484375, + 1492250, + 1530000, + 1557208, + 1519667, + 1536084, + 1528875, + 1557083, + 2197333, + 1653000, + 1741125, + 1495375, + 1543709, + 1551917, + 1620125, + 1540875, + 1526042, + 1568542, + 1651542, + 1589000, + 1518833, + 1563333, + 1508083, + 1705666, + 1980583, + 1697583, + 1716083, + 1581000, + 1546167, + 1521125, + 1520875, + 1568417, + 1584500, + 1599167, + 1607125, + 1602625, + 1570959, + 1607625, + 1779542, + 1625500, + 1579500, + 1609250, + 1583750, + 1641125, + 1659042, + 1743875, + 1737875, + 1575917, + 1571750, + 1735042, + 1867125, + 1693542, + 1717625, + 1695667, + 1707000, + 1761167, + 1766375, + 1771000, + 1790875, + 2330000, + 1906167, + 1895542, + 1802250, + 1590625, + 1585750, + 1530291, + 1563042, + 1576292, + 1649208, + 1676917, + 2045917 + ], + "batch_medians_ns": [ + 1525271, + 1689625, + 1632333, + 1580250, + 1701333 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 121189959, + "packing_ns": 121075542, + "circuit_parse_ns": 129667, + "scalar_dataset_parse_ns": 103027833, + "legacy_pack_ns": 17565333, + "direct_packed_parse_ns": 121060292, + "compilation_ns": 15250, + "one_shot_ns": 122812584, + "scalar_dataset_parse_iterations_ns": [ + 109206875, + 103004875, + 103741333, + 98691084, + 103027833 + ], + "legacy_pack_iterations_ns": [ + 18032166, + 17565333, + 34831625, + 14731542, + 16113500 + ], + "direct_packed_parse_iterations_ns": [ + 121001917, + 118359583, + 158793500, + 121060292, + 182497917 + ], + "compilation_iterations_ns": [ + 144500, + 6042, + 18250, + 11500, + 15250 + ], + "scalar_dataset_parse": { + "minimum_ns": 98691084, + "mean_ns": 103534400.0, + "median_ns": 103027833, + "p95_ns": 109206875, + "standard_deviation_ns": 3353043.7103946023, + "median_absolute_deviation_ns": 713500 + }, + "legacy_pack": { + "minimum_ns": 14731542, + "mean_ns": 20254833.2, + "median_ns": 17565333, + "p95_ns": 34831625, + "standard_deviation_ns": 7379890.329018756, + "median_absolute_deviation_ns": 1451833 + }, + "direct_packed_parse": { + "minimum_ns": 118359583, + "mean_ns": 140342641.8, + "median_ns": 121060292, + "p95_ns": 182497917, + "standard_deviation_ns": 25871331.312119965, + "median_absolute_deviation_ns": 2700709 + }, + "compilation": { + "minimum_ns": 6042, + "mean_ns": 39108.4, + "median_ns": 15250, + "p95_ns": 144500, + "standard_deviation_ns": 52853.18535566234, + "median_absolute_deviation_ns": 3750 + }, + "evaluation": { + "minimum_ns": 1475458, + "mean_ns": 1894781.98, + "median_ns": 1607375, + "p95_ns": 3811125, + "standard_deviation_ns": 1096014.822812821, + "median_absolute_deviation_ns": 78125 + }, + "samples_per_second_at_median": 622132358.6593047, + "gate_evaluations_per_second_at_median": 23018897270.394276, + "exact_matches": 1000000, + "correct_bits": 9000000, + "total_bits": 9000000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-100000.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-100000.json new file mode 100644 index 000000000..3a56f4156 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-100000.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 447750, + 451541, + 448167, + 450875, + 445542, + 453541, + 455125, + 447958, + 446000, + 448500, + 447000, + 446625, + 445667, + 445333, + 444875, + 1527875, + 695125, + 553458, + 627542, + 685667, + 559167, + 700125, + 1404042, + 965750, + 612459, + 676666, + 908250, + 807833, + 997125, + 1082042, + 484958, + 507334, + 476958, + 457666, + 487417, + 475791, + 466375, + 530625, + 578792, + 466666, + 447625, + 649041, + 482500, + 445000, + 443958, + 444083, + 466375, + 494333, + 441666, + 440250, + 438666, + 443917, + 1296542, + 620333, + 587916, + 586083, + 549916, + 545667, + 545792, + 549875, + 494750, + 454291, + 467708, + 643208, + 2388500, + 530833, + 514875, + 909833, + 2270416, + 536458, + 500208, + 468250, + 457542, + 444083, + 441916, + 450833, + 446458, + 449167, + 449459, + 440667, + 440333, + 462666, + 450875, + 448458, + 449291, + 457667, + 456750, + 458125, + 462375, + 546958, + 843750, + 2276500, + 1556459, + 687458, + 680375, + 509709, + 458042, + 483791, + 518708, + 609667, + 1866166, + 711042, + 520916, + 481375, + 459667, + 452083, + 447542, + 499250, + 852042, + 598167, + 619875, + 569083, + 540417, + 477375, + 454416, + 442667, + 443583, + 550583, + 586542, + 598458, + 447125, + 444042, + 441375, + 756250, + 579583, + 481333, + 441875, + 444291, + 458833, + 456375, + 445416, + 447667, + 446375, + 454833, + 582333, + 816125, + 848583, + 1149583, + 1012916, + 2585042, + 501166, + 452792, + 450417, + 3646416, + 614041, + 564292, + 593666, + 1059375, + 794875, + 748583 + ], + "batch_medians_ns": [ + 504291, + 483729, + 457896, + 545500, + 532729 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 9668332, + "packing_ns": 9585749, + "circuit_parse_ns": 95291, + "scalar_dataset_parse_ns": 9873375, + "legacy_pack_ns": 1419500, + "direct_packed_parse_ns": 9573041, + "compilation_ns": 12708, + "one_shot_ns": 10167227, + "scalar_dataset_parse_iterations_ns": [ + 7244708, + 7209791, + 10644583, + 9873375, + 14450417 + ], + "legacy_pack_iterations_ns": [ + 752833, + 779625, + 1419500, + 3156084, + 2122208 + ], + "direct_packed_parse_iterations_ns": [ + 7483000, + 7661042, + 10881042, + 11472333, + 9573041 + ], + "compilation_iterations_ns": [ + 12667, + 16209, + 47792, + 4000, + 12708 + ], + "scalar_dataset_parse": { + "minimum_ns": 7209791, + "mean_ns": 9884574.8, + "median_ns": 9873375, + "p95_ns": 14450417, + "standard_deviation_ns": 2666383.993102749, + "median_absolute_deviation_ns": 2628667 + }, + "legacy_pack": { + "minimum_ns": 752833, + "mean_ns": 1646050.0, + "median_ns": 1419500, + "p95_ns": 3156084, + "standard_deviation_ns": 906287.2518505377, + "median_absolute_deviation_ns": 666667 + }, + "direct_packed_parse": { + "minimum_ns": 7483000, + "mean_ns": 9414091.6, + "median_ns": 9573041, + "p95_ns": 11472333, + "standard_deviation_ns": 1625783.7319979062, + "median_absolute_deviation_ns": 1899292 + }, + "compilation": { + "minimum_ns": 4000, + "mean_ns": 18675.2, + "median_ns": 12708, + "p95_ns": 47792, + "standard_deviation_ns": 15105.877152949444, + "median_absolute_deviation_ns": 3501 + }, + "evaluation": { + "minimum_ns": 438666, + "mean_ns": 651559.8933333333, + "median_ns": 486187, + "p95_ns": 1527875, + "standard_deviation_ns": 445095.1926945388, + "median_absolute_deviation_ns": 42249 + }, + "samples_per_second_at_median": 205682175.78832835, + "gate_evaluations_per_second_at_median": 26327318500.90603, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-1000000.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-1000000.json new file mode 100644 index 000000000..d98994163 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/mul-4-1000000.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-1000000.csv", + "samples": 1000000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 6413000, + 9564791, + 5930042, + 17028125, + 9228166, + 9903458, + 6031167, + 5632750, + 23543084, + 4589833, + 7088041, + 5342084, + 11888375, + 4577791, + 4764500, + 4682250, + 4784166, + 7197000, + 4830916, + 5396083, + 5469834, + 4621917, + 4783500, + 9409000, + 5297458, + 5814333, + 5688375, + 4950750, + 5767209, + 6041792, + 13179416, + 4617292, + 11586583, + 5034667, + 4533000, + 4299625, + 4385583, + 4491583, + 4045833, + 3925000, + 4013208, + 4558167, + 4312584, + 3863625, + 4976084, + 3950334, + 3859916, + 3829500, + 3989625, + 4302500, + 4048083, + 3963291, + 4234375, + 4281791, + 4229458, + 10317542, + 4949459, + 4157375, + 4083833, + 4123417, + 3823292, + 3937167, + 4011958, + 4177250, + 4201250, + 3931459, + 4514875, + 3921583, + 3601083, + 3647667, + 3614709, + 3749209, + 3534791, + 3579875, + 3634834, + 4396459, + 3826750, + 3661250, + 3752000, + 4006291, + 3703708, + 4002875, + 3687791, + 4069417, + 4243458, + 4156458, + 3834166, + 3890125, + 3757792, + 4046250, + 3614917, + 3664958, + 3535708, + 3686041, + 3533125, + 3456834, + 3868375, + 3637625, + 3383042, + 3421500, + 3796167, + 3599375, + 3483542, + 3486709, + 3380000, + 3733500, + 3739416, + 3731625, + 3621708, + 4451166, + 3748417, + 8768583, + 6276334, + 5714125, + 3693625, + 3600708, + 7245667, + 3964625, + 3898916, + 11923500, + 3856417, + 3846041, + 4047500, + 4006791, + 3855375, + 3824375, + 4330500, + 3946292, + 3900375, + 3852709, + 3971125, + 4090375, + 4121209, + 3922250, + 4084292, + 4011208, + 4025875, + 3918959, + 3962209, + 4006208, + 4030083, + 3996833, + 4195875, + 4103791, + 4011792, + 4048959, + 3993209, + 3959584, + 3939709, + 3970875 + ], + "batch_medians_ns": [ + 5727792, + 4258083, + 3862145, + 3689833, + 3995021 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 89249999, + "packing_ns": 89170125, + "circuit_parse_ns": 91166, + "scalar_dataset_parse_ns": 83411667, + "legacy_pack_ns": 11450208, + "direct_packed_parse_ns": 89158833, + "compilation_ns": 11292, + "one_shot_ns": 93289270, + "scalar_dataset_parse_iterations_ns": [ + 78483958, + 80487917, + 150337958, + 83411667, + 126437250 + ], + "legacy_pack_iterations_ns": [ + 13585083, + 11450208, + 13568833, + 10202416, + 11036000 + ], + "direct_packed_parse_iterations_ns": [ + 89158833, + 100074875, + 133869041, + 83096209, + 74140292 + ], + "compilation_iterations_ns": [ + 28000, + 11291, + 19916, + 11292, + 2500 + ], + "scalar_dataset_parse": { + "minimum_ns": 78483958, + "mean_ns": 103831750.0, + "median_ns": 83411667, + "p95_ns": 150337958, + "standard_deviation_ns": 29251532.95443952, + "median_absolute_deviation_ns": 4927709 + }, + "legacy_pack": { + "minimum_ns": 10202416, + "mean_ns": 11968508.0, + "median_ns": 11450208, + "p95_ns": 13585083, + "standard_deviation_ns": 1373436.7003089732, + "median_absolute_deviation_ns": 1247792 + }, + "direct_packed_parse": { + "minimum_ns": 74140292, + "mean_ns": 96067850.0, + "median_ns": 89158833, + "p95_ns": 133869041, + "standard_deviation_ns": 20696869.697380036, + "median_absolute_deviation_ns": 10916042 + }, + "compilation": { + "minimum_ns": 2500, + "mean_ns": 14599.8, + "median_ns": 11292, + "p95_ns": 28000, + "standard_deviation_ns": 8673.202416639428, + "median_absolute_deviation_ns": 8624 + }, + "evaluation": { + "minimum_ns": 3380000, + "mean_ns": 4898726.393333334, + "median_ns": 4027979, + "p95_ns": 9903458, + "standard_deviation_ns": 2548780.2837714115, + "median_absolute_deviation_ns": 299437 + }, + "samples_per_second_at_median": 248263459.1689778, + "gate_evaluations_per_second_at_median": 31777722773.629158, + "exact_matches": 1000000, + "correct_bits": 8000000, + "total_bits": 8000000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/process.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/process.json new file mode 100644 index 000000000..827cb1b74 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/process.json @@ -0,0 +1,162 @@ +{ + "schema_version": 1, + "profile": "apple-m4-direct-ingestion", + "platform": "macOS-15.6-arm64-arm-64bit-Mach-O", + "processor": "Apple M4", + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "repetitions": 5, + "cases": { + "add-8-100000": { + "packed": { + "wall_seconds": [ + 0.01, + 0.01, + 0.07, + 0.02, + 0.02 + ], + "maximum_resident_bytes": [ + 5701632, + 5799936, + 5898240, + 5832704, + 5832704 + ], + "median_wall_seconds": 0.02, + "median_maximum_resident_bytes": 5832704 + }, + "packed-legacy": { + "wall_seconds": [ + 0.04, + 0.04, + 0.03, + 0.02, + 0.03 + ], + "maximum_resident_bytes": [ + 13926400, + 13991936, + 14057472, + 13795328, + 13942784 + ], + "median_wall_seconds": 0.03, + "median_maximum_resident_bytes": 13942784 + } + }, + "add-8-1000000": { + "packed": { + "wall_seconds": [ + 0.19, + 0.16, + 0.13, + 0.12, + 0.14 + ], + "maximum_resident_bytes": [ + 38961152, + 39026688, + 39026688, + 39026688, + 38993920 + ], + "median_wall_seconds": 0.14, + "median_maximum_resident_bytes": 39026688 + }, + "packed-legacy": { + "wall_seconds": [ + 0.22, + 0.34, + 0.22, + 0.2, + 0.2 + ], + "maximum_resident_bytes": [ + 144818176, + 144900096, + 144818176, + 144801792, + 144769024 + ], + "median_wall_seconds": 0.22, + "median_maximum_resident_bytes": 144818176 + } + }, + "mul-4-100000": { + "packed": { + "wall_seconds": [ + 0.01, + 0.01, + 0.01, + 0.01, + 0.01 + ], + "maximum_resident_bytes": [ + 5734400, + 5734400, + 5734400, + 5734400, + 5734400 + ], + "median_wall_seconds": 0.01, + "median_maximum_resident_bytes": 5734400 + }, + "packed-legacy": { + "wall_seconds": [ + 0.02, + 0.02, + 0.02, + 0.02, + 0.02 + ], + "maximum_resident_bytes": [ + 13746176, + 13828096, + 13860864, + 13746176, + 13746176 + ], + "median_wall_seconds": 0.02, + "median_maximum_resident_bytes": 13746176 + } + }, + "mul-4-1000000": { + "packed": { + "wall_seconds": [ + 0.11, + 0.12, + 0.1, + 0.09, + 0.08 + ], + "maximum_resident_bytes": [ + 39288832, + 39288832, + 39288832, + 39190528, + 39288832 + ], + "median_wall_seconds": 0.1, + "median_maximum_resident_bytes": 39288832 + }, + "packed-legacy": { + "wall_seconds": [ + 0.22, + 0.25, + 0.22, + 0.19, + 0.2 + ], + "maximum_resident_bytes": [ + 140656640, + 140460032, + 140541952, + 140623872, + 140525568 + ], + "median_wall_seconds": 0.22, + "median_maximum_resident_bytes": 140541952 + } + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md new file mode 100644 index 000000000..b999a144d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md @@ -0,0 +1,36 @@ +# Direct Packed Ingestion Benchmark + +Date: 2026-07-28 + +Implementation: raw CSV bytes → flat `PackedDataset` columns + +- Platform: macOS-15.6-arm64-arm-64bit-Mach-O +- Processor: Apple M4 +- Rust: `rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)` +- Evaluator: compiled packed execution plan +- Timing: five preprocessing measurements, five batches of 30 evaluator measurements, and five fresh-process repetitions +- Correctness: every case has exact bit and sample metrics + +| Case | Samples | Legacy parse+pack (ms) | Direct packed parse (ms) | Legacy/direct time ratio | Evaluate median (ms) | One-shot (ms) | +|---|---:|---:|---:|---:|---:|---:| +| add-8 | 100,000 | 11.623 | 12.917 | 0.90× | 0.123 | 13.129 | +| add-8 | 1,000,000 | 120.593 | 121.060 | 1.00× | 1.607 | 122.813 | +| mul-4 | 100,000 | 11.293 | 9.573 | 1.18× | 0.486 | 10.167 | +| mul-4 | 1,000,000 | 94.862 | 89.159 | 1.06× | 4.028 | 93.289 | + +| Case | Samples | Direct RSS (MiB) | Legacy RSS (MiB) | RSS reduction | Direct process wall (s) | Legacy process wall (s) | +|---|---:|---:|---:|---:|---:|---:| +| add-8 | 100,000 | 5.56 | 13.30 | 2.39× | 0.020 | 0.030 | +| add-8 | 1,000,000 | 37.22 | 138.11 | 3.71× | 0.140 | 0.220 | +| mul-4 | 100,000 | 5.47 | 13.11 | 2.40× | 0.010 | 0.020 | +| mul-4 | 1,000,000 | 37.47 | 134.03 | 3.58× | 0.100 | 0.220 | + +## Decision + +Direct packed parsing is the production path because it avoids materializing one `Vec` pair per sample while preserving the exact flat layout produced by the legacy path. + +Direct parsing time is mixed across the four medians (legacy/direct is 0.90–1.18×), so retention is not based on a uniform CPU-time improvement. It reduces fresh-process peak RSS by 2.39–3.71× and has equal or lower end-to-end process time in every case. The retention decision is therefore grounded in bounded memory behavior. + +After the evaluator optimizations, direct CSV ingestion is now slower than one evaluator pass in all four cases; the bottleneck has therefore moved from Boolean circuit execution to text ingestion. + +Each JSON file beside this report retains all 150 evaluator timings plus scalar parse, legacy pack, direct parse, compilation, and one-shot timings. `process.json` retains every fresh-process wall-time and RSS observation. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed-reference.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed-reference.json new file mode 100644 index 000000000..4a405275c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed-reference.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed-reference", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 1112750, + 1107958, + 1110625, + 1111166, + 1110250, + 1110166, + 1135917, + 1109375, + 1123667, + 1164750, + 1105958, + 1105875, + 1109833, + 1106709, + 1106917, + 1107916, + 1110042, + 1112792, + 1111541, + 1111125, + 1116875, + 1135542, + 1115708, + 1108833, + 1110125, + 1111750, + 1112667, + 1109584, + 1115000, + 1110375, + 1277292, + 1662041, + 1538959, + 1616084, + 1622584, + 1583416, + 1165542, + 1197875, + 1109625, + 1105500, + 1108167, + 1104916, + 1110167, + 1106000, + 1106625, + 1105875, + 1108584, + 1108500, + 1107125, + 1108500, + 1105250, + 1107125, + 1107542, + 1107083, + 1104625, + 1108792, + 1106958, + 1114208, + 1111417, + 1106417, + 1106125, + 1105292, + 1111250, + 1110833, + 1109000, + 1111250, + 1107334, + 1122625, + 1114125, + 1109791, + 1111417, + 1112583, + 1110083, + 1107875, + 1111917, + 1108166, + 1110792, + 1112500, + 1111542, + 1110917, + 1112166, + 1109833, + 1113417, + 1115125, + 1111708, + 1120625, + 1160041, + 1106750, + 1110834, + 1139584, + 1118666, + 1104708, + 1114292, + 1115542, + 1105833, + 1106750, + 1106000, + 1104208, + 1104417, + 1105167, + 1109916, + 1108042, + 1114584, + 1107792, + 1105291, + 1106500, + 1106250, + 1109709, + 1110209, + 1107417, + 1158416, + 1149833, + 1108667, + 1104084, + 1104459, + 1107792, + 1104750, + 1104333, + 1105625, + 1107000, + 1104916, + 1105083, + 1105708, + 1109083, + 1109792, + 1104959, + 1106459, + 1117792, + 1106334, + 1106125, + 1112708, + 1108667, + 1110375, + 1108417, + 1115167, + 1108208, + 1114458, + 1103708, + 1104750, + 1108750, + 1108167, + 1112125, + 1108416, + 1104333, + 1102125, + 1113333, + 1101708, + 1104708, + 1108083, + 1111958 + ], + "batch_medians_ns": [ + 1110500, + 1108500, + 1111250, + 1106875, + 1108187 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 22668041, + "packing_ns": 3565625, + "evaluation": { + "minimum_ns": 1101708, + "mean_ns": 1129685.0133333334, + "median_ns": 1109479, + "p95_ns": 1165542, + "standard_deviation_ns": 90412.25720243811, + "median_absolute_deviation_ns": 3020 + }, + "samples_per_second_at_median": 90132395.47571428, + "gate_evaluations_per_second_at_median": 6940194451.629999, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed.json new file mode 100644 index 000000000..bc5a3b3a3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-16-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 1045792, + 980125, + 891084, + 881625, + 891542, + 892584, + 896541, + 883583, + 881625, + 958583, + 880041, + 879834, + 882500, + 881083, + 886500, + 886542, + 886500, + 882375, + 881083, + 883458, + 891208, + 883833, + 902958, + 881125, + 881125, + 881750, + 882625, + 882708, + 880833, + 881791, + 882834, + 880500, + 881459, + 883292, + 881750, + 880625, + 882583, + 882250, + 907125, + 893292, + 880666, + 880209, + 880792, + 880042, + 879250, + 878958, + 879458, + 879083, + 879167, + 880542, + 879125, + 878709, + 879542, + 879416, + 879708, + 881875, + 802417, + 781375, + 781042, + 781125, + 780625, + 783167, + 782875, + 779625, + 782792, + 781750, + 781000, + 780667, + 780666, + 782667, + 783625, + 780083, + 781375, + 781958, + 783291, + 781083, + 782708, + 785084, + 783542, + 781666, + 780209, + 780875, + 783042, + 780709, + 781125, + 779917, + 780875, + 779792, + 780500, + 780583, + 782917, + 782750, + 780375, + 780917, + 791709, + 903916, + 781917, + 780875, + 781458, + 782791, + 782000, + 788500, + 781417, + 781625, + 781667, + 782791, + 781959, + 784667, + 782833, + 782000, + 781458, + 782625, + 781667, + 783958, + 782541, + 781833, + 787917, + 781500, + 781250, + 781000, + 783959, + 782250, + 781917, + 786042, + 783708, + 782292, + 782291, + 781625, + 790750, + 781708, + 781416, + 781292, + 844708, + 791500, + 801959, + 782208, + 803750, + 783042, + 780500, + 780542, + 790375, + 780958, + 779791, + 781792, + 780833, + 794417, + 780458, + 782542, + 795125, + 798292 + ], + "batch_medians_ns": [ + 883083, + 880125, + 781104, + 781979, + 782291 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 18919833, + "packing_ns": 3087125, + "evaluation": { + "minimum_ns": 779625, + "mean_ns": 824306.12, + "median_ns": 783833, + "p95_ns": 893292, + "standard_deviation_ns": 54262.41582567932, + "median_absolute_deviation_ns": 3687 + }, + "samples_per_second_at_median": 127578195.86570099, + "gate_evaluations_per_second_at_median": 9823521081.658976, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed-reference.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed-reference.json new file mode 100644 index 000000000..d63012e3c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed-reference.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed-reference", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 413583, + 412541, + 412875, + 415208, + 412750, + 412584, + 413042, + 413167, + 412792, + 412083, + 413458, + 413333, + 413541, + 412292, + 416084, + 434416, + 412083, + 419250, + 416458, + 413083, + 412333, + 414833, + 412916, + 419334, + 414000, + 686792, + 1043416, + 722708, + 812375, + 701334, + 978375, + 718333, + 789625, + 716583, + 665125, + 906834, + 703542, + 3060833, + 733291, + 2138958, + 674292, + 746083, + 700042, + 653541, + 3630250, + 1212333, + 721291, + 1359292, + 735084, + 776000, + 886375, + 756500, + 883334, + 758459, + 771625, + 736250, + 765459, + 736709, + 2554917, + 451250, + 548916, + 745833, + 766417, + 731500, + 782042, + 791209, + 515084, + 419709, + 415125, + 414667, + 412917, + 415083, + 421583, + 2250917, + 1853458, + 432959, + 412834, + 411750, + 411333, + 1343792, + 1538708, + 1238500, + 2346167, + 1055750, + 3596708, + 5292166, + 17968083, + 465625, + 412375, + 412291, + 465542, + 464375, + 463583, + 464833, + 464792, + 464209, + 466334, + 464625, + 464750, + 468000, + 466584, + 464959, + 470625, + 471292, + 464792, + 467625, + 464875, + 463875, + 464208, + 464000, + 466084, + 464709, + 465292, + 464791, + 464083, + 464250, + 463958, + 695875, + 730791, + 719625, + 845500, + 664125, + 510708, + 466333, + 466708, + 466000, + 465500, + 467042, + 470166, + 467250, + 467833, + 467750, + 469750, + 479500, + 469708, + 465333, + 465541, + 464667, + 464250, + 464500, + 466916, + 465333, + 747458, + 738791, + 722417, + 719542, + 717792, + 716292, + 725334, + 742250 + ], + "batch_medians_ns": [ + 413499, + 757479, + 640208, + 464812, + 468770 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 12852792, + "packing_ns": 1429542, + "evaluation": { + "minimum_ns": 411333, + "mean_ns": 843482.5, + "median_ns": 467437, + "p95_ns": 2250917, + "standard_deviation_ns": 1547187.9036562764, + "median_absolute_deviation_ns": 54624 + }, + "samples_per_second_at_median": 213932572.7317264, + "gate_evaluations_per_second_at_median": 7915505191.073877, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed.json new file mode 100644 index 000000000..9e1b9e17e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/add-8-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 382792, + 383209, + 382709, + 382417, + 382541, + 382708, + 385500, + 382625, + 385500, + 382208, + 391375, + 382625, + 385042, + 382500, + 382625, + 382292, + 382458, + 382916, + 382583, + 383667, + 385125, + 382625, + 385834, + 386250, + 382542, + 382792, + 382416, + 385208, + 382375, + 384416, + 382709, + 384209, + 382500, + 382917, + 383041, + 381875, + 382333, + 382583, + 382667, + 385292, + 382917, + 385459, + 382791, + 385042, + 385459, + 382291, + 382542, + 382667, + 382250, + 382541, + 384750, + 383250, + 382708, + 382375, + 382667, + 382208, + 384333, + 390500, + 383167, + 382375, + 384958, + 385042, + 382291, + 382708, + 383250, + 382666, + 382875, + 382583, + 382750, + 382167, + 382875, + 382500, + 382375, + 381875, + 382583, + 382542, + 382875, + 382542, + 387500, + 382583, + 385708, + 383000, + 382917, + 386416, + 382334, + 382917, + 385708, + 382458, + 382583, + 382625, + 382708, + 381750, + 382042, + 382083, + 382292, + 384625, + 382084, + 383542, + 385125, + 382250, + 382500, + 384416, + 382167, + 382166, + 382000, + 382958, + 382041, + 382209, + 382042, + 382166, + 382917, + 384000, + 384625, + 381959, + 383750, + 382000, + 382083, + 382250, + 390500, + 386709, + 382125, + 382042, + 381792, + 388166, + 384667, + 382041, + 382000, + 381833, + 382000, + 382250, + 382500, + 382209, + 383625, + 382250, + 382208, + 381792, + 381959, + 382042, + 382333, + 382375, + 381916, + 382000, + 381833, + 382125, + 382167, + 382125, + 381958, + 381500, + 382167, + 386083 + ], + "batch_medians_ns": [ + 382708, + 382708, + 382687, + 382250, + 382125 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 13981125, + "packing_ns": 1348208, + "evaluation": { + "minimum_ns": 381500, + "mean_ns": 383203.6066666667, + "median_ns": 382583, + "p95_ns": 386250, + "standard_deviation_ns": 1686.8520223448434, + "median_absolute_deviation_ns": 416 + }, + "samples_per_second_at_median": 261381190.4867702, + "gate_evaluations_per_second_at_median": 9671104048.010498, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed-reference.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed-reference.json new file mode 100644 index 000000000..450487b7b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed-reference.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed-reference", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 1419167, + 1418166, + 1429792, + 1412959, + 1416125, + 1417458, + 1425292, + 1415208, + 1414833, + 1414625, + 1413625, + 1416667, + 1420833, + 1415916, + 1418833, + 1415875, + 1415708, + 1417250, + 1419500, + 1415834, + 1415667, + 1416916, + 1416292, + 1418875, + 1268958, + 1264375, + 1289417, + 1257166, + 1258375, + 1261916, + 1259208, + 1268041, + 1287792, + 1260584, + 1258417, + 1928166, + 2549292, + 2599250, + 3074334, + 3765000, + 3009792, + 2355625, + 2690500, + 3063333, + 2819375, + 2536000, + 2865500, + 2315208, + 2242167, + 2407708, + 1598167, + 1340542, + 1418791, + 2593833, + 1641417, + 1485709, + 1419709, + 1838292, + 4634500, + 1582250, + 2202541, + 2220417, + 1941250, + 1499542, + 1435417, + 1444500, + 1579125, + 2625084, + 2906583, + 2242791, + 2830583, + 3169917, + 2663041, + 3298000, + 1705333, + 1449958, + 1419625, + 1427166, + 1428292, + 1932459, + 4312625, + 4486667, + 7152583, + 1526375, + 1431875, + 1427041, + 8151041, + 3226958, + 2671083, + 1681958, + 1647208, + 1654875, + 1665334, + 2794209, + 2433250, + 2416667, + 2233667, + 7933042, + 1675000, + 1692292, + 1650833, + 1741041, + 1667375, + 1658541, + 1655500, + 1653208, + 1650083, + 1650916, + 1657917, + 1981333, + 2286334, + 2233542, + 2189500, + 2199750, + 3029250, + 1705792, + 2690375, + 2273958, + 2194708, + 1762417, + 2531541, + 1659000, + 1649500, + 1648167, + 1648584, + 1647542, + 1651666, + 1649625, + 1648708, + 1661000, + 1697667, + 1647416, + 1660083, + 5945875, + 3781709, + 2475250, + 2688833, + 7471333, + 3830041, + 2556083, + 2395667, + 3107875, + 4945750, + 2775167, + 1743458, + 1649125, + 1689250, + 2034708, + 1661083, + 1661958 + ], + "batch_medians_ns": [ + 1415895, + 2278687, + 2071895, + 1751729, + 1693458 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 12848166, + "packing_ns": 1035500, + "evaluation": { + "minimum_ns": 1257166, + "mean_ns": 2171410.24, + "median_ns": 1661520, + "p95_ns": 4486667, + "standard_deviation_ns": 1214122.8195824325, + "median_absolute_deviation_ns": 247395 + }, + "samples_per_second_at_median": 60185853.91689537, + "gate_evaluations_per_second_at_median": 7703789301.362607, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed.json new file mode 100644 index 000000000..af8e5fee7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/mul-4-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 1206666, + 1210042, + 1205167, + 1203083, + 1218625, + 1233041, + 1231333, + 1231083, + 1232583, + 1237667, + 1249291, + 1223208, + 1219750, + 1217250, + 1215000, + 1210042, + 1218667, + 1209375, + 1222125, + 1222666, + 1220750, + 1248417, + 1246084, + 1220334, + 1205250, + 1231917, + 1209958, + 1210291, + 1208000, + 1204083, + 1233750, + 1211042, + 1230167, + 1239333, + 1207208, + 1212209, + 1217125, + 1225542, + 1212459, + 1230584, + 1219834, + 1217000, + 1230792, + 3174500, + 2372416, + 2266584, + 2455416, + 2242667, + 2866208, + 2576334, + 2194667, + 2229750, + 3054791, + 2151083, + 2228375, + 2370917, + 3108958, + 1462542, + 1368417, + 1368458, + 1384375, + 1382958, + 1374416, + 1380208, + 1779208, + 2166250, + 2177958, + 2134750, + 2345500, + 3341541, + 1436000, + 1456125, + 1377500, + 1825250, + 2157750, + 5375083, + 1496042, + 1375292, + 1380958, + 1367041, + 1367000, + 1360458, + 1372583, + 1364375, + 1360875, + 1360500, + 1369375, + 1374208, + 1386167, + 1415792, + 1419875, + 1369166, + 1374750, + 1367458, + 1373250, + 1367000, + 1362084, + 1358042, + 1358916, + 1362458, + 1361042, + 1365917, + 1380791, + 1368542, + 1395167, + 1396708, + 1410250, + 1399541, + 1373875, + 1363833, + 1376916, + 1368208, + 1365917, + 1361792, + 1370291, + 1363334, + 1372750, + 1380167, + 1372375, + 1395042, + 1376708, + 1362166, + 1377708, + 1399375, + 1418334, + 1396542, + 1426666, + 1370750, + 1375333, + 1366750, + 1363959, + 1373042, + 1368750, + 1369875, + 1377500, + 1393333, + 1392666, + 1393250, + 1362750, + 1381125, + 1387167, + 1370958, + 1377750, + 1375417, + 1372541, + 1377625, + 1373416, + 1375292, + 1383458, + 1393792 + ], + "batch_medians_ns": [ + 1219208, + 1415500, + 1383666, + 1369728, + 1377104 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 12146666, + "packing_ns": 889958, + "evaluation": { + "minimum_ns": 1203083, + "mean_ns": 1514239.1266666667, + "median_ns": 1370854, + "p95_ns": 2455416, + "standard_deviation_ns": 528972.6518860031, + "median_absolute_deviation_ns": 34041 + }, + "samples_per_second_at_median": 72947228.515947, + "gate_evaluations_per_second_at_median": 9337245250.041216, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed-reference.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed-reference.json new file mode 100644 index 000000000..4444aec05 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed-reference.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed-reference", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 10541, + 10583, + 10500, + 10583, + 10542, + 10584, + 10542, + 10500, + 10542, + 10542, + 10542, + 10500, + 10500, + 10458, + 10500, + 10500, + 10500, + 10500, + 10500, + 10584, + 10500, + 10500, + 10542, + 10583, + 10542, + 10584, + 10542, + 10541, + 10500, + 10542, + 10583, + 10625, + 10542, + 10541, + 10583, + 10625, + 10625, + 10583, + 10583, + 10583, + 10583, + 10625, + 10625, + 10500, + 10583, + 10542, + 10584, + 10541, + 10583, + 10542, + 10584, + 10625, + 10542, + 10583, + 10541, + 10542, + 10500, + 10584, + 10541, + 10625, + 10583, + 10541, + 10584, + 10584, + 10625, + 10583, + 10542, + 10625, + 10542, + 10625, + 10500, + 10541, + 10542, + 10542, + 10583, + 10583, + 10500, + 10584, + 10500, + 10625, + 10542, + 10666, + 10542, + 10583, + 10583, + 10583, + 10542, + 10541, + 10584, + 10584, + 10625, + 10583, + 10542, + 10541, + 10542, + 10542, + 10583, + 10541, + 10583, + 10583, + 10542, + 10584, + 10584, + 10584, + 10541, + 10625, + 10541, + 10583, + 10625, + 10583, + 10500, + 10542, + 10625, + 10542, + 10625, + 10834, + 10625, + 10584, + 10583, + 10541, + 10666, + 10542, + 10541, + 10500, + 10583, + 10500, + 10584, + 10542, + 10541, + 10583, + 10584, + 10542, + 10500, + 10542, + 10583, + 10542, + 10584, + 10583, + 10583, + 10583, + 10541, + 10583, + 10542, + 10667, + 10583, + 10500, + 10500, + 10584, + 10542, + 10583 + ], + "batch_medians_ns": [ + 10541, + 10583, + 10583, + 10583, + 10562 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 992792, + "packing_ns": 104541, + "evaluation": { + "minimum_ns": 10458, + "mean_ns": 10563.613333333333, + "median_ns": 10562, + "p95_ns": 10625, + "standard_deviation_ns": 46.092629442123254, + "median_absolute_deviation_ns": 21 + }, + "samples_per_second_at_median": 189358076.1219466, + "gate_evaluations_per_second_at_median": 7006248816.512024, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed.json new file mode 100644 index 000000000..069a23adc --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/official-add-8-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 8500, + 8458, + 8458, + 8458, + 8500, + 8458, + 8541, + 8459, + 8417, + 8416, + 8458, + 8417, + 8500, + 8417, + 8417, + 8458, + 8541, + 8542, + 8541, + 8458, + 8459, + 8417, + 8416, + 8458, + 8459, + 8458, + 8416, + 8500, + 8459, + 8459, + 8583, + 8500, + 8542, + 8542, + 8541, + 8542, + 8542, + 8583, + 8584, + 8583, + 8541, + 8417, + 8542, + 8416, + 8458, + 8459, + 8416, + 8458, + 8459, + 8500, + 8417, + 8459, + 8458, + 8458, + 8458, + 8417, + 8459, + 8459, + 8458, + 8541, + 8541, + 8458, + 8459, + 8459, + 8458, + 8416, + 8500, + 8458, + 8583, + 8583, + 8459, + 8417, + 8458, + 8500, + 8541, + 8500, + 8458, + 8500, + 8458, + 8458, + 8542, + 8416, + 8458, + 8459, + 8417, + 8416, + 8417, + 8417, + 8458, + 8708, + 8458, + 8458, + 8458, + 8417, + 8458, + 8416, + 8458, + 8500, + 8417, + 8459, + 8417, + 8416, + 8458, + 8417, + 8417, + 8458, + 8458, + 8459, + 8500, + 8459, + 8417, + 8416, + 8500, + 8583, + 8541, + 8500, + 8542, + 8417, + 8458, + 8458, + 8417, + 8459, + 8459, + 8417, + 8375, + 8417, + 8458, + 8416, + 8500, + 8458, + 8458, + 8375, + 8458, + 8458, + 8458, + 8500, + 8417, + 8417, + 8458, + 8458, + 8417, + 8459, + 8458, + 15625, + 8458, + 8458, + 8542, + 8500, + 8500, + 8458 + ], + "batch_medians_ns": [ + 8458, + 8459, + 8458, + 8458, + 8458 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 353750, + "packing_ns": 95875, + "evaluation": { + "minimum_ns": 8375, + "mean_ns": 8517.18, + "median_ns": 8458, + "p95_ns": 8583, + "standard_deviation_ns": 584.5050449739506, + "median_absolute_deviation_ns": 41 + }, + "samples_per_second_at_median": 236462520.69047058, + "gate_evaluations_per_second_at_median": 8749113265.547411, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/report.md new file mode 100644 index 000000000..2b1961a79 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/experiments/2026-07-28-flat-wire-apple-m4/report.md @@ -0,0 +1,39 @@ +# Flat Packed Wire Arena Retention Experiment + +Date: 2026-07-28 + +Candidate parent: `1ce366f` (`Parse packed datasets with checked limits`) + +Environment: + +- Apple M4, aarch64 +- macOS 15.6 +- `rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)` +- release profile + +Method: + +- Compare the former nested `Vec>` wire layout + (`packed-reference`) with one flat column-major `Vec` (`packed`). +- Use the same already-packed dataset for each measured backend. +- Run five warmups before each of five batches of 30 measurements. +- Alternate invocation order by case: reference/flat, flat/reference, + reference/flat, flat/reference. +- Require exact metrics from both implementations. +- Retain the flat default only if at least three cases improve by more than + the sum of both median absolute deviations, with no meaningful regression + in the fourth case. + +| Case | Samples | Gates | Nested median (ms) | Nested MAD (ms) | Flat median (ms) | Flat MAD (ms) | Improvement | +|---|---:|---:|---:|---:|---:|---:|---:| +| official-add-8 | 2,000 | 37 | 0.010562 | 0.000021 | 0.008458 | 0.000041 | 24.88% | +| add-8-100000 | 100,000 | 37 | 0.467437 | 0.054624 | 0.382583 | 0.000416 | 22.18% | +| add-16-100000 | 100,000 | 77 | 1.109479 | 0.003020 | 0.783833 | 0.003687 | 41.55% | +| mul-4-100000 | 100,000 | 128 | 1.661520 | 0.247395 | 1.370854 | 0.034041 | 21.20% | + +All eight reports contain 150 raw timings and exact verification metrics. +The difference exceeds the combined MAD in all four cases, so the flat arena +passes the predeclared retention gate and remains the default. The nested +implementation is retained only as a benchmark/differential reference. + +The JSON files beside this report are the primary evidence. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/protocols/apple-m4.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/protocols/apple-m4.json new file mode 100644 index 000000000..3b8a95650 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/protocols/apple-m4.json @@ -0,0 +1,23 @@ +{ + "schema_version": 1, + "profile": "apple-m4", + "date": "2026-07-28", + "machine": "MacBook Air", + "processor": "Apple M4", + "physical_cores": 10, + "logical_cores": 10, + "memory_bytes": 17179869184, + "operating_system": "macOS 15.6 (24G84)", + "architecture": "arm64", + "rust": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "julia": "julia version 1.12.6", + "rust_batches": 5, + "rust_warmups_per_batch": 5, + "rust_iterations_per_batch": 30, + "process_repetitions": 5, + "process_measurement": "macOS /usr/bin/time -l", + "notes": [ + "Power source, low-power mode, and system load are captured immediately before each suite.", + "Julia process measurements include startup, JIT compilation, parsing, evaluation, and output." + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/Cargo.toml b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/Cargo.toml new file mode 100644 index 000000000..c2c0aca1a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "occam71_rust" +version = "0.5.0" +edition = "2024" + +[dependencies] +clap = { version = "4.5", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +sha2 = "0.10" +thiserror = "2" +varisat = "0.2.2" +rand = "0.9" +rand_chacha = "0.9" +libc = "0.2" + +[dev-dependencies] +proptest = "1.7" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/proptest-regressions/properties.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/proptest-regressions/properties.txt new file mode 100644 index 000000000..215bcdcdc --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/proptest-regressions/properties.txt @@ -0,0 +1 @@ +# Persisted minimal failing seeds from tests/properties.rs are stored here. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/README.md new file mode 100644 index 000000000..4c18ae0e1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/README.md @@ -0,0 +1,180 @@ +# Rewrite It in Rust — Complete Occam #71 Solution + +This submission recovers all four hidden functions from the supplied training +examples, synthesizes compact official-format Boolean circuits, and predicts +the withheld rows by evaluating those circuits. + +The result is not a table of memorized answers. One deterministic Rust command +relearns every function, regenerates every circuit and prediction, checks the +organizer's frozen SHA-256 commitments, and reproduces the checked-in artifacts +byte for byte. + +## Results + +Inputs contain two equal-width, LSB-first unsigned operands `x` and `y`. + +| Instance | Recovered function | Widths (in → out) | Train | Test | Gates | Exhaustive cases | Prediction SHA-256 | +|---|---|---:|---:|---:|---:|---:|---| +| mystery-A | `x + y` | 16 → 9 | 2,000 | 2,000 | 37 | 65,536 | `51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7` | +| mystery-B | `abs(x - y)` | 14 → 7 | 1,500 | 2,000 | 50 | 16,384 | `e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28` | +| mystery-C | `x * y` | 12 → 12 | 1,200 | 1,500 | 167 | 4,096 | `c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d` | +| mystery-D | `x² + y²` | 10 → 11 | 400 | 624 | 186 | 1,024 | `b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580` | + +All training rows match under both Rust verification backends. Every circuit +also agrees with its recovered arithmetic semantics over its complete input +domain, with zero mismatches. Each prediction hash equals the corresponding +organizer commitment. + +## Size–Generalization Study + +The release also fixes and executes a complete +`16 tasks × 8 observed fractions × 20 seeds × 8 methods = 20,480 trials` +protocol. It records held-out exact/bit accuracy, full semantic recovery, +description length, official-basis gate count, ambiguity, status, and declared +resource fields for every trial key. All 20,480 keys are unique and all 1,024 +task/method/fraction groups contain the expected 20 seeds. + +The central result is nuanced: among 8,380 successful trials with both size +measures, gate count and held-out exact accuracy have Spearman +`ρ = +0.3280`; description length and gate count have `ρ = +0.4353`. +Therefore this matrix does **not** support a universal “smaller circuits always +generalize better” rule. Larger successful hypotheses are associated with +higher accuracy here, with task difficulty, method, and sample fraction all +acting as confounders. This is a measured association under the declared +grammar and bounds, not a causal or universal law. + +The generic MDL enumerator recovers the full semantics in 2,265/2,560 trials. +Its recovery rises from 104/320 at 0.5% observations to 262/320 at 1%, +300/320 at 2%, 319/320 at 3%, and 320/320 from 5% onward. The bounded +grammar-guided baseline recovers 2,141/2,560; the four-family legacy registry +recovers 800/2,560; the evaluator-only oracle recovers all 2,560. The declared +partial-logic baselines use conservative zero completion and are not presented +as complete ABC/BDD/CEGIS implementations. Runtime and RSS values are +normalized to zero for the deterministic release matrix and are not +performance measurements. + +The [full report](research/report.md), [aggregate JSON](research/aggregate.json), +and three hash-locked figures are committed: + +- [gate count versus held-out accuracy](research/figures/gates-vs-accuracy.svg) +- [observed fraction versus recovery](research/figures/fraction-vs-recovery.svg) +- [description length versus gate count](research/figures/description-vs-gates.svg) + +## How the Learner Works + +The production learner follows the challenge's semantic Occam route without a +registry of the four answers: + +1. Strictly parse `train.csv` and split each input into two equal LSB-first + operands. +2. Enumerate a declared, instance-independent expression grammar in increasing + description cost. Its terminals are `x`, `y`, `0`, and `1`; its operators + include fixed-width arithmetic, bitwise operations, `min`, `max`, square, + and small constant shifts. +3. Hash each expression by its behavior on the observed rows, retain one + deterministic representative per semantic class, and select the first + zero-error class at minimum description cost. +4. Lower the selected expression through a canonical Boolean builder. +5. Reparse the emitted official netlist and require perfect scalar and packed + training verification. +6. Exhaustively compare the circuit with the selected expression semantics. +7. Evaluate the reparsed circuit—not the arithmetic helper—on every + `test_inputs.csv` row. +8. Hash the canonical `input,output\n` bytes and compare them with the frozen + commitment. + +Output width defines fixed-width evaluation semantics; it is not used to +pre-filter candidates by a presumed arithmetic family. Selection never reads +the instance name, test outputs, or commitment. The commitment is a post-hoc +integrity check only. The former four-family registry remains available only +as the explicitly named `legacy-registry` experimental baseline. + +Behavioral anti-hardcoding tests recover all four official functions after +renaming the instances, remove each corresponding legacy family in turn, and +exercise twelve previously unseen synthetic functions. Random-label and +permuted-output controls prevent a successful search from being confused with +full-domain semantic recovery. + +This is still an inductive-bias claim, not a universality claim: functions +outside the declared grammar or search budget can time out or exhaust their +bound, and training data can leave several minimum-cost expressions +observationally indistinguishable. Reports expose both the termination reason +and equal-cost ambiguity. + +## Circuit Construction + +The canonical builder orders commutative operands, hash-conses identical +gates, represents inversion for free, applies Boolean identities, and removes +unreachable gates before dense wire renumbering. + +- Addition uses a half adder followed by ripple-carry full adders. +- Absolute difference uses ripple borrow plus conditional two's-complement. +- Multiplication compresses weighted partial-product columns. +- Sum of squares feeds both ordered square products into one shared column + compressor; symmetric products are structurally reused. + +The checked-in gate counts are deterministic measured counts. This submission +does not claim globally minimal circuits. The crate's bounded SAT synthesizer +remains independent small-scale evidence for exact minimality where exhaustive +SAT is tractable. + +The final circuits also pass a reproducible optimization portfolio. Berkeley +ABC is pinned by commit, archive size, and SHA-256; its candidates are mapped +back into the six unit-cost official gates and accepted only after ABC `cec` +and independent Rust full-domain comparison. A separate exact SAT peephole +pass solves bounded convex windows and rejects timeouts, non-improvements, and +whole-circuit mismatches. Relative to the frozen v0.2.0 baseline +`37/52/168/187`, the verified counts are `37/50/167/186`. + +## Reproduce + +From the repository root: + +```bash +./scripts/fetch-occam-data.sh +./scripts/solve-occam71.sh --check +``` + +The standard submission directory is independently runnable without private +Git history: + +```bash +challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh --check +``` + +To learn one instance directly through the generic grammar: + +```bash +cargo run --release -p occam71_rust -- learn-mdl \ + --train vendor/occam-circuit/datasets/mystery-A/train.csv \ + --test-inputs vendor/occam-circuit/datasets/mystery-A/test_inputs.csv \ + --commitment vendor/occam-circuit/datasets/mystery-A/commitment.sha256 \ + --circuit target/occam71-mdl/mystery-A/circuit.txt \ + --predictions target/occam71-mdl/mystery-A/test_outputs.csv \ + --report target/occam71-mdl/mystery-A/report.json +``` + +The schema-v2 [`manifest.json`](manifest.json) transitively hashes the +optimized solution, four official MDL reports, research aggregates, figures, +and limitations. The raw 20,480-row matrix is intentionally omitted from this +compact #115 review snapshot; its SHA-256 is rooted in +[`research-manifest.json`](research-manifest.json). + +## Verify Independently + +```bash +cargo test -p occam71_rust --test solution_artifacts -- --nocapture +julia --startup-file=no scripts/verify-occam71.jl +``` + +The Rust artifact test reparses every circuit and checks training plus predicted +test rows with scalar and packed backends. The Julia command uses the official +organizer verifier independently. + +Remote evidence: + +- [Complete standard #71 submission PR](https://github.com/QuantumBFS/quantum.harness/pull/220) + +The stable parser, evaluators, tests, circuits, reports, and reproduction +scripts required for independent review are published in PR #215 and PR #220. +The large raw research matrix is outside the #115 port acceptance boundary. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-A.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-A.txt new file mode 100644 index 000000000..f9517d123 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-A.txt @@ -0,0 +1,39 @@ +INPUTS 16 +w1 = XOR x9 x1 +w2 = XNOR x10 x2 +w3 = AND x9 x1 +w4 = XNOR w2 w3 +w5 = XNOR x11 x3 +w6 = AND x10 x2 +w7 = OR w2 ~w3 +w8 = AND ~w6 w7 +w9 = XOR w5 w8 +w10 = XNOR x12 x4 +w11 = AND x11 x3 +w12 = NOR w5 w8 +w13 = NOR w11 w12 +w14 = XOR w10 w13 +w15 = XNOR x13 x5 +w16 = AND x12 x4 +w17 = NOR w10 w13 +w18 = NOR w16 w17 +w19 = XOR w15 w18 +w20 = XNOR x14 x6 +w21 = AND x13 x5 +w22 = NOR w15 w18 +w23 = NOR w21 w22 +w24 = XOR w20 w23 +w25 = XNOR x15 x7 +w26 = AND x14 x6 +w27 = NOR w20 w23 +w28 = NOR w26 w27 +w29 = XOR w25 w28 +w30 = XNOR x16 x8 +w31 = AND x15 x7 +w32 = NOR w25 w28 +w33 = NOR w31 w32 +w34 = XOR w30 w33 +w35 = AND x16 x8 +w36 = NOR w30 w33 +w37 = OR w35 w36 +OUTPUTS w1 w4 w9 w14 w19 w24 w29 w34 w37 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-B.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-B.txt new file mode 100644 index 000000000..ccce26d02 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-B.txt @@ -0,0 +1,52 @@ +INPUTS 14 +w1 = XOR x8 x1 +w2 = XNOR x9 x2 +w3 = AND x8 ~x1 +w4 = XOR ~w2 w3 +w5 = XNOR x14 x7 +w6 = XNOR x13 x6 +w7 = XNOR x12 x5 +w8 = XNOR x11 x4 +w9 = XNOR x10 x3 +w10 = AND w2 w3 +w11 = AND x9 ~x2 +w12 = NOR w10 w11 +w13 = NOR ~w9 w12 +w14 = AND x10 ~x3 +w15 = NOR w13 w14 +w16 = NOR ~w8 w15 +w17 = AND x11 ~x4 +w18 = NOR w16 w17 +w19 = NOR ~w7 w18 +w20 = AND x12 ~x5 +w21 = NOR w19 w20 +w22 = NOR ~w6 w21 +w23 = AND x13 ~x6 +w24 = NOR w22 w23 +w25 = NOR ~w5 w24 +w26 = AND x14 ~x7 +w27 = NOR w25 w26 +w28 = XOR w4 w27 +w29 = OR w27 w1 +w30 = XOR w28 w29 +w31 = XOR w9 w12 +w32 = XOR w31 w27 +w33 = OR w28 w29 +w34 = XOR w32 w33 +w35 = XOR w8 w15 +w36 = XOR w35 w27 +w37 = OR w32 w33 +w38 = XOR w36 w37 +w39 = XOR w7 w18 +w40 = XOR w39 w27 +w41 = OR w36 w37 +w42 = XOR w40 w41 +w43 = XOR w6 w21 +w44 = XOR w43 w27 +w45 = OR w40 w41 +w46 = XOR w44 w45 +w47 = XOR w5 w24 +w48 = XOR w47 w27 +w49 = OR w44 w45 +w50 = XOR w48 w49 +OUTPUTS w1 w30 w34 w38 w42 w46 w50 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-C.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-C.txt new file mode 100644 index 000000000..9355079f4 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-C.txt @@ -0,0 +1,169 @@ +INPUTS 12 +w1 = AND x7 x1 +w2 = AND x7 x2 +w3 = AND x8 x1 +w4 = XOR w2 w3 +w5 = AND x8 x2 +w6 = AND w5 ~w1 +w7 = AND x7 x3 +w8 = XOR w6 w7 +w9 = AND x9 x1 +w10 = XOR w8 w9 +w11 = OR w7 w1 +w12 = AND w11 w5 +w13 = AND x7 x4 +w14 = XOR w12 w13 +w15 = AND w8 w9 +w16 = XOR w14 w15 +w17 = AND x8 x3 +w18 = AND x9 x2 +w19 = XNOR w17 w18 +w20 = XOR w16 w19 +w21 = NAND x10 x1 +w22 = XOR w20 w21 +w23 = NAND w17 w18 +w24 = NAND w16 ~w19 +w25 = AND w23 w24 +w26 = AND w14 w15 +w27 = AND w12 w13 +w28 = NOR w26 w27 +w29 = XOR w25 ~w28 +w30 = OR w20 w21 +w31 = XOR w29 w30 +w32 = AND x7 x5 +w33 = AND x8 x4 +w34 = XOR w32 w33 +w35 = XOR w31 w34 +w36 = AND x9 x3 +w37 = AND x10 x2 +w38 = XOR w36 w37 +w39 = XOR w35 w38 +w40 = AND x11 x1 +w41 = XOR w39 w40 +w42 = AND x11 x2 +w43 = AND x10 x3 +w44 = XNOR w42 w43 +w45 = OR w25 w28 +w46 = OR w29 w30 +w47 = AND w45 w46 +w48 = NAND x7 x6 +w49 = XOR w47 w48 +w50 = AND w36 w37 +w51 = AND w35 w38 +w52 = NOR w50 w51 +w53 = AND w32 w33 +w54 = AND w31 w34 +w55 = NOR w53 w54 +w56 = XOR w52 ~w55 +w57 = NAND w39 w40 +w58 = XOR w56 w57 +w59 = XOR w49 w58 +w60 = AND x8 x5 +w61 = AND x9 x4 +w62 = XNOR w60 w61 +w63 = XOR w59 w62 +w64 = XOR w44 w63 +w65 = AND x12 x1 +w66 = XOR w64 w65 +w67 = AND w42 w43 +w68 = NOR w44 w63 +w69 = NOR w67 w68 +w70 = AND w60 w61 +w71 = AND w59 ~w62 +w72 = NOR w70 w71 +w73 = XOR w69 ~w72 +w74 = NAND w64 w65 +w75 = XOR w73 w74 +w76 = AND w49 w58 +w77 = NOR w47 w48 +w78 = NOR w76 w77 +w79 = NOR w52 w55 +w80 = NOR w56 w57 +w81 = NOR w79 w80 +w82 = XOR w78 w81 +w83 = XOR w75 w82 +w84 = AND x8 x6 +w85 = AND x9 x5 +w86 = XOR w84 w85 +w87 = XOR w83 w86 +w88 = AND x10 x4 +w89 = AND x11 x3 +w90 = XOR w88 w89 +w91 = XOR w87 w90 +w92 = AND x12 x2 +w93 = XOR w91 w92 +w94 = NAND w88 w89 +w95 = NAND w87 w90 +w96 = AND w94 w95 +w97 = AND w84 w85 +w98 = AND w83 w86 +w99 = NOR w97 w98 +w100 = XOR w96 ~w99 +w101 = NAND w91 w92 +w102 = XOR w100 w101 +w103 = NOR w78 w81 +w104 = AND w75 w82 +w105 = NOR w103 w104 +w106 = NOR w69 w72 +w107 = NOR w73 w74 +w108 = NOR w106 w107 +w109 = XOR w105 w108 +w110 = XOR w102 w109 +w111 = AND x9 x6 +w112 = AND x10 x5 +w113 = XOR w111 w112 +w114 = XOR w110 w113 +w115 = AND x11 x4 +w116 = AND x12 x3 +w117 = XOR w115 w116 +w118 = XOR w114 w117 +w119 = OR w96 w99 +w120 = OR w100 w101 +w121 = AND w119 w120 +w122 = NAND x10 x6 +w123 = XOR w121 w122 +w124 = AND w111 w112 +w125 = AND w110 w113 +w126 = NOR w124 w125 +w127 = NOR w105 w108 +w128 = AND w102 w109 +w129 = NOR w127 w128 +w130 = XOR w126 ~w129 +w131 = AND w115 w116 +w132 = AND w114 w117 +w133 = NOR w131 w132 +w134 = XOR w130 w133 +w135 = XOR w123 w134 +w136 = AND x11 x5 +w137 = AND x12 x4 +w138 = XNOR w136 w137 +w139 = XOR w135 ~w138 +w140 = AND w123 w134 +w141 = NOR w121 w122 +w142 = NOR w140 w141 +w143 = NOR w126 w129 +w144 = NOR w130 w133 +w145 = NOR w143 w144 +w146 = XOR w142 ~w145 +w147 = AND w136 w137 +w148 = AND w135 ~w138 +w149 = NOR w147 w148 +w150 = XOR w146 w149 +w151 = AND x11 x6 +w152 = AND x12 x5 +w153 = XOR w151 w152 +w154 = XOR w150 w153 +w155 = NOR w142 w145 +w156 = NOR w146 w149 +w157 = NOR w155 w156 +w158 = AND x12 x6 +w159 = XOR w157 ~w158 +w160 = AND w151 w152 +w161 = AND w150 w153 +w162 = OR w160 w161 +w163 = XOR w159 w162 +w164 = NOR w157 ~w158 +w165 = OR w164 w162 +w166 = NAND w157 ~w158 +w167 = AND w165 w166 +OUTPUTS w1 w4 w10 w22 w41 w66 w93 w118 w139 w154 w163 w167 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-D.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-D.txt new file mode 100644 index 000000000..3aee5072a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/circuits/mystery-D.txt @@ -0,0 +1,188 @@ +INPUTS 10 +w1 = XOR x6 x1 +w2 = AND x6 x1 +w3 = AND x3 x1 +w4 = XOR w3 x2 +w5 = AND x8 x6 +w6 = XOR w5 x7 +w7 = XOR x8 x7 +w8 = AND w7 x6 +w9 = AND x2 x1 +w10 = XOR w8 w9 +w11 = XOR w6 w10 +w12 = XOR w4 w11 +w13 = XOR w12 w3 +w14 = AND x9 x6 +w15 = AND x4 x1 +w16 = XOR w14 w15 +w17 = NAND w5 x7 +w18 = NAND w8 w9 +w19 = AND w17 w18 +w20 = XNOR w19 w14 +w21 = NAND w4 w11 +w22 = NAND w3 x2 +w23 = AND w21 w22 +w24 = NAND w6 w10 +w25 = AND w24 w17 +w26 = XOR w23 w25 +w27 = AND w12 w3 +w28 = XOR w26 w27 +w29 = XOR w20 w28 +w30 = XOR w16 w29 +w31 = XOR w30 w15 +w32 = AND x4 x2 +w33 = XOR w32 x3 +w34 = AND x5 x1 +w35 = XOR w32 w34 +w36 = AND x9 x7 +w37 = AND x10 x6 +w38 = XOR w36 w37 +w39 = XOR w36 x8 +w40 = NAND w26 w27 +w41 = OR w23 w25 +w42 = AND w40 w41 +w43 = XOR w42 ~w37 +w44 = NAND w20 w28 +w45 = OR w19 ~w14 +w46 = AND w44 w45 +w47 = NAND x8 x7 +w48 = XOR w46 w47 +w49 = NAND w16 w29 +w50 = NAND w14 w15 +w51 = AND w49 w50 +w52 = NAND x3 x2 +w53 = XOR w51 w52 +w54 = AND w30 w15 +w55 = XOR w53 w54 +w56 = XOR w48 w55 +w57 = XOR w43 w56 +w58 = XOR w39 w57 +w59 = XOR w38 w58 +w60 = XOR w35 w59 +w61 = XOR w33 w60 +w62 = XOR w61 w34 +w63 = AND x10 x7 +w64 = AND x5 x2 +w65 = XOR w63 w64 +w66 = NAND w53 w54 +w67 = OR w51 w52 +w68 = AND w66 w67 +w69 = XNOR w68 w63 +w70 = NAND w43 w56 +w71 = OR w42 ~w37 +w72 = AND w70 w71 +w73 = NAND w48 w55 +w74 = OR w46 w47 +w75 = AND w73 w74 +w76 = XOR w72 w75 +w77 = NAND w38 w58 +w78 = NAND w36 w37 +w79 = AND w77 w78 +w80 = NAND w39 w57 +w81 = NAND w36 x8 +w82 = AND w80 w81 +w83 = XOR w79 w82 +w84 = NAND w33 w60 +w85 = NAND w32 x3 +w86 = AND w84 w85 +w87 = NAND w35 w59 +w88 = NAND w32 w34 +w89 = AND w87 w88 +w90 = XOR w86 w89 +w91 = AND w61 w34 +w92 = XOR w90 w91 +w93 = XOR w83 w92 +w94 = XOR w76 w93 +w95 = XOR w69 w94 +w96 = XOR w65 w95 +w97 = XOR w96 w64 +w98 = AND x5 x3 +w99 = XOR w98 x4 +w100 = AND x10 x8 +w101 = XOR w100 x9 +w102 = NAND w76 w93 +w103 = OR w72 w75 +w104 = AND w102 w103 +w105 = NAND w83 w92 +w106 = OR w79 w82 +w107 = AND w105 w106 +w108 = XOR w104 w107 +w109 = NAND w69 w94 +w110 = OR w68 ~w63 +w111 = AND w109 w110 +w112 = NAND x9 x8 +w113 = XOR w111 w112 +w114 = NAND w65 w95 +w115 = NAND w63 w64 +w116 = AND w114 w115 +w117 = NAND x4 x3 +w118 = XOR w116 w117 +w119 = AND w96 w64 +w120 = XOR w118 w119 +w121 = XOR w113 w120 +w122 = XOR w108 w121 +w123 = NAND w90 w91 +w124 = OR w86 w89 +w125 = AND w123 w124 +w126 = XNOR w125 w100 +w127 = XOR w122 w126 +w128 = XOR w101 w127 +w129 = XOR w99 w128 +w130 = XOR w129 w98 +w131 = NAND w113 w120 +w132 = OR w111 w112 +w133 = AND w131 w132 +w134 = NAND w118 w119 +w135 = OR w116 w117 +w136 = AND w134 w135 +w137 = XOR w133 w136 +w138 = NAND w122 w126 +w139 = OR w125 ~w100 +w140 = AND w138 w139 +w141 = NAND w108 w121 +w142 = OR w104 w107 +w143 = AND w141 w142 +w144 = XOR w140 w143 +w145 = NAND w99 w128 +w146 = NAND w98 x4 +w147 = AND w145 w146 +w148 = NAND w101 w127 +w149 = NAND w100 x9 +w150 = AND w148 w149 +w151 = XOR w147 w150 +w152 = AND w129 w98 +w153 = XOR w151 w152 +w154 = XOR w144 w153 +w155 = XOR w137 w154 +w156 = XOR x10 x5 +w157 = NAND w144 w153 +w158 = OR w140 w143 +w159 = AND w157 w158 +w160 = NAND w151 w152 +w161 = OR w147 w150 +w162 = AND w160 w161 +w163 = XOR w159 w162 +w164 = NAND w137 w154 +w165 = OR w133 w136 +w166 = AND w164 w165 +w167 = NAND x10 x9 +w168 = XOR w166 w167 +w169 = AND x5 x4 +w170 = XOR w168 w169 +w171 = XOR w163 w170 +w172 = XOR w156 w171 +w173 = AND w163 w170 +w174 = NOR w159 w162 +w175 = NOR w173 w174 +w176 = AND w168 w169 +w177 = NOR w166 w167 +w178 = NOR w176 w177 +w179 = XOR w175 w178 +w180 = AND w156 w171 +w181 = AND x10 x5 +w182 = OR w180 w181 +w183 = XOR w179 w182 +w184 = AND w179 w182 +w185 = NOR w175 w178 +w186 = OR w184 w185 +OUTPUTS w1 w2 w13 w31 w62 w97 w130 w155 w172 w183 w186 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/manifest.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/manifest.json new file mode 100644 index 000000000..cf3b98875 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/manifest.json @@ -0,0 +1,68 @@ +{ + "schema_version": 2, + "solution": "rewrite-it-in-rust", + "learner": "mdl-enumerator", + "baseline_tag": "v0.2.0", + "instances": [ + { + "instance": "mystery-A", + "family": "add", + "gate_count": 37, + "training_rows": 2000, + "prediction_rows": 2000, + "circuit_path": "circuits/mystery-A.txt", + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "prediction_path": "predictions/mystery-A/test_outputs.csv", + "prediction_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "expected_commitment_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "report_path": "reports/mystery-A.json", + "report_sha256": "f7e1d995f57c461b310ef96eb3c0f3cacfd46edd3baba188d1bc78b1968f6744" + }, + { + "instance": "mystery-B", + "family": "abs-diff", + "gate_count": 50, + "training_rows": 1500, + "prediction_rows": 2000, + "circuit_path": "circuits/mystery-B.txt", + "circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "prediction_path": "predictions/mystery-B/test_outputs.csv", + "prediction_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "expected_commitment_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "report_path": "reports/mystery-B.json", + "report_sha256": "3062208898583ef422291f7c5fd2ca6b321836e4296e85f47483b2711b1ee968" + }, + { + "instance": "mystery-C", + "family": "multiply", + "gate_count": 167, + "training_rows": 1200, + "prediction_rows": 1500, + "circuit_path": "circuits/mystery-C.txt", + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "prediction_path": "predictions/mystery-C/test_outputs.csv", + "prediction_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "expected_commitment_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "report_path": "reports/mystery-C.json", + "report_sha256": "e88e97faceeec1bc2fa1a52bbc7eca185d64dbd966e790566c6a5a020383eacf" + }, + { + "instance": "mystery-D", + "family": "sum-of-squares", + "gate_count": 186, + "training_rows": 400, + "prediction_rows": 624, + "circuit_path": "circuits/mystery-D.txt", + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "prediction_path": "predictions/mystery-D/test_outputs.csv", + "prediction_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "expected_commitment_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "report_path": "reports/mystery-D.json", + "report_sha256": "1585ab7796c5ef94ba04e6c8184563215863c71760aa905e3d283371433bbf9c" + } + ], + "optimization_report_path": "optimization/report.json", + "optimization_report_sha256": "960484ba8cdfc51ecf2d42140b41dfbf8163178250951e461fcac590ae1d4788", + "research_manifest_path": "research-manifest.json", + "research_manifest_sha256": "d8b5ad1183943a2f445169bf2487e8fc0103b4f78a65b44b198da83eb74047aa" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-A.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-A.json new file mode 100644 index 000000000..b693fd355 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-A.json @@ -0,0 +1,90 @@ +{ + "schema_version": 2, + "learner": "mdl-enumerator", + "expression": "(x + y)", + "description_cost": 3, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "search": { + "schema_version": 1, + "config": { + "max_description_cost": 8, + "max_generated_expressions": 2000000, + "max_semantic_classes": 250000, + "max_alternatives_per_class": 8, + "timeout_millis": 30000, + "shift_amounts": [ + 1, + 2, + 3 + ], + "enabled_binary_ops": [ + "add", + "subtract", + "abs-diff", + "multiply", + "bit-xor", + "bit-and", + "bit-or", + "min", + "max" + ], + "enable_square": true + }, + "termination": "found", + "costs": [ + { + "description_cost": 1, + "generated_expressions": 4, + "evaluated_expressions": 4, + "retained_semantic_classes": 4 + }, + { + "description_cost": 2, + "generated_expressions": 16, + "evaluated_expressions": 11, + "retained_semantic_classes": 11 + }, + { + "description_cost": 3, + "generated_expressions": 172, + "evaluated_expressions": 81, + "retained_semantic_classes": 49 + } + ], + "generated_expressions": 192, + "evaluated_expressions": 96, + "retained_semantic_classes": 64, + "description_cost": 3, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "alternatives": [ + "(x + y)" + ] + }, + "operand_bits": 8, + "input_width": 16, + "output_width": 9, + "gate_count": 37, + "circuit_sha256": "cac11ee6ad87c22af5c23222325fc285433c802f012919f056c2cf07b5b6b83a", + "training_scalar": { + "samples": 2000, + "gate_count": 37, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000 + }, + "training_packed": { + "samples": 2000, + "gate_count": 37, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000 + }, + "exhaustive_cases": 65536, + "exhaustive_mismatches": 0, + "prediction_rows": 2000, + "prediction_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "expected_commitment_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-B.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-B.json new file mode 100644 index 000000000..c6575e9ba --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-B.json @@ -0,0 +1,96 @@ +{ + "schema_version": 2, + "learner": "mdl-enumerator", + "expression": "abs(x - y)", + "description_cost": 4, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "search": { + "schema_version": 1, + "config": { + "max_description_cost": 8, + "max_generated_expressions": 2000000, + "max_semantic_classes": 250000, + "max_alternatives_per_class": 8, + "timeout_millis": 30000, + "shift_amounts": [ + 1, + 2, + 3 + ], + "enabled_binary_ops": [ + "add", + "subtract", + "abs-diff", + "multiply", + "bit-xor", + "bit-and", + "bit-or", + "min", + "max" + ], + "enable_square": true + }, + "termination": "found", + "costs": [ + { + "description_cost": 1, + "generated_expressions": 4, + "evaluated_expressions": 4, + "retained_semantic_classes": 4 + }, + { + "description_cost": 2, + "generated_expressions": 16, + "evaluated_expressions": 11, + "retained_semantic_classes": 11 + }, + { + "description_cost": 3, + "generated_expressions": 172, + "evaluated_expressions": 81, + "retained_semantic_classes": 47 + }, + { + "description_cost": 4, + "generated_expressions": 908, + "evaluated_expressions": 513, + "retained_semantic_classes": 339 + } + ], + "generated_expressions": 1100, + "evaluated_expressions": 609, + "retained_semantic_classes": 401, + "description_cost": 4, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "alternatives": [ + "abs(x - y)" + ] + }, + "operand_bits": 7, + "input_width": 14, + "output_width": 7, + "gate_count": 52, + "circuit_sha256": "27f291224e01c310759085602b09196a7293e71d3fa44f885da559f123332fb4", + "training_scalar": { + "samples": 1500, + "gate_count": 52, + "exact_matches": 1500, + "correct_bits": 10500, + "total_bits": 10500 + }, + "training_packed": { + "samples": 1500, + "gate_count": 52, + "exact_matches": 1500, + "correct_bits": 10500, + "total_bits": 10500 + }, + "exhaustive_cases": 16384, + "exhaustive_mismatches": 0, + "prediction_rows": 2000, + "prediction_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "expected_commitment_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-C.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-C.json new file mode 100644 index 000000000..7b72f72a5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-C.json @@ -0,0 +1,90 @@ +{ + "schema_version": 2, + "learner": "mdl-enumerator", + "expression": "(x * y)", + "description_cost": 3, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "search": { + "schema_version": 1, + "config": { + "max_description_cost": 8, + "max_generated_expressions": 2000000, + "max_semantic_classes": 250000, + "max_alternatives_per_class": 8, + "timeout_millis": 30000, + "shift_amounts": [ + 1, + 2, + 3 + ], + "enabled_binary_ops": [ + "add", + "subtract", + "abs-diff", + "multiply", + "bit-xor", + "bit-and", + "bit-or", + "min", + "max" + ], + "enable_square": true + }, + "termination": "found", + "costs": [ + { + "description_cost": 1, + "generated_expressions": 4, + "evaluated_expressions": 4, + "retained_semantic_classes": 4 + }, + { + "description_cost": 2, + "generated_expressions": 16, + "evaluated_expressions": 11, + "retained_semantic_classes": 11 + }, + { + "description_cost": 3, + "generated_expressions": 172, + "evaluated_expressions": 81, + "retained_semantic_classes": 49 + } + ], + "generated_expressions": 192, + "evaluated_expressions": 96, + "retained_semantic_classes": 64, + "description_cost": 3, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "alternatives": [ + "(x * y)" + ] + }, + "operand_bits": 6, + "input_width": 12, + "output_width": 12, + "gate_count": 182, + "circuit_sha256": "f8d4f235c43e28749265ba12e68fba36bfd5671d966b132d20e766fdc729929c", + "training_scalar": { + "samples": 1200, + "gate_count": 182, + "exact_matches": 1200, + "correct_bits": 14400, + "total_bits": 14400 + }, + "training_packed": { + "samples": 1200, + "gate_count": 182, + "exact_matches": 1200, + "correct_bits": 14400, + "total_bits": 14400 + }, + "exhaustive_cases": 4096, + "exhaustive_mismatches": 0, + "prediction_rows": 1500, + "prediction_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "expected_commitment_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-D.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-D.json new file mode 100644 index 000000000..d311a4647 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/mdl-reports/mystery-D.json @@ -0,0 +1,102 @@ +{ + "schema_version": 2, + "learner": "mdl-enumerator", + "expression": "(square(x) + square(y))", + "description_cost": 5, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "search": { + "schema_version": 1, + "config": { + "max_description_cost": 8, + "max_generated_expressions": 2000000, + "max_semantic_classes": 250000, + "max_alternatives_per_class": 8, + "timeout_millis": 30000, + "shift_amounts": [ + 1, + 2, + 3 + ], + "enabled_binary_ops": [ + "add", + "subtract", + "abs-diff", + "multiply", + "bit-xor", + "bit-and", + "bit-or", + "min", + "max" + ], + "enable_square": true + }, + "termination": "found", + "costs": [ + { + "description_cost": 1, + "generated_expressions": 4, + "evaluated_expressions": 4, + "retained_semantic_classes": 4 + }, + { + "description_cost": 2, + "generated_expressions": 16, + "evaluated_expressions": 11, + "retained_semantic_classes": 11 + }, + { + "description_cost": 3, + "generated_expressions": 172, + "evaluated_expressions": 81, + "retained_semantic_classes": 49 + }, + { + "description_cost": 4, + "generated_expressions": 916, + "evaluated_expressions": 521, + "retained_semantic_classes": 339 + }, + { + "description_cost": 5, + "generated_expressions": 5548, + "evaluated_expressions": 3327, + "retained_semantic_classes": 1875 + } + ], + "generated_expressions": 6656, + "evaluated_expressions": 3944, + "retained_semantic_classes": 2278, + "description_cost": 5, + "minimum_unique": true, + "equal_cost_expression_count": 1, + "alternatives": [ + "(square(x) + square(y))" + ] + }, + "operand_bits": 5, + "input_width": 10, + "output_width": 11, + "gate_count": 221, + "circuit_sha256": "ada199dc65a64fed9554998cbc60009c1b80aba016429c7d3e7ab5401d365ba4", + "training_scalar": { + "samples": 400, + "gate_count": 221, + "exact_matches": 400, + "correct_bits": 4400, + "total_bits": 4400 + }, + "training_packed": { + "samples": 400, + "gate_count": 221, + "exact_matches": 400, + "correct_bits": 4400, + "total_bits": 4400 + }, + "exhaustive_cases": 1024, + "exhaustive_mismatches": 0, + "prediction_rows": 624, + "prediction_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "expected_commitment_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/baseline.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/baseline.json new file mode 100644 index 000000000..475962f05 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/baseline.json @@ -0,0 +1,17 @@ +{ + "schema_version": 1, + "source_tag": "v0.2.0", + "source_commit": "fc58c3a013c480ecbd12469b76266376d406fc99", + "gate_counts": { + "mystery-A": 37, + "mystery-B": 52, + "mystery-C": 168, + "mystery-D": 187 + }, + "circuit_sha256": { + "mystery-A": "cac11ee6ad87c22af5c23222325fc285433c802f012919f056c2cf07b5b6b83a", + "mystery-B": "27f291224e01c310759085602b09196a7293e71d3fa44f885da559f123332fb4", + "mystery-C": "d139bb17ebf4d4a1740c14ae20377432ce51d0f3754eb14e60db7d9d38da7565", + "mystery-D": "88ccefa31486021fb3653a9b111463c2df1a6c49a549fe61174d96a51eceb85b" + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-A.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-A.json new file mode 100644 index 000000000..bfd70dac3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-A.json @@ -0,0 +1,1032 @@ +{ + "schema_version": 1, + "baseline_gate_count": 37, + "abc": { + "schema_version": 1, + "baseline_gate_count": 37, + "accepted_candidates": 7, + "selected_flow": "compress", + "selected_gate_count": 37, + "selected_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "0a5921d259f37c7aaf24183797ca4a2cec77380eeff7a1a7394f4ccecc44261e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 37, + "final_gate_count": 37, + "attempted_windows": 7, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 65536, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "cac11ee6ad87c22af5c23222325fc285433c802f012919f056c2cf07b5b6b83a", + "attempts": [ + { + "window_identity_sha256": "501f23ebbfe1fba5cd5d66bec062baef0b73384be54529edabed3ef193845dea", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "7c80ade82492d0cb47f4fe7e90a3ec957337987827898351c374f48f7a9b3742", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a943ce7f5d32ce8f5b93628c1f0135ced16383d4ec30da853f9d4de23df7962d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca4d446e378cbec4b8f0d830e2dd51c25b3346a9f06d961952dbd5e49389ca80", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c1e3b073eed27844bf918feae2c324a2a839b5aebb5eb7cb2ec4a46b5217798d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fe7e434b8ffea481c84b2c29e8c80a0632783842468cefc00308d170daba38e1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "1afec29669cd2dc93785785aea5eeebcec5ac8497babb35d2656c2d5ee5e366f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 37, + "final_gate_count": 37, + "attempted_windows": 19, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 65536, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "attempts": [ + { + "window_identity_sha256": "df481d354eb969890147db74548bf1bd16999cbe5c08fc647e262905f2127506", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d9cedfc6a105569152bc0e273f189b2479ba748869dbaf87e2bf2e1c6d7203ba", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6f834be79ef16527d9348a098b27d089885fbd5a6aa9f50ab286bc9d5350ce88", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "62bae3371539df39f43f2e94087ee6108ca5fc5a7fb7d5789bda865428359e63", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c72eb9447526c10189ad9e8b124b32a8b10c0104e5b2d8ce0fb88b3459215c4b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1d1856212f503fa2fb0a03ba2b353b04da142aa864d8e1c17bbd3814015f6ae4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1598e7a03ff659a3e0d6e80765a0cc2ffe5c5ce05ab586b29695b87a6dcc280b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "29cbbdf412053bac6e3b2f8af6aed83850ebef52d6a7308124ea8d559d53168a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ea773a4564a92b650a480beb9c5405758b9697af6b548af62cc7ae21c1a1d79b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ef1cc04067e27ae5ab6ff4fe0004f0b5bd89789c53f1864b4cdc7050be27f0e0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "234cf5f8ee5e6a7aae8a360012ae1eda07ee2e16cf930aa6d90e4db79ff6b933", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ce817a02bfd364c1d87aac6f78acf606f5ebe43da4df8da22c406719f76ce8f9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "aee4b73ed9c0c3515068d721000cd739acbd800d026fda2984d689316f59f07e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "41bcf0927d187d9f9e62f9e32153439f397c76f134ebfd888bab9cf186923fe6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d46ec19031630c83f62f0867fbf8d29c26d17108d5842c6af734e327cafcc5db", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2ed9e384ed44a1036c81ddafe2007de73ca35b71aa7109a1d13bfd9229158e8a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfcaa02a48376f68d2809c9909e7d53d04c291f78aa3719eac58f446f4d4cd1c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3ca9ae6f31cdf540ce08a0a05203a1067d83a8bfd3bd18293c6d0175a938d460", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6d95ab781601b49449f7aeaf1db085daf42b40af1bfc64df23fc9909b685ce75", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 37, + "selected_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "exhaustive_cases": 65536, + "exhaustive_mismatches": 0 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-B.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-B.json new file mode 100644 index 000000000..de185c9fb --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-B.json @@ -0,0 +1,1440 @@ +{ + "schema_version": 1, + "baseline_gate_count": 52, + "abc": { + "schema_version": 1, + "baseline_gate_count": 52, + "accepted_candidates": 7, + "selected_flow": "resyn3", + "selected_gate_count": 50, + "selected_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "6298b72253e2d2e0a400ad71513c5cadb59ea1c7672968efb348ece3ec9704e9", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "47538263fe6e8d78b56a2f85f0c549076df2d8074ccdc6e6c660c17baa3a4dfe", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 50, + "circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "6298b72253e2d2e0a400ad71513c5cadb59ea1c7672968efb348ece3ec9704e9", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "47538263fe6e8d78b56a2f85f0c549076df2d8074ccdc6e6c660c17baa3a4dfe", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "5607d81043ed197fa1ad1277f7e0e8a81fb8e6f8fac2b4a0110a3f19b05a53aa", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 53, + "circuit_sha256": "808900d6b074c66ff4e77595f036cb4a61a801e4ca9f3e23ab6748182cecb1bf", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 52, + "final_gate_count": 52, + "attempted_windows": 14, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 16384, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "27f291224e01c310759085602b09196a7293e71d3fa44f885da559f123332fb4", + "attempts": [ + { + "window_identity_sha256": "064ba4565f9f9b1927b8f4395e0bcf7c6056f7f7ed804246367e6f2143350696", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e59eaae7095643a12fd17c0c137b7925535e7d2061bab973b78424f1a54485cf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8b852ce384d5d76f99e824d35a72630c45f310ed2be46171d786578fa2a48bdd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "65b8c653ba8fd1323b9141bfc90ec2edeb9e9dcec6e8a60049bc230642b09d8c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dc7344081286bcb922fd0df407c943977050689051384d2769003ede3151c583", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d1fe886e9c7abda500c9986a067141c3decfb596d1604425446288d1af65235d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cb6f1813422fb6b61aa3525b9544ffb9a7081fe860d3e3a857a1945bcef0eb97", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0c8ff0f4ae3064806aa0f1f2f77fa060c3753ed94c6c0ff58f9a8cc5dcdaf19e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b4d8f30f16a19db3aed9c89031afc1bbe2dfd7b0a3a896118a236ec762023d26", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "060027754f3fbdd3dd021697257ce0ed22e649de9cc0e9d73116e91bb70bb85f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "65dc55c4e098d839ff297d9637d5084c2ca752eb1cf707d5b35d126ce2133387", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1f1e9af34dc7a21a1ba55f8ca132ec043be588fcceefd9c53cf74a397ed313ec", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a968352b365becc9e7b97603ded384f5083728a2b541ee69516507cae02e6f79", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4fcd8d550752cef9c1a8fc1417097d742ccfc45824e5cdb8be8374ab07be46e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 50, + "final_gate_count": 50, + "attempted_windows": 24, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 16384, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "attempts": [ + { + "window_identity_sha256": "606d23d835844967030c6bf0ec0969c6aa21df8e8dea09d00d42b9e5251b4d7e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b3a2a2ad780672162ecf54e8e440f0f015d9984bf37cce24ef24f77e2a029840", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0d2301cc3931d0821f3f8ab01beacc05df98d6a2b879e23af95c9c0e590cab46", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9ad32ab508e10526d05dd5b93440e45f4b4e7624f32213466309f9b4a01816bb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "bf44a1a2f08726e0fbc8a3916c41073af6673e9c8a95e3d1d3684f23521affce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8abd6496922c6afc3d85a4df7756a2fe70616862346bc545548e31b0a72b0f2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "abcaad99691cb462bb71b58e92ee4677250ad1fda0de47f094ff547931d7503a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d64f80373c353748d754d3cabe68ae038223fdc7ab6c6ff4e3fda644d83f1b7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2a81ae6092dd79961aea7a1b2285a07bb3c445447f60583d7385c269acf82f47", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ae5156574e34f060dd7f338c2eb27924f8b0bba712a8ffd0ba1a10bda483507f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "137a48557d598132a4362025d29c2d8fe30f516638df2e2a9d3af3efa363fb28", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "228992c59b3c971cd266fb1f711a2209e7b818f5d11815fb10e5c3b3db6ca5af", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4da0344e85406dc7bf737f81e9d2664e2f8e0a098da317a166ef60c1405b6edf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d72e08d13b6e3b8eb13019f11a6d4bae9afe54166c340ab50ffeef0f8371750b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7fb6f091e7d8b67771e1b456fea5008259f2730207cd9d7325aacd199464bfb3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "fd1884b3fc5d7354f53ec73136aec98b16dc9215fc98ed84828c1b57f6570f1b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d6efcf723f6f99790628440a3cf4002f86d0cb5238908661a2cdcb85359e774b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "736ad8c8e5986311aa72d6720a442663d63be3a20fc2cdd7eb10bb7694885bbb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "916c0efe43a0944bbc52c9a61f5814d37c1e3320366ded0e49b20bdd243d2758", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "44547ca1921d546ac2dead83e2903899020e66e0e930b8ae66d42c76946aeb4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "654de0e772a230f385f0583fcba3218a0753f1d924fc0803c6dd730ebd14e5be", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "59d638fb15402e0b2b53a44264e0895fa08b921fdc1131a5b6d1d8dbe79e5dd5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3962cc1b2138231315c28e24814eb104fb6375b8260a6d1d6bd49181aa0700d4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e2f74e1ab4e05515a6aed933c2d4fd79dfafe693d7cb2d57028cf53f72798d08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 50, + "selected_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "exhaustive_cases": 16384, + "exhaustive_mismatches": 0 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-C.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-C.json new file mode 100644 index 000000000..3fff29790 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-C.json @@ -0,0 +1,3412 @@ +{ + "schema_version": 1, + "baseline_gate_count": 168, + "abc": { + "schema_version": 1, + "baseline_gate_count": 168, + "accepted_candidates": 7, + "selected_flow": "compress", + "selected_gate_count": 167, + "selected_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "a00e5b569a3de617d9906394fa3deb3a9cd1913e77813314623cdfabcb6d010e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "985f2d43e35a7cd832bd113a33e7e56aeadee8d1773c5dddd9a43b9e1d53609d", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "a00e5b569a3de617d9906394fa3deb3a9cd1913e77813314623cdfabcb6d010e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 181, + "circuit_sha256": "f3ad7f0c32f17afc2e0ac2441fcc5a7d7aa479836f09af0871becb8977e08a5c", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "aa53d8edde757e176f6d244ceec5835f58a3f83d05314529f0d5c56ffc96d679", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 168, + "final_gate_count": 168, + "attempted_windows": 48, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 4096, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "d139bb17ebf4d4a1740c14ae20377432ce51d0f3754eb14e60db7d9d38da7565", + "attempts": [ + { + "window_identity_sha256": "e66a9027d3bccfc97f3341b0c044f1b650efa443e13fe04e004101b36b58f100", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3d27a14d1e698f19ca7c5872d7bc50bf0ee4b69c9d2379c90f58dff6517a0e3d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ef453b1829e7d328511cda6b3a6a55dca8b5e7f2be9212d593547e6afba0d757", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1b21af12d493d882cdef2bf2346737302b7938f4fdc66498a7d3ea31c837301b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dc353fce362682175c629741745085f05d7fc92f0dbbd2ddcf689038676f8d4c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "53b909a700826fa3695503d2fea764321e3442708cf7aa02afdbc4afb1f02073", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3fb21a58930c6ddb6bc496c62493b79d487df98c6c798ec43f4314c02686830e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b0cfac3377b52f5483c2410917004536a0fd1ee764133f0f1dd369b06061c3ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fe141ac0f0d33d2de48e91f2447a75a44d5fbf80b9568706e484d10d76823109", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b58533a5bde9577fe341b3a6f735c4e2afd8383f0fa68a56715448506f756d32", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "fc1cbf1decadcc9af661a205e9893a7d26a0ecc17bf567de73c172719a602b4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d2dbdf31d89b789e7a05353dcf1f02cfece1e57430e10124c38bed760bbff38f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "60eb11657ebcfd090c6d54fe49e73e7b58bec12fc52afd80c4c2f9c620c14e60", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "de68fc20d8aefaaa7e88bce820c10648a68e93107f81cc2db197715469c1b55a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8f8a2866a4f58af5311b4ea7df833b764d19f5b3693be8b886875353799c9033", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4a56bea956b0394d447867cc38c59e2ae4f04835c7e249e7fd2deb4bf8f6d8d5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a297c0864c42eee996950f8fbba3bc52b090d41f2c679c5bc1c4f4ed46962cc1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e659f50d658a8f11a25e53c3902749422d43e8025140e004ee1953ad4401aae3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8a569cab03d55fe1b04cb1aa40452d48bea902a9d8027bc395d266379f44d73", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e9d4b7632eb89914b2f62006c8354e9a0e698e4135980a4487a1a253e818a72e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "54f195b1727dc7ac06cd1e7b92eb62774a9d5c7d05095f547ed1d1ec0f8e8b7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9b659c9e3c10e7383b2c2756a04ba761bf626cb56087e3cb04412aa57e72f674", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b61a0cb0173a443b2121420e6b3e90e5ebcf8b0fcfb8cc6838fffa13565e2e89", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "df2f6224962d522bb8d155b1f56be3487a873a0d7ee212d50ef2a75aafacd46c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a3bbfd42051b9f22212b99d2c93c33abedcd9cf4409d85c74369676270af6481", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3a17b0c016a7c6daab88bfbec484dae3bc834a7e49d56ce0febcc24abf29a9ce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d666d96dbe36d418a5f870fcb5017796be52525f0b7a93490db935d018815f08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfe1c8a8764a3c22fa95fadc09129f8a7333c54d843eb2f5b4fbf63bcaa40b06", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6134a0d14d552dfb005151245819cce35a4320acf656f639abb7c92315eeda44", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "54837acb810ac0c70f607f1e1c803f2a7904d4853ed2b3d42bd0b268dbbd7b7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f988f6ac1b01598d0501c76bc3d2d1dae1bc4a26836840188a6165da90621768", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3eaba834f0a915c796f5e98d6698af58bbe9c0dcd1b9d6754b4c8f75a3bd9fef", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dfabce872ec190653f4922e74a6f3f10ee5a0faca24bab43f3979bdc29c67e61", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ec7d990f4a7582765373a815a62426c524703160929a27c9710e69d022398a53", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "f68806d81da9c139d103af54135637c3a0a44844159d9cec28f93be526778b5a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "96fa432eae0045931a9a4bbcb8a27bd5e121631264214b96e474e121f1340f45", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2ad5568cbac462a87e09aec72f9dd0c226b2124423e4338df45ccfea2f429cb5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9c91a4dfe29db1f5282da24b63174a5c6b4517d426169432953b0f36bc20f7c9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8538a0afa94c728705bf5dc45b7815594c15d1bd8d856eeb4fda6df69f5e98f1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "71f4ff679f4b017094f47660b764d9aef0970ac37f20f26d58bd2008595c680d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "07c3d09b38bd2a284cbd2d834f5a331549522d4c438d642d8631117995f3ee68", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d0ce4acb1e140d1dc6238dc9ac4cc530438c0534f96ae6925f8092c3cc77a3a2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "84d6256d39b6d62494338f53f88dc67dd7bef52339107aa8fd1b2eb83f803d08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d3da15d278d3042e0a1198ea440ff85f3aae9395795d934fbd8d44e00e84f4b7", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "395fc9b367f5df5d5b7f6f1149fc5d26453f6c67d1f90fed5244ef9334070dc7", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "33c6a51f13b7afa0f9043aeaaed2b242eb212cfc4643f902a6161a993919223b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "46707b16348f7b6a8906871d2ecfc2d5a6250820d7095e1ee7cba0841f1e655d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "676b23558406beb4625e8211f0f72edf6fb55ac55fd353d28db2d0d709c85792", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 167, + "final_gate_count": 167, + "attempted_windows": 48, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 4096, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "attempts": [ + { + "window_identity_sha256": "49095901ee85808687acb1965649e8683d5d3728607ccbfafba40c5aa2609b2e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b42dca46a85f467775dad3264f3195675c252b06567888b94dd7841399e14cb3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2c75d0c9344998e504efb176a30b50a71391c56278521e7d4db8e43a36b3632b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "05290ea88cfa4dcb39fcc5a42aa2bc06f9a99a2a3912b5fbb53a29a90952b72c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "37f542a2b4a1752783218c8d197494fa80db70658106b1c3c6ab4f48264fc146", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfacb7d00be4f541d85e7a68d813e05ff54212ad1b3c27a2eca7379a6071571a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "88415282594b3e19c06411ec16c691e5cca251fc83ed1a2013fe4f8a1173e19f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2881e68365d68bb5330a0e68184d79cf549c2dfd3e67ebe4571e3f7a03f17683", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "37537aee05cf9f32280b2d2997e505490acc0aeb1dba7a9918debf2c8080d19e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "17281004dab4f5c66956dadd18e2f4763321a054d7c2bf1811302fd6d7de6c99", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "772b94922b8258014da0c737ff450dae50b27c2d8aa2ce3c1227076441feb866", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3c38aa4348d7b5284dba75a4865ec82c350907628122efae3a464b4f9a7a395e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3d850a40b94b34ff22256fa09259feb76182711a690ace6e0c81cac52c7c61bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca966ae04476a3101b6dc81e6cc01a743d810af3b8275f66294eded7d37a51e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "f2d8ce73f3e443f0262dba4db501ef21b61351751ade1d6191ad47422064f45c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c844759d3984b39302868b031e02c8de60269a83d8b4dcd5afceb756af0c414a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "753c66a8ece530350ea4d55c76a16c162dacd21bf9beabbd511f9b40d5fc2bbe", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e9d35e0772a618a4f2589bd9e2486b6e84b83319081e8e0cba836904e384cb7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3a99aea119c92e0ee12daf2f22aaacea2e07f58d44c6ea58f1684fea66855299", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9989c5ca144726f7e70d911154be240867403efea2227d450e9034612e972dfd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "299e698822ddc34afb048614a8b9faee65ace0bacc2564cd7060ca57d6aa2779", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "1af15bfb393f0239907529e738b9e5c99f1e5587de75b4a1b8d105f7c79d5f76", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a8d2a0c41c9a7fa86f7a22c1bc62df558e75a4e5b68076d141a36730d6fd67aa", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "088b19bff3b77d304bd86d583e4e8ac559e7cb8a1053ef788eaefe4121637fe4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f193e15d6ddcf27995a19c05cfe3c68b2fb25db85070f2a0de657dedc3a17673", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "afc9c5b6128e4f7c9a1105e998af8bfd13ad26814416549e434d61be534c523d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dee1a056da4d0194bd6c083ba98a3a4f4194e76661458bab2fc711ad634f831b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2200718a55154c93e06e4a3afc59deb44a844f353fd456c0524bc6bfa7bb588e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "114bdc2b718517fd0f7241b0c761b5d10150f83376e2b29d1ddfb90505a6a479", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "43f04ed91a7c324b858f453115f6106e7d67a18e0e095255649d83548a70b964", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "deff31272f2b86fd7c63d3e97aa8d04a3377a3725752f38250e44083480fcd8f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "62beef8e3bbd0ff2ce233030dc7296c95e8067ae160d49de83eda1055f17779b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e22c7d170b1bfd82656bd684d137e888500eb9dcfce0a462f606be53fa787ed2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7df65e48c60a276272cf34fd428bcc8f40db7b440606ca9096429c33ffcefa3b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "752d77d343361db003bf27e56ab79800f2c1c4cb142632c2c83058e09fc03111", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ec2c4fca1a5a5f84c4b39b536ca78d679b531fe8e2d82fcc1a96425335fdf4a6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "41e3a58eb505b7510a572f88e59f5af46f7fa5a12d016889a4140ebe3e6379dd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dcfdb9858a78c6fc90bf92ad395519557b03abd0c798c735d454461932b74470", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "0fc7bb54c42c2bb29ff19bdad37d9797659dcd5a6bc003de8f676ff60bd5a0ad", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "40a024cedaf58ea6b973d1e4305638fb3e7c54ea75282b093cd45d474309fb7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2a47fb046db942baa081669e0b5a9810226b4a92b29505cd01b80870148c60f4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "93914bdd6b4c7346aca28f2b937fa36655de42c482d9a37db268b60cffc35b48", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c531e289f59ec4783613d7791db70100c38786a8ecbcf5fc482b473ae5ff86e0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "db077941bd17ff36a201cc0687e98eabac1b84701736bed16b0211ab67198873", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fc19478c842200f635f6bfd5effaae1abbfcd95a6ca8b1c88e0f19f9c867f9d8", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dab1e93a76958fff6c2128e0de17d30f7e9764e58ba7f650753d210636f6ce86", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dc8361c43ef98ebc4692d5643dae2f33bf1c24d804f98815efcf44ebd08b991f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d2abf854a18fb9834f9287cee5814e0430398cd12fb4cd561d907079596aa69a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 167, + "selected_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "exhaustive_cases": 4096, + "exhaustive_mismatches": 0 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-D.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-D.json new file mode 100644 index 000000000..e446ce8ad --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/mystery-D.json @@ -0,0 +1,4398 @@ +{ + "schema_version": 1, + "baseline_gate_count": 187, + "abc": { + "schema_version": 1, + "baseline_gate_count": 187, + "accepted_candidates": 7, + "selected_flow": "compress2", + "selected_gate_count": 186, + "selected_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 189, + "circuit_sha256": "869cd6d5567ce9f27b1252b931398794d3f4b923b313598f1cf0e80e0359861f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 186, + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 188, + "circuit_sha256": "ac4050c2157c07d0e5ce0d4e1618d72c182b44fe933cfa86cceaff696e2a7d8f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 189, + "circuit_sha256": "869cd6d5567ce9f27b1252b931398794d3f4b923b313598f1cf0e80e0359861f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 186, + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 192, + "circuit_sha256": "973b6eecdd8077524c0cf91a53dce9e80e23c384d2c76ab39bf47a7a7aed2200", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 187, + "circuit_sha256": "81e70243e52f5acdec55486a80259438eee214570eedf98951d3b505a8ccf9d6", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 187, + "final_gate_count": 187, + "attempted_windows": 64, + "accepted_replacements": 0, + "termination": "attempt-limit", + "whole_circuit_cases": 1024, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "88ccefa31486021fb3653a9b111463c2df1a6c49a549fe61174d96a51eceb85b", + "attempts": [ + { + "window_identity_sha256": "78c8c8af7e52381d70febe09376e018e382c81b7aa2b994c1f860d15deb17af3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "25e02db1b9905bfc39401b312989e8a37583374fd1f55031847f25b21e1785c8", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "da8f00c32dceb294d72c5ea75568d3b490a881305017aeea518ae60f392fcc0d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "48fe648067cd36c782a78b88980f7673e464f6b5759ca1f4deeb0274536c505d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dd8500e6969ef4dc5dae9aadb739233d9c1cfd07a186d65e453c85fafb07756d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b7113eea365b6cd5aa75a5189200e00cf1a25bb6cb0b4a355735dbf298d29afb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0f140186eadd12e3040d07be66d171e6d95e80c0e6d341d6482c81250ad4391a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ed147d1c400952b02eb6d31a03b5a0c356e25903112f4e6a4271907f35911d64", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "40038b895336d02473237ac5dc0da3e5af36903de960bc0b189b7a156fc96f90", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "96dbab3f93e90c8b206adca231428a050727a5de7d5bf7ab1b79882a682e7895", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b2ff4c5861d9598efbfc1cd69a71c6d67e17018bd2018672bb66b1ce963b5984", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "99798ab8d60e72674ad050c2fc0be003cdf2b3745e5574a77afa7bd73a5f6747", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ae329253c19925b75895605f974b9da9139ff44b9837b3892b86c7690f2359df", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "42627b0eaba93d6221252d49d6f476d89fafd62481766b69d99ba91a134e27bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b164d4d56ff7e27c289b74caf4710c5be8a839a9e52ce29994591cbfd5ee5110", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1a31542510a44e7c5acb2e2c6dff975eb8c64755324b2590378f3f91ef2662cf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d6dbeabefe263099266f2fbf516cf9555cbdd0b2a64008771e389673b5c8ee50", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6e97483a1f942245181b7ce33a2b3466623a0c9c8de9a87de690c0d0b289ed1c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dcb41977475eb03efcfa97a233852fe03474e75645517a8d499b6a26212bfee6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1f2ad678daf659c40231ccdc3e341e279e86f66b59fd81ba99906223ad54ccc4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dfadcf29ca3d5a2084a88b26a47b00cfbc4e93b3eba436259f074c226ce6d23f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "05c3dc65e249b895ba96bc0f61cc9bfd936a118723bccdd3c851fa102ef1ad59", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "de9b4d3af2c0c5a7a9dc27b344de6aad2dcbe9525d836bb0ef2163d581134f2d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3edd618cf54b2be498495a020e5ae2f425538ddb4c3d3a650b9c236d6a7d9b99", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d35272fad62678276b93281937d6705121d6e3cd97eebb3e13dd8b7b8fa4ef06", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e469e3fbfbfbe45161ec543bf4fb7a76c99d7a611dc5e47d9632619df71c2e4e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "947eefdb58f1493d041576b6092ab6ce536c3113a38bfc9aa3cc0260989fa20b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "03b35885062862d31b6d68951bdc6e64aa4275e0d75c2bb395af111b75d59f36", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c89574020b0674be903e5915157d57b9ad0c8a92e20a964babe5a29f9adcd24d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ced15bff90d345aea955f1830d1e2b785485c590ef562b2a39c7a885d4d09ccf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "cd67d49c4732c7e056703a0599b5d5c09c734bdf1fa232d1d357857ea94e6129", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "32f4b22b880089bd01f72ca8e21c61255cdc6b3168af3b1122c2a17183102f2c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "acf7554e8e8afbd6b691d2ffaffffa5e6fe8e1a1bad490dd63153473ccf3dac1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8963b33b14208b969139b4ae8ec33f916c85a3cab30ad1065ed3fd639d41e328", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7a52fcb469aa687216663e8a44732ee79a30fbe9eeae09daeb84ed075f992488", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a557d54ca26e0ed20ce6a7cea961e1a78bd0578712c96c151d3bd67e464e7ceb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4f5d07b1173ecb7d11e81866e51fd2668dacfdcc75bec7568781aef0cc3c78bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "617234f851e816a8d038fb7ffac98a59e65c2b6d031800fb56d8b2c18eca4806", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f2b102f3b57d7d82c7e9b31f24362f510c29dac31e0807546b6acd076bf7bfb9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ac4d9f13ffae012de397d31601fa6929cf5721dad76b5eb40177e20a5b37fa04", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5b340bec163ed46e7b6748d3c5d41e43e85307868d41eb9cc93ef91d7dca2041", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0baa8c16afe2bff6d1dc809ac3fe40394882983e02c52b52c93bb6dc8fcbf5b1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "05377876229cb7ddb437380f02b080eaa4d2eb18755caadb89e7d9723976a27e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "41e94cbeea0001717c2480b66f6c1e3baa8c7e5e3f02a998ddd6120c6c64a9e6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "10c3f5e5883dc06708b36af872ed0e8930c67a2328e35b467bb959c17433eea6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ffc20f9191854292b5ee680f196719a6256ad80a8443426a6735b76f6b587439", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "9eadeb0fd0daa3b2a2f566085eb65bbf3ca9d55df04f00f9b00d563d7a5e7ae0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "08645896c764a6b4d60adf2488a296a6b077c2d69ac13c208f664dc1cfa35b2b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9fa76173c2a6905b5ab40ed68a00b16ffa4357e3502d03c6262355f145d7aca6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d046988c0696f18dea6c049b5a9d405d5423c69a99d0ea8035ec012ceec6dfc3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cc0810653d9a6989c26ebed3033aa4f98bfb891ec131428ba8bc628dcdd67113", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "42b093dc56a251e565eb5e55299fdd45ccec4053b2f1c5a8762a9bddf7144f8f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "df22e7a623652e2a3912f8145d86ee6313ea599499089b88ee6af8155492b88e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b7cb3cde3329c63d75df1af8704348d144fac15ef9acedf7bdd857b776ebee23", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "42c1deb0b37525c147a326ef10bd6553287622fa134707948f3268e76f10ddea", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d11a27be78a1a1d638a4f1cfb4fc27820033effe8690705e3343de38592ae188", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f5113beacc399baa64b22a74dfb6c9d0b3ff31fd3e3c0943e2ff42ab71459507", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4c1c7caf817b5d871b121511221239df2bea042fbf35c357ce44ae1932f67b21", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "543b246f5096e238edf796dd7bfabb4483169ecf23a55a8240b9dbe17390e167", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "48b6ca25a93d337e25e642b314e17cf40d26dcad01650db9353a76767127ea45", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8c92831e2eed4ec9b3238040ec6045edaad0f02471983b7952bbcd7c4bb103fc", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "7853b6b878ddc130ac5ff007e89d2b3fce559d50db7b10d9880f07af1ab59a7c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ff21cc14eb685c19162d339808d2442fb27681299df6529a94845c20c1b4d21b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6ab0d6aa3478dfe78b395ddb08a165fa8de01cf750b165bdd19dc446f7eed0d6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 186, + "final_gate_count": 186, + "attempted_windows": 61, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 1024, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "attempts": [ + { + "window_identity_sha256": "40a557b3c3504c349bd7da3baace61d027d5cc24ab082473d20beb3bf333ec90", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "da45264f03274a6c55279e369e7f9dd95ee9595246df932a030d3383ecadf92b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "077f16b7fd1f6a510e922452ef8e9a9faaedd05f40f1458b05e73b9824f1c967", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c2d3d2dbbf8d1241a9a50338c991a5a472e4b2542d3befe404ca1c1b9f593d0a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a75a423f3082db8755dc75980decc8985e400d61a5e082342fda590f4b976f70", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "907f666e3a02660c2ef2131836af15ffcefcac20f36cb48e3af458160f6ffe87", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4938c0baafa65bdf5b82eb1a0d73b2a8fbf07643a4c167457d277a3f169abf4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "49ef9d2b459f72238e366b24978eaaf7271f755712a68ad2a63db939d185ed76", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "173600f152c34f27f06618b02a6d1cebb79ea233aea56f163c222cde52a0da16", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8aa2226ac35dd000482b5946c73351155ddb93f7f17f628270cdd7f9c10e88e9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5f7ebff8167e8a42b192a51dbc297dee5646e453e0f5fdfc93a205064b8faf7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca6735ec968a40a4505bb543024903527a26958f4d62289ff05df107654c9efb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "404a4d06ab5fdfe1ce0903627588f657417748cb574fb92ac0289cf18d59a655", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "76a61e0317cc6630fcea0bc02d0bb4bbabca500a82334e296660f37e7bf513ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e094e30dad4e5b301aa4ac546c0d4b3c83ef757eda5612367143cc1393e20758", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "90cbb91c5cfe3f77f24d104af12950e687d927b6ef267d2c9a718d56bfac22c6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "eb79eb9be4118a67c5a3a30185c16b8a4b9c8a7fd3d3b4d9348af7cdfc1111db", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "10b19799c5a66071b4ea897fbd9ab0e0e60095a93adbf29a7d2b586aa3b9da24", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b128ade57bdfc7d36e709ae43d6d0ec4f5fd052b7d61aa35096424638f65e538", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c3122e8086d97e1845ac298fc4cc83e06afced6d2520a5eaf866887f015d26ed", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "475c7c09af89fd5167cb7c9d1425236e46017b4694fc716d2bd4c08d6d5412b4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a6c5530c1402acba2cc769e3f1ae07d91ff752a994ae95c1fab2958f7beecebb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "047ace0533ed0faf8dd22746ac14c1397009bacf91a89f9c3d156a1db9c1686d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8e5bf70008ab34428afe2d9027eb0de701019ee61443fdfe484c9f4dae490aa3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c6e9f51c9a23c4f441b04abfefa41608de95ed9b2632a42b256715431d27cb1a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "374b7371cc8f7900dd8d28341e2d92f0910fcc46a1bddd99e1e8fb2cd98ce5cb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4371640e97258e83ec5d95cd2ef7f4522be4068b779e6f81dff60880156e88cd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "33466a73fdc111b25d05305a28d8ba021420fef50b9083ff4ff3dad3798ca912", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4e849f3ee1a169738bf681844c1944c0bc791ef8d3c2e69f9897a033e734b4e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8f40a8061e0642f9bd883b818606f9a351b34831c57be10d7a454aba8fd64b26", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "babd9f51ceeca1effc4ac5a2214f2af2078dfe214142a596aebf1d1ab50f18b9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "08d0c9eec6515fa3b3c471389ecfebb8b13255fa1721127d50ad74fdf2d99f8d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6d3de0453bfdf842fb2ebdad6aeed18a3202a6f5ccf463aae7e7af0d0104c446", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "0ee2cb908e1b7728458c6da1fab24b1c5bb2ce998a4db6877979aa7387980d96", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "690ef3f871ce317823717403e3752c1bd65c14a419bd80d4531e46276671f726", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4d1902b6960130341dbffc4b80590ca82f0e69b029f55a2d426d509fcbbb16c6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3def894fab74c92c3175ca74e4bf9a9f9f5c86fd195aa7b6dd5942920333a751", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3c4bc0d2ffb9b1369fdd43d6ba8dbaa6f9182dfbc6a285befff0f7bad368a6ce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "242b75efa0f7018ce02ddf26c1b546cce297c5dd4d39c5b26fb7801dee9fad4e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "64d15b5c887cdf4897af434b0f52a2f97924569fd60fce798ed9122c34fe534c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8947713ff1097d520f14076e4587b7155eae847a1059413729c051ea2234d59", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "65a05fd36318a2eb725b3d98d19ba23415014ac0dbb3e0b4296b7e3a9ab184ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "caf3908376fd7e706a036eaefbdb8d5a1c56140cdfe42faee4b217665bd1304e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ab10a0a90d1fc1b2f8235b4da49ce34f1ab639f5ff947d36ceca63c3169385df", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "cbdb6acfbfd29333d1a45fabb9d71ebc3b5e7192920fb6021e7ef8864f424eb2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "03507dd0feca8c3d9fb81f545733b4c496d8338462a815e7fee440eb8ecd9268", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c6a2752eb61aa3b3a75dd7ffbbcf6b34080a728376f2b3486ea6ccd5208d8f84", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b45a764da2130420e1391880042a32c5e26e872cd872b0a2116b48ae120c5aae", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "87f70aacb2203c9aed2f5e3047d0585fca8a5d3d78f896aaffe1c3887471d242", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "9d0472a5fe86f6faa6659797613cf050b3dca0486ecaa2fba6d0b411d2ab62f5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "581b835cd958c9a03241dd9e0ae687241b5cf4291eb20919c19d70e6c9d40e39", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f743a8dcc94c20eceb6b526a9bfb818cc3305eccc55b700124337abff1a43c5a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a56200a021edfa9f898c4c5d2595dde3033607c1989aee1e2026a62dead8c60e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e8ebbf8944cdcf4d150f9ccd3b9ba2c263b158866d6453a194331a1e1d8be4f0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "544a1611735559808717110462f49c0f72d106a551a32a21b48f35f8c2e9b24f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3c987a9238e99f5a7a6abdee5b1a26bee97b3d3075e3c966f9aa11284001bb79", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ca467181193fc16f1ac910c1b59fe7fa59cd7fe3ec24f50e8fc7227d0dc2f4bb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5cfea41b3d3a87dea04922ae3294b90b006858699b143e94d027402a66fef47a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "25d02e5b7658b618871c0630b45b86d06caf5ef7bdb05389ae6c2694e1f3e1c4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "163a1396c843010026f94d6e2d64f83b52ca379fba9115bfd14cbb2d8a1832c0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6e784b206fa0df266373f709dc74820829680aa727289a9bcbaa17e97c625665", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 186, + "selected_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "exhaustive_cases": 1024, + "exhaustive_mismatches": 0 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json new file mode 100644 index 000000000..8a235529e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json @@ -0,0 +1,10295 @@ +{ + "schema_version": 1, + "baseline": "baseline.json", + "abc_commit": "e76768b9d34f9dc67cb6608efecd55db271ff849", + "processing_order": [ + "mystery-B", + "mystery-D", + "mystery-C", + "mystery-A" + ], + "instances": { + "mystery-A": { + "schema_version": 1, + "baseline_gate_count": 37, + "abc": { + "schema_version": 1, + "baseline_gate_count": 37, + "accepted_candidates": 7, + "selected_flow": "compress", + "selected_gate_count": 37, + "selected_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "0a5921d259f37c7aaf24183797ca4a2cec77380eeff7a1a7394f4ccecc44261e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 65536, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 37, + "circuit_sha256": "be90a87d4973d1c9bb5878f426824106f409154267c71b623ae42bd718fa8318", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 37, + "final_gate_count": 37, + "attempted_windows": 7, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 65536, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "cac11ee6ad87c22af5c23222325fc285433c802f012919f056c2cf07b5b6b83a", + "attempts": [ + { + "window_identity_sha256": "501f23ebbfe1fba5cd5d66bec062baef0b73384be54529edabed3ef193845dea", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "7c80ade82492d0cb47f4fe7e90a3ec957337987827898351c374f48f7a9b3742", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a943ce7f5d32ce8f5b93628c1f0135ced16383d4ec30da853f9d4de23df7962d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca4d446e378cbec4b8f0d830e2dd51c25b3346a9f06d961952dbd5e49389ca80", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c1e3b073eed27844bf918feae2c324a2a839b5aebb5eb7cb2ec4a46b5217798d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fe7e434b8ffea481c84b2c29e8c80a0632783842468cefc00308d170daba38e1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "1afec29669cd2dc93785785aea5eeebcec5ac8497babb35d2656c2d5ee5e366f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 37, + "final_gate_count": 37, + "attempted_windows": 19, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 65536, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "attempts": [ + { + "window_identity_sha256": "df481d354eb969890147db74548bf1bd16999cbe5c08fc647e262905f2127506", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d9cedfc6a105569152bc0e273f189b2479ba748869dbaf87e2bf2e1c6d7203ba", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6f834be79ef16527d9348a098b27d089885fbd5a6aa9f50ab286bc9d5350ce88", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "62bae3371539df39f43f2e94087ee6108ca5fc5a7fb7d5789bda865428359e63", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c72eb9447526c10189ad9e8b124b32a8b10c0104e5b2d8ce0fb88b3459215c4b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1d1856212f503fa2fb0a03ba2b353b04da142aa864d8e1c17bbd3814015f6ae4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1598e7a03ff659a3e0d6e80765a0cc2ffe5c5ce05ab586b29695b87a6dcc280b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "29cbbdf412053bac6e3b2f8af6aed83850ebef52d6a7308124ea8d559d53168a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ea773a4564a92b650a480beb9c5405758b9697af6b548af62cc7ae21c1a1d79b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ef1cc04067e27ae5ab6ff4fe0004f0b5bd89789c53f1864b4cdc7050be27f0e0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "234cf5f8ee5e6a7aae8a360012ae1eda07ee2e16cf930aa6d90e4db79ff6b933", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ce817a02bfd364c1d87aac6f78acf606f5ebe43da4df8da22c406719f76ce8f9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "aee4b73ed9c0c3515068d721000cd739acbd800d026fda2984d689316f59f07e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "41bcf0927d187d9f9e62f9e32153439f397c76f134ebfd888bab9cf186923fe6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d46ec19031630c83f62f0867fbf8d29c26d17108d5842c6af734e327cafcc5db", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2ed9e384ed44a1036c81ddafe2007de73ca35b71aa7109a1d13bfd9229158e8a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfcaa02a48376f68d2809c9909e7d53d04c291f78aa3719eac58f446f4d4cd1c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3ca9ae6f31cdf540ce08a0a05203a1067d83a8bfd3bd18293c6d0175a938d460", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6d95ab781601b49449f7aeaf1db085daf42b40af1bfc64df23fc9909b685ce75", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 37, + "selected_circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "exhaustive_cases": 65536, + "exhaustive_mismatches": 0 + }, + "mystery-B": { + "schema_version": 1, + "baseline_gate_count": 52, + "abc": { + "schema_version": 1, + "baseline_gate_count": 52, + "accepted_candidates": 7, + "selected_flow": "resyn3", + "selected_gate_count": 50, + "selected_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "6298b72253e2d2e0a400ad71513c5cadb59ea1c7672968efb348ece3ec9704e9", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "47538263fe6e8d78b56a2f85f0c549076df2d8074ccdc6e6c660c17baa3a4dfe", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 50, + "circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "6298b72253e2d2e0a400ad71513c5cadb59ea1c7672968efb348ece3ec9704e9", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "47538263fe6e8d78b56a2f85f0c549076df2d8074ccdc6e6c660c17baa3a4dfe", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 51, + "circuit_sha256": "5607d81043ed197fa1ad1277f7e0e8a81fb8e6f8fac2b4a0110a3f19b05a53aa", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 16384, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 53, + "circuit_sha256": "808900d6b074c66ff4e77595f036cb4a61a801e4ca9f3e23ab6748182cecb1bf", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 52, + "final_gate_count": 52, + "attempted_windows": 14, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 16384, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "27f291224e01c310759085602b09196a7293e71d3fa44f885da559f123332fb4", + "attempts": [ + { + "window_identity_sha256": "064ba4565f9f9b1927b8f4395e0bcf7c6056f7f7ed804246367e6f2143350696", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e59eaae7095643a12fd17c0c137b7925535e7d2061bab973b78424f1a54485cf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8b852ce384d5d76f99e824d35a72630c45f310ed2be46171d786578fa2a48bdd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "65b8c653ba8fd1323b9141bfc90ec2edeb9e9dcec6e8a60049bc230642b09d8c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dc7344081286bcb922fd0df407c943977050689051384d2769003ede3151c583", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d1fe886e9c7abda500c9986a067141c3decfb596d1604425446288d1af65235d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cb6f1813422fb6b61aa3525b9544ffb9a7081fe860d3e3a857a1945bcef0eb97", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0c8ff0f4ae3064806aa0f1f2f77fa060c3753ed94c6c0ff58f9a8cc5dcdaf19e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b4d8f30f16a19db3aed9c89031afc1bbe2dfd7b0a3a896118a236ec762023d26", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "060027754f3fbdd3dd021697257ce0ed22e649de9cc0e9d73116e91bb70bb85f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "65dc55c4e098d839ff297d9637d5084c2ca752eb1cf707d5b35d126ce2133387", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1f1e9af34dc7a21a1ba55f8ca132ec043be588fcceefd9c53cf74a397ed313ec", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a968352b365becc9e7b97603ded384f5083728a2b541ee69516507cae02e6f79", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4fcd8d550752cef9c1a8fc1417097d742ccfc45824e5cdb8be8374ab07be46e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 50, + "final_gate_count": 50, + "attempted_windows": 24, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 16384, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "attempts": [ + { + "window_identity_sha256": "606d23d835844967030c6bf0ec0969c6aa21df8e8dea09d00d42b9e5251b4d7e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b3a2a2ad780672162ecf54e8e440f0f015d9984bf37cce24ef24f77e2a029840", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0d2301cc3931d0821f3f8ab01beacc05df98d6a2b879e23af95c9c0e590cab46", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9ad32ab508e10526d05dd5b93440e45f4b4e7624f32213466309f9b4a01816bb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "bf44a1a2f08726e0fbc8a3916c41073af6673e9c8a95e3d1d3684f23521affce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8abd6496922c6afc3d85a4df7756a2fe70616862346bc545548e31b0a72b0f2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "abcaad99691cb462bb71b58e92ee4677250ad1fda0de47f094ff547931d7503a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d64f80373c353748d754d3cabe68ae038223fdc7ab6c6ff4e3fda644d83f1b7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2a81ae6092dd79961aea7a1b2285a07bb3c445447f60583d7385c269acf82f47", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ae5156574e34f060dd7f338c2eb27924f8b0bba712a8ffd0ba1a10bda483507f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "137a48557d598132a4362025d29c2d8fe30f516638df2e2a9d3af3efa363fb28", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "228992c59b3c971cd266fb1f711a2209e7b818f5d11815fb10e5c3b3db6ca5af", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4da0344e85406dc7bf737f81e9d2664e2f8e0a098da317a166ef60c1405b6edf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d72e08d13b6e3b8eb13019f11a6d4bae9afe54166c340ab50ffeef0f8371750b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7fb6f091e7d8b67771e1b456fea5008259f2730207cd9d7325aacd199464bfb3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "fd1884b3fc5d7354f53ec73136aec98b16dc9215fc98ed84828c1b57f6570f1b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d6efcf723f6f99790628440a3cf4002f86d0cb5238908661a2cdcb85359e774b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "736ad8c8e5986311aa72d6720a442663d63be3a20fc2cdd7eb10bb7694885bbb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "916c0efe43a0944bbc52c9a61f5814d37c1e3320366ded0e49b20bdd243d2758", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "44547ca1921d546ac2dead83e2903899020e66e0e930b8ae66d42c76946aeb4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "654de0e772a230f385f0583fcba3218a0753f1d924fc0803c6dd730ebd14e5be", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "59d638fb15402e0b2b53a44264e0895fa08b921fdc1131a5b6d1d8dbe79e5dd5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3962cc1b2138231315c28e24814eb104fb6375b8260a6d1d6bd49181aa0700d4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e2f74e1ab4e05515a6aed933c2d4fd79dfafe693d7cb2d57028cf53f72798d08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 50, + "selected_circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "exhaustive_cases": 16384, + "exhaustive_mismatches": 0 + }, + "mystery-C": { + "schema_version": 1, + "baseline_gate_count": 168, + "abc": { + "schema_version": 1, + "baseline_gate_count": 168, + "accepted_candidates": 7, + "selected_flow": "compress", + "selected_gate_count": 167, + "selected_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "a00e5b569a3de617d9906394fa3deb3a9cd1913e77813314623cdfabcb6d010e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "985f2d43e35a7cd832bd113a33e7e56aeadee8d1773c5dddd9a43b9e1d53609d", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 167, + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "a00e5b569a3de617d9906394fa3deb3a9cd1913e77813314623cdfabcb6d010e", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 181, + "circuit_sha256": "f3ad7f0c32f17afc2e0ac2441fcc5a7d7aa479836f09af0871becb8977e08a5c", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 4096, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 168, + "circuit_sha256": "aa53d8edde757e176f6d244ceec5835f58a3f83d05314529f0d5c56ffc96d679", + "stdout_sha256": "cf83aaee73f9fc005b521008f1077f36488f50051ab215efcbbf263538b735f2", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent after structural hashing. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 168, + "final_gate_count": 168, + "attempted_windows": 48, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 4096, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "d139bb17ebf4d4a1740c14ae20377432ce51d0f3754eb14e60db7d9d38da7565", + "attempts": [ + { + "window_identity_sha256": "e66a9027d3bccfc97f3341b0c044f1b650efa443e13fe04e004101b36b58f100", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3d27a14d1e698f19ca7c5872d7bc50bf0ee4b69c9d2379c90f58dff6517a0e3d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ef453b1829e7d328511cda6b3a6a55dca8b5e7f2be9212d593547e6afba0d757", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1b21af12d493d882cdef2bf2346737302b7938f4fdc66498a7d3ea31c837301b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dc353fce362682175c629741745085f05d7fc92f0dbbd2ddcf689038676f8d4c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "53b909a700826fa3695503d2fea764321e3442708cf7aa02afdbc4afb1f02073", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3fb21a58930c6ddb6bc496c62493b79d487df98c6c798ec43f4314c02686830e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b0cfac3377b52f5483c2410917004536a0fd1ee764133f0f1dd369b06061c3ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fe141ac0f0d33d2de48e91f2447a75a44d5fbf80b9568706e484d10d76823109", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b58533a5bde9577fe341b3a6f735c4e2afd8383f0fa68a56715448506f756d32", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "fc1cbf1decadcc9af661a205e9893a7d26a0ecc17bf567de73c172719a602b4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d2dbdf31d89b789e7a05353dcf1f02cfece1e57430e10124c38bed760bbff38f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "60eb11657ebcfd090c6d54fe49e73e7b58bec12fc52afd80c4c2f9c620c14e60", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "de68fc20d8aefaaa7e88bce820c10648a68e93107f81cc2db197715469c1b55a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8f8a2866a4f58af5311b4ea7df833b764d19f5b3693be8b886875353799c9033", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4a56bea956b0394d447867cc38c59e2ae4f04835c7e249e7fd2deb4bf8f6d8d5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a297c0864c42eee996950f8fbba3bc52b090d41f2c679c5bc1c4f4ed46962cc1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e659f50d658a8f11a25e53c3902749422d43e8025140e004ee1953ad4401aae3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8a569cab03d55fe1b04cb1aa40452d48bea902a9d8027bc395d266379f44d73", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e9d4b7632eb89914b2f62006c8354e9a0e698e4135980a4487a1a253e818a72e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "54f195b1727dc7ac06cd1e7b92eb62774a9d5c7d05095f547ed1d1ec0f8e8b7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9b659c9e3c10e7383b2c2756a04ba761bf626cb56087e3cb04412aa57e72f674", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b61a0cb0173a443b2121420e6b3e90e5ebcf8b0fcfb8cc6838fffa13565e2e89", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "df2f6224962d522bb8d155b1f56be3487a873a0d7ee212d50ef2a75aafacd46c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a3bbfd42051b9f22212b99d2c93c33abedcd9cf4409d85c74369676270af6481", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3a17b0c016a7c6daab88bfbec484dae3bc834a7e49d56ce0febcc24abf29a9ce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d666d96dbe36d418a5f870fcb5017796be52525f0b7a93490db935d018815f08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfe1c8a8764a3c22fa95fadc09129f8a7333c54d843eb2f5b4fbf63bcaa40b06", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6134a0d14d552dfb005151245819cce35a4320acf656f639abb7c92315eeda44", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "54837acb810ac0c70f607f1e1c803f2a7904d4853ed2b3d42bd0b268dbbd7b7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f988f6ac1b01598d0501c76bc3d2d1dae1bc4a26836840188a6165da90621768", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3eaba834f0a915c796f5e98d6698af58bbe9c0dcd1b9d6754b4c8f75a3bd9fef", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dfabce872ec190653f4922e74a6f3f10ee5a0faca24bab43f3979bdc29c67e61", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ec7d990f4a7582765373a815a62426c524703160929a27c9710e69d022398a53", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "f68806d81da9c139d103af54135637c3a0a44844159d9cec28f93be526778b5a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "96fa432eae0045931a9a4bbcb8a27bd5e121631264214b96e474e121f1340f45", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2ad5568cbac462a87e09aec72f9dd0c226b2124423e4338df45ccfea2f429cb5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9c91a4dfe29db1f5282da24b63174a5c6b4517d426169432953b0f36bc20f7c9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8538a0afa94c728705bf5dc45b7815594c15d1bd8d856eeb4fda6df69f5e98f1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "71f4ff679f4b017094f47660b764d9aef0970ac37f20f26d58bd2008595c680d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "07c3d09b38bd2a284cbd2d834f5a331549522d4c438d642d8631117995f3ee68", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d0ce4acb1e140d1dc6238dc9ac4cc530438c0534f96ae6925f8092c3cc77a3a2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "84d6256d39b6d62494338f53f88dc67dd7bef52339107aa8fd1b2eb83f803d08", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d3da15d278d3042e0a1198ea440ff85f3aae9395795d934fbd8d44e00e84f4b7", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "395fc9b367f5df5d5b7f6f1149fc5d26453f6c67d1f90fed5244ef9334070dc7", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "33c6a51f13b7afa0f9043aeaaed2b242eb212cfc4643f902a6161a993919223b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "46707b16348f7b6a8906871d2ecfc2d5a6250820d7095e1ee7cba0841f1e655d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "676b23558406beb4625e8211f0f72edf6fb55ac55fd353d28db2d0d709c85792", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 167, + "final_gate_count": 167, + "attempted_windows": 48, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 4096, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "attempts": [ + { + "window_identity_sha256": "49095901ee85808687acb1965649e8683d5d3728607ccbfafba40c5aa2609b2e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b42dca46a85f467775dad3264f3195675c252b06567888b94dd7841399e14cb3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2c75d0c9344998e504efb176a30b50a71391c56278521e7d4db8e43a36b3632b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "05290ea88cfa4dcb39fcc5a42aa2bc06f9a99a2a3912b5fbb53a29a90952b72c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "37f542a2b4a1752783218c8d197494fa80db70658106b1c3c6ab4f48264fc146", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cfacb7d00be4f541d85e7a68d813e05ff54212ad1b3c27a2eca7379a6071571a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "88415282594b3e19c06411ec16c691e5cca251fc83ed1a2013fe4f8a1173e19f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2881e68365d68bb5330a0e68184d79cf549c2dfd3e67ebe4571e3f7a03f17683", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "37537aee05cf9f32280b2d2997e505490acc0aeb1dba7a9918debf2c8080d19e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "17281004dab4f5c66956dadd18e2f4763321a054d7c2bf1811302fd6d7de6c99", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "772b94922b8258014da0c737ff450dae50b27c2d8aa2ce3c1227076441feb866", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3c38aa4348d7b5284dba75a4865ec82c350907628122efae3a464b4f9a7a395e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3d850a40b94b34ff22256fa09259feb76182711a690ace6e0c81cac52c7c61bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca966ae04476a3101b6dc81e6cc01a743d810af3b8275f66294eded7d37a51e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "f2d8ce73f3e443f0262dba4db501ef21b61351751ade1d6191ad47422064f45c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c844759d3984b39302868b031e02c8de60269a83d8b4dcd5afceb756af0c414a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "753c66a8ece530350ea4d55c76a16c162dacd21bf9beabbd511f9b40d5fc2bbe", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e9d35e0772a618a4f2589bd9e2486b6e84b83319081e8e0cba836904e384cb7a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3a99aea119c92e0ee12daf2f22aaacea2e07f58d44c6ea58f1684fea66855299", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9989c5ca144726f7e70d911154be240867403efea2227d450e9034612e972dfd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "299e698822ddc34afb048614a8b9faee65ace0bacc2564cd7060ca57d6aa2779", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "1af15bfb393f0239907529e738b9e5c99f1e5587de75b4a1b8d105f7c79d5f76", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a8d2a0c41c9a7fa86f7a22c1bc62df558e75a4e5b68076d141a36730d6fd67aa", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "088b19bff3b77d304bd86d583e4e8ac559e7cb8a1053ef788eaefe4121637fe4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f193e15d6ddcf27995a19c05cfe3c68b2fb25db85070f2a0de657dedc3a17673", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "afc9c5b6128e4f7c9a1105e998af8bfd13ad26814416549e434d61be534c523d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dee1a056da4d0194bd6c083ba98a3a4f4194e76661458bab2fc711ad634f831b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2200718a55154c93e06e4a3afc59deb44a844f353fd456c0524bc6bfa7bb588e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "114bdc2b718517fd0f7241b0c761b5d10150f83376e2b29d1ddfb90505a6a479", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "43f04ed91a7c324b858f453115f6106e7d67a18e0e095255649d83548a70b964", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "deff31272f2b86fd7c63d3e97aa8d04a3377a3725752f38250e44083480fcd8f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "62beef8e3bbd0ff2ce233030dc7296c95e8067ae160d49de83eda1055f17779b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e22c7d170b1bfd82656bd684d137e888500eb9dcfce0a462f606be53fa787ed2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7df65e48c60a276272cf34fd428bcc8f40db7b440606ca9096429c33ffcefa3b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "752d77d343361db003bf27e56ab79800f2c1c4cb142632c2c83058e09fc03111", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ec2c4fca1a5a5f84c4b39b536ca78d679b531fe8e2d82fcc1a96425335fdf4a6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "41e3a58eb505b7510a572f88e59f5af46f7fa5a12d016889a4140ebe3e6379dd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dcfdb9858a78c6fc90bf92ad395519557b03abd0c798c735d454461932b74470", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "0fc7bb54c42c2bb29ff19bdad37d9797659dcd5a6bc003de8f676ff60bd5a0ad", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "40a024cedaf58ea6b973d1e4305638fb3e7c54ea75282b093cd45d474309fb7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "2a47fb046db942baa081669e0b5a9810226b4a92b29505cd01b80870148c60f4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "93914bdd6b4c7346aca28f2b937fa36655de42c482d9a37db268b60cffc35b48", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c531e289f59ec4783613d7791db70100c38786a8ecbcf5fc482b473ae5ff86e0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "db077941bd17ff36a201cc0687e98eabac1b84701736bed16b0211ab67198873", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "fc19478c842200f635f6bfd5effaae1abbfcd95a6ca8b1c88e0f19f9c867f9d8", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dab1e93a76958fff6c2128e0de17d30f7e9764e58ba7f650753d210636f6ce86", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dc8361c43ef98ebc4692d5643dae2f33bf1c24d804f98815efcf44ebd08b991f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d2abf854a18fb9834f9287cee5814e0430398cd12fb4cd561d907079596aa69a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 167, + "selected_circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "exhaustive_cases": 4096, + "exhaustive_mismatches": 0 + }, + "mystery-D": { + "schema_version": 1, + "baseline_gate_count": 187, + "abc": { + "schema_version": 1, + "baseline_gate_count": 187, + "accepted_candidates": 7, + "selected_flow": "compress2", + "selected_gate_count": 186, + "selected_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "flows": [ + { + "name": "resyn", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 189, + "circuit_sha256": "869cd6d5567ce9f27b1252b931398794d3f4b923b313598f1cf0e80e0359861f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 186, + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn3", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 188, + "circuit_sha256": "ac4050c2157c07d0e5ce0d4e1618d72c182b44fe933cfa86cceaff696e2a7d8f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 189, + "circuit_sha256": "869cd6d5567ce9f27b1252b931398794d3f4b923b313598f1cf0e80e0359861f", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "compress2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 186, + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "resyn2rs", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 192, + "circuit_sha256": "973b6eecdd8077524c0cf91a53dce9e80e23c384d2c76ab39bf47a7a7aed2200", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + }, + { + "name": "dc2", + "accepted": true, + "status": "accepted", + "abc_cec_equivalent": true, + "rust_exhaustive_cases": 1024, + "rust_exhaustive_mismatches": 0, + "official_gate_count": 187, + "circuit_sha256": "81e70243e52f5acdec55486a80259438eee214570eedf98951d3b505a8ccf9d6", + "stdout_sha256": "2b625dae139c783f49dbaf1ad1e2b9dd4a71908af62354b09c14131ce67cfa86", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "diagnostic_tail": "======== ABC command line \"source flow.abc\"\nNetworks are equivalent. Time = \n\n" + } + ] + }, + "peephole_baseline": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 187, + "final_gate_count": 187, + "attempted_windows": 64, + "accepted_replacements": 0, + "termination": "attempt-limit", + "whole_circuit_cases": 1024, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "88ccefa31486021fb3653a9b111463c2df1a6c49a549fe61174d96a51eceb85b", + "attempts": [ + { + "window_identity_sha256": "78c8c8af7e52381d70febe09376e018e382c81b7aa2b994c1f860d15deb17af3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "25e02db1b9905bfc39401b312989e8a37583374fd1f55031847f25b21e1785c8", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "da8f00c32dceb294d72c5ea75568d3b490a881305017aeea518ae60f392fcc0d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "48fe648067cd36c782a78b88980f7673e464f6b5759ca1f4deeb0274536c505d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dd8500e6969ef4dc5dae9aadb739233d9c1cfd07a186d65e453c85fafb07756d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b7113eea365b6cd5aa75a5189200e00cf1a25bb6cb0b4a355735dbf298d29afb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0f140186eadd12e3040d07be66d171e6d95e80c0e6d341d6482c81250ad4391a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ed147d1c400952b02eb6d31a03b5a0c356e25903112f4e6a4271907f35911d64", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "40038b895336d02473237ac5dc0da3e5af36903de960bc0b189b7a156fc96f90", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "96dbab3f93e90c8b206adca231428a050727a5de7d5bf7ab1b79882a682e7895", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b2ff4c5861d9598efbfc1cd69a71c6d67e17018bd2018672bb66b1ce963b5984", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "99798ab8d60e72674ad050c2fc0be003cdf2b3745e5574a77afa7bd73a5f6747", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ae329253c19925b75895605f974b9da9139ff44b9837b3892b86c7690f2359df", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "42627b0eaba93d6221252d49d6f476d89fafd62481766b69d99ba91a134e27bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b164d4d56ff7e27c289b74caf4710c5be8a839a9e52ce29994591cbfd5ee5110", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1a31542510a44e7c5acb2e2c6dff975eb8c64755324b2590378f3f91ef2662cf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d6dbeabefe263099266f2fbf516cf9555cbdd0b2a64008771e389673b5c8ee50", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6e97483a1f942245181b7ce33a2b3466623a0c9c8de9a87de690c0d0b289ed1c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "dcb41977475eb03efcfa97a233852fe03474e75645517a8d499b6a26212bfee6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "1f2ad678daf659c40231ccdc3e341e279e86f66b59fd81ba99906223ad54ccc4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "dfadcf29ca3d5a2084a88b26a47b00cfbc4e93b3eba436259f074c226ce6d23f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "05c3dc65e249b895ba96bc0f61cc9bfd936a118723bccdd3c851fa102ef1ad59", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "de9b4d3af2c0c5a7a9dc27b344de6aad2dcbe9525d836bb0ef2163d581134f2d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3edd618cf54b2be498495a020e5ae2f425538ddb4c3d3a650b9c236d6a7d9b99", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d35272fad62678276b93281937d6705121d6e3cd97eebb3e13dd8b7b8fa4ef06", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e469e3fbfbfbe45161ec543bf4fb7a76c99d7a611dc5e47d9632619df71c2e4e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "947eefdb58f1493d041576b6092ab6ce536c3113a38bfc9aa3cc0260989fa20b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "03b35885062862d31b6d68951bdc6e64aa4275e0d75c2bb395af111b75d59f36", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c89574020b0674be903e5915157d57b9ad0c8a92e20a964babe5a29f9adcd24d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ced15bff90d345aea955f1830d1e2b785485c590ef562b2a39c7a885d4d09ccf", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "cd67d49c4732c7e056703a0599b5d5c09c734bdf1fa232d1d357857ea94e6129", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "32f4b22b880089bd01f72ca8e21c61255cdc6b3168af3b1122c2a17183102f2c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "acf7554e8e8afbd6b691d2ffaffffa5e6fe8e1a1bad490dd63153473ccf3dac1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8963b33b14208b969139b4ae8ec33f916c85a3cab30ad1065ed3fd639d41e328", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "7a52fcb469aa687216663e8a44732ee79a30fbe9eeae09daeb84ed075f992488", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a557d54ca26e0ed20ce6a7cea961e1a78bd0578712c96c151d3bd67e464e7ceb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4f5d07b1173ecb7d11e81866e51fd2668dacfdcc75bec7568781aef0cc3c78bd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "617234f851e816a8d038fb7ffac98a59e65c2b6d031800fb56d8b2c18eca4806", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f2b102f3b57d7d82c7e9b31f24362f510c29dac31e0807546b6acd076bf7bfb9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ac4d9f13ffae012de397d31601fa6929cf5721dad76b5eb40177e20a5b37fa04", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5b340bec163ed46e7b6748d3c5d41e43e85307868d41eb9cc93ef91d7dca2041", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "0baa8c16afe2bff6d1dc809ac3fe40394882983e02c52b52c93bb6dc8fcbf5b1", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "05377876229cb7ddb437380f02b080eaa4d2eb18755caadb89e7d9723976a27e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "41e94cbeea0001717c2480b66f6c1e3baa8c7e5e3f02a998ddd6120c6c64a9e6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "10c3f5e5883dc06708b36af872ed0e8930c67a2328e35b467bb959c17433eea6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ffc20f9191854292b5ee680f196719a6256ad80a8443426a6735b76f6b587439", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "9eadeb0fd0daa3b2a2f566085eb65bbf3ca9d55df04f00f9b00d563d7a5e7ae0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "08645896c764a6b4d60adf2488a296a6b077c2d69ac13c208f664dc1cfa35b2b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "9fa76173c2a6905b5ab40ed68a00b16ffa4357e3502d03c6262355f145d7aca6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "d046988c0696f18dea6c049b5a9d405d5423c69a99d0ea8035ec012ceec6dfc3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "cc0810653d9a6989c26ebed3033aa4f98bfb891ec131428ba8bc628dcdd67113", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "42b093dc56a251e565eb5e55299fdd45ccec4053b2f1c5a8762a9bddf7144f8f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "df22e7a623652e2a3912f8145d86ee6313ea599499089b88ee6af8155492b88e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "b7cb3cde3329c63d75df1af8704348d144fac15ef9acedf7bdd857b776ebee23", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "42c1deb0b37525c147a326ef10bd6553287622fa134707948f3268e76f10ddea", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "d11a27be78a1a1d638a4f1cfb4fc27820033effe8690705e3343de38592ae188", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f5113beacc399baa64b22a74dfb6c9d0b3ff31fd3e3c0943e2ff42ab71459507", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4c1c7caf817b5d871b121511221239df2bea042fbf35c357ce44ae1932f67b21", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "543b246f5096e238edf796dd7bfabb4483169ecf23a55a8240b9dbe17390e167", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "48b6ca25a93d337e25e642b314e17cf40d26dcad01650db9353a76767127ea45", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8c92831e2eed4ec9b3238040ec6045edaad0f02471983b7952bbcd7c4bb103fc", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "7853b6b878ddc130ac5ff007e89d2b3fce559d50db7b10d9880f07af1ab59a7c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ff21cc14eb685c19162d339808d2442fb27681299df6529a94845c20c1b4d21b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6ab0d6aa3478dfe78b395ddb08a165fa8de01cf750b165bdd19dc446f7eed0d6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "peephole_abc": { + "schema_version": 1, + "window_config": { + "min_gates": 3, + "max_gates": 3, + "max_inputs": 4, + "max_outputs": 2 + }, + "baseline_gate_count": 186, + "final_gate_count": 186, + "attempted_windows": 61, + "accepted_replacements": 0, + "termination": "fixed-point", + "whole_circuit_cases": 1024, + "whole_circuit_mismatches": 0, + "final_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "attempts": [ + { + "window_identity_sha256": "40a557b3c3504c349bd7da3baace61d027d5cc24ab082473d20beb3bf333ec90", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "da45264f03274a6c55279e369e7f9dd95ee9595246df932a030d3383ecadf92b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "077f16b7fd1f6a510e922452ef8e9a9faaedd05f40f1458b05e73b9824f1c967", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c2d3d2dbbf8d1241a9a50338c991a5a472e4b2542d3befe404ca1c1b9f593d0a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a75a423f3082db8755dc75980decc8985e400d61a5e082342fda590f4b976f70", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "907f666e3a02660c2ef2131836af15ffcefcac20f36cb48e3af458160f6ffe87", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4938c0baafa65bdf5b82eb1a0d73b2a8fbf07643a4c167457d277a3f169abf4a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "49ef9d2b459f72238e366b24978eaaf7271f755712a68ad2a63db939d185ed76", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "173600f152c34f27f06618b02a6d1cebb79ea233aea56f163c222cde52a0da16", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8aa2226ac35dd000482b5946c73351155ddb93f7f17f628270cdd7f9c10e88e9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5f7ebff8167e8a42b192a51dbc297dee5646e453e0f5fdfc93a205064b8faf7b", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "ca6735ec968a40a4505bb543024903527a26958f4d62289ff05df107654c9efb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "404a4d06ab5fdfe1ce0903627588f657417748cb574fb92ac0289cf18d59a655", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "76a61e0317cc6630fcea0bc02d0bb4bbabca500a82334e296660f37e7bf513ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "e094e30dad4e5b301aa4ac546c0d4b3c83ef757eda5612367143cc1393e20758", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "90cbb91c5cfe3f77f24d104af12950e687d927b6ef267d2c9a718d56bfac22c6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "eb79eb9be4118a67c5a3a30185c16b8a4b9c8a7fd3d3b4d9348af7cdfc1111db", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "10b19799c5a66071b4ea897fbd9ab0e0e60095a93adbf29a7d2b586aa3b9da24", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b128ade57bdfc7d36e709ae43d6d0ec4f5fd052b7d61aa35096424638f65e538", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "c3122e8086d97e1845ac298fc4cc83e06afced6d2520a5eaf866887f015d26ed", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "475c7c09af89fd5167cb7c9d1425236e46017b4694fc716d2bd4c08d6d5412b4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "a6c5530c1402acba2cc769e3f1ae07d91ff752a994ae95c1fab2958f7beecebb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "047ace0533ed0faf8dd22746ac14c1397009bacf91a89f9c3d156a1db9c1686d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "8e5bf70008ab34428afe2d9027eb0de701019ee61443fdfe484c9f4dae490aa3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c6e9f51c9a23c4f441b04abfefa41608de95ed9b2632a42b256715431d27cb1a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "374b7371cc8f7900dd8d28341e2d92f0910fcc46a1bddd99e1e8fb2cd98ce5cb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4371640e97258e83ec5d95cd2ef7f4522be4068b779e6f81dff60880156e88cd", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "33466a73fdc111b25d05305a28d8ba021420fef50b9083ff4ff3dad3798ca912", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "4e849f3ee1a169738bf681844c1944c0bc791ef8d3c2e69f9897a033e734b4e3", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "8f40a8061e0642f9bd883b818606f9a351b34831c57be10d7a454aba8fd64b26", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "babd9f51ceeca1effc4ac5a2214f2af2078dfe214142a596aebf1d1ab50f18b9", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "08d0c9eec6515fa3b3c471389ecfebb8b13255fa1721127d50ad74fdf2d99f8d", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "6d3de0453bfdf842fb2ebdad6aeed18a3202a6f5ccf463aae7e7af0d0104c446", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "0ee2cb908e1b7728458c6da1fab24b1c5bb2ce998a4db6877979aa7387980d96", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "690ef3f871ce317823717403e3752c1bd65c14a419bd80d4531e46276671f726", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "4d1902b6960130341dbffc4b80590ca82f0e69b029f55a2d426d509fcbbb16c6", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "3def894fab74c92c3175ca74e4bf9a9f9f5c86fd195aa7b6dd5942920333a751", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3c4bc0d2ffb9b1369fdd43d6ba8dbaa6f9182dfbc6a285befff0f7bad368a6ce", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "242b75efa0f7018ce02ddf26c1b546cce297c5dd4d39c5b26fb7801dee9fad4e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "64d15b5c887cdf4897af434b0f52a2f97924569fd60fce798ed9122c34fe534c", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a8947713ff1097d520f14076e4587b7155eae847a1059413729c051ea2234d59", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "65a05fd36318a2eb725b3d98d19ba23415014ac0dbb3e0b4296b7e3a9ab184ff", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "caf3908376fd7e706a036eaefbdb8d5a1c56140cdfe42faee4b217665bd1304e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ab10a0a90d1fc1b2f8235b4da49ce34f1ab639f5ff947d36ceca63c3169385df", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "cbdb6acfbfd29333d1a45fabb9d71ebc3b5e7192920fb6021e7ef8864f424eb2", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "03507dd0feca8c3d9fb81f545733b4c496d8338462a815e7fee440eb8ecd9268", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "c6a2752eb61aa3b3a75dd7ffbbcf6b34080a728376f2b3486ea6ccd5208d8f84", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "b45a764da2130420e1391880042a32c5e26e872cd872b0a2116b48ae120c5aae", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "87f70aacb2203c9aed2f5e3047d0585fca8a5d3d78f896aaffe1c3887471d242", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "9d0472a5fe86f6faa6659797613cf050b3dca0486ecaa2fba6d0b411d2ab62f5", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "581b835cd958c9a03241dd9e0ae687241b5cf4291eb20919c19d70e6c9d40e39", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "f743a8dcc94c20eceb6b526a9bfb818cc3305eccc55b700124337abff1a43c5a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "a56200a021edfa9f898c4c5d2595dde3033607c1989aee1e2026a62dead8c60e", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "e8ebbf8944cdcf4d150f9ccd3b9ba2c263b158866d6453a194331a1e1d8be4f0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "544a1611735559808717110462f49c0f72d106a551a32a21b48f35f8c2e9b24f", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "3c987a9238e99f5a7a6abdee5b1a26bee97b3d3075e3c966f9aa11284001bb79", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "ca467181193fc16f1ac910c1b59fe7fa59cd7fe3ec24f50e8fc7227d0dc2f4bb", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "5cfea41b3d3a87dea04922ae3294b90b006858699b143e94d027402a66fef47a", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + }, + { + "window_identity_sha256": "25d02e5b7658b618871c0630b45b86d06caf5ef7bdb05389ae6c2694e1f3e1c4", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "163a1396c843010026f94d6e2d64f83b52ca379fba9115bfd14cbb2d8a1832c0", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 2, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 16, + "clauses": 186, + "literals": 256 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 90, + "clauses": 998, + "literals": 2668 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 168, + "clauses": 1980, + "literals": 5552 + } + ] + }, + { + "window_identity_sha256": "6e784b206fa0df266373f709dc74820829680aa727289a9bcbaa17e97c625665", + "original_window_gates": 3, + "boundary_inputs": 4, + "boundary_outputs": 1, + "status": "no-circuit-within-bound", + "candidate_window_gates": null, + "candidate_whole_gates": null, + "whole_circuit_mismatches": null, + "accepted": false, + "bounds": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 93, + "literals": 128 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 80, + "clauses": 856, + "literals": 2440 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 156, + "clauses": 1785, + "literals": 5216 + } + ] + } + ] + }, + "selected_source": "abc", + "selected_gate_count": 186, + "selected_circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "exhaustive_cases": 1024, + "exhaustive_mismatches": 0 + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-A/test_outputs.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-A/test_outputs.csv new file mode 100644 index 000000000..ec30a6a81 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-A/test_outputs.csv @@ -0,0 +1,2001 @@ +input,output +1001001101010110,110011001 +0001000011110111,111011110 +1010010000111101,100001110 +1001001101101010,111110001 +0000011101101111,011010111 +0000101101110001,011110101 +0100010110110110,111100001 +0001001001110110,011011010 +1001101110000110,010111001 +0111001001101010,001001010 +0110001010111100,110000010 +0000100000011011,000101110 +0110000111000111,100101101 +1100111111110001,010000011 +0011100110000110,101111110 +0110001101110110,001011001 +1101010100100010,111101110 +0101110100111011,011010011 +1101100111111000,010111010 +1111100001100011,101001110 +0001100000001101,000100110 +1111011100111010,110100101 +0110000010111010,110001100 +1101010101010111,101010011 +0111111000101000,010010010 +0000001101010111,010101011 +1011111001111111,110111101 +1101000111000111,011101101 +0111110101001001,000010101 +1011001010111111,010100101 +0011001100010101,001011101 +0000110011010011,110111110 +1000100011101010,000101100 +0100010100110101,011100101 +1011111011110000,001100010 +1100100101100011,100110101 +0011001001001100,011111100 +1011110010110110,010101010 +0110001011010001,100010110 +1000110001001101,110001110 +1011110100111000,100110110 +1111000011100100,011011000 +1000100111001111,001000011 +0010100111010101,111111001 +0011000110010101,101011001 +1011001100010111,101011011 +0001000100011011,000001101 +0010000101110000,010010010 +1000000111111100,000000110 +0110100111011000,100011010 +1001001000001110,100111010 +0101001101101011,000001011 +0110110110110011,110000011 +1110100010001111,000100001 +0000000110001111,100011101 +1101001011001001,011110110 +1001011000010111,100010101 +0111011100000001,011101101 +1001111010110111,011001101 +0011011110001111,101110111 +0100110000110001,011111010 +1001110101000100,110110110 +0000100110110001,101110001 +0010101001011000,011101100 +0010111011110011,110000101 +1001101000000010,100110010 +0001111010000010,100111010 +1100010011111000,010000100 +1111100100111100,110110110 +1111001101111010,101101001 +1101011100010000,110011110 +1111010100101111,110001011 +0011101001010011,011001001 +1101100110101110,000010001 +0010110111010001,111111001 +0010000101011111,011111101 +0111100101100100,001000110 +1000100101111011,111101101 +0111010010011100,111001100 +1101101100010011,110001011 +0100010000100100,011000100 +0010010010000101,101000110 +1111011011001011,010000101 +0101101011100110,100000110 +1011110000010101,101001110 +0100110111101101,100101101 +0011101111111000,110111110 +0011110110110110,100101001 +1011111010010110,011001110 +1111110111110101,011101101 +1001111001100001,111111110 +1111010101011011,100100011 +1011101011011001,000111110 +1010110010110111,010001001 +1011101101011100,111010001 +0011010010001011,101111110 +0111010000110001,010111010 +1100101101100100,100111110 +0001101111001101,110100011 +1100001001000111,101001001 +1100111101000000,101011110 +0011010100100100,000010110 +1111101010110000,001101100 +1111110100100111,110001011 +1101110100010001,110000101 +1111011001001001,100000001 +1011101011110101,001100001 +1010100111010010,000001110 +0111111010111101,110111001 +1001000011111100,000100100 +0011100110011010,101011110 +0011110111001001,111100101 +1110101010100100,001111100 +0110100010010110,111111100 +0110111001111001,001010001 +0010011111100100,110100001 +1101101010101011,000011001 +0100001101100011,000100011 +0101010111000100,101100110 +0010100101001100,011000110 +1101101001001011,101101001 +0111010001111101,001101110 +1000011110011010,010111001 +0110000111110111,101011101 +1000000001001101,110011010 +1001111000111110,101011110 +0111001111011001,100101101 +0111000100000001,011100001 +0100001000000100,010001100 +0101011011101010,100000110 +0010011001111011,010000101 +1101111110111011,000110111 +0010100010000111,101011110 +1001110000100110,101110010 +1001010101100010,111101110 +0011011101110001,010111101 +1010101111111101,001010011 +0110100010111001,110011010 +0001011010101011,101111001 +1111101111000110,010000101 +1110000000111111,110000001 +1001010010110111,011010001 +1011100110010001,011001001 +1111000010100111,001011110 +1101010110111111,000101011 +1111010001010101,100110110 +0000101111000001,110010101 +0000111100001010,000000101 +1110110010000000,000111000 +1110101111000110,010111001 +1000011101011111,110110111 +1101100010100101,000000110 +1100001011000010,011000010 +0011011100011000,001000001 +1001010101010111,110010011 +1000010101110010,111101110 +0010001001010011,011100001 +0111110000110100,010101100 +0001101000001010,000101010 +1100011110001100,001010001 +0010111100101001,000100011 +1111011100110110,110110101 +0110001101111010,001001001 +1010011100110000,100011110 +1001001000101001,101110110 +0010001011001010,111010010 +1110100001010100,100000100 +0011101011110101,110100001 +1010011101111010,110000101 +0101100100100101,011111001 +1001101010111000,011011100 +0011100111010111,111000011 +1110100100001111,111000011 +1101010010111101,000101110 +1110101000110011,110001001 +1000111111110000,000000001 +1111100110011011,000111101 +0111111100000001,011111101 +1011000000110000,100110000 +0000110110111100,101101110 +0101100101111101,000110101 +1001111001101100,111101010 +0011010000010100,001010100 +1011111000011111,101011101 +0011000011110010,110110100 +1001110101111001,111010101 +0101001001110001,000110110 +0100000111000100,101001010 +0001110001001111,010101001 +1000101010100101,011011110 +0001001100001101,000111101 +0000010111101111,111010011 +0000101111111001,111101101 +1010011000011001,101111110 +0000100001010101,010111010 +0010010101100010,010101110 +0110101100010010,011110001 +1011101010100101,010000001 +1110101011010101,010000001 +0110001101101001,001110101 +0100010011100100,100100100 +0111010011001011,100000001 +1110111101001001,100100011 +0110100111111101,101010101 +0111110100101011,010010011 +0001001110011111,100000111 +1111011110011011,000100111 +0100111001100011,000111001 +1111010100111100,110101110 +0111000010011110,111000010 +1111010100011111,111001011 +0011011110110011,100111011 +1100001000110110,111101010 +1000101100101100,101000001 +0010111111100011,110111011 +1111111110000110,000001101 +0001111100101011,001100111 +1111111110101110,001011101 +1111010000110010,110111100 +1000111010011010,010100110 +1110110011000011,010111110 +0111001110011101,111000011 +0111100001100101,001000110 +1110000010101110,001111100 +0010111000100001,000111110 +1010100010110001,010001010 +1111111110110010,001100101 +0101001010011100,110000010 +0111111000100010,010000110 +1100011010010000,001101100 +1100000110110010,000010110 +1111011110110011,001111011 +1101110111110110,010101001 +0000100110010110,100111110 +1101110010101101,000011110 +1111111010000000,000000010 +1101010010101101,000001110 +0010010010100110,100100010 +0000000101001111,010011101 +0101100110111101,111010101 +0000111000011001,000100001 +1011000000110111,100111110 +1011101101010000,111001110 +0100101000100010,011010010 +0101111011100000,100000010 +0010001010001010,101010010 +1110100100110001,110001001 +0101011001100111,000010101 +1001001000010110,100011010 +0001110101101000,011100110 +0101000111111001,100101001 +1001001001010011,110010001 +0111100110110000,110101010 +0001111111010110,110001101 +0010001001010100,011101100 +0110101111000000,100110110 +1111000101000011,100010101 +0010100101011111,011100011 +0100010101001011,001011101 +0011011101101001,010000011 +1101011000101100,111110010 +0001001110100000,101100110 +0111010010110101,110110110 +1010111010101010,010100110 +1000011101010011,110101011 +0011100010110101,100100110 +1100000000111111,111111110 +1010001101101111,110111011 +0010001110101011,100110011 +0100000000110100,011101000 +0000010100101100,001010110 +1111100100010011,111001101 +0111011011001100,100001010 +1000000111110111,000011101 +0000001001011001,010110110 +0001111100011110,000011101 +0111001010110010,110110010 +1110110100011001,111100101 +1101001001010100,101011100 +0100000111111011,100001101 +0010101100001011,001001011 +0111110000100101,010001110 +1111010100100010,110011110 +1111100011010000,010101000 +0001000111100000,111100010 +0100000100111000,011110010 +0001001010011111,100000101 +0011011000111111,000101101 +0001001110101011,101110011 +1111111011110111,011101101 +1011110101111000,110110110 +0010001101110000,010010110 +1010101100111010,100011001 +1111111011111010,011110110 +1000101010100100,011011100 +1101110110110100,000101110 +1011101011110100,001100010 +0100110100110001,011111001 +0011100000011010,001011100 +0011101001001110,011100110 +0100101000011010,010101010 +0110100000001110,011000010 +0010000000001101,001011010 +0011011010011001,101000001 +0111101111110000,101101110 +0000011111101110,111010101 +0010000000001011,001010110 +0011111100010011,001000111 +1010010000100110,100100010 +0001000011000011,110100110 +1010110001110001,110000110 +1000100000101111,101000001 +0010000110100101,100101001 +0011010001101000,010000100 +0001101111011100,110010001 +1100100000000100,110011000 +0110101011001100,100100010 +1101000111100010,010010110 +0011001101100101,010011101 +1100111101001011,101000111 +0110111111101001,101100011 +1111101011101001,011011110 +0111010011101000,101000100 +1100111101101111,100101111 +1011110101011000,111010110 +0011010110010000,101011010 +1100000101111011,100001101 +1010000111110110,001011110 +1111100000010000,111001000 +0100000011010110,101101100 +1111010110011001,000100101 +1100111001010001,101111110 +1100101110100111,000111011 +1111100111110001,011101001 +1100000100000010,110000110 +1101111101011000,101010001 +1100110001111000,100010100 +0101101101001101,001100011 +0011001010001000,101110100 +0110100111000101,100111001 +0100111010001111,110001101 +1101000001100001,100010010 +1110101000110001,110001110 +0100111011111100,100011010 +1001100000010010,100001100 +1101110111100010,010000001 +1000011000111001,101111110 +1111001011000100,010011100 +0111010010000000,111101000 +0001010111111111,111001011 +0101010101101101,000001101 +1100010111000010,011001110 +1000111001110111,111110101 +1001110111110000,000100110 +1011000111100001,001010001 +0101100010101100,111100100 +0111100111011000,100111010 +1111000110100100,001011010 +0100100000111110,011100010 +1001101111001101,001100011 +1011001001110101,110111110 +1000111010110001,011111110 +0011011001101100,010001010 +0101111011110010,100100110 +0110110100010101,011110101 +0111010110101011,110000011 +0000111010110100,101110010 +0000011100010111,000100111 +1001010010101101,011110110 +1001110100100101,101110101 +1111101010010010,000101010 +1100000000011101,110111010 +1001000101000010,110100110 +1110001011101100,011111100 +1000010011100110,000100010 +1001000011011000,001001000 +1100101011001111,011000101 +1111000101111000,101101010 +1010010001011001,111111010 +0001011100000101,000100011 +0110011100000111,011000111 +0100010110100001,111001001 +0110111011010101,100001001 +1101000011101000,010001000 +0110110111011010,100010001 +0110110000100001,010111010 +0101010101011110,001001001 +0101101001010101,001000001 +1110010111101100,011110110 +0101001000011110,010000110 +1110011111010001,010011101 +0000101001101000,011001100 +0111111101000111,000001111 +0110111000110110,010001110 +1000000111110110,000011110 +1011111011100110,001001110 +0101100001011000,001011000 +1000101111100010,000110001 +1110111011010111,010001101 +1101111000000111,110110101 +1000111110100011,011011011 +1101100101001011,101101101 +0111100110001010,111101110 +1010101010010100,011111100 +0100100101111111,000010011 +1100111011001011,011000101 +1111000010100101,001011010 +0000101010111011,101101001 +0000101010011010,100101010 +1001110110110000,011000110 +0110011000001101,011010001 +1010100101111101,110010101 +1101010010111110,000101010 +0101011101011101,001001011 +0111000010111100,110100100 +0001101111000110,110111001 +0111011111011011,100100111 +1101100101100010,100001110 +1100010000011000,110111000 +1110010101101101,101110101 +1001010010100000,011101000 +0101110100011110,010011001 +1100111000100000,111011100 +1000100000111111,101100001 +0101111111100011,100000111 +0010001110100101,100101101 +0011000010010011,101010110 +0100101001001111,001000101 +1100010010001000,001011000 +1110011101111110,101001101 +0100011111000001,101001101 +0100100101010001,001110001 +1100010110111010,000000001 +1010001110000110,011001001 +1110101001001101,100100001 +0101000001111101,000100110 +1000000011100111,000101110 +0110001110011110,111111001 +1001110111101011,000010011 +0011111001100100,010001010 +1110001111000000,010100110 +1111000011100101,011011010 +1000010101011100,110110110 +1011101110011100,011010001 +0111110110010001,111000101 +1100111001101100,100101010 +1100111111001010,011000101 +1011001110011100,011000001 +1101000101100101,100011001 +1011011111110111,001110111 +0111001010100111,110011001 +0101111011110011,100100101 +0001101010001001,100101110 +0001010011111010,111000010 +0101101000000001,010110110 +1001001101001111,110111011 +1010001110100000,010100110 +1001001101100000,111100110 +0011101111010010,111001001 +1001010101110110,111010001 +1100100111100101,010111001 +0100010010101011,111011110 +1110000011100111,011101110 +0001111110101101,101101011 +1001010101110001,111011001 +0010111000010101,001110001 +0011001111110001,110110101 +1010001101011011,111110011 +0010010110111011,100000011 +0010001011011010,111110010 +1010111011001111,000101101 +1010000001100110,110101100 +1010000010000100,011001000 +0101110001110010,000100010 +1100110111011001,011100101 +0111001010110101,110111110 +0001101010000010,100110010 +1110001010101100,001111100 +0110000011111000,101001000 +0000110010001111,100001001 +0011000100101000,000001010 +1101101000101111,111100101 +1101101110010111,001000111 +0111011010001111,111110101 +1001010000011011,100000001 +0110000000001011,011010110 +1011101100100011,100001011 +1010000111000011,000100101 +0001100111000001,110110001 +1000111000110000,101111100 +1010111011100101,001110001 +0110011100111110,010001101 +1011111011001000,000010010 +0000001010111011,101110001 +0111001111010001,100110101 +1110111010110111,001001101 +1011010101101010,110000001 +0001100000111011,001011110 +0101101100000000,010110110 +0100000000011100,010111000 +1100111101010101,101110011 +0111101011110111,101100101 +1101011111001000,011111110 +0111100110100111,110000011 +0000111101111010,011100101 +0101011001100110,000010110 +1010000010111011,010001110 +1111010001000010,100011100 +1011100010000110,011111100 +1101101100010010,110001001 +1011100000111010,100111100 +0111101110000000,111110110 +1011010101100011,110011101 +0011110110101110,100011001 +0011010100101101,000001101 +0110000100111101,010000101 +0010101111100100,110111110 +0000001101111001,011110101 +1111011101010101,100110011 +1001111010111010,011010110 +1001001000010101,100011110 +1101001011110011,010110001 +1000100001101110,111000010 +1010110110001010,011000001 +0100101011000111,101011001 +0011001010010110,101011010 +1100110010101111,000101001 +0100010011011010,101111100 +1101000101010010,101010110 +1011001000111110,100100110 +0001100000010010,000001100 +1001001001010000,110010100 +0001010111000111,110100011 +1001001101110110,111011001 +1011100001001001,111101010 +1101100111010001,011001001 +0111011101111010,001100101 +0011011000101010,000000110 +0101011010111010,111000110 +1101001110110010,000110001 +1101110011101001,010010110 +0110000000001111,011011110 +1101100101111111,100110011 +0100010110001101,110010101 +0010100111001001,111001001 +0100110101110000,000000110 +0010100011001010,111001100 +1011111001010011,111000101 +0000011101000100,010000001 +0011011011011110,111001110 +0111111011000010,100000110 +1111001110101010,001001001 +0101101011011010,101011010 +1000110010011111,010101001 +1110101110101101,001100011 +0011000011100010,110010100 +0101000010101110,111111100 +0100101101001101,001000011 +0010011001001111,011010101 +0110110110100111,110110011 +1101111111111011,010110111 +0010110110000110,101010001 +1100111100010011,110111011 +1101101100111011,111011011 +0001000001100000,011100000 +0000011000101101,001010001 +1101001001111000,100101100 +0100011110111101,111110011 +0011101110000010,101110001 +0110100011000100,100111000 +1111100110011110,000110001 +0000000010001110,100011100 +1110011011010010,010011010 +0001011110101001,101111101 +1111011001101101,101001001 +0101111000111111,011011101 +1001010011101010,000000010 +1111011111111001,011100011 +1110001101110110,101011001 +0100100100001111,010000011 +0001001101111111,011000111 +1110111011000111,010110101 +1101111010010101,001001001 +0111010000010000,011011000 +0000000101000111,010001101 +0101011111000111,101100111 +0101110100000111,010110011 +0101011111101000,100000001 +1011110111001110,000011001 +0111101011101010,101011010 +0000010011011101,110110110 +1110001101011010,100001001 +1110011110101111,001110111 +1100000010011011,001110110 +0101110000110001,011000110 +0001101101010010,010001001 +0110111100000110,011010101 +0100001010111001,111110110 +0011100110111001,100111001 +0100011110100000,111001110 +1100010100010111,110100011 +0000100100011100,000100110 +0001111111011001,110010011 +0011100100001011,001101101 +1000100001101111,111000001 +1001101100000001,100110101 +1010101100110101,100000011 +0010100111101000,110101010 +1111111010100110,001001110 +1000111100110010,101111001 +1110010101011101,100001101 +1011111011001010,000010110 +1010000110011010,011110110 +1011010000010101,101010110 +1101001101010111,101011011 +1111010010100011,001011110 +1000111011101000,000100010 +1100100110010111,001111101 +0010010101001100,011010110 +0110000000001101,011011010 +0100100000110001,011110010 +0100100001100100,000111000 +0010010100100011,000101101 +0001110001100001,011111010 +1010001100011010,101110001 +1000110111001000,001000110 +0110101001000010,000110010 +0011011001011001,011000001 +1111001101011001,100101101 +0001010100100111,001100011 +1111010011000101,010010110 +0000000110011010,100110110 +0110111110110100,110001001 +1001000111111111,000100011 +1001001111111101,000100011 +1001001000110110,101011010 +0101100110011100,110010110 +1100011011101111,010110101 +1100000011111110,010000010 +0100001000100010,011000010 +0101010000011100,010001100 +1111010101110011,101111101 +1010000101001111,111011101 +0001010000100110,001100010 +0011100110001111,101100011 +0011000110110101,100111001 +0011001001001000,011110100 +0001110000000101,000110110 +0100011110111001,111111101 +1111000000001110,111111100 +1000111010111110,011101110 +1101100110101010,000011110 +1101101011011100,011010010 +0110100001111001,001011010 +0000000001110010,011100100 +1001100001010100,110000100 +0111100001100110,001000010 +1111111101100001,101000011 +1100111101000110,101010101 +1101110010101110,000011010 +0110100001110000,001001000 +0100101001111000,000011100 +0101101100001000,010101110 +1110111010001110,000101110 +1001000010110101,011011010 +0011111010100101,100001001 +0100111001111001,000010001 +0011101111110101,110100011 +1111000011010110,010111100 +0010001101110111,010011011 +0100000101000101,001001001 +1000011100111000,101111110 +1010101001111001,110011110 +1100110100110011,111111101 +1011010110100000,010011010 +0101111111110001,100100011 +0101011010010100,110010010 +1100001100011110,110111001 +1000101010011111,010100101 +0000111000101000,001000010 +1001100110100110,011111110 +0100110001011010,001100010 +0001011111110111,111010111 +1110000000010001,111100010 +1100100001110010,100001100 +0011110111011010,111010001 +0010100100010001,001110001 +1101000110101110,000000001 +0011010111000011,111101101 +1011111010001101,011101001 +0100000001101101,000111010 +1110000111011111,010000011 +1011111101000001,111111101 +1110101101101010,101101001 +1110110110100001,001111001 +1011110111101101,001011101 +1000011000100111,101000101 +1001000100011001,100001001 +1001010011000101,001100110 +1000111001101001,111000001 +1111011101110011,101111011 +1101110110101111,000011011 +1111010101011100,100101110 +1101011101111110,100101101 +1000001101101001,111010101 +1011001010001010,011110010 +0000011100110011,001101011 +0010111011001111,111001101 +1111000000011101,111000110 +1011110010010100,011001100 +1011101000110001,100101110 +0001000101001010,010110110 +0001001111111110,111000101 +1011000110001000,011110010 +0000110111011100,110101110 +0100001011100110,100101010 +0011101110000011,101110011 +1011010100011000,101000110 +1011000010101100,010000100 +1000111011100000,000111100 +0101110111000001,101111001 +0100111101110100,000001001 +0100111001000100,001010010 +1111101011100101,011000001 +1000010001111110,111110010 +0010111000111000,000010010 +1101000110100101,000011001 +0111000100001110,011111110 +0001101011000011,110110001 +1110010111110101,011010101 +1100011100001001,110011101 +0111110110010100,111001110 +1010100101001110,111000001 +1001111000000000,100111100 +1010000101100111,110101101 +0111001001011000,000101100 +0100000100000100,010001010 +0010001011000100,111001100 +1111111000111101,110111001 +0101001110100100,111101110 +1010111000001010,101000110 +1100001111000101,011001101 +1011010011100000,001011000 +0100011101011111,001110111 +0111001111000000,100010110 +1100110100111001,111100101 +0111110001110110,001101010 +1011010100011110,101001001 +1011111110011110,011011101 +1101100111011101,011010101 +0001000000001001,000110010 +0100100101000101,001011001 +1010100100111001,100011001 +1111011010110100,001110010 +1000000110100001,011000001 +0101101011010011,101001001 +1111011010110110,001110110 +0110000100111000,010001010 +0101001111010111,101011011 +1110001000101000,110110100 +1010010110011011,011111101 +0011010110011100,101001110 +0011010010101110,100001010 +1111000011000101,010011010 +1010111101101110,110101101 +0000011000011010,000111010 +0100101011000010,101010010 +0100100110110011,111110101 +1111101001000101,100000001 +0111101111110100,101100001 +1111110110100110,001001001 +1111110001110000,101100100 +0001111010011000,100010010 +0110011101001101,000110011 +0100101111011011,101101011 +0110100000101011,010101110 +1100000110001001,001010001 +0000101000010100,000111100 +1110010111010100,010010110 +1110110000100111,110110001 +0011111111100110,110001101 +1000000110100100,011001010 +1010001111011011,000001011 +0101010010011110,110001010 +0110011000010001,011101110 +0011001011000101,111101110 +1110000100101100,110111010 +1101100001110001,100101010 +0110010011000011,100101110 +1010010100001010,101011110 +0010011001101000,010111100 +1001101001111011,111011001 +1111001010011101,000100001 +1001000001110110,111011100 +1010001110001001,011010101 +0010100011101110,110100010 +1100010100111110,111110001 +0101110110001101,110101101 +1110000000000000,111000000 +1011110101101000,110010110 +1000110010011101,010101110 +0111000011001110,100000010 +1100001000011001,110110110 +0101010000010100,010010100 +1100010110001010,001011110 +0101011100101110,011110101 +0101011001001011,001111001 +0011010000011010,001000010 +0110001001000100,000101100 +0001101000111001,001011110 +0001011011010001,110011110 +0100111100011000,010100001 +1000001000110111,101101001 +1111100011001101,010010110 +0001111000010101,000001001 +1110101110111011,001011011 +0001011101110110,011010101 +0010011111101000,110111110 +0011001110011001,101001101 +0010110110000100,101010110 +1000111100000100,100010001 +0111001100101001,010001101 +1110100011010001,010001010 +0110100010111110,110010010 +1000010011010000,001101000 +0010111110101100,100101001 +0011001111100011,110010011 +1111101000110100,110100010 +0101101000010010,010001010 +1010000001001000,111010000 +1100111011100110,010110110 +0000101010110010,101110010 +0011110101001011,011100011 +1101011010100010,000011010 +0010000100101110,000111110 +0011100101110010,010101110 +1010111100010000,101111110 +1000010010111111,011110001 +1100101101010010,101110001 +1010001110000011,011000011 +0010100011110101,110000110 +0001001101001111,010111011 +0111101001010110,000100110 +0010100110101000,100101010 +0000001101111110,011111001 +1101000000001100,110111000 +1100001011100110,010101010 +0101001011000000,101100100 +0101001011011100,101000010 +1100101010010000,001110100 +1100001010011100,001111100 +0001101110101101,101100011 +0011001000100100,000011100 +0101000000000001,010100010 +0000100001010111,010111110 +0100101010001110,110000110 +0001110011100000,111111000 +0101001000011001,010001110 +0100010011000000,101001000 +1100000001010100,101101000 +0011110010001011,101100001 +1110101111010010,010001001 +1011111110111100,010111001 +0111111100001000,011100001 +1011010011100100,001010100 +0001100011001001,110101010 +0100011100100111,011000111 +0010010111001011,111011101 +1100111001111101,100011001 +0010110111001000,111000110 +0000111000100111,001010101 +1111110001010101,100101110 +0111001101100100,001011110 +0010111100110010,000000101 +1101000100100110,111101110 +1101110000111010,111010010 +0010100100001001,001001001 +0100110011010011,101111110 +1111001010000000,000010100 +0101110000010100,010001100 +0000011001010110,010100110 +0001111000101001,001100001 +1100101001010100,101111100 +1010100000010110,101111100 +1111101110110101,001100011 +0000000010010101,100101010 +0000111111000110,110010101 +0100110110111010,111100001 +1001010011111010,000100010 +1110110110111000,001010110 +0100100011000100,101011000 +1011101011000011,000001001 +0101111001101001,000010001 +0101011100101000,011111110 +1011000000011101,101000110 +1001100110011010,010011110 +1100010000010101,110100110 +0100111011111001,100010001 +0001011010101111,101110101 +0001111001111011,011010101 +1001100111000010,001110110 +1000011101001000,110011110 +0001001010011011,100001001 +0010101000110110,000000110 +1101100111110010,010101110 +1000011010110001,011101110 +1010111110011010,011100101 +1000011101000111,110000111 +0110011100110010,010011001 +0011110110101010,100010001 +0100010010011111,110110001 +0001001000000001,000100110 +1100001111011100,011111110 +0001001011110110,111011010 +0111010110101110,110001001 +0011001100110000,000110110 +0001100110111000,101011010 +0110000111100001,101100001 +1001011000001000,100111100 +0011011011010110,111010110 +0100111111001100,101001001 +1101110001110111,100101001 +0111101001001111,000010101 +0011101010001111,101100101 +1010000111000110,000101110 +0100000110111101,111111001 +1011000101010001,111010001 +0100110100010000,010111010 +1010001101000000,111000110 +0101000101000000,001100010 +1111001001011001,100101110 +0001000001011001,010001010 +1100111001001001,101000001 +1110000001100111,101101110 +0111101010000001,111110110 +0110010111000100,100100110 +0000011000101110,001010110 +1110100101000011,100110101 +0111001101101011,001001011 +1000111001011110,110101110 +1101010011110010,010111100 +1000000000011100,100111000 +0011111001010110,011001110 +0010111010111000,100010010 +1101010111001111,011110011 +1001101101010110,110000101 +1101101110010010,001001001 +1110001101000000,100100110 +0010000101110100,010011010 +1010011111011110,000001101 +1100011111100101,010100011 +1111100001111010,101111100 +1001111110101100,011101001 +1010000001111111,110000001 +0111101111001101,100010011 +0111100111011101,100110101 +1110011111001001,010111101 +1100111110111110,000011101 +1011100011111101,001110110 +1001010110111100,011001110 +1010010100010100,101100110 +0001001101000100,010101110 +0111110111101000,101010110 +1011111010000010,011111010 +1011110010000101,011110110 +1111111100110101,110101011 +0111111110101110,110011101 +0100010011100001,100101010 +1101001000010001,110010110 +1101001001110110,100111010 +1100000011110111,010011110 +1000001110011000,010110110 +1101101101110111,100100111 +0100000000111010,011110100 +1111110001001000,100010100 +0001100100100111,001111101 +1000110101010001,110111001 +0000001000011100,000111100 +1001100111110001,000101001 +1000000001010111,110101110 +0111101111100000,101001110 +1010111111101100,001101001 +1000100100011110,100100001 +0101101010000101,110111110 +1011001100110000,100110110 +1110010111100000,011101010 +1000010011111100,000001100 +1111000110000000,000010010 +0100010111001000,101011010 +0111010101011110,000101001 +1010101001110111,110000101 +1010010010100110,010100010 +0101110000001001,010100110 +1100001110100110,000101001 +0001101010110111,101000101 +0000001011000111,110001001 +0011010011001101,111110110 +1001001000100110,101101010 +0011001100011110,001000101 +0010001001110110,010011010 +0000000100101010,001010110 +1011010010010111,011010001 +0001100000110101,001000110 +1101101101101001,100011101 +0110000100011000,011110010 +0101010110111010,111000001 +1011011001110001,110111110 +1110001100010001,111100101 +0001011010110110,101010110 +0010001110111100,100000001 +0100110011110100,100001100 +1011111000101101,100011001 +0011011111110000,110111110 +1100011001011100,101110010 +1011100000100010,100001100 +0111101110001110,111100101 +0000111100110111,001110111 +1000000000010000,100100000 +0000111001110010,011111010 +0100010000110010,011101100 +1011011100101100,100001001 +0100101010110010,111110010 +1011010011111011,001100001 +1111011001110010,101111010 +1101000011001101,011111010 +0101110111110001,100100101 +1010001011110100,001011100 +1011110001011100,111011100 +1100111111010010,011111001 +0011111000110100,000101010 +1111010010010010,000111100 +1000000011010110,001101100 +1101011111101101,010001011 +0110010101001011,000111101 +0000101011010110,110111010 +1101001010111100,000100010 +0001100011110110,111000010 +0011100111100100,110000110 +0000101011011000,110101100 +1010101010110101,010000001 +1011111001001100,111101010 +0000011010010011,100101001 +0111111000010001,011000001 +0000011010100000,101001100 +1100101101110111,100000111 +1000111010100110,011010110 +0101101011010111,101000101 +0000011000000000,000001100 +0001000100010110,000011110 +0110011000101011,010111001 +0111101000000110,011111010 +0111011000110111,010110101 +0100001011111010,100001010 +1110010111111000,011000110 +1000011111110111,000010111 +0010011110110010,100011001 +1110101101110100,101000001 +1110000110010100,000011010 +1100111001111111,100011101 +0010011111100111,110100111 +0011001001100001,010010110 +1100111001111000,100010010 +1110010001000111,100100001 +0100101001010011,001110001 +1000101110001010,010001001 +1000000111110100,000011010 +1100111001110100,100001010 +0001101101100110,011111001 +0001111100101010,001100101 +0001011001010101,010010001 +1111011001011011,100100101 +0110010001000100,000100100 +1011000111010001,000110001 +1000001011000100,001001100 +1101110000100001,111111010 +0000101001100000,011010100 +1101101000011001,110011110 +0110101100010101,011111101 +1001010100110111,101010011 +0111101110100000,110001110 +0100011101001100,001010001 +1000010000001000,100011000 +0000001000000100,000001100 +1011001111101011,001001011 +0001011101001011,010111011 +1100000100101111,111011101 +0111001111011111,100100111 +1011010010011100,011001100 +0001100110101110,101100001 +0000000100111001,001110001 +1000011111001011,001011011 +0011111001000100,011110010 +1000111101010011,110111011 +0101101000000010,010110010 +0110111001111100,001011010 +0111110100010011,011000011 +1111110011100101,011001110 +1000000100001100,100011010 +1111101011100011,011001001 +1001100000100111,101111110 +1010000010001001,011010010 +1011101110001111,011100111 +0000010111010100,110100110 +1111001001111001,101101110 +0100011010110100,111100010 +1101001000100001,111100110 +1101011110110101,000110011 +1111111001010110,100101110 +1110100110110110,001000001 +0110010110100100,110100110 +1011110111010101,000101101 +1111011000101101,110001001 +0110011000011010,011111010 +1000000110101111,011011101 +0100110110001000,110000110 +1010011000110111,100010101 +1100010000110001,111101010 +0000011111001111,110010111 +1000001100100111,101001011 +1000110000010111,100110001 +0101111100100010,011111001 +1111100110001011,000011101 +0101111110110110,111001101 +1110001111011010,010001001 +1001101000100100,101111100 +0111100110000101,111111001 +1101100100100011,111110101 +1011110001001100,111101100 +1111101010011000,000111100 +1111011010000100,000010010 +1100111110111111,000011111 +0000001110110000,101100110 +0100000011011111,101111110 +1010101111010010,000001001 +1010001111100000,001100110 +1100101110010101,001111101 +1000100001010001,110110010 +0101001111011001,101001101 +0001100111010101,110000101 +0000001010000101,100001110 +1001110001100001,111111010 +0101111000010111,010001101 +0001001001011111,010000101 +0000100001110101,011111010 +0111001010100011,110010001 +0011011111101010,110000101 +0101011010000011,110101001 +0110010100111010,010000001 +1000011101110111,111100111 +0111001010101010,110001010 +1101111001011101,101011001 +1000101001110101,111111110 +0111111100110101,010101011 +1110100000110110,110000010 +1101000101011000,101001010 +1011101100110110,100100101 +1101100000100111,111111110 +0110101011100111,101111001 +0000001100001111,000011011 +1110111110100011,001111011 +0101101100000100,010111110 +1000011000000001,100001110 +1000111111010111,001110111 +1101100110000110,001111110 +1001001011110010,000110010 +0010110010100111,100110001 +1000010000110100,101100100 +0011000010110101,100111010 +0000011011011101,110110001 +0001110011110111,111001001 +1101001010011010,001001010 +0110100001001100,000100100 +1011110110111100,010111110 +1111001110001110,000000101 +0011111010110011,100100101 +1000001100001010,100010001 +0010011001101011,010111001 +1101110101111001,100110101 +1001001010011001,010001110 +1011001110010100,011011110 +0111101100100010,010001001 +1101011100110010,111011001 +0100011010000001,110001110 +1000100111001110,001000001 +1001010011111100,000101100 +0111011110100111,110010111 +0011011100001100,001110001 +0111000001111111,001100001 +1011110101011110,111011001 +0110101000101110,010100110 +1011011000001100,101110010 +0010100000100001,000110010 +1010010011010111,000010001 +1110100000110111,110000001 +0011001000100011,000010001 +0111111110010010,111000101 +0000011111010110,110100101 +1111101100010001,111001101 +0000011011100101,111000001 +1010101000011011,101101001 +1100001010101101,000111110 +1110011011001000,010111100 +0101001110000110,110101001 +0010000101111100,010000110 +0010111001011010,011100110 +0110111101100011,001111011 +0011010001000101,011100110 +0000100000010001,000110010 +1000110011100110,000110010 +1101011000001111,110110101 +1010001000110000,100010100 +1100111010110010,000000110 +1110100111111010,011011110 +1001000011101001,000001010 +1100111101111100,100011001 +0111000110110101,110111001 +1001111110011010,010010101 +1010011110011000,011111110 +1100111001010111,101110101 +1110011110010000,000011110 +1010010111000001,000101001 +1000101101001001,110001101 +1100111101000100,101010001 +0011010011101111,110001001 +1100001111001000,011010110 +1010100110101110,010100001 +1000101111011001,001101101 +0000111100010011,000111011 +0101011001010001,001011110 +0011101011101111,110010101 +1111110001100000,101000100 +1000100011101100,000100100 +0110101010111110,110010110 +0100111100101000,011000001 +1011010110111010,010100001 +0011110010111000,100110100 +0011111100110000,000100001 +1000001010000100,010001100 +0110101001000001,000110110 +1010000000001110,101011100 +1111010101111010,101100001 +1000101101011110,110100101 +0110010110111110,110001001 +0000000011100010,111000100 +0100011011101110,100110110 +0010000011011110,111111100 +0011011001011110,011001110 +1100110101101011,100100011 +1011101011111010,001111010 +0010100010100010,100110100 +1111101101000011,100001011 +1101101000101101,111100001 +1000111100001000,100000001 +0101101101011001,001011101 +1001011000000101,100100001 +1110010110101101,001110101 +0010111011000000,111011100 +1110101010010011,000001001 +0101101000101110,011100110 +1100010110001100,001010110 +0110111100111010,010010101 +1001100101010010,110001110 +1101111101101010,100010101 +1101111011011111,011011101 +1100011010000110,001000110 +1000000011001001,001010010 +1111110100001001,111100101 +1100010000010010,110101100 +0000101001101110,011000110 +0110101111111101,101010011 +0011000010100111,100011110 +0000000100110111,001101101 +1001110011100110,000001010 +1111111101011001,100110011 +1100111111000000,011011110 +1110100011001000,010101000 +1111110011000111,010001001 +1000111100110011,101111011 +1000111010111111,011101101 +1110100001100100,101111000 +0010000011101111,110111110 +1111111100100010,110000101 +0000110010011000,100100100 +0011010101011100,011001110 +0110110010000010,111011100 +0101110110000011,110111101 +0101110001001101,001101110 +1110101101010110,100000101 +1100011010001011,001011001 +0011001110010010,101010001 +1010001100101010,100110001 +0110110010110001,110000110 +0010100110110010,100001110 +0011100110101000,100011010 +0011010110101111,100001011 +0011011010000011,101101001 +0110010100001010,011011110 +1000011000001000,100011100 +1010110011100011,001111110 +0101101111001111,101100111 +1001001101011001,110001101 +0101001110001110,110111001 +1110101001110011,101001001 +0010101110111010,100011001 +1110000101101001,101110001 +1100011010110110,000010110 +1100111011111010,010010110 +1101111001111000,100110010 +1011110010100110,010001010 +1100010001011010,101111100 +0010001010011100,101111100 +0101000011100000,100010000 +0100110101111110,000011001 +1001001101001001,110110101 +1101000111100100,010011010 +1110101110010000,000001110 +0100011010101101,111010001 +0100011110110011,111101011 +1100100110111100,000010110 +0111000101111110,001100001 +0011101001110001,010101110 +0001001111110111,111011011 +0001110100110110,001001001 +0100001101001100,001011110 +1001001100101101,101111101 +1110100001101111,101100001 +1010010110001001,011011001 +1101001100000000,110100110 +0001010001100111,011100001 +1110000110101111,001111101 +1110100101001010,100101110 +0000111010011111,100101101 +0101000101010111,001011101 +1100010101111110,100001001 +0000101110010011,100110011 +1100000110101100,000111010 +1001000101100100,111101010 +1010011001001110,111010110 +0011101011110001,110101110 +0010110111111001,110010101 +0111110001111111,001111001 +0011010111111110,110101001 +0010110010001011,101000001 +0101011000111110,011001110 +1101110000000101,110110110 +1010101000111000,100011100 +0100001101100001,000100101 +0100011001001010,001011010 +0010101001101100,010100010 +1110100100010011,111110101 +0000111000001011,000000101 +1001010001101110,111110010 +0101100110000110,110111110 +1100111010011001,001100001 +1111001011100110,011011010 +1101111000101100,111101010 +1101011000010110,110010110 +1010110011000011,000111110 +1110011110110000,001011110 +1001011000111111,101001101 +1101110001110101,100101110 +1010111110100001,010111101 +1110110000111000,110010100 +0010100100100000,000110010 +0100111110110110,111110101 +1100000101010101,101101001 +0000111101010001,010111101 +0101000100011011,010001101 +1011101001110001,110101110 +1011101010010011,011001001 +0110100111110111,101000011 +1100111000001101,110001001 +1001000101111100,111000110 +1011111100010100,101001001 +0110010000001000,011011000 +1110000101101110,101111110 +1111111011010010,010100110 +0111010110010001,111011001 +1111000011100010,011010100 +1111001001001101,100000001 +0111000010010001,111010010 +1100001101000111,101001011 +0001010111110000,111011010 +0111010011110001,101111010 +0001010010001000,100111000 +0110101010000000,111010100 +1101100110110100,000100110 +1111011111011110,010101101 +1101010001010110,101010010 +1011110100110010,100100001 +1000111100010111,100110111 +0010001000100001,000100110 +0011111010010101,101001001 +0100000000011001,010110010 +1100111100011011,110100111 +1101011010100000,000011100 +0111110111110110,101101001 +1000101100001111,100000111 +0000011000110011,001101001 +1100001000010101,110101110 +0110011000110111,010010101 +0000000011110100,111101000 +0010111110111000,100010001 +1000011011100010,000101010 +1100111001110001,100000001 +1001100011010111,001000001 +1000011110101110,011010101 +0000101000011011,000101001 +1111001100011010,111001001 +1011111100101000,100010001 +1111111001111011,101110101 +0001100010101001,101101010 +1100101110010110,001111001 +1000001100011011,100110011 +0000101111001110,110000101 +0010111110001001,101000011 +1011101111101110,001010101 +0100010110000001,110001001 +0010010000010101,001100110 +0010111011011001,111100001 +1110100100111000,110011010 +1110101111001101,010100011 +1001100000100011,101110110 +1100011010001001,001011110 +1010001001010010,111100010 +1010000111101101,001111001 +1101001111111001,010101101 +1110111010101011,001100101 +0110011011000110,100100110 +0010001001010101,011101110 +1110011000001000,111011100 +0110111000010101,011110001 +1000111010100010,011011010 +0010100101001010,011001110 +1001011100010100,100010001 +0011111100100001,000000011 +1100100111011100,011100110 +1011100001100111,110000001 +1001110010111000,011010100 +1010001100111110,100000101 +1011110000010010,101000010 +1001011111011110,001001101 +0101111011000011,101111001 +1011000001110110,110111100 +1101000001011000,101001000 +0011110111100100,110001110 +1000111101100001,111011101 +1001110011110001,000100110 +0100010111100000,100101010 +1110001110110110,001011001 +1110001100110111,110011011 +0110101101101100,001100001 +1011100110101111,010010011 +1001000011001011,001110110 +0001000100100001,001100001 +0100110110101111,111001011 +0100101011101101,100100001 +1101100111101000,010011010 +0001011010110101,101010001 +0010111001101111,010101101 +1111111000111001,110110001 +1001011010101110,011110110 +0010100100101101,000100101 +0001100010100101,101111010 +0110010100001001,011011001 +1101001100010001,110010101 +0011101011010011,111001001 +0010111010001111,101001101 +0000101100101101,001000011 +0101101111000010,101110001 +1010011110111001,010000011 +1110100111100101,011111001 +1111011111101011,011000111 +0100100011001100,101000100 +0010101010001011,101001001 +1001000110100001,011100001 +1000010010100101,011000110 +0001111111001101,110101011 +1101001000111000,111001100 +1101101101111101,100110011 +0001001101101101,011111101 +1001010000101000,101111000 +0010001101101110,010111001 +1110011110101101,001110011 +0000001011101111,111011001 +0000110111100010,111011110 +1100001100110100,111101110 +0101000100111111,011000011 +1110010101111111,101001011 +0101000101011100,001000110 +1111001000011100,111000010 +1011010101001011,111111101 +0000111111010010,110111001 +1101000010111001,000101010 +0000101010100011,101010001 +1101110000011010,110010010 +1001011101001101,110110011 +0011101100001010,001101001 +1111110110001011,000010011 +0110001001110000,001010100 +0110001111100011,101100011 +0000011011000010,110001010 +0111001110111010,110101001 +0000011011001000,110011100 +0110001000111101,010000001 +1110010110001111,000110011 +1010000110011111,011111101 +0110001001110110,001011010 +0111011010100101,110010001 +1101011000110010,111011010 +0011111110101101,100011011 +0101001110111010,111001001 +1010101101001000,111001110 +1011111100000000,101111110 +1101101000001111,110100101 +1001011011010001,001011110 +1001010000111010,101000010 +0011011000111100,000101010 +0001111000010000,000000010 +1111100010110010,001101100 +0101101100101000,011101110 +0001010010000001,100101010 +0001111110000011,100111011 +0010001011011110,111111010 +1111001001110101,101111110 +0110001111111001,101001101 +1101001100011011,110001011 +1001111010110001,011000001 +1010110001001011,111000001 +0010000001100011,010100110 +1111011000001100,111110010 +0101011001100011,000011001 +0111110111100101,101001101 +0111001100000110,011101001 +0001000010001101,100111010 +1110100101001011,100101101 +0111000000101000,010001000 +0110101110000101,111011101 +1010001111110010,001010001 +0100000100111111,011111101 +1011010110100110,010010001 +1100000010111111,000000001 +1001101110100100,011111110 +1100011110010110,001100101 +0100000000100010,011000100 +0011111010100010,100000110 +1111001110011000,000101110 +0101000011100100,100011000 +1001100110100010,011110110 +0001101010000011,100110001 +1111110011000011,010000001 +0010100101001011,011001101 +0110010010101100,110110100 +0101001100110010,011010001 +1111101101111010,101111001 +0001101011010111,110000101 +0001001001010011,010010001 +0101011001111011,000100101 +0100011010011100,110110010 +1001010110010101,010010101 +0011101100011001,001011101 +0000111110111010,101100101 +0010011100010101,001100011 +0010001110111001,100001101 +0111111100110011,010100111 +1010110011111011,001010001 +0000001001100010,011000010 +1010000010001000,011010000 +1001011110100000,011101110 +1111100110001010,000011110 +0110110101010000,000000110 +0101111111000011,101111011 +0100000001101010,000110100 +1100111001011000,101100010 +0001111000000111,000110101 +1101100011000000,011110000 +1010011001100001,110101110 +0010100111011110,111100001 +0101010100110101,011010101 +1110110001010000,100000100 +0000111001101001,011000001 +1110000010010111,000011110 +0100101101110001,000001101 +1010111001111001,110010001 +1010101011011001,000011110 +0110011100100100,010100001 +1110010100001011,111011101 +0110111001111010,001010110 +0000001111010000,110100110 +0000111010111011,101100101 +1011100100010101,101000101 +0110110001100100,001110100 +1101111101100001,100000011 +1000001000010100,100101100 +0111011111010010,100111001 +0110001101110001,001010101 +1011010000010110,101010010 +1101001110010000,001010110 +1000111110000001,010011101 +0110010110011100,111110110 +0101110000110010,011000010 +0110100010010010,111110100 +0011101011111011,110111001 +1011100010111001,010111010 +1011001100011001,101001101 +1110101001111010,101011010 +0111001101100011,001010011 +0011001100100100,000011110 +0011001101100100,010011110 +1101010101111010,100100001 +1000101101001100,110000001 +0111010001000111,000010001 +1010011101011110,111110101 +0011110001000000,011111000 +1001101001001101,110100001 +0011010010010100,101010100 +1110001110101111,001111011 +1100101000101010,111001010 +0100100001010110,001111100 +0101110111110011,100100011 +0010100011101000,110101000 +0000111011100000,111011100 +1000001011010111,001101001 +0011011101100100,010010001 +1100011011111101,010001001 +0001110111000100,110110110 +0000100111001111,110000011 +1011110100101100,100011110 +0110010101010010,000011110 +1110011100000101,111000011 +1111011001010010,100111010 +0011100001111010,010111100 +0101001100111010,011001001 +1110100100010100,111111010 +1110010111100010,011101110 +0111110001110011,001100001 +1100000100110011,111100101 +0001100000101010,001101100 +1011101011110010,001101010 +0001011010111001,101000001 +1010001010101101,010111110 +0001110110010111,100001011 +1101111000110001,111000001 +0111110000111110,010111010 +1000101000111001,101101110 +1011111011110010,001100110 +1101001100101111,111111011 +0011001010101101,100000001 +1100000101100101,100101001 +1000101101000001,110010101 +1010100011011101,000010110 +0101001100100010,011100001 +0101000110011001,110001001 +0111010000000001,011101010 +0110000000100010,010100100 +1100101001111000,100011100 +1100010001000101,101000110 +0101110011011100,101011100 +0011100011010000,111001000 +1101011100101011,111111011 +0101001011100001,100010110 +1011100101100010,110001110 +0100101001010100,001111100 +0010110001011000,011100100 +0010000111100010,110100110 +1111011101001101,100001011 +1000010000101011,101011110 +1111001101100000,101010110 +1000111100101010,101000101 +1101011010010001,001011110 +1101000011111101,010100110 +0001111010010000,100000010 +1100100011101101,010100110 +1100000100000111,110001101 +1111101101001010,100011001 +0111001111000010,100010001 +0011100100011010,001011110 +1111010100000110,111100001 +1011000100100100,100011010 +1111110011011011,010110001 +1110100001110010,101001100 +1000101010100011,011010001 +1011100010111111,010110001 +1001111000010001,100000001 +1100110110111011,000010011 +1000010110010010,010101110 +0100101110100111,111011011 +1010011011110010,001011010 +0000100100100000,001010010 +0110100010001100,111000100 +1001011101101100,111110001 +1110010111010101,010010101 +0101010111001100,101110110 +0110101101101111,001100111 +1000111001110010,111111010 +1101001001000110,101101010 +1111011101011110,100101101 +1001101111001110,001100101 +0110001010101100,110111100 +0111001000101010,010001010 +1101111110001110,001101101 +0111011000100100,010010010 +0010000011111011,110001110 +0011100111000110,111111110 +0011101010111000,100111100 +1001000011111000,000101000 +1100000110110100,000011010 +0010111111011101,111101011 +1001000101001111,110111101 +1010001011011011,000001001 +0010111010010001,101111110 +0111000010111010,110101100 +1001101000001000,100101100 +0010000001011100,011111000 +1110100011110001,011001010 +1000001101100011,111000011 +0111000010010000,111010000 +0100101100000111,010011011 +0101100010100100,111111000 +0100001110110001,111100101 +0001111101000110,010110101 +1101001110100000,000010110 +1110110110001011,000100011 +1101000011111000,010101000 +0100000000111001,011110010 +1101101100011100,110010001 +0011001101000101,011101101 +1111110000000000,111111000 +1110001100001101,111011101 +0110000010011000,111110000 +0000011110100110,101000101 +0100000010101100,111011000 +0110000010011100,111111000 +1011001001010000,111010100 +1010011001101001,110111110 +0100100010001001,110001010 +0101000100100110,011101110 +0001000000010001,000010010 +0101000100001001,010110001 +0011001111011010,111001001 +1000101001011100,110100010 +1001001110001011,010110011 +1010000100100010,100100110 +1111100110110100,001100110 +1010110010110000,010000100 +0011010111100100,110010110 +1101100000011001,110011010 +0111010011101100,101001100 +0100100011010101,101111010 +1111100100110100,110100110 +1110010010001011,000111110 +0011010001101111,010001001 +1111011100100011,110011011 +1011111001101111,110011101 +0000010100101000,001011010 +0110111101011000,000010001 +0000100000000100,000011000 +0001111111110010,111000101 +1010110001101001,110100110 +1101010110100101,000010101 +0011111000010111,001001101 +0101100000000101,010111010 +0111000100010011,011010101 +1110000001101011,101110110 +0101011110101111,111110111 +0110010010010101,111100110 +0010000010011101,101111010 +1111001010010001,000110110 +1100010000100111,111000001 +0011011010001001,101111110 +0100110000110000,011111000 +0111100110101001,110011001 +0001010100111000,001000110 +1100101011111010,010011010 +0101010101111001,000100101 +1110110001110101,101001110 +0001000010110100,101011000 +1001111100010101,100001011 +0111101100011110,011010101 +0001111000001010,000100110 +1010101101011100,111100001 +0101010001100101,000010110 +0110100000010100,011111000 +0100101000001000,010001100 +0010010110000100,101000110 +0010011011011001,111111110 +1001011110110101,011010011 +1100101110000110,001011001 +0110001001000110,000101010 +0001010100010101,000010101 +1010101000111100,100010010 +0101011010100011,111101001 +0011100110000010,101110110 +1101110101101110,100011001 +1010011010100100,010100010 +0101010100010000,010011010 +0111110010000000,111111000 +1001100100111111,101010011 +0110100111011010,100011110 +0011100110011101,101010101 +0011100110101101,100010101 +0010110100100100,000110110 +1111011110010011,000111011 +1101100001011110,101010010 +1010001010100000,010100100 +1000101111011101,001100011 +1101011101111001,100100011 +1111100011010111,010100001 +0100100001110011,000001110 +1110110110011111,000011011 +1000111001110000,111111100 +1010000110010000,011100010 +0000000100001110,000011110 +1111111011011110,010111110 +1100101001110111,100000101 +1011011000010110,101010110 +1001100011110011,000101110 +1110001001111101,101000001 +1000110001001110,110001010 +1110111001000000,100111100 +1001010010101000,011111000 +1111110011011010,010110010 +1001110111000001,001111001 +1010010101001101,111010101 +1001101011000011,001110001 +0100000001110101,000011010 +1101000011001010,011110100 +1011011010011101,011001001 +0110111100011100,011101001 +0110111101010111,000001111 +0000010111000000,110001010 +0101010000110001,011011010 +0111111100100111,010001111 +1001011010100101,011100001 +1011000101011101,111000101 +0101110111001100,101101110 +1111011101100100,101010001 +1100000100000011,110000101 +0001000100001111,000111101 +0100110000011000,010100100 +1001000110101010,011110110 +1011010100011001,101000101 +1110001001010101,100011110 +0000011000111101,001110001 +1100111101011001,101100011 +0001000001111111,011000001 +1000010011101101,000110110 +0010000101010010,011100110 +0100110001101011,000100001 +0100011001001100,001010010 +0111100110110001,110101001 +0010111011011100,111101010 +1010100110110111,010000011 +1101110000100110,111110010 +1011000001001101,111111010 +0011010100011010,001000001 +1000101110110011,011110011 +1100011001001000,101011100 +0111000110000101,111101001 +0000001101110100,011101110 +0010001010000110,101001010 +1010101000001010,101001010 +0000000110100100,101001010 +1111100111010110,010100001 +0111101100010111,011000111 +0100110010000101,110010110 +0001001100001111,000111011 +0111001000110111,010111001 +0110101010001010,111001010 +1001111111111110,000111101 +0001110011010100,110001100 +1011111010110011,010100101 +1001000001100010,111100100 +0001010000110100,001010100 +1001111110001001,010100011 +0010010100111011,000000011 +0000011110110010,101101001 +0001100001001111,010100001 +1100001101010101,101101101 +1110110011111011,011010001 +0000001101101111,011011011 +0101110101100010,000000001 +1010110101001010,111000001 +1101100001000000,101110000 +0001101100110101,001000011 +1000001000000001,100000110 +0001001010000110,100101010 +0001000110000111,100101101 +1010111101000101,111010011 +1000100101011101,110100101 +1010011010111011,010000101 +0111001000110001,010110110 +1100110001001100,101001100 +0011111010010010,101000110 +0011100100000100,001111010 +0000010010101110,101010010 +1011101010011111,011010101 +0101101011110010,100101010 +1011101100101010,100011001 +1100111001001010,101000110 +0001110000100111,001110001 +1010110010000011,011011110 +1101101110001101,001100011 +0011111000101001,000010001 +0111000101000011,000010101 +0001101011101110,111100110 +0111000110101101,110000101 +0011111111110001,110100011 +1011111110010110,011001101 +0011111000101110,000011110 +0000001110001110,100011001 +0101011000001010,010111010 +1110101000011000,111101100 +0010111110100101,100110011 +0111110100110101,010101101 +0101000010001101,110111010 +1010000001001010,111010100 +0111011001100010,001011010 +0110111110011110,111101101 +1000100100010000,100110010 +0011101010001100,101100010 +0000001011011000,110110100 +1101011111100110,010010101 +1100000111010110,011101110 +1110100101000001,100110001 +1001100110000101,010111001 +0100010100100011,011001101 +0001110011011100,110011100 +1010110111101010,001100001 +0000100110010111,100111101 +0111111100000000,011111110 +0010000100111111,000000011 +0101000001001101,001111010 +1100111100111110,111101101 +1110011011001011,010111001 +1111010101101111,101001011 +1010111011111110,001011110 +1000000110110100,011101010 +1000111000011010,100100110 +0110111010100100,110110010 +1111010101100001,101011001 +0011110000011110,001011010 +1000001101000111,110001011 +0110011101000001,000101101 +1100100011100011,010110110 +0010010101100101,010100101 +0011001000001110,001111010 +1011110101111110,110111001 +1011101100100001,100001101 +0000101011001011,110001001 +0110001101010101,000011101 +1001110101101001,111100101 +0010000011111111,110000001 +1001000100101110,101111110 +0011111000011111,001011101 +0011100110110111,100100011 +0010001101001010,011010001 +1001011111000101,001100011 +0001111100001100,000101001 +0000111010001111,100001101 +1100100101000000,101010010 +0001011000100001,001101110 +0111001010111100,110100010 +1010010001000111,111000001 +1000010001110011,111101110 +0011100100011111,001010011 +0100001100101001,011010101 +0011011111001100,111110001 +1000111101111110,111101101 +1100100010101100,000100100 +1100001111011000,011110110 +0000101101000101,010011101 +0111010100111101,010101101 +0000110101011111,010101011 +1111000001111101,101100110 +1111001111101111,011000111 +0011101001110000,010101100 +0010100010101101,100100110 +1000110010100000,011011000 +1101010111010011,011011101 +0111101101110010,001101001 +0111000010001101,111111010 +0011001010001011,101110001 +1001000110010110,010011110 +0110110000110000,010000100 +0110111100011011,011100111 +0101101111011110,101010101 +1001110100000011,100111101 +1101001000011111,110000101 +0110000010101010,110110100 +0101110011011001,101010110 +1000100011001011,001001110 +1100111111000101,011010011 +1110010010111001,001000110 +0000001000000010,000000010 +0111101010101101,110010001 +0010001100010110,001101001 +1010100010111000,010011000 +1000110100001101,100001101 +0000111101001111,010001111 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-B/test_outputs.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-B/test_outputs.csv new file mode 100644 index 000000000..f6925f1a5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-B/test_outputs.csv @@ -0,0 +1,2001 @@ +input,output +11011111100000,0001111 +01000001011000,1101000 +01001000110100,0010000 +00110100001000,0010010 +01000101111111,1011101 +01001110000100,0100011 +00101011010100,1111110 +11000000111010,1101010 +01110101111010,1000000 +10011100000001,1110000 +11000110010100,1111001 +10000011011010,0010100 +01101010111101,0001000 +00100110011100,0001001 +11011010000100,1101001 +01100000011011,0110011 +01000111110001,1101100 +00011011001001,1111000 +00001101011010,1100000 +11111110111110,1000001 +01001110000010,0100101 +01000111001110,1001010 +01011000001111,0111101 +11110011101111,0011010 +00011001000000,1110100 +00000111111000,1000101 +11101010000111,1001100 +01110010101011,0011100 +11100010110001,1000000 +11010011101110,0000100 +00111000001111,0011101 +10110110010101,1001100 +11000101001111,0110101 +11011001101110,0000010 +00011000100000,0110100 +11100010010101,1011000 +10001011101001,0110000 +01001000100100,0000000 +11000001100011,0000011 +01101100011001,0110100 +11100000111101,1110101 +11000111001111,0110100 +00110001000010,1010100 +11000100100110,1111000 +00000010110110,0101000 +00000100101101,0101110 +11100100101101,1100110 +00000110101101,0110000 +11010001101000,0000000 +10110001110011,0101101 +10011100100011,1001010 +01001011010110,1011100 +10001001001000,0001000 +01100110111110,0001010 +01001011000101,1000000 +00010000010011,0011101 +10001001110011,0110101 +00111100010111,0001110 +00000110011110,0010010 +00010011111000,1001110 +00000000000011,0000011 +01101101000110,1010000 +11011110011111,1000000 +01001100010101,0100010 +11011101000010,0101100 +01101101011011,1110110 +10010110011001,1011100 +00011010100000,0110101 +01110101100000,1101010 +00111110101010,0100101 +01001111010110,1011110 +01101100000110,0110000 +01000001011111,1101111 +00101001101011,1110101 +11110101101110,0011000 +11110111011101,0100100 +00011011011000,1101001 +01010100010110,0101000 +00100101001011,1010001 +00010010101110,0111000 +10001000011010,1101100 +10101000101110,1010010 +11011101011101,0100010 +11111110111100,1000011 +00011110001001,0000110 +01011111001000,1000111 +01000101110001,1010010 +01111101100011,1010010 +00001101101000,1010010 +01001110100000,0000111 +11100000101000,1100000 +10100011011010,0001100 +10000111100111,0100100 +01001001011011,1101101 +01100111100000,1100011 +11000111010010,0111110 +00011000011000,0011000 +10110100100111,1010001 +11010011010100,0110110 +11001000100000,1000100 +00101101110111,1100001 +10101010100011,1011000 +11011110110010,1010101 +00011011011010,1101010 +11000000010001,1000001 +10101001110110,0100010 +01001010110110,0011100 +11101100001100,1111100 +11001001101011,0001101 +11111010000101,1111000 +01000000110011,0010011 +00110010011000,0000001 +11100010101111,1100110 +10110100010100,1001100 +00100000000011,0011101 +11011011010101,0110000 +11011001100111,0001101 +10100001000111,0011011 +00111011010111,1001100 +11011100101111,1111110 +10000110001001,1001100 +10001101100010,0111000 +01001011110111,1010010 +11001000111010,1101100 +11110010001111,1001010 +10100010111011,1001010 +01010011111110,1101000 +00111000000011,0010001 +10010101011000,0011100 +01100010111110,0001000 +11101100110110,1000000 +11100001110101,0000101 +10111011011110,0000010 +10010011111011,0110010 +00111100100100,0101010 +11110110000110,1111110 +10001100110011,1010110 +10110111011101,0000100 +01010011000001,1001000 +01000111111110,1100010 +01100001111000,1001000 +11010101101101,0000110 +01111111100111,1101000 +10011111010000,0010111 +01011111001010,1000101 +10000110110100,1101001 +10000010110000,1101110 +00011101001101,1000010 +11101011111010,0001010 +11100010100011,1101100 +11011101011100,0111100 +00101110010001,0000110 +01010100001010,0100000 +11101010110000,1000101 +00001100111111,0111001 +11010011111101,0010100 +10010001110101,0111001 +11110101100110,0010000 +01101000101101,0010001 +01000111100111,1000100 +11110100011110,1011000 +01000101111101,1011110 +00100000010101,0000101 +10010011101001,0100000 +11101111111010,0001001 +01100100010000,0100010 +11110011101011,0011100 +00111100010000,0001110 +01010000111010,0010010 +01011011011011,1100100 +11100011111000,0001110 +00000001111000,1111000 +01011110001110,0100001 +11101001100001,0011010 +00000000111011,0111011 +10110101011011,0000001 +01001001011001,1101110 +01000101010100,1011000 +01000101011000,1010100 +01111011010001,1001100 +01101101100101,1011100 +11011001010010,0101000 +10010101111111,0110101 +00100001111001,1101001 +10110011100000,0101001 +00010111011100,1101001 +11110110100000,1011011 +10111010010111,1110100 +11110100100010,1011000 +11000010010100,1111010 +00111010100110,0101010 +11011011111110,0011100 +00111100110111,0101110 +11110110001000,1110011 +00100100001110,0010100 +10000000011111,1101111 +11111100100010,1011100 +11101110010010,1100101 +10000100001100,1001000 +00100100010111,0000101 +10100101010100,0000100 +01000111110100,1101001 +11011110011000,1111011 +10110110100000,1101011 +11011001101001,0000110 +10101111110000,0111011 +00110100011100,0000100 +10001000111111,1011011 +01111000000000,0111100 +00010110111000,0101101 +01110011001011,1101100 +11111010011010,1100110 +00110110001010,0010001 +11010000101100,1111000 +10110101110111,0101001 +00101000011101,0001001 +00001100111001,0111100 +01100010001010,0111100 +01011101101111,1000001 +10110101100100,0101100 +10010100011010,1100000 +00111000011101,0000001 +11000000010010,1000010 +10110111001111,0011000 +01011101001100,1000010 +00010011010000,1100001 +00010110100010,0110001 +01001100100101,0000010 +00101001110000,1011000 +11100000100010,1101100 +00111111100001,1001110 +01101101001010,1011000 +10001010101111,1001010 +00011001111101,1110001 +10010011001111,0000110 +11011110001000,1100111 +10001111011011,0010000 +10011011011101,0010000 +10110111101110,0100110 +11000011011000,0110110 +00100100100001,0111100 +10100101100101,0111010 +01001001010001,1100110 +00011001001101,1000001 +11001101001101,0110010 +00010111000010,1110001 +00111000000000,0011100 +00011100000111,0001110 +01000111000011,1000000 +10100101100111,0111001 +10010111010001,0010010 +10111010101110,1100010 +11110110000111,1000000 +11100101000111,0101001 +11001101111001,0011100 +01100110010010,0100001 +01001111110101,1101100 +01101011111010,1110010 +01000000010010,0100010 +01110000101111,0011011 +11000011100110,0000100 +10001001101001,0101110 +00111111101010,1000101 +10000001101010,0101010 +11110010000110,1111100 +10010010000011,1110100 +00101010010001,0000100 +11011110100001,1001110 +11010110000001,1101010 +10101010101100,1101110 +11001001111111,0011011 +00110011011000,1111110 +11100100001111,1000101 +00100110110010,0111110 +01001100101001,0001100 +11101000001111,1000011 +01101011010111,1111100 +00000100101100,0110000 +11100111010010,0100001 +11111011101001,0010100 +11100110000011,1110000 +11101000111001,1110110 +10111101000001,0010000 +01001001111111,1011011 +00000100111101,0111110 +00110111100011,1001000 +10100101001010,0010000 +11100000111111,1110111 +10010100011110,1100100 +10110010111111,1000110 +10100110111111,1001100 +11110000111001,1111110 +01110000010001,0110110 +11010101001111,0111001 +00010111000011,1110000 +11011100110001,1101000 +00011001011110,1010010 +11001101011000,0110010 +11010001011011,0100011 +00100110111010,0110110 +00000101010110,1010100 +11010010110001,1010000 +00100001010010,1000010 +00000001011100,1011100 +11000011110000,0011110 +11110000100101,1100001 +10010101100111,0101001 +00100111110000,1011101 +01010111000001,1001010 +00101101011000,1110010 +10010000101101,1000101 +11000000100100,1111000 +01001011111000,1100001 +11000100001100,1101000 +00000011100111,1100110 +01111001010100,1001000 +11110111000101,0111100 +11000100110110,1100100 +11011101101001,0000100 +10001000100000,1111000 +00110000100010,0110100 +01010111010110,1010110 +00101100011111,0001001 +00101100011000,0001010 +00111100000110,0011000 +10111010001011,1101000 +11011011011001,0111000 +11010110101101,1000100 +00101001101101,1110001 +00010001000100,1001000 +11001110011110,1110110 +11001011101100,0001110 +00000110000011,0000000 +10111011111111,0100010 +11101001110110,0000010 +01001111011000,1010011 +01111100110011,0001010 +00010010011000,0011110 +00110000110010,0101100 +11100001100100,0011000 +01110100011110,0111000 +10011011101010,0111010 +00010000110110,0111010 +00100101011000,1110100 +11100111000010,0110001 +00011111110011,1000100 +01111011110110,1110010 +11100000111000,1110000 +01101111000101,1010010 +00011111100101,1010010 +10111110100011,1101100 +10000101001001,0001010 +00011101110101,1111100 +00000101001111,1001101 +00101001001110,1010010 +00001000011100,0011000 +01110000100000,0011000 +10000001111001,0111001 +01110110001000,0110011 +01011000010011,0101001 +10010100111000,1101100 +01000011110000,1101110 +10111000010010,1110000 +00001111011010,1100001 +10011000011011,1100101 +10101111110001,0111010 +10111101011110,0000000 +00001011010000,1101001 +10111010000001,1011100 +11110110001001,1110010 +10101101100010,0100100 +10011000101001,1000110 +11010100100000,1001010 +01110011010100,1001110 +00101101010100,1111100 +10111010000110,1011010 +10011001010100,0010000 +10111110000001,1011110 +00011111011111,1010000 +01011010100110,0001010 +01001010010001,0111000 +00010101010100,1100100 +00010100101111,0100101 +10111100101001,1011000 +11010010011001,1000000 +01111001011111,1111101 +10101000100000,1100100 +00101000100110,0111100 +10100100111110,1001100 +10001011001000,0001001 +11010000111011,1100011 +10100000101011,1010011 +01111110101010,0010101 +01110111110111,1001000 +10010100010010,1010000 +10100101101011,0110001 +11110011101110,0010100 +10110000000000,1011000 +01100001101101,1010101 +10001110111100,1100101 +01110100001010,0110000 +00100001110000,1100000 +00001001000111,1000011 +01000000111110,0011110 +00000110111001,0100100 +11001111000101,0100010 +10110101001001,0011100 +10010000110110,1011010 +10100000111100,1001100 +00001000001110,0001010 +01111010110000,0001101 +00101011011110,1110100 +00111011100111,1110100 +11100001110000,0000000 +11010110010111,1001000 +00000000001100,0001100 +00011011100111,1101100 +11110001001101,0101001 +00010100101001,0100010 +10111101100111,0110110 +11010101000010,0101000 +01000111101110,1110010 +01101101000011,1101010 +00011100000010,0001100 +11000010001001,1010000 +01110000001111,0101011 +10011000011010,1100100 +00010000001000,0000000 +11101110111100,1001101 +00010010011111,0010110 +11100101001000,0111100 +01101110110011,0000100 +01101110100011,0010100 +11111110101010,1010101 +11001110010101,1111100 +10100101000100,0010100 +00111111011011,1111000 +00000001111001,1111001 +11101001101111,0010011 +01110100000110,0100000 +00000100000000,0000010 +00010101010110,1011000 +10010110111110,1101010 +01010110000100,0101101 +00111101101111,1111110 +11101011111110,0001100 +00100111011110,1110010 +00010100011000,0011100 +11111011100000,0011101 +11111100000100,1111010 +00011100101000,0111010 +00111100011100,0000010 +10101010000101,1010000 +01110011010000,1001001 +10111101110000,0110110 +01100111011010,1001110 +00101000110100,0100000 +01100101011010,1110000 +01100001000011,1101101 +11000010001010,1101100 +11011101010110,0110000 +11100110000100,1110101 +01010110101100,0000101 +01011100101001,0000100 +00011100001101,0000010 +11011010010011,1001000 +00011111010111,1100000 +00001011111001,1000000 +10001101111011,0111110 +01000111001101,1001000 +00110110101111,0111000 +11111100101111,1101110 +10000100111111,1011101 +11110000011111,1011011 +10111110111011,1111000 +10111111011010,0000101 +10101110010000,1000111 +10101011110010,0111010 +00010100100111,0101001 +01001110011000,0110011 +11000001010110,0100110 +10001110101111,1001000 +10101011001110,0011100 +10001010100011,1000100 +00101000111100,0101000 +10000100100010,1000000 +10001101100000,0111010 +10011011101101,0100000 +00111001100110,1110100 +00011011101111,1100010 +01010010010011,0101100 +00111110000011,0011100 +00010010001001,0000000 +11000011110100,0011010 +01011001101001,1000110 +01110111101011,1100000 +01100111111011,1001000 +01111001011010,1111000 +11110110111001,1000010 +00001001100000,1011000 +11000101000110,0111000 +10000100110001,1010010 +00110100100011,0110110 +10010100010111,1101001 +01010111001010,1000001 +01001111110011,1101000 +01011101101100,1111100 +11101010100100,1010001 +00000011010000,1101110 +10111111111101,0111100 +11110011100111,0010010 +11000011001011,0110010 +11000100111010,1101000 +11000110010111,1000100 +11110011000011,0100100 +11101101010001,0111000 +00000110110101,0101000 +10100100100011,1011110 +01010110100001,0001010 +01101110100101,0010010 +10001101101000,0110010 +11110001001000,0110000 +11100100010111,1011001 +01101010100100,0010001 +10101101011000,0001010 +00101011110000,1011001 +10001011011000,0010001 +10100001111110,0101110 +10110101101000,0100010 +11000111011011,0101000 +11000010110111,1100110 +01010011101010,1111100 +01101100111010,0001000 +10101101101011,0110110 +10110111110110,0110110 +01011111011111,1100000 +00010001001000,1000000 +01100100111100,0001000 +10110111000001,0011010 +10001011100011,0100100 +10001000011011,1101101 +10100100101001,1010010 +11001101001010,0101000 +00110011111111,1100110 +01001010000110,0100010 +00010010100110,0110100 +10010101100000,0110010 +11001000010010,1000100 +10101010101111,1010010 +01110111100101,1101100 +10101100001000,1011010 +10101111001010,0011001 +10010111000011,0001000 +10101110111111,1001000 +01010011011110,1011000 +01110101100100,1101100 +01100110110011,0000000 +11010001011000,0100000 +00110101100011,1110110 +11010100101000,1000010 +10111110001111,1010000 +10010000101100,1000100 +10111001111111,0100011 +10100111110101,0111000 +00001011001001,1110000 +01001000011110,0101010 +11110101100111,0010001 +00100110101111,0110100 +10110110001110,1010110 +01010101010011,1101110 +11101001001101,0100001 +11000001000010,0111100 +01111101011010,1000100 +10101111101110,0101110 +10011001110011,0111001 +11110100101101,1101010 +01101100100111,0011110 +10100101101111,0110101 +00111111000101,1101010 +11001011111001,0010000 +01111101100001,1010000 +01001101111010,1100000 +00000101111001,1111010 +10111000000110,1100100 +10101010100000,1100101 +01000010010111,0100110 +01000011011101,1101100 +11111111100010,0011101 +00110110110001,0110010 +10010101110100,0100100 +10100110100011,1100000 +00110001100011,1110101 +10101010111011,1001100 +11111111001000,0110111 +01101010000011,0101000 +00010001110000,1000000 +01010100010001,0101100 +10010110001101,1000100 +11000110100001,1000010 +01100011010011,1111100 +11101010000101,1110000 +01110110111000,0000011 +10000110011000,1010101 +01111100001010,0110100 +00011101110000,1000110 +00010101110011,1111110 +11010110100011,1001000 +00100111100001,1000010 +01010010011111,0100110 +01001101001001,1110100 +11011100010001,1001000 +01011010000010,0101110 +10111011010011,0001000 +11011100011110,1000000 +01100000110110,0000110 +10010101011010,0010000 +00101011011010,1110010 +11001110111000,1010011 +10000011111110,0100000 +01110000101011,0011101 +01111000111000,0000100 +00111001101101,1111110 +01101000101110,0010010 +00010001100000,1010000 +01101110001101,0111100 +01111111101001,1100110 +00010110000100,0001101 +10011110111010,1101001 +11001001110111,0010011 +11001010011100,1110110 +00101000110111,0100011 +11110010000010,1111010 +01111100010011,0110010 +00001011110110,1001100 +00000111000001,1111100 +01010000110101,0011001 +00110001000011,1010101 +10001011000101,0000000 +00100100010010,0000000 +11110000111010,1111100 +01111000100110,0010100 +10001110101110,1110110 +11101011011111,0110010 +11011111111010,0011001 +01111110010010,0101101 +11110111001101,0110100 +11111110000110,1111001 +01001000101110,0001010 +10100101010001,0000010 +10010101110010,0100000 +10101110100010,1100101 +00111110010000,0001111 +11001101010000,0111010 +11100111010111,0111000 +00011001011001,1010110 +10011011001001,0000100 +00010011101111,1100110 +10001011010111,0010010 +01001001110010,1010100 +10111000110110,1001100 +11111101011000,0100110 +11111001010010,0110000 +10010001011111,0010111 +01101001100110,1011100 +10110011110000,0110001 +00100001110010,1100010 +10010101101011,0100001 +10111011101100,0100001 +00111110101011,0100100 +01100100110111,0000101 +00011011110111,1111100 +01011110011000,0111011 +10111101001010,0010100 +00011010101001,0111000 +10010111111100,0101001 +00100000001100,0010100 +01011111000010,1001101 +01000011101001,1001000 +11110000101000,1010000 +11001111110011,0011000 +11100110011001,1101100 +11010010010110,1110100 +00101010110100,0111110 +11110110100111,1100000 +00111011011000,1111001 +00110000100111,0110011 +01111011101010,1100110 +11000001101111,0001111 +00111100001111,0011110 +11101010111010,1001010 +11110010100001,1011000 +00110100100110,0110000 +01100011001111,1100110 +01001110011001,0110010 +01011110000011,0101100 +01101101101101,1010010 +10011110101101,1111100 +00110000000010,0010100 +10110000110101,1001001 +10101011001000,0011001 +10010101010000,0010010 +10110001110100,0101000 +11000001001011,0110011 +00111110110011,0110100 +10101000111010,1001100 +11000101001011,0110001 +10100000101000,1010000 +11110100011100,1100100 +01111110100011,0011100 +11011010001001,1100100 +01110010001000,0110001 +01000111101000,1110101 +00011001100111,1101101 +00111010001010,0010110 +11000001111011,0011011 +10101111111011,0110000 +00010101001010,1000000 +00111000000110,0010100 +10000110101110,1110010 +00110100110111,0101001 +11000110111000,1010101 +11101001011111,0110011 +11010000001110,1011010 +11111101111100,0000010 +00110010101000,0100001 +01111110011001,0100110 +11100001110111,0000111 +10110110000010,1011001 +10100010111001,1001000 +11001110100111,1000000 +00110001000110,1010010 +10110110001011,1010000 +11011100000111,1010110 +11100101010001,0111100 +11000000001101,1010101 +11101101011100,0101100 +01101101001011,1100110 +10111101000110,0011000 +10010101011110,0010100 +11001111111111,0011000 +11101001110100,0000000 +00001010011011,0011100 +00100001010111,1000111 +10101001000111,0011101 +00000111101110,1010010 +10110011000110,0011100 +01111000010010,0110000 +01101100010101,0111100 +00100110100100,0100101 +11011101101000,0000110 +11000010010101,1000100 +01111010010100,0101001 +00100110010100,0000101 +00100100000111,0011001 +10110110010000,1001011 +11000111110011,0010000 +10111110010101,1001010 +01011010010000,0110101 +01101011111111,1001010 +00100011111000,1010110 +10111011000100,0011001 +10100111000000,0010011 +10000010110101,1010100 +10100100010101,1111010 +10010111100001,0110010 +11101000000110,1001100 +01011001010110,1101100 +10101000111110,1001010 +01110110101101,0010100 +01110000000110,0100010 +00010000111110,0110110 +11111111011101,0100010 +01001011010111,1100010 +00111010011101,0000000 +11001100101111,1110001 +10101010010010,1000110 +00001010000001,0000100 +01100101101000,1101100 +01111011111000,1111001 +11010110000000,1101011 +01010100001101,0111010 +10110010001011,1101100 +11010010011111,1000110 +11101011010101,0100000 +00010000110100,0111000 +11011110111101,1011100 +10101011110111,0100010 +00100101010000,1111100 +11110000100111,1100011 +01101111000100,1010011 +10000100011001,1101010 +01010001110110,1011010 +00101101101100,1001100 +01110001111100,1000100 +10000000010100,1100100 +00011100011010,0011000 +10101000110001,1000110 +11110010000111,1000010 +11000000110001,1100001 +01101010000110,0110010 +00001110111101,0100100 +01010111100001,1110010 +01110110011101,0100100 +00010001111110,1110110 +11100010011000,1101110 +01011110110110,0010001 +11110100001010,1110000 +10010111111010,0101110 +11000110100101,1000100 +11110010110101,1110000 +10110100110010,1110000 +01101011000110,1010010 +01110110000100,0111101 +10011101001111,0000001 +11101000110010,1111000 +00000001100101,1100101 +11010101011011,0100001 +01111001100110,1010100 +11010110100111,1110000 +00011001000001,1001010 +10101111011101,0001100 +10011010010000,1010101 +01100110101001,0011100 +10000100010011,1100001 +00001001111001,1111110 +11110001001001,0101110 +10000001111100,0111100 +01011011111011,1010100 +00101010110011,0100100 +00001000110011,0110101 +00011000111110,0110010 +11110101100001,0010100 +10011100110101,1011100 +10000011010101,0010100 +01010000001111,0111011 +10011111011110,0011110 +00100011101100,1001010 +11111000010010,1010000 +11000101010100,0111000 +01001110011110,0110110 +00110101110111,1101001 +10111101010001,0001000 +01100000100001,0011110 +01100001110101,1000101 +00010011000010,1110010 +00101101010101,1000010 +11100111010110,0100110 +11110000110011,1110101 +11011000110111,1101101 +01111010100001,0011100 +01001101001101,1110010 +00001101001011,1001110 +11011111000100,0101011 +10111110011111,1000000 +01010011001000,1000001 +00110100001011,0011110 +10001011111000,0100001 +00011110000111,0001000 +01101011100100,1100001 +01101100000000,0110110 +10100100110010,1000000 +11100000111010,1110010 +00010100100000,0110010 +11110010101000,1010001 +10001001000100,0000000 +11111001101010,0011000 +00110101110010,1010000 +10110011101111,0111010 +01111000001000,0110100 +10100011001011,0010010 +10100011001001,0010000 +11110101111001,0000010 +11100100100110,1101000 +01100101011100,1001000 +00111000111010,0100100 +01111010011100,0100001 +00100110010111,0000100 +10010100011100,1011000 +10011010001000,1000101 +10100101010110,0000100 +00100110011000,0001101 +10000111010000,0011101 +01010101101000,1111100 +00000101011100,1100000 +10110110010011,1001000 +11101101001011,0100110 +01010101110011,1011110 +01011100011111,0100001 +01100101110110,1000100 +10101100000111,1101110 +01001011000100,1000001 +11100001010011,0111101 +00101101101000,1001010 +00010001011010,1010010 +00111100000000,0011110 +01010010110010,0010010 +10100000010001,1111110 +00011110101011,0111000 +10010000111001,1010001 +11111010001110,1110010 +00000110011111,0011100 +10000111101111,0101100 +11100010110011,1111100 +01100110000011,0110000 +10000101110010,0110000 +11011101101111,0000001 +01100101110000,1111100 +11101111110110,0000001 +10010100101111,1000101 +11110001111101,0000101 +10110001110000,0110000 +00011000111010,0110100 +01010001110010,1011100 +11101111011010,0101001 +01000001010010,1100010 +11100100111000,1001100 +00010000111111,0110111 +11100011000101,0101000 +00010010001111,0000110 +01100000011000,0110000 +11011010101110,1000010 +10111010001111,1101100 +01011101001101,1111100 +11000010111000,1010110 +10100001010111,0000111 +10110011100110,0101100 +10110000111110,1000110 +10100101100110,0111000 +11111001100110,0010100 +00001111000101,1111100 +01101110001110,0111110 +11000011101000,0001110 +00001101101011,1101110 +01001001011110,1101010 +11110110100001,1011010 +10000010111101,1011100 +00100001100001,1111110 +10010111000111,0001000 +01000001011011,1101011 +00111011100001,1001100 +01001001010111,1100011 +00110001111000,1100000 +01000010110110,0011000 +01001101110100,1101100 +10010110001010,1000001 +00000101101000,1010100 +10001101111100,0100100 +10000000001101,1110101 +11100011010001,0100000 +00001100101101,0101010 +01000000110110,0010110 +10000111111000,0100101 +11100110000000,1110011 +00100011110010,1011100 +11101011110000,0000101 +10101101001101,0010010 +11011001011111,0100011 +01111000100011,0010001 +10001110101010,1110001 +10110010011110,1000100 +00001101111100,1000100 +01000100001111,0110101 +01000001000000,1000000 +11000100111101,1101110 +11011110000101,1101010 +11010000000101,1010001 +00111100100011,0110010 +11110011001100,0110110 +11000010010000,1111110 +01110111101100,1100101 +11010001101001,0000001 +11011000011101,1000001 +10011011010110,0010010 +10010100010001,1101100 +00011001001010,1000100 +00100010010111,0000110 +11010011011110,0111000 +10100010100001,1100000 +10011011000110,0001010 +10011010101010,1111010 +10101001011101,0001001 +01110001100100,1010000 +10011101011100,0011100 +11111010000010,1111110 +01111000011001,0111010 +11100111011101,0101000 +11100100001100,1111000 +01001010000010,0100110 +10101000001011,1100101 +11110000111101,1111001 +11101101110011,0000110 +01110100101101,0011010 +00010111000110,1110110 +01101110010100,0100011 +00101101100000,1000110 +11111011010111,0110100 +01001001100011,1000101 +01001110111010,0010001 +10101111100000,0100111 +00001011101110,1010100 +11111100011011,1011010 +01111111001000,1010111 +11001111110001,0011010 +00100001110001,1100001 +00000010101010,0110100 +11011000101011,1111001 +11100101010010,0100000 +10100010011111,1110110 +11110101101001,0011100 +10111111001110,0010001 +11111001011001,0111010 +11100001111000,0001000 +01100000010111,0111011 +10111100100010,1101100 +01001111100000,1111011 +00001111000001,1111010 +01000101011001,1101010 +10101111010010,0000101 +11100100110100,1000100 +01000011000110,1000100 +10001001100110,0100010 +00011010110101,0100000 +01010001011110,1100110 +10111110101101,1100010 +01000101011100,1010000 +00010111110010,1000001 +11010011101100,0000110 +11010100011111,1000101 +10000000111000,1011000 +00000111101011,1101000 +00011100100010,0110100 +11010111010010,0110001 +01100110110110,0000110 +01111001001011,1101001 +01000110111000,0010101 +01101000011110,0110010 +10101001110100,0100000 +10110110100001,1101010 +11111000100101,1100110 +11100011110000,0000001 +01100110011111,0110100 +10110111100100,0101101 +11001100001110,1010000 +10001011000111,0000010 +11000011011111,0101110 +00100011101101,1110100 +01111101011100,1000010 +11101011000000,0110101 +01011100011110,0100000 +00111111111100,1011101 +11110111101110,0010110 +01101100000101,0101100 +00110110110101,0110100 +11000011111100,0010010 +11110011111010,0000010 +00110101000011,1010110 +11110011010010,0101010 +01101011110001,1111000 +00010010011101,0010100 +01000000100010,0000010 +11001010001010,1101010 +00011111101110,1011110 +11000101111000,0010100 +01001001011101,1101001 +00101110000111,0010000 +00010001011100,1010100 +01111111000111,1011000 +11100010111101,1110100 +11011110001110,1100001 +00100110110011,0100000 +10001110110011,1101000 +10111000000010,1100000 +11000100111000,1010100 +00000110110010,0101110 +00000111100000,1011101 +00001011010110,1101100 +11110011011110,0100100 +10010000111011,1010011 +00000010001000,0001110 +00000100111110,0111100 +11011011000111,0110100 +11100111111001,0001100 +11100011100011,0011100 +01110010010011,0110100 +00010001010100,1011000 +00000110100100,0111001 +00010110100001,0110010 +11111011111010,0000110 +01111111011001,1000110 +10111100010100,1001010 +11100011100110,0010100 +01111110011110,0100001 +10010111110110,0100110 +10000000011101,1101101 +00000011100101,1100100 +10110110010111,1110000 +10011001011011,0010101 +11010010000000,1101001 +11010010100001,1001000 +10001010011010,1010010 +01111010110111,0001100 +01000000100011,0000011 +00011001110101,1111110 +11100110111011,1110000 +01011010000000,0101101 +01111010100101,0011000 +11100101111110,0001100 +11111000010000,1101100 +01111001100001,1010010 +11100010001011,1000010 +00111110001101,0010010 +10101010110001,1111000 +00010100000010,0001000 +01111110000001,0111110 +10010111100111,0101000 +11110011011101,0111000 +11101000101001,1100110 +00010000001010,0000010 +11110101010101,0110010 +00001001000100,1000000 +11000111110110,0011010 +10010111100000,0110011 +10110000011111,1111011 +00100011000110,1100100 +00001011011001,1100000 +10001010111011,1011100 +00111010010000,0001101 +00101000000011,0011001 +00001110010010,0011001 +10110000010110,1110010 +10111111001100,0010011 +00101010001001,0011000 +10110100011001,1111100 +01001000011010,0101100 +11010001011100,0100100 +10101010001101,1100000 +00000010110101,0110100 +00100001110100,1100100 +01010010111000,0011110 +11000111010110,0111010 +11001000100011,1111001 +11011010011001,1111000 +00001000111000,0100000 +01000100110001,0010010 +10111100111100,1111100 +10101100011001,1110100 +10101111010101,0000010 +01101101101010,1101000 +10101111010001,0000110 +01111000100000,0011100 +11110111011110,0100110 +10110111100011,0101000 +01110111001010,1010001 +00001110011110,0010110 +00001000000000,0000100 +00101001110100,1100000 +11100011001100,0111010 +10010001000111,0001011 +01101011100101,1100000 +01010111010010,1010001 +10011010100100,1110001 +11110101111000,0000010 +00100010000110,0010100 +11110110101010,1010001 +01011001101000,1111000 +00111101011010,1111000 +10011011011110,0011100 +00111101101000,1000110 +01000110101100,0001001 +10100110110110,1111010 +00110110100011,0101000 +10001001000001,0000110 +01111101110100,1110010 +01010010100111,0001010 +10000101101100,0110000 +01010000100101,0001001 +11100101111011,0001001 +11100010111110,1001000 +01001011010011,1100100 +10000110110111,1010100 +00111100100000,0101110 +11010101010011,0101110 +11010000001010,1011100 +11111011101100,0010001 +00001100011001,0011100 +11000000110110,1100110 +10100010001111,1100110 +00010011110111,1111010 +10010101001010,0000000 +10101111001001,0011010 +01100000000001,0101110 +01001001100010,1000100 +10110101000011,0010110 +00000010000010,0000010 +01100100010001,0111100 +11111101101101,0011100 +10100001010110,0000110 +01110010101100,0010110 +10100010011110,1001000 +01001010100001,0000100 +01011001010100,1010000 +11101110100110,1010001 +11101011100000,0010101 +10010011000111,0001010 +01001010001000,0101001 +11100100011010,1010000 +10010010010011,1101100 +01000100110011,0010001 +10011101010100,0010010 +00000110110000,0101101 +01001000001010,0110100 +01100010100110,0010100 +01010010101110,0000100 +00101100010111,0000001 +11001100000110,1100000 +10010100011000,1011100 +01000101110101,1010110 +11011010101011,1111000 +01111110011101,0100010 +01010001101011,1000011 +01110100000011,0100110 +11111010001001,1110100 +00000111001111,1001100 +00111010001000,0010101 +00111110111010,0111001 +01010100111111,0010101 +10101110100101,1100010 +00101001111101,1101001 +11111000100111,1100101 +10110100111101,1000110 +10110011000111,0010010 +10000111101101,0110000 +10100000101101,1010101 +01000100111100,0010000 +10000111001111,0001100 +01111110111110,0000001 +00100101000111,1011001 +11001111111010,0010001 +10101111100110,0100001 +01011001110010,1011000 +10011001101011,0100101 +10100101110001,0100010 +10001101100101,0100010 +01101100010001,0111000 +10100000000011,1101101 +00010000010100,0011000 +00010000011110,0010110 +10100000101001,1010001 +10100000110001,1000001 +00010101000101,1001010 +00010010110101,0111000 +01000110001011,0110000 +00100011010100,1111010 +00110111010110,1110110 +11101000000000,1110100 +01000101010000,1011100 +10111111110011,0110100 +11010110001111,1011000 +01110101100001,1010100 +01100000001001,0100001 +01100000110011,0000011 +11000110101010,1001110 +11111001010011,0110001 +11011010101010,1000110 +00000111010110,1101010 +01110100100001,0010100 +01101110010011,0100100 +11100001001000,0100000 +10110000010010,1110100 +01011101100010,1110100 +10000001101111,0101111 +10011100111100,1101100 +01010010111111,0010110 +11011000000001,1010010 +10000101101000,0110100 +11111000100110,1100100 +11010010001001,1100000 +01010110110111,0011000 +00011011001101,1000000 +01111101010111,1110110 +11111110000101,1111010 +00011110000001,0001110 +10001111000100,0000011 +00110101001100,1100100 +00011010000001,0001100 +00010111010001,1100010 +00000011111111,1111110 +11100011010011,0111100 +11001001011100,0101000 +01001111110100,1101101 +00010101011100,1101000 +11010100111111,1100101 +10111010110101,1110000 +10000111000101,0000100 +01100111010101,1000100 +01001000100010,0000100 +01000110010000,0111101 +10111111010110,0001001 +11100101111010,0001000 +10000101011101,0011110 +00010000100110,0101010 +10001000110000,1101000 +01011110000001,0101110 +11101110000000,1110111 +10011000010110,1101100 +00111011100011,1110000 +10001010011011,1101100 +00000111010101,1101000 +10001111011010,0010001 +00101111010110,1111110 +11011111111111,0010000 +00011010101101,0100000 +10110010100010,1101010 +00010000110011,0111101 +10110001111111,0100111 +10010011001000,0000001 +10111000010000,1001100 +01110001100011,1010101 +11000001101110,0001110 +01110010111111,0000110 +00101001011011,1001101 +01010110011100,0111001 +01110011000100,1011110 +00101001011100,1001000 +01110011001000,1010001 +00101111010010,1111001 +01001111011010,1010001 +10010111111101,0101000 +00000100001100,0001000 +01101110000100,0110011 +00011110110111,0100000 +01001101100101,1000010 +10001000110111,1010011 +01100010100001,0010000 +00010101000000,1110010 +01011001101101,1000001 +01010010101000,0000001 +01011011010110,1010010 +10000110110101,1101000 +00101100101111,0110001 +01101011001011,1100100 +10010111101001,0111100 +01010011100100,1110110 +11010100100011,1110110 +10001000100110,1000010 +10100111111110,0110010 +11100010110000,1000001 +00010001100111,1101011 +00100110111001,0110100 +00000011000000,1111110 +00010110100100,0110101 +11000000101010,1110010 +00010100111010,0110000 +10101100000110,1010000 +11010100011010,1000000 +11010001110010,0011100 +01000010111100,0010010 +10011111111101,0101100 +00101111011100,1110101 +11010101001011,0111110 +01111101000100,1011010 +11010101101110,0000100 +00000011101010,1010100 +10101110101010,1101001 +00101000101101,0110001 +11000101001001,0110010 +11101111100110,0010001 +01001101101100,1110100 +00101010000010,0010110 +01010011011011,1100010 +10111011110101,0110000 +00101101100110,1000000 +11010011001010,0100010 +00011011110100,1000001 +10011010100000,1110101 +11110101110111,0001001 +00110011000101,1010000 +01010101110111,1011001 +10100100101000,1101100 +10000011101001,0101000 +11010100100010,1001000 +10100111100100,0100101 +10111111110000,0110111 +01110111101000,1100011 +01110101000001,1100100 +01010011001001,1000000 +00011000110000,0100100 +00100100110100,0111000 +11101011110101,0000000 +10011110001100,1000011 +11111000000001,1000010 +00001101010111,1010001 +00110100011111,0000101 +10101111000000,0010111 +01011101011010,1011000 +11111100100100,1011010 +01101001111010,1001100 +11011100101010,1000100 +10000111001001,0001100 +11101110010101,1100010 +10011101000101,0001100 +01011011001111,1111100 +01010000011101,0100101 +00101111110100,1011101 +11101001111010,0001100 +00011001101100,1100000 +01100110101110,0011010 +00110011100011,1110100 +10110111011100,0000101 +01110011010010,1001010 +01010000010111,0101011 +01100110101100,0011001 +01000110011110,0110010 +00010101111101,1110110 +10010111001111,0000100 +00101111000100,1100011 +10111101110111,0101110 +00000101011010,1011000 +00111001110110,1101100 +01110001110010,1001100 +10111011011001,0000100 +11001101000101,0111100 +01010111110011,1100000 +00100111111111,1101100 +10010101010011,0011110 +10111101100101,0110100 +01000111011110,1010010 +11111100101010,1010100 +00010010011110,0011000 +00001101001111,1001001 +11111001100000,0011100 +00110101110101,1101010 +11100101100101,0011010 +11001101011110,0101000 +00011011100000,1010101 +10000011111101,0111100 +11000110011110,1110010 +00111101001001,1011000 +11011000000111,1010101 +00100011110101,1100100 +00010110010001,0010010 +10000100001111,1110101 +00110000010110,0001010 +10010000001000,1000000 +00111010001110,0010010 +11001110101000,1001011 +00101101001010,1101000 +11111010110101,1001000 +00110101001111,1011001 +10111110100111,1101000 +11000101000000,0100010 +11000010111001,1101000 +00101110110001,0111010 +10001011111010,0100010 +01000100101101,0001110 +10111110101100,1100011 +10011000001000,1000100 +11010011000001,0101000 +01010110001000,0100011 +11100101010000,0100010 +11001001101101,0001001 +10010110110101,1100100 +01101010111011,0001100 +00000100000101,0000110 +00010010011011,0010010 +01001011011110,1010100 +10011100010011,1101010 +01101010110011,0000100 +11001110011111,1001000 +01101100110001,0000100 +10100010011001,1110000 +00111110001010,0010101 +10001000001110,1110010 +11110010001000,1110001 +10110100001011,1101110 +00000110100000,0111101 +00000001111101,1111101 +00110110010001,0001010 +00100101111100,1010000 +01010101010111,1101001 +10010111001110,0000110 +00010000011011,0010011 +00011000000011,0001001 +11001000010001,1000110 +00110110101000,0100011 +10101101100000,0100110 +00011011000100,1110001 +01010001100011,1001101 +11000111111111,0011100 +00000011101110,1010000 +01110001101100,1011000 +11001011000010,0100110 +01111100011101,0111100 +11111100110101,1110100 +01000100110000,0011100 +01000010001100,0101010 +01010110111111,0010100 +01011011110001,1100100 +10111011111101,0100000 +11000110100000,1000011 +00110111100001,1001010 +11001110010011,1111000 +00110110000001,0011010 +00110011110101,1101000 +10011111100000,0110111 +10010011100001,0110000 +10100101001011,0010001 +01000101000110,1111000 +01101111110110,1111110 +00111000110000,0110100 +01001111111010,1100001 +11111110000011,1111100 +00010000000100,0001000 +10011010000010,1001110 +01100000001000,0100000 +01101101011000,1001010 +11101001010101,0111110 +10111110000100,1011011 +11100001111100,0001100 +11011000000000,1101100 +10110010110001,1110000 +01110100010100,0101100 +10111011010010,0001110 +11110011100011,0010100 +01111110011100,0100011 +10011101000011,0001010 +01111010000011,0100000 +11101111011111,0110000 +10000011011011,0011010 +10000011001100,0001010 +01011010100100,0001001 +10011010111001,1101000 +01011110011110,0111110 +11000111000011,0100000 +10111100101111,1011110 +00000011000001,1000000 +11110101100000,0011010 +10001010111001,1100000 +10010011011110,0011000 +10111110100110,1101001 +00110110011001,0000010 +10100111000001,0010010 +00011101011100,1101100 +01100010101011,0010010 +00111001000110,1010100 +00010111100100,1010101 +11101101011101,0110010 +10111001111000,0111000 +11111001000010,0100000 +11000001010100,0100100 +10010110110110,1100110 +10011001000011,0001001 +10100001100101,0111001 +10101101110111,0100001 +01110001011011,1111101 +01000000010101,0100101 +01100110001110,0111010 +00110001011001,1000001 +11110000110000,1001000 +00101000110010,0100100 +01110001001110,1101010 +00111111010101,1110010 +11101111101110,0011110 +11101100110001,1111000 +00001000100001,0100110 +11100001001011,0100011 +01100000001101,0100101 +01101110010111,0100000 +11101111101111,0010000 +01111001111000,1111000 +00111011011101,1000000 +00110010111110,0111000 +11010100000011,1010110 +11100101100001,0011100 +11111010110111,1110100 +10101110000001,1010110 +01001101011111,1101001 +01000100111010,0011000 +01011011110111,1011100 +00111111111010,1011001 +01010000100001,0001110 +10100110011110,1001010 +10100101111111,0101101 +01000110001101,0101000 +00100111010110,1111010 +11001011111100,0010110 +11000100101100,1001000 +10000011000000,0000001 +00011100111110,0110000 +01111100000110,0111000 +00101101010011,1000110 +11100000001010,1000010 +01101110100000,0010111 +11101001000101,0101110 +00100001101000,1110000 +11000111101101,0001000 +10001101101101,0101010 +11101110101110,1011110 +11111111101011,0010100 +10010010001000,1000001 +00001011101010,1010010 +00010010010110,0010100 +10010100001101,1111010 +00011000000100,0001000 +10100011010111,0000110 +10100000100101,1011001 +01110111111011,1000000 +10100010001110,1011000 +10011111010010,0010101 +00110001010110,1001010 +11010101010110,0101000 +10000001010111,0010111 +00111001010010,1001000 +01001110000101,0100010 +11011111001011,0100100 +00101101100011,1111010 +11001000010110,1000010 +00010101010011,1011110 +10001100110100,1101100 +00011110011011,0011000 +01111001100011,1010001 +10000101001100,0001000 +11001110011010,1110001 +00001011000101,1000000 +01111000111111,0000011 +11110001001011,0101101 +10001101111101,0111010 +11000110101110,1001010 +01100001100000,1100000 +11100011101110,0011000 +01111001100111,1010101 +01100110101111,0010100 +11000100100100,1000100 +00110001100001,1110110 +00100011110100,1011010 +11101100001101,1000010 +01110011110100,1110110 +01101001000010,1101000 +01100101111100,1110000 +01110000101101,0011001 +10001100001011,1110110 +10000110101111,1001100 +00110001011111,1000111 +00101111111011,1010000 +11000110001111,1010100 +00010011101100,1011010 +11011111001000,0100111 +01000110110110,0011010 +10001100001000,1001010 +10001101000100,0000010 +01101101100001,1011000 +00101110010000,0000111 +00110010110101,0101000 +11100010001101,1000100 +11101110110110,1000001 +10011100100110,1110000 +11011110101101,1000010 +11111111001111,0110000 +10010000100111,1001011 +10101011100111,0111100 +11111100101000,1010110 +10110011101110,0100100 +11100000001110,1000110 +01011100000110,0101000 +00001101000111,1000001 +11010000111000,1100000 +10010110110000,1100011 +01111011111110,1111100 +10011101100110,0110000 +11001100011000,1110010 +11101110011000,1101011 +01001011101010,1110010 +01011100101000,0000110 +00111100001110,0010000 +01000010100010,0000010 +10100011110100,0111010 +10100101111011,0101001 +11001110111010,1010001 +11101001111011,0001101 +00110010101011,0111100 +10011001100101,0101110 +10001111001011,0001000 +00011100010001,0011000 +10111111000100,0011011 +11001001011010,0101100 +00101001010011,1000101 +00101100101000,0101010 +00011010011110,0011100 +01100001101100,1010100 +00011001010001,1011010 +10101001000110,0011100 +11010010101000,1000001 +10011000011000,1011000 +10111010000101,1011000 +11110111000010,0111001 +01100100000111,0101001 +11001111001101,0101100 +10010011011010,0011100 +00101111010011,1111000 +00010110101110,0111010 +01101010001010,0111010 +00111000100001,0110010 +01110101000110,1100000 +10001101010010,0011000 +11100001100011,0011101 +11100101110111,0000101 +10111000101000,1100100 +11001011000001,0100100 +11001010101101,1110000 +01001000011101,0101001 +11010011101011,0000010 +01100101011101,1110110 +10001100100101,1000010 +00001011001100,1110110 +01110010011000,0100001 +01101101011110,1110000 +01101111110011,1111000 +00101000010000,0000100 +10000011001000,0001110 +11011011101110,0000010 +01001111000100,1000011 +10101100001110,1100000 +10100010010001,1000000 +11000101011010,0101000 +01000101011101,1101110 +10000011110111,0110110 +00111011000111,1010100 +11011011101000,0000101 +00100110000010,0010001 +10111001110010,0101000 +00000010111110,0100000 +11110111101101,0010100 +11000001110011,0010011 +00101011100001,1000100 +01100000000110,0101010 +11111111010011,0101100 +11111001101111,0011101 +01000110010001,0111100 +01101011111101,1001000 +11001010000001,1100100 +01000101010111,1100101 +00110001110101,1101001 +01111000001110,0101100 +00000001110000,1110000 +10000110110011,1010000 +01000001011010,1101010 +01001011011101,1101000 +10001100110001,1010100 +00000011000100,1111010 +01000100000111,0111001 +11100100000100,1110100 +01011010110011,0011000 +11111011010100,0101001 +10011111010011,0010100 +01010011111111,1010110 +11101010110111,1111100 +00010100011111,0010101 +11011001010000,0110100 +10011000101111,1000011 +01100100010100,0100100 +01000000111001,0011001 +10110010110100,1110110 +01100000001110,0100110 +00111111000011,1101100 +01011111100001,1110110 +01111100100001,0010000 +00111001001100,1100000 +01110101011111,1111001 +10111100100101,1010100 +00000111110011,1110000 +11101110101100,1011101 +10011101110101,0111100 +10011110111000,1101011 +10010010011010,1011100 +10011101011011,0010110 +00010101110101,1111010 +11001101101101,0001010 +10001110000010,1000101 +01011000010111,0101101 +01011101001010,1000100 +00010010110011,0111100 +11101100111011,1110110 +01000110000111,0111000 +11000001010010,0100010 +00010000001101,0000101 +11110001110000,0001000 +11000010101010,1001100 +10010111011011,0010000 +01010000001011,0111101 +11110110010011,1101000 +01111101100010,1101100 +01000111100110,1111010 +01011011100001,1110100 +00010001111001,1110001 +00101111000011,1100100 +11010000011100,1000100 +11010101001000,0100010 +10001100110010,1101000 +10010001110100,0111000 +01001000001000,0101000 +10101010111111,1001010 +11011001100001,0001010 +01101011001000,1011001 +01110110110110,0001110 +00110111000001,1101010 +01100111111101,1110000 +10101000011010,1110100 +01001010000001,0100100 +11010011000111,0110010 +11100011011001,0110000 +00011110111010,0101001 +00101010011010,0001010 +01100001001010,1100010 +10111000011000,1000100 +01111110110001,0001110 +00100000000000,0010000 +11001110001011,1101000 +11000111111001,0010100 +10101111101100,0101101 +11101010001111,1000010 +01111010010110,0101010 +11101110100111,1010000 +10111011000000,0011101 +10100010010011,1111100 +11011001100100,0001000 +00001100010000,0011010 +01100101101001,1010010 +00010101100110,1101000 +00100011001101,1010100 +00111001110100,1010000 +01101110011000,0101011 +00010110101101,0111000 +10011110001000,1000111 +11111101001000,0110110 +11101001100111,0011101 +10001010100110,1111100 +01001000010100,0100000 +10000100110010,1010000 +01011100110100,0010010 +10111011101011,0111000 +11010110010010,1110001 +01000001010011,1100011 +10011100000111,1110110 +10011110100000,1110111 +10010010110010,1100010 +11111101000000,0111110 +01101000101100,0010000 +10010001101101,0100101 +01011100010001,0101000 +10011010001001,1000100 +11100000000011,1001101 +00010110001010,0000001 +01100001010001,1111110 +10111000110000,1110100 +00011110001011,0000100 +01010010011000,0111110 +11000100110101,1100110 +10010110000111,1110000 +01000000001000,0110000 +11100011110111,0000110 +11000110111001,1010100 +01000000011010,0101010 +10001001101110,0101010 +01100100001101,0100110 +10110000000111,1100011 +10010001110110,0111010 +00011011010111,1011100 +10000101110001,0110010 +00110101111000,1011100 +00011010010101,0010000 +11010010101110,1000100 +00001111101010,1010001 +01100011000011,1101100 +01000111010100,1011001 +01100111101110,1101010 +00111001111000,1011000 +01001000010101,0100001 +10101001010110,0000010 +11101101001100,0111100 +10010110011101,1011000 +10000010001000,1001110 +01111111011110,1000001 +00110110111111,0100100 +00111101010110,1110000 +10101010101101,1010000 +10010110101000,1111101 +10111111100000,0101111 +00001111011011,1100000 +11010010110111,1101010 +11101100000001,1001000 +01110101011000,1000010 +10101011101100,0101110 +11001011100011,0000100 +11111000000110,1000100 +00111100011000,0000110 +11101100111001,1110100 +11001101100111,0000001 +11101101001110,0100000 +10001100011010,1010000 +10101010110100,1111110 +11000010111101,1101100 +11011101011010,0111000 +01011111001101,1000010 +11111011101111,0011100 +01011010011100,0111110 +01010111100101,1110100 +01001010011111,0101010 +11000111011000,0110101 +11000110010011,1000000 +11001110100001,1000110 +11000100011001,1001010 +11101101101110,0010000 +11101111001101,0111100 +10100011001010,0011100 +01011110111000,0011011 +01111010101001,0010100 +01011000101000,0000100 +10000001010101,0010101 +10110101101011,0111110 +01000000100001,0000001 +10011001110111,0111101 +00110010001001,0010000 +11001110111111,1101000 +11001000001010,1010100 +11101011001110,0111100 +00110001111001,1100001 +00000001000010,1000010 +01101100111111,0001001 +00101101010001,1000100 +01001010000101,0100000 +11010000110101,1101001 +10001001011011,0011101 +10100010110001,1000000 +01000111101101,1110000 +10010011111111,0110110 +01010101100110,1001000 +01101111010101,1000010 +11000110010000,1111101 +00000001110011,1110011 +00011000110100,0100000 +10011111000011,0001100 +01111011100011,1010000 +10001100010000,1011010 +01111110111111,0000000 +11011001001101,0111110 +01010101000100,1001100 +11110111001110,0110110 +11111000101010,1101000 +00100011111010,1010100 +00011111000011,1110100 +11011001011100,0100000 +10110001000010,0010100 +11001000101101,1110001 +00111101111101,1100010 +00010000000111,0001011 +10110011010011,0001100 +01001111110000,1101011 +00110010110110,0110100 +01001001001110,1110010 +01111100000111,0100110 +11111110010000,1101111 +00110110111010,0111110 +00111100100110,0101000 +11001010000011,1011000 +11000000110010,1100010 +10111111101100,0100011 +10100100100100,1100100 +10010001101011,0100011 +10110011100101,0110000 +10010011000100,0001110 +01110111000111,1100000 +01100001010011,1111101 +00000100101010,0101000 +01001111100010,1111001 +11000101111100,0010000 +11100011011100,0101010 +11000100101110,1110100 +10110011111000,0111110 +00001000101001,0101110 +00101111110110,1011110 +00100100011100,0001000 +10111011101110,0100010 +00101010001010,0011010 +10110001110111,0101011 +01010001010011,1101101 +10001000011001,1101110 +11101100010001,1011000 +11111110101101,1010010 +00011010001000,0000101 +10000000011110,1101110 +00011011100010,1010110 +10000100010101,1100110 +00110010000011,0010100 +00001101010010,1101000 +11100001000001,0101110 +01100111010000,1000011 +10111000111000,1111000 +11111000011011,1011001 +11101111010000,0100111 +11001100101001,1110100 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-C/test_outputs.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-C/test_outputs.csv new file mode 100644 index 000000000..ebd6837e5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-C/test_outputs.csv @@ -0,0 +1,1501 @@ +input,output +111000111101,100100101000 +110111100010,110101111100 +100001100101,100100101010 +011011011011,001001101101 +011011000101,000011100001 +001111010111,000110011011 +101001011100,011000000100 +011000001101,000100001000 +101001101101,100000010110 +010011010010,001000011100 +010111000100,000010111000 +101001101100,100001111000 +110111001011,001111111101 +010110001001,000101011100 +001010011101,000110011100 +101101101100,100100100100 +110101100101,110001110110 +110000000001,000001100000 +101111111000,110101011000 +101011101110,100000000110 +011010000001,000000110100 +010000110011,011001100000 +000011101000,000011110000 +000010101101,000010110100 +000010111000,000011100000 +100011101110,101100011010 +001100110101,001000000100 +010101000001,000000101010 +111111110111,101000010111 +111110011011,010100010110 +110011101011,111100010101 +111001011010,010110101100 +001010000100,000001010000 +001010110011,001111111100 +110001111101,101101100110 +010101111001,011001100110 +100100110100,110001100000 +111100100101,111001100100 +111101100100,111001011000 +010101000101,000010010110 +011100011000,001010100000 +100001011000,011000110000 +101100101110,100111101000 +111011101111,110110001011 +011000101001,011110110000 +111010111010,100010000100 +110110011010,010010100100 +010110100110,010100010100 +000100010101,000010101000 +111111000110,000101111010 +000010011111,000001111100 +000101110100,000111011000 +110011011111,010110100011 +010100010000,001010000000 +111101110011,101110101001 +101010001001,001011110100 +101111000010,000010111100 +011111101101,011001110101 +100001010101,010101101010 +010110101001,010000111100 +011001111011,010101000001 +000111010101,000011001001 +110110110100,100101001000 +110010111111,101101010010 +000000101101,000000000000 +111100000100,000111100000 +011000100011,011001001000 +100110111001,111100111100 +001011110011,001110100101 +000111111000,000100011000 +111110000110,000101110100 +001010011010,000111011000 +110101100000,110101000000 +111100111001,100100100100 +101111000011,000011101101 +011100010010,001111110000 +111111101111,110000001111 +110000011101,010100010000 +101011010110,010001101010 +001111001110,000010010110 +001100101111,001110110100 +010110001010,000100000100 +011001000011,000001001110 +011011111001,010111000001 +011100111110,010011011000 +000101000001,000000001010 +000001001100,000000011000 +000001000111,000000001110 +000010100101,000010010100 +101001101010,100100001100 +000100110010,000110010000 +011111001011,000110010011 +100001101111,101110111110 +010111001000,000101110000 +111111000001,000001111110 +010010110101,011000001100 +101001010100,010011101000 +000010111101,000011110100 +100101000000,000000000000 +011111000100,000011111000 +010101100010,010100110100 +111100000011,000010110100 +100111001100,001101010100 +111001111110,100111010010 +110011100011,110000111001 +010111001110,000110100110 +001101110111,001001000101 +001101100001,001101011010 +011001110000,010011100000 +011100001111,000100101100 +111001101011,110010000001 +001000011101,000111010000 +001100101011,001111100100 +010011001100,000110100100 +001111111000,001001011000 +010110111101,011000110010 +000001010001,000000100010 +001110000111,000001000110 +110101000100,000110101000 +110001100111,110100111110 +001111000111,000001001011 +111000010110,011011010000 +110101000111,000101101001 +101010101111,100000001010 +010110100000,010110000000 +001110110010,001010000100 +001000110101,001101010000 +111011110011,101011110101 +111000001100,001010100000 +001110100010,001110111000 +101100000111,000110110100 +111000101111,110101011000 +001001111001,001111101010 +010110101101,010010010010 +000000100011,000000000000 +000100101000,000101000000 +100100001000,001001000000 +010111000000,000000000000 +100110000010,000010011000 +010110100100,010101110000 +010110111110,011001001100 +001000011000,000110000000 +111111011111,010000101111 +110001000011,000010010110 +111011111110,100101010110 +111111111010,100101011010 +001111110000,001011010000 +001101110000,001000010000 +011110100111,011101010110 +010101110100,011100111000 +110010011001,010010110100 +101010101000,100101100000 +010010100110,010000111000 +110001111111,101110010001 +000001000010,000000000100 +101001001001,001011001010 +110000010111,011101010000 +101100111001,110111111000 +110001100001,110000010010 +010011110010,011011011100 +100110110100,110010001000 +000011001101,000000100001 +000101000000,000000000000 +000100111010,000111010000 +001110111111,001001110110 +110010101101,111010101100 +101110101000,100010010000 +110001000100,000110001000 +011001010001,001100001010 +001110011000,000101010000 +001101110101,001001101110 +011001110111,010000110001 +101100111100,110000110000 +010100101010,010010110000 +000001010101,000000101010 +011000100101,011011110000 +010111010100,001000100100 +110010001010,001111101000 +011110000100,000011110000 +101011110001,111111001110 +100010100011,100000101100 +100011001001,001001110110 +000001001110,000000011100 +111000011000,010101000000 +011011110101,010010001001 +111000000001,000001110000 +101010110101,111000011100 +011001110001,010011001010 +110100000000,000000000000 +111100000111,000100101100 +001000110010,001100100000 +100001101001,101000110010 +111101001011,001100011001 +111011000001,000001110110 +111011000111,000100000011 +000001100011,000001000110 +000100100111,000100111000 +001111001101,000010100101 +000100001100,000001100000 +101101011110,011000101010 +101111001111,001100100111 +110001010000,011000100000 +011111111010,010010011010 +110111111110,101001001110 +100101110010,110100001100 +000110000001,000000001100 +101000001010,001001100000 +110101011011,010010001001 +011000010000,001100000000 +110010100001,110011100100 +100001111100,111101111000 +110010011010,010001011000 +100000001111,001111000000 +010010001111,000111000010 +111000010011,011110101000 +010000001011,000101100000 +011100000101,000011000100 +010110010001,001011101100 +010111101111,010010111011 +111000011100,010001100000 +001010110100,001110110000 +001111011100,000100101100 +001000010101,000101010000 +011101110010,010101101100 +111110010001,011110000010 +010111111000,011010011000 +011110011101,001001101010 +111100100000,111100000000 +101001001100,001111011000 +101010101110,100001100100 +010110010111,001001111010 +100010110011,110001101100 +010101111110,011010001010 +011101010010,001111001100 +101010010001,010100110100 +111111000100,000111111000 +100111010011,010001001101 +001010101000,001001100000 +110001010101,011111011010 +011000110011,010011001000 +101000011010,011101100000 +011001110011,010010011110 +111111011110,010001101110 +111011110001,101000011110 +111001010011,011110011110 +000001100110,000001001100 +011010010010,001100011000 +010100001001,000101101000 +101111011100,011010101100 +000011101111,000011101101 +001000110011,001100110000 +000010111011,000011101100 +011010010001,001101110100 +101011001101,001110001001 +111101001111,001000001101 +101010100010,101001101000 +011001010101,001111000110 +101000101111,100011001000 +000011001100,000000100100 +001000001110,000011100000 +000010101100,000010110000 +110111100011,110100101101 +000010110011,000011001100 +110010001101,001000101100 +011010001011,000111100010 +110000011011,010001010000 +000001110010,000001100100 +111111100000,111111000000 +001111101011,001101100011 +110111111001,101111110001 +000100101101,000101101000 +000001101010,000001010100 +001100000011,000000100100 +011101110111,010110010101 +110110011110,010101001100 +001010101100,001000001000 +011000001000,000110000000 +010100000011,000001111000 +000001011010,000000110100 +111100001001,001110000100 +101000010110,010000010000 +001101001101,000010011110 +000101101000,000100110000 +000010000010,000000001000 +011010000111,000010110010 +100110100111,100010011010 +001000110110,001101100000 +110001101011,111111001110 +100111110101,110010011001 +100011111011,111000010101 +111101010001,011111000110 +111001100011,111011101110 +000110001101,000001000010 +001000100111,001001110000 +011100101001,011000000100 +111101101000,110101110000 +000101010101,000010010110 +101000000000,000000000000 +011011101100,011111010100 +011101111000,010000101000 +010011000101,000010111110 +110010100110,110110111000 +100011100100,100111011000 +111010111101,100111000010 +010100001010,000100110000 +101011101000,100100001000 +101011010000,010101100000 +000111000101,000000110001 +110111011101,010110010101 +011111111011,010010101011 +111101100011,111111110001 +100100001001,001000101000 +101011111110,110101100110 +101101010111,010011000101 +010001100101,010011101010 +001101100101,001100001110 +101110001000,001011100000 +101001011111,011011110001 +000000101110,000000000000 +011001000001,000000110010 +001110010010,000111111000 +100001111101,111100000110 +010000000101,000010100000 +011101010011,001111110001 +000000000110,000000000000 +111111011101,010010101101 +111011010101,011000001001 +101010010101,010011101100 +101001110001,111100001010 +101011111011,110001101101 +101000100101,101100110000 +100000000101,000101000000 +001001101000,001011010000 +000101001001,000001011010 +011001011001,001001011010 +100010010101,010100110100 +111011010111,011011100011 +001110101001,001100000010 +101110011101,011011001010 +110001110010,100110010100 +100100011010,011000110000 +000110011110,000010110100 +000100011101,000011101000 +111101000000,000000000000 +110011000100,000110011000 +101101100000,101101000000 +010110100001,010110101100 +101101110100,111101111000 +011010011101,001011111100 +000111101101,000110111001 +111111101010,110101001010 +000011000011,000000001001 +100111010110,010100111010 +110100101110,111111001000 +100001001010,001010010100 +010101110011,011110100001 +010010110100,011000110000 +111001010101,011001100110 +101110011111,011000001110 +010011001111,000111011101 +000001111110,000001111100 +000000011001,000000000000 +110011101010,111101000010 +100000001100,001100000000 +110111010100,011100100100 +000111110001,000101011110 +111111110100,101011010100 +100110110011,110111110010 +010101100110,010110000010 +110111011001,010000110001 +011111011001,001011001001 +100101011000,011011110000 +101000101110,100010010000 +111100001110,001001011000 +001110001101,000010110010 +110001101000,111101010000 +101111101101,100111010101 +001001110111,001100100001 +101100100010,101110110000 +101101110011,111011110001 +010010110000,011011000000 +101110101110,100100101100 +100001110001,110000010010 +011011101110,011110000110 +100111111100,111010101100 +001010010001,000101010100 +010001011110,001111111100 +110101110000,100000010000 +010000000000,000000000000 +101111010010,010100100010 +110101100001,110100011010 +001010001100,000011110000 +110011100101,110101000001 +001101111110,001010101010 +000111000111,000000100011 +111111010111,011000100111 +111010000100,000111010000 +001101010000,000110100000 +010111110001,011101111110 +101011111100,110110001100 +111010001000,001110100000 +000101110000,000111100000 +101100110011,111010010100 +101011011100,011001110100 +100000000010,000010000000 +101001100111,101111000001 +010000011010,001101000000 +000100110101,000110101000 +010101101000,010010110000 +011011011001,001000000001 +110000100101,110111100000 +101101101000,100001110000 +101100110100,111100010000 +101011100101,101111100001 +000010111111,000011111100 +110010011011,010000000010 +010111001111,000110011011 +100010100000,100010000000 +011001011101,001010110110 +100101000101,000101100110 +011010011000,001000010000 +100011110110,110101001010 +011111010000,001111100000 +100001111010,111011110100 +111101011110,010000011010 +101000110111,111001001000 +000010100110,000010011000 +110010001111,001011100010 +111011010000,011101100000 +000000110010,000000000000 +010111100001,010111101110 +111010100100,111100110000 +101101011000,011100001000 +101001110110,111001111100 +111011111101,100110000101 +101011110100,111000100100 +010011111011,011111010101 +010111011010,001111110010 +100000101101,101101000000 +111110100010,111100000100 +000110011010,000010000100 +010110001011,000100101010 +101000100011,101011110000 +110001001001,001101110010 +000010000001,000000000100 +111010110111,101100101010 +100001011110,011110111100 +110000111010,101000100000 +010000100000,010000000000 +101001110100,111010011000 +010000000100,000010000000 +110101111101,101001111110 +101011101001,100101011110 +110101001011,001111010001 +100010111001,111010010100 +100001010111,010111101110 +111111100110,111001000110 +101101001110,001101110010 +011000101010,011111100000 +000110110101,000100000010 +111110111110,100000111100 +000111000110,000000101010 +011001010100,001111101000 +010110100010,010111011000 +011111100101,011101111001 +001001011000,000110110000 +001010011000,000111100000 +101010000100,000101010000 +101000010011,010111110000 +110011011101,010101001001 +110110001000,001101100000 +001001101011,001011101110 +010110011100,001101101000 +011100101100,011011010000 +100101000010,000010010100 +110001011100,010101111000 +001011100011,001011111001 +011111110101,010101100101 +110000101111,111011010000 +001101000111,000001011001 +010101001101,000111001110 +100110111110,111000001100 +011101111010,010001000010 +010011001101,000110010001 +011101000100,000011101000 +011111111101,010001101101 +000110010110,000011100100 +011001010010,001101010100 +000001011100,000000111000 +100110011110,011101110100 +101111100100,101001000100 +011111110011,010110100011 +011110001101,000101001010 +100111100010,100100111100 +011001001010,000111110100 +000111010011,000011110101 +110110110111,100111000110 +000101101110,000100010010 +011011001110,000101111010 +001011111010,001101010010 +111010101011,110000110010 +001010101001,001001110100 +100000001000,001000000000 +110110111011,101100111010 +110110001100,001000101000 +100000111101,111101000000 +110001111110,101111000010 +011100001011,000110110100 +011001110110,010000000010 +110100010100,011101100000 +100101000001,000001001010 +001011010001,000101110110 +101110010100,010001001000 +010010010100,001011010000 +111110110010,101100100100 +111100111101,100000110100 +011101101000,011001110000 +100001110000,110001100000 +100101001110,001111100010 +011100000000,000000000000 +010101110000,011111100000 +000100001001,000001001000 +100000000000,000000000000 +011111000111,000010011011 +100100001111,001110000100 +010001101111,010110000001 +100110001000,001001100000 +000101010010,000010110100 +111001101100,110111111000 +110110101010,111011000100 +111111011010,010101101010 +001110110110,001011110100 +111110100011,111101111010 +110100001001,001100011000 +100011000001,000001000110 +001101001000,000011010000 +100010100100,100110010000 +110001001100,001001011000 +110111000111,000101110011 +000110011011,000010001010 +000110000010,000000011000 +000100011000,000011000000 +001101011011,000100101001 +001000000100,000001000000 +010011110111,011000011101 +100110000100,000100110000 +101001000011,000011110110 +000111001111,000001001011 +110111100001,110110011110 +110101111111,101010010101 +110000010010,011011000000 +100001111111,111110000001 +101101101110,100110001010 +100110101111,101011111010 +000100100100,000100100000 +101010010100,010010110000 +001011100100,001010111000 +011111010011,001110000011 +010101010001,001010011010 +101010100001,101011010100 +010010000101,000010110100 +111111010101,011010100101 +011000111100,010110100000 +011010100100,011000110000 +000010110001,000011000100 +010110101100,010010101000 +110001111100,101100000100 +110100001111,001010010100 +111100001000,001111000000 +011100100110,011110101000 +010101100111,010110101001 +110011111010,101010010010 +000010100000,000010000000 +000011111100,000010110100 +100000101110,101110000000 +001011101110,001001111010 +110000000100,000110000000 +111001100001,111000001010 +011011110000,010001010000 +001001001111,000011100001 +100101100101,100010010110 +011000110100,010000100000 +001100011110,000101101000 +001110001100,000010101000 +011100001001,000111111000 +010000011101,001110100000 +101011011111,011010110011 +110101101010,111000011100 +010110101000,010000010000 +001100000000,000000000000 +010001110110,011010011100 +101001010111,010001100001 +111011001100,001010010100 +101100010001,010111011000 +101000010010,010110100000 +101001101011,100101011110 +000111100011,000111010101 +110101011100,010110100100 +000011000111,000000010101 +010010101101,010101001100 +001010110111,001110010010 +111000001111,001001011000 +001001010001,000100110010 +011111111100,010001011100 +011001011010,001000101100 +111011100110,111110101010 +101100100000,101100000000 +111101011111,010001101101 +000100101110,000101110000 +011110111001,010010010010 +111111000011,000010111101 +100100100101,100011101000 +001011110001,001110001110 +100111110110,110000000110 +110000011001,010011100000 +001110010101,000110010010 +010011010011,001000111001 +000101010000,000010100000 +000000010110,000000000000 +111010101100,110101001000 +100010010000,010001000000 +111001110101,101100010110 +000101101011,000100100001 +000111100100,000111111000 +011100100001,011100111000 +101111110101,111111000101 +110111111100,101011101100 +111110011100,010011011000 +110100001011,001111000100 +100011101001,101010001110 +111000001110,001000110000 +111111001110,001001110110 +001001010000,000100100000 +011010001100,000100001000 +100011101101,101110010001 +011111001101,000101010101 +001110110011,001010011010 +111100100011,111110110100 +011011001010,000111000010 +100101011011,011001010001 +000001110110,000001101100 +011100101010,011001001000 +110001001000,001100010000 +000111000011,000000010101 +111010101111,110111101010 +001101011001,000100010110 +101011101111,100001010011 +001111001000,000011110000 +110010001000,001100100000 +011001000100,000011001000 +001000000011,000000110000 +010111000111,000011010011 +100000011000,011000000000 +010110100011,010111110010 +110110010110,011111010100 +010100000101,000010011000 +111011010110,011010011010 +110100001110,001011001000 +010110110010,011101111000 +010011111010,011111100010 +001101010011,000110010001 +100000111100,111100000000 +011001011111,001011001001 +101011100100,101110111000 +000110101101,000111000010 +010000011100,001110000000 +011111110000,010111010000 +000000001010,000000000000 +001100011100,000101010000 +101000000100,000101000000 +110011000001,000001100110 +100100101110,101000001000 +001111101101,001100010101 +111001100100,111110101000 +011010111101,010100000010 +100110101010,101100000100 +010111011100,001101001100 +110110011101,010110110010 +110100100000,110100000000 +001110010001,000111011100 +100110000101,000101111100 +100111110000,110101010000 +100001000100,000100001000 +111011001001,001111011110 +110000101001,111101100000 +010100011011,001110000100 +000110100001,000110001100 +111100011000,010110100000 +110010000010,000011001000 +001001001100,000011011000 +110100100111,110011100100 +100101100001,100100101010 +010101101011,010011010001 +110000010101,011111100000 +111110011101,010010011010 +111101111110,100011011010 +101000100100,101101000000 +000101110111,000111001001 +011101011000,001010001000 +001000111011,001110110000 +101111110001,111010100001 +010110111010,011010100100 +011101101011,011000011001 +101111001000,001011110000 +101111011110,011001001110 +011111010101,001101000101 +011000111001,010101110000 +011000001111,000101101000 +110100010110,011110001000 +111111111000,100111011000 +000000000010,000000000000 +111110111001,100111010010 +010101001111,000110111001 +010100011000,001111000000 +101010001100,001111110000 +111101010101,011011011110 +001011100000,001011000000 +100011100110,100100110010 +110100000110,000100001000 +111000000011,000010101000 +010110100111,010100111010 +010000100010,010001000000 +100011010110,010111110010 +010010001000,000100100000 +001110011100,000100011000 +111110001100,001011101000 +010110111000,011011010000 +000011010110,000001110010 +000000111001,000000000000 +001010000011,000000111100 +100110110010,110110111000 +001101001100,000010000100 +001101110110,001001010010 +000000111101,000000000000 +110111101000,111001001000 +000011101100,000011100100 +110011000111,000101001101 +111010111001,100000011100 +111110111111,100001011110 +110110100100,110011110000 +111001000110,000101011100 +100111100011,100101110101 +001000110100,001101000000 +001001111011,001111011110 +101001010101,010010000110 +010001111010,011100001100 +010010111000,011111100000 +011110000000,000000000000 +110000110011,100110010000 +000001011110,000000111100 +010000010011,001001100000 +011011010101,001110110001 +100111111010,111110001010 +110010111010,101011011000 +101010010111,010000110010 +111111011000,010111101000 +000100010010,000010010000 +011001100011,011000101110 +100010100010,100001001000 +111101111100,100000110100 +001011010010,000101011100 +111011010010,011110111100 +111110101011,110101100110 +110111000110,000100011010 +101000001110,001100010000 +011000110101,010000001000 +111111100101,111010000101 +010101110110,011101100010 +000100001110,000001110000 +110110000111,000101111010 +001011111000,001101101000 +010001110011,011000110110 +000010010110,000001011000 +100010110110,110100111000 +100010111101,111110001100 +111011000011,000010100101 +110111010001,011010111110 +001011001010,000010000010 +110010110011,100100111100 +110111010111,011110101011 +000101001101,000001110110 +011011011010,001001010010 +110110000100,000110110000 +101100000010,000010110000 +100000111001,111001000000 +100011010100,010101111000 +010000110001,011000100000 +000101001011,000001000001 +010011011000,001101001000 +110001010110,011100011100 +110100110101,100110111000 +100100001011,001010111000 +011101001000,000111010000 +010000000110,000011000000 +000101011010,000011101100 +011111000011,000001011101 +000001001101,000000011010 +111000110101,101101001000 +111100111000,100101100000 +110101101110,111110110010 +101110001010,001000100100 +110011000011,000010011001 +001111000101,000001101001 +100000010101,010101000000 +101101100011,101110010001 +111000101001,110000001000 +010010100001,010010100100 +101100101101,100100100100 +011101000101,000011001110 +101011110010,111101111100 +001010010000,000101000000 +101100000101,000100000100 +101000111011,110010001000 +100110001001,001000011100 +011100101111,011010101100 +000010001011,000000101100 +111101111101,100001010001 +111111000010,000011111100 +100000011010,011010000000 +011010110100,010011110000 +110101100111,110010011001 +000111100001,000111001110 +100101000111,000111110001 +001111011011,000101010011 +100001101011,101010110110 +010111101011,010000000011 +011000011101,001010001000 +101111111110,110001101110 +010001101011,010100001110 +010100110011,011111111000 +011101000001,000000111010 +101100101111,100110001100 +111111011100,010011101100 +010111110101,011111011001 +110010110101,100011001100 +101101010101,010001101110 +101101110000,111000010000 +001001000111,000001111110 +110101010011,011001100001 +011001111001,010100111010 +011100110101,010110100100 +000100101010,000101010000 +001110010000,000111000000 +101001100011,101010001110 +101011010001,010100001110 +000111111110,000100110110 +100011001111,001111101101 +000100010001,000010001000 +110000010011,011010010000 +100011111000,111010101000 +001000010100,000101000000 +100001011011,011011110110 +110101111000,101101001000 +011010100011,011011000010 +110101001000,001101010000 +111101101111,110011001101 +110010111110,101100100100 +100001011101,011101111010 +010110000001,000000101100 +010100010110,001000001000 +111011100101,111100110001 +010011000010,000001001100 +100010011111,011110000010 +000011111101,000010110001 +010010001010,000101101000 +111000101110,110100110000 +001111111011,001001110011 +010100110100,011101100000 +010110011111,001100100110 +011010100110,011001000100 +110000011000,010010000000 +000111110110,000101111010 +001010010010,000101101000 +101101100110,101001100010 +010001100011,010000010110 +010011011010,001100100010 +000111011010,000010110010 +111000110001,101011110000 +111011000010,000011101100 +110011100010,110001101100 +010001000110,000011001100 +101101010011,010100110001 +011100110111,010111001100 +100011010011,010010011001 +111011011000,010100101000 +000101011001,000011111010 +100111010100,010111000100 +001010000110,000001111000 +011110000011,000001011010 +001100001001,000011011000 +000011000010,000000001100 +110001110011,100111110110 +010011010110,001010001010 +100100100000,100100000000 +011100110010,010100001000 +101010100101,101110101100 +010010111101,011100101100 +010111010010,001010000010 +100011001110,001110101010 +001010000111,000001100010 +110101001110,001011010010 +111100011001,010111000100 +001011101010,001000100010 +011001101011,011110111110 +001001100000,001001000000 +100010011010,011011101000 +110101000010,000011010100 +101110101111,100101110110 +011001100001,011001110010 +101010011010,011100111000 +111011001101,001011101001 +001000111000,001110000000 +000101100000,000101000000 +011000010110,001110010000 +101110110101,111110110010 +101111111111,110000001111 +001100011010,000100001000 +011111100100,011101000100 +010000010001,001000100000 +011110100000,011110000000 +001000100000,001000000000 +100000110011,110011000000 +011001101000,011111010000 +100010010010,010011001000 +111011110000,101001010000 +000000101111,000000000000 +100111010101,010110101001 +110111010010,011001000010 +010001100100,010011001000 +010010100010,010011001000 +001011010101,000100010001 +000110111010,000101000100 +001000010011,000100110000 +010111001011,000100111101 +110111101001,111000010001 +101001000001,000001010010 +100101101011,101111100001 +000100100101,000100101000 +111110110001,101111000010 +101011000011,000011111001 +101100100101,101010000100 +010100000100,000010100000 +110110011111,010100010110 +000101111010,000110011100 +100000001001,001001000000 +010100011010,001110110000 +100001100111,100110101110 +000110010010,000011011000 +001010010110,000100000100 +100001001001,001001010010 +111010110101,101110111100 +100111110011,110110101101 +100001011001,011001110010 +100101111001,111111000110 +110011110110,100001101010 +000011111001,000010101110 +010111101010,010000110010 +100000000011,000011000000 +000010100001,000010000100 +011001010011,001101101110 +010000010111,001011100000 +010001010110,001011101100 +010011111111,011100100011 +101110100110,101010110100 +000001010000,000000100000 +001110101011,001100111010 +111010010111,011011001010 +010000001000,000100000000 +111110010111,011000001110 +111111111101,100010011101 +101101010010,010101001100 +110101011110,010100001010 +011010001010,000111011000 +000010000011,000000001100 +101110100010,101101111000 +100010110111,110101111100 +011000011011,001000101000 +110010010100,011111010000 +110000011110,010110100000 +001010111111,001101110010 +001100111111,001011110100 +110011001101,001000110001 +010001001000,000100010000 +111110000001,000001111100 +101101001111,001100010101 +100000001110,001110000000 +010010010111,001010000010 +101110101001,100011000010 +111110100100,111010001000 +111011000110,000101001010 +011101100001,011101111010 +001100100100,001101100000 +010111110110,011110000110 +011100010110,001101101000 +010101010100,001001011000 +011000110111,010001101000 +101101111100,110001010100 +110110011000,010001010000 +000001100010,000001000100 +001001111000,001111110000 +111111110010,101101010010 +111010011111,010010011010 +101010001111,001101110010 +001111110010,001011100010 +101100100110,101000101000 +111000000100,000111000000 +101101110111,111110100101 +000000000001,000000000000 +101110000010,000010111000 +110101001111,001010000101 +111010000001,000001110100 +001100010100,000111100000 +111000111100,100101100000 +000001101101,000001011010 +100010011101,011100001100 +100000101100,101100000000 +010111001001,000101000001 +100000110100,110100000000 +100101110011,110101000001 +101101000001,000001011010 +010000111110,011111000000 +000001010010,000000100100 +010100100000,010100000000 +110111011111,010100100111 +010000010101,001010100000 +110100100100,110001100000 +010011101101,010100110001 +111001100111,111101010001 +000100110111,000110111000 +100001010011,010011100110 +000000100110,000000000000 +111000100101,111110001000 +011000010111,001110101000 +111000111111,100111011000 +101010100011,101000000010 +101000111110,110110010000 +011100101110,011010011000 +011011000001,000000110110 +110100001101,001001111000 +101011000000,000000000000 +101110001001,001010000010 +001110101110,001101001100 +110011010010,011010011100 +100111011000,011010101000 +010000110010,011001000000 +100101100110,100000000010 +001100101000,001111000000 +100011010001,010000010110 +010011001011,000101000101 +010000001111,000111100000 +101110100111,101011100110 +000001000110,000000001100 +101100100111,101001110100 +001010111110,001101100100 +111100101110,110011011000 +011100001110,000100011000 +101001001011,001000011110 +101101110101,111100011110 +000111111101,000100100101 +000111101100,000110110100 +011011100000,011011000000 +101111110011,111001000011 +000100001000,000001000000 +101101111000,110111001000 +011111100000,011111000000 +010001001101,000110111010 +101110101100,100111101000 +000111101000,000110001000 +011100010101,001100100100 +010010011000,001101100000 +000011111011,000010100101 +100111100100,100000000100 +001110000000,000000000000 +011000000001,000000110000 +000011000110,000000010010 +100111001110,001111000110 +110110000110,000100010100 +100000110101,110101000000 +011011000011,000001000101 +010010010001,001001100100 +101001111010,110010101100 +000110111111,000101111010 +110101101101,111100011110 +100110011000,011010010000 +000111110111,000101110011 +100011110100,110110000100 +001111000110,000001011010 +111110101101,110011101010 +101001011101,011001010110 +001110001011,000011011010 +001001000001,000000010010 +001111111001,001001001001 +011000000011,000001001000 +001100010110,000111001000 +110110101011,111010011010 +111100101100,110000110000 +100010101110,101101111000 +110010101111,111000010010 +101000001101,001110110000 +001110110100,001011001000 +000001101100,000001011000 +101000100110,101111100000 +000100011001,000011001000 +101111011010,011111001010 +101111110010,111000010010 +111011011110,010011100110 +100001110100,110101101000 +011111000110,000010111010 +000100011100,000011100000 +011001000111,000010100001 +000011111010,000010100010 +111001110010,101001110100 +011101101001,011001010110 +010000101100,010110000000 +101101100101,101011001110 +000011011000,000001001000 +101111100001,101110111110 +010110101110,010011110100 +001011001110,000011011010 +000010001110,000000111000 +010001110000,011001100000 +011100010001,001110111000 +001111010101,000110111001 +010001010111,001011011110 +000100000111,000000111000 +010001101010,010100110100 +010011101111,010101111101 +100011000110,000110010010 +110101001101,001001101110 +010100010011,001011111000 +111011110010,101010000010 +001011010100,000100000100 +011010111100,010100101000 +111111000000,000000000000 +011010110110,010010100100 +010001011010,001101110100 +011000001011,000111001000 +101000111001,110000110000 +010000000011,000001100000 +011010101001,011101001100 +000110001110,000001010100 +111011001000,001110110000 +111010010100,011001110000 +100110000110,000110100100 +111100010100,011010010000 +011100111111,010011101100 +011101001010,000110011100 +001100111010,001010001000 +000000111000,000000000000 +001100101110,001110101000 +101101001001,001010100110 +101001000010,000010100100 +110000111011,101001010000 +110110010100,011100001000 +010100001000,000101000000 +010101011111,001101000101 +001100000110,000001001000 +011010011010,001001111000 +001110110000,001010100000 +100111111111,111000000111 +001101110001,001000000110 +111110111011,100101010110 +101110111010,110110010100 +101110000101,000100010010 +110110000011,000010001010 +000011100101,000011011110 +100001111001,111000001010 +001011011001,000111011110 +011010101110,011111100100 +001000010001,000100010000 +000000111011,000000000000 +101100110110,111110101000 +000011010000,000001100000 +111001100101,111111000110 +001011011011,000111110101 +000000100100,000000000000 +000111100110,000111101010 +010011010100,001011111000 +001001100100,001000101000 +100010010111,010110111100 +110000110111,100011010000 +100100001101,001100011000 +100100010011,010000111000 +100100001100,001101100000 +010110010000,001011000000 +111001100010,111010010100 +100000110001,110001000000 +011100100000,011100000000 +101111101100,100110001100 +111001011100,010001000100 +100110010011,010001110010 +001100001111,000010110100 +001100010011,000110100100 +000101100111,000101110001 +011111010100,001101100100 +101100011011,011111010100 +111101100000,111101000000 +011101110110,010110110010 +101010111111,110101001010 +100000111010,111010000000 +111111100100,111011000100 +001110111011,001000000110 +010101100011,010100000001 +010010000011,000001101100 +101111001001,001010010001 +101110000000,000000000000 +101111010111,010010111011 +011111101110,011000001110 +110000110010,100111000000 +100010110010,110000101000 +100100011101,011110011000 +000100000100,000000100000 +110101001001,001100000110 +010001101110,010110111100 +011110111101,010000011010 +000100101100,000101100000 +000100011011,000011011000 +101011010100,010010000100 +010000101101,010110100000 +111111010010,011101100010 +100000010000,010000000000 +011100001010,000110001000 +111100000010,000011110000 +110100010000,011010000000 +011010011011,001001010010 +000010101001,000010100100 +000001100001,000001000010 +101101001000,001011010000 +100011100001,100010100110 +101101111011,110101011001 +100001100001,100000100010 +111110010000,011111000000 +011011100001,011011110110 +101010111101,110110111100 +011001001011,000111011110 +111001010001,011101001010 +000100101011,000101011000 +011101000110,000010100010 +110000000111,000101010000 +010001001001,000100110010 +100111101010,101101010010 +010001010010,001001100100 +110110101001,111001111100 +100010100110,100101011000 +001000111001,001110010000 +010101100001,010101101010 +100010101011,101000011100 +011110100010,011111111000 +011011101010,011101100010 +011010010101,001110011100 +001010100000,001010000000 +010010011100,001111110000 +111101000001,000001111010 +011010111110,010101010100 +101100110111,111111110100 +110101100011,110111000001 +100110010111,010101011010 +000001100101,000001001010 +010101110001,011111011010 +100101011101,011110101110 +010000010000,001000000000 +111010011101,010001000010 +011100110011,010100110100 +001011101100,001001010100 +110001100101,110110011010 +101000011001,011111010000 +110000111001,101011100000 +010010111011,011110111100 +000010011001,000001100100 +110010000000,000000000000 +000000110000,000000000000 +111101100101,111000011110 +110100011010,010011110000 +110110011011,010011011010 +010000111100,011110000000 +001001111110,001110100010 +011000000101,000011110000 +101011011011,011101001101 +011111000001,000000111110 +111011000000,000000000000 +101111011011,011110110011 +010000110000,011000000000 +000011110100,000010000100 +001011110101,001111010001 +100101011100,011111000100 +101010011110,011011100100 +001111000000,000000000000 +110110101100,111110101000 +011011010110,001111101010 +101111110110,111101100110 +011101101101,011010000001 +010011111110,011100000110 +101110001101,001111110010 +111110001000,001111100000 +101100001101,001111000100 +111110010100,011011001000 +010001011011,001101001110 +110111101100,111111110100 +111000110011,101001101000 +000101111100,000110100100 +000111101001,000110000001 +000101011000,000011110000 +011110010001,001111111100 +100011101100,101111100100 +111101100001,111100000110 +001001011011,000110011110 +001010101101,001000011100 +100010100101,100111010100 +111100101111,110010011100 +011110011111,001000101110 +000010111110,000011111000 +011001000110,000010011100 +001010100110,001011111000 +101010000111,000110010010 +001111100100,001110000100 +001010100100,001011010000 +001001000010,000000100100 +100110100110,100011100100 +111101110000,101100010000 +001101011100,000101100100 +101011000100,000101011000 +000110010101,000011111100 +000101010001,000010101010 +111101101010,110110111100 +100010110100,110111010000 +011110101000,011010010000 +001101100100,001100011000 +000100110100,000110100000 +000001011011,000000110110 +001001010010,000100010100 +000001010100,000000101000 +010100000110,000011110000 +001101001110,000010110010 +101111100011,101101011101 +101100011000,011100100000 +100011100101,100110111110 +000011000101,000000011110 +011101000011,000001010001 +010000100011,010001100000 +011011111000,010111101000 +011000110000,010010000000 +010111100000,010111000000 +011100010000,001110000000 +010110101010,010001000100 +001101001010,000011101100 +100100101011,101110111000 +000001101110,000001011100 +101111101000,100011001000 +100110010000,010011000000 +110010010010,011010101000 +111110100101,111011110010 +000000001000,000000000000 +000010011100,000001110000 +001101100011,001101100001 +000101010110,000010000010 +000100110011,000110011000 +101101101001,100000010110 +111001000001,000001110010 +110101111010,101110111100 +100100110010,110101010000 +100000001011,001011000000 +111010111100,100110101000 +001000000010,000000100000 +110010100000,110010000000 +100001000010,000010000100 +000001101000,000001010000 +101100101000,100000100000 +101010101010,100111011000 +101111000100,000101111000 +111100100010,111111110000 +000010011000,000001100000 +000010111100,000011110000 +001010010100,000100110000 +011001101001,011111101010 +001100001110,000010101000 +101000100010,101010100000 +100110000111,000111101010 +100011100111,100101110101 +000110011100,000010101000 +001011100001,001011010110 +011100100010,011101110000 +101001011010,011101001100 +100011000100,000100011000 +110100101001,111010011000 +001011111111,001100110011 +111010011100,010000101000 +011100001101,000101100100 +010101111100,011011100100 +010101011011,001110110001 +100100110011,110100111000 +110101111100,101000010100 +100111001101,001100111001 +100111001011,001010011101 +100001000000,000000000000 +100111100101,100001001001 +110000110000,100100000000 +011100101101,011011100100 +000110010100,000011110000 +011111101000,011011001000 +101000111111,110111001000 +001110100001,001110011100 +011101100011,011100110001 +110000010000,011000000000 +111000000111,000100011000 +110001001111,001011000001 +000011100001,000011000110 +000101010111,000010001001 +001101001001,000011000110 +110111001111,001010111011 +100111010111,010101110011 +101000100001,101001010000 +111110010110,011001001100 +001100100000,001100000000 +111100101010,110111001000 +001111110101,001010000101 +010100101110,010001001000 +100110110111,110000111010 +111111110101,101010010101 +100101101000,101100110000 +110111101010,111010110010 +101000101101,100001110000 +010100011111,001101100100 +101100011111,011001001100 +010111111101,011001010101 +111110001011,001100100110 +100111111011,111111000011 +001011000010,000000101100 +010111110010,011100100010 +011001010000,001100100000 +000001011000,000000110000 +110011010101,011110100001 +001100001000,000011000000 +111110111010,100100110100 +011011001100,000100010100 +100100010001,010011001000 +111101000111,000100100101 +010101010111,001000011001 +101001011001,011111101010 +011110111010,010011010100 +110100100011,110110000100 +111111100111,111000000111 +010010100011,010011101100 +110010100011,110001011100 +010011110001,011010110110 +001011011100,000110110100 +100111011001,011011100001 +101000010100,010011000000 +111111001111,001000110111 +110000110001,100101100000 +001111011000,000101101000 +111110001010,001101100100 +100111110001,110100111110 +101110110011,111000111010 +011110110101,010100001010 +011001100010,011000010100 +000101100101,000101100110 +000000001111,000000000000 +010001001110,000111011100 +100000011110,011110000000 +011110111111,010001101110 +011011110001,010001101110 +101111010000,010111100000 +110010101010,111100011000 +000011010111,000001110101 +110110100101,110010100010 +101110100100,101000001000 +110100100001,110101101000 +111111100010,111101000010 +001001110101,001100000110 +010001111111,011110100001 +001010011100,000110001000 +100100111001,111110101000 +001010001000,000010100000 +000000010011,000000000000 +111111110011,101100010011 +110110100110,110001010100 +011101100110,011111100010 +111111011011,010100101011 +111101100010,111110001100 +110000100100,110110000000 +111011011001,010101000001 +100100000010,000010010000 +001110011010,000101100100 +110000111000,101010000000 +100010010100,010101010000 +101001001000,001010010000 +101000010101,010010110000 +101011001100,001111100100 +111011100011,111000010101 +000110001000,000001100000 +011001001101,000100010110 +010101011001,001111000110 +110110010011,011000101010 +010110010011,001010001010 +010111011110,001100110110 +101001011110,011010100010 +001011000111,000001101101 +010010100101,010001110100 +001100000101,000001111000 +100110111010,111111000100 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-D/test_outputs.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-D/test_outputs.csv new file mode 100644 index 000000000..25bf69897 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/predictions/mystery-D/test_outputs.csv @@ -0,0 +1,625 @@ +input,output +1100101001,10110101010 +0001001110,00100000100 +1010000100,10010100000 +1001111011,01010010101 +1011111010,01000011110 +0100001001,00010010100 +0110100000,00100111100 +0111001011,00010110110 +1001000011,10001001010 +0001011110,10000100100 +1111001111,10100110001 +1010101100,10111011100 +1010001111,10111001110 +1101110100,01001111010 +1011111011,01000100011 +1100001100,10110100000 +1101001000,10111110000 +1101101100,10111111010 +0101010100,10111110000 +1000101111,10100101001 +1001010000,01001010000 +0101011000,10110110000 +0000110111,10010010001 +0010111011,10010110001 +0011000000,00001001000 +1000110011,01001001110 +1001010011,01000011010 +1110001001,10101110100 +1111001110,10100101100 +0000111101,10001000110 +0110010000,10100100000 +0000110001,10000100010 +0100010010,10101010000 +0001000001,00000010100 +1010110101,01001110110 +1010000000,10011000000 +0101100100,00101101010 +1100011001,01001110100 +1011100101,10011011001 +0011000011,00001011010 +1101010010,01010011000 +0001000000,00000010000 +0110011101,10101100010 +0000001010,00100110000 +1011100111,10011010011 +1011110110,01001111110 +1001100110,10000000110 +1011111101,01011010101 +1111011100,01001000100 +1010010110,01000011000 +0100000000,00100000000 +1011100110,10011011110 +0000011100,10001100000 +0011010110,10011100100 +0111101001,00010011001 +1011010011,01011000110 +0101000011,00100101010 +1111011000,01010111000 +0011111000,10011000110 +0001111111,10000000011 +1101001011,10111000110 +0001100101,00001011110 +0110101000,00010111100 +0101010010,10101101000 +1110000011,10001110010 +1111110000,01000011110 +0101001001,00010101100 +0001011101,10001010010 +1001010110,01011111000 +1101011101,01010001010 +0111100100,00101001110 +0100100011,00100001110 +1011100000,10010010110 +1100000011,10010010010 +1100101111,10110111001 +0010110011,10000000001 +0111000110,00101010100 +0100111010,10111101100 +1011100011,10010001101 +0100110010,10101001100 +1100101000,10110110100 +1000101000,10100100100 +0011001110,00101010100 +0010010010,10000110000 +1010110001,01011011010 +0110010111,10110110110 +0001000111,00001010110 +1011111000,01001010110 +1111001101,10100011010 +0000100110,00001001100 +0110010110,10110011000 +1110010101,01010111100 +1011000011,10010111010 +1010001001,10111010100 +1110011000,01011100000 +1010011100,01010010000 +0011000111,00000101110 +1000110100,01011100100 +0101101111,00010100011 +1111111000,01010011110 +1000111001,01010001010 +1011011111,01010110001 +1111110011,01001100011 +0110100001,00100111010 +1010111011,01001001001 +1011001101,10110001010 +1010100001,10011101010 +1001010100,01010110000 +0100100110,00101011100 +0110110101,10111001110 +0110110011,10101010001 +0001111010,10011101010 +1011001010,10110000100 +1000100110,10001101100 +0000101000,00100000100 +1000100000,10000100100 +0001100010,00000001010 +0100000101,00101001100 +1010100000,10011101100 +1100000111,10011000110 +0010111101,10000101110 +1000010001,01000100100 +0100001101,00010111100 +0110101101,00010011110 +0010111000,10011001100 +0010000001,00001000100 +1010000010,10011010000 +1110000110,10000011000 +1100011010,01000001000 +1001111100,01000101010 +0111001001,00010000010 +1011111111,01010000111 +1100101110,10110100010 +0000001111,00100001110 +1100100010,10010101100 +1111010110,01010001100 +1111001011,10100001110 +1011110010,01011001110 +1101100100,10010111010 +1011000001,10010101100 +1000000111,10001000110 +0110010101,10111011100 +1001101101,10101010001 +0010010101,10010011100 +0010100110,00000100010 +0100011101,10101000010 +1010000111,10010100110 +1011001111,10110100001 +1111001100,10100000100 +1010010101,01001011100 +1110000101,10000011100 +0100011100,10101100000 +0001101000,00100010010 +1110000001,10001100100 +1100010000,01010000000 +1011100001,10010010001 +0101001110,00010100100 +1100001001,10110010100 +1000111011,01011111110 +0111001101,00010101010 +1100000101,10011001100 +0011010111,10011011110 +0110000000,00100100000 +1100101101,10110010110 +1100101011,10110000001 +0110000101,00101101100 +0000011000,10010000000 +0001110001,10000110110 +1101011000,01000001000 +1110001111,10101101110 +0010000000,00001000000 +0001011001,10010101100 +1001001101,10101100010 +0001011010,10011101000 +0000101100,00100100100 +0111110011,10101111101 +1110110101,01010011110 +0000000000,00000000000 +1100010101,01000011100 +1110100011,10001010001 +1111000111,10001111110 +0111101011,00010100011 +1010100101,10010010110 +1100011011,01000111010 +1111011001,01010010010 +0101110111,10110111101 +1101110000,01011011010 +1011101101,10110100101 +1001001110,10101000100 +1010101011,10111010001 +0100111000,10110010100 +0001101100,00100110010 +0111000010,00100000100 +1110010111,01011110110 +0010101100,00101101100 +1010011000,01000100000 +0000111100,10001100100 +1000001111,10100001110 +1111011111,01000101001 +1100110101,01000100110 +1000001100,10100100000 +1000101011,10100011110 +1101011010,01001111000 +0101101110,00010110110 +1111111010,01011100001 +0000011011,10011011010 +0111010010,10101000100 +1010010011,01010001010 +1111101101,10100101101 +1001100101,10000000001 +1001011000,01011010000 +0111110110,10110100001 +0000000100,00001000000 +0110101010,00010010010 +0011101101,00101111001 +1000110010,01001110100 +0100000010,00100010000 +1011010110,01001010100 +0000010010,10001010000 +1000000001,10000000100 +1111101100,10100111110 +1001001100,10101110000 +1101000100,10010001000 +1110111100,01000010010 +1110011001,01011001100 +1111110001,01000111001 +1011010010,01011111000 +0001000100,00001010000 +1110100100,10000100010 +1011100100,10011010110 +0110101001,00010100110 +1101000010,10011101000 +0010011110,10001111000 +1111110110,01010110001 +0001001000,00100010000 +1111100011,10000000011 +0110101100,00010000010 +0110110010,10101100010 +1010100011,10011111110 +1000111110,01000000010 +1111110010,01001000001 +0101011010,10111011000 +0010101010,00101111100 +0110111011,10111101001 +0110011111,10100111110 +0110100100,00101111100 +0100010110,10110101000 +0111110100,10111001110 +0101100001,00100101110 +1011101100,10110110110 +1001100011,10001101001 +1001101000,10101110010 +0111100000,00100001110 +1000001101,10100111100 +0001111000,10010010010 +0111101101,00010110101 +1110001100,10101010000 +0110001011,00010011010 +1010110110,01000110010 +0111001100,00010111000 +0110110110,10110001010 +0101001010,00010011000 +1011110100,01000110110 +0100110001,10100110010 +0101001000,00010110000 +1010011001,01000001100 +0000000101,00001001100 +1100110010,01011101100 +0010110010,10000111100 +1110101011,10101101001 +1101011100,01010101000 +1100000000,10010000000 +0100100001,00100010010 +1110110001,01001100110 +1000100101,10001101010 +0100110110,10110111100 +0110101110,00010101010 +1110111110,01001111010 +1101101011,10111110101 +0000011010,10011110000 +0101100010,00100111010 +0000000111,00001000110 +0010001111,00101001110 +1100001011,10110101010 +0000000110,00001001000 +1101100111,10010111101 +1101000101,10010000010 +0101010011,10101011010 +0101001011,00010000110 +1000100001,10000100010 +0100110111,10110001001 +0101011101,10101110010 +1101111010,01001010110 +0100010111,10110010110 +0010000101,00000101100 +1001111001,01011011110 +1000101110,10100111100 +1000001010,10100110000 +1000101100,10100010100 +0011101010,00101110110 +1010110111,01000000101 +1101101001,10111000001 +0100111011,10111000001 +0101001100,00010001000 +1101101110,10111001110 +0011110100,10010100110 +0000000011,00000010010 +1011101001,10110001001 +0001100001,00000010110 +0010001001,00101010100 +1001100010,10001101010 +0001001111,00100011110 +0001110010,10001001010 +0100101001,00010001010 +1000101001,10100110010 +0111111010,10111111110 +0010110111,10011011001 +0001001001,00100001100 +1010010111,01000110110 +1111110101,01011110101 +0000101001,00100010010 +1001111101,01000001001 +0111000000,00100011000 +1001010111,01011001110 +0100010100,10111000000 +1010101111,10111100101 +1000110001,01000010010 +0111010001,10100111100 +1101011110,01011010100 +1110000010,10001110000 +0010001110,00101011000 +0011110001,10001100001 +0100101000,00010010100 +1000011110,01000111000 +1001100100,10000001010 +0011000001,00001001100 +0001100000,00000010010 +1010111100,01010111100 +1101010101,01001100010 +1100110011,01011011110 +1001001010,10101101000 +1001000010,10001001000 +1000010101,01011101100 +1010011111,01011011110 +1111000110,10001110100 +0100011111,10100011110 +1110010010,01000001000 +1000001011,10100101010 +1011000100,10011101000 +0001000101,00001011100 +1101110011,01010010101 +0100110000,10100010100 +1000000100,10001000000 +0001001011,00100111010 +0101111010,10111000110 +0011111100,10000010110 +0001101101,00100100001 +0100011010,10111110000 +0111100010,00100011110 +1001100001,10001110110 +0010000010,00001010000 +1111111110,01000101001 +1101111000,01000111010 +1111100100,10001011110 +1000010110,01010101000 +0110001100,00010010000 +1011011001,01001000010 +0100000011,00100010010 +0111011101,10101011010 +1110111101,01000100001 +1010010001,01011100100 +1000011000,01010000000 +0000101111,00100001001 +1101111011,01001101101 +0000111011,10011011110 +1011010111,01001111110 +1110101001,10101010110 +1000011100,01001100000 +0110110001,10100000110 +0000100001,00000000010 +0011011011,10010110110 +1010011110,01011111000 +1100111001,01001011010 +0100010101,10111101100 +1001011101,01000110010 +0010111111,10001010101 +1001111111,01001100011 +0010000111,00000100110 +0011001010,00101111000 +1001001011,10101111010 +0010101000,00101001100 +0101110101,10111010001 +0010010000,10001000000 +1101101111,10111010011 +0011101111,00101001011 +1100101010,10110011100 +1110010000,01001100000 +0000001110,00100011000 +1101011011,01001010110 +1000010010,01001010000 +1101111001,01000010001 +1110011101,01000010010 +1011111001,01001101001 +0000000010,00000010000 +0010101101,00101110110 +0100000110,00101001000 +0111110101,10111100101 +0011001001,00101011100 +1000100010,10000110100 +1011011011,01000001110 +1010001011,10111101010 +1100000110,10011001000 +0111001010,00010100100 +1011011100,01011011000 +1011001110,10110110100 +0001011111,10000000001 +1000100100,10001100100 +0010100100,00000101100 +1010011011,01001111010 +1101010100,01001001000 +0100101100,00010110100 +0111110111,10110011011 +1100100001,10010110010 +0011100000,00001000110 +0101010000,10100110000 +0000100011,00000010110 +1111011110,01000011100 +0010011000,10011000000 +0001101010,00100101010 +1110110111,01011010101 +0111100011,00100011101 +0110001110,00010111000 +0101000100,00101110000 +1100011110,01010111000 +0001010110,10010111000 +0111101100,00010101110 +0111101111,00010000111 +0000011111,10000011110 +0100001011,00010101010 +0110001001,00010110100 +0000101101,00100111010 +0110011010,10111001000 +1100111111,01010100101 +0110001010,00010001000 +1111010111,01010100001 +0111100101,00101000101 +0011110000,10001000110 +0101101100,00010011010 +0101000101,00101111100 +1101110101,01001001001 +0010101110,00101010010 +0100111101,10101010110 +0010001011,00101101010 +0010100011,00001011110 +0111001111,00010010001 +0011100001,00001000001 +1000010011,01001110010 +1001000111,10000110110 +1110110100,01010100010 +1100001111,10110001110 +1001110001,01001001110 +1100000010,10010010000 +0101111110,10100001110 +0101101011,00010010101 +1111010001,01000000010 +0000110010,10001010100 +0010111010,10010000010 +0001111100,10001110010 +1100100011,10010101110 +1111100101,10001010101 +1100010100,01000100000 +0011110011,10000001101 +0101011011,10111100110 +1010010100,01001100000 +1011011101,01011101010 +1001110110,01011000110 +0011010100,10010101000 +1101001001,10111101100 +0110011001,10110001100 +1000110111,01010110001 +0010000100,00000100000 +0010101001,00101011010 +1011101000,10110010110 +1101000110,10010000100 +0100100100,00101010100 +0110000111,00101100110 +1100110110,01001000010 +1101110010,01010100110 +0010100001,00001001010 +0100100010,00100001100 +0100000100,00101000000 +0001000011,00000001010 +1001001001,10101001100 +0101111011,10111110101 +1001011011,01010100110 +0010011011,10010111010 +0111010011,10101100110 +0011110110,10011101110 +0110000100,00101100000 +0101000001,00100110100 +1011001100,10110011000 +1010110010,01010000010 +0110111110,10100011010 +1101010011,01010111010 +1110001101,10101000010 +1111000101,10001110010 +1101111100,01010000110 +0110100101,00101110110 +0110100110,00101110010 +0010001000,00101000000 +1111100001,10000011001 +0011000100,00000101000 +1110101000,10101000010 +1110001000,10101100000 +1000011101,01001000010 +1000000011,10000010010 +0001110110,10010111010 +0011100101,00000101001 +1111101110,10100001001 +1010000011,10011010010 +0000011101,10001000010 +1011101110,10110000001 +1111010100,01011111000 +1111000010,10000100100 +0111111100,10101101110 +1001111010,01010111010 +1111010101,01011001010 +1111101111,10100010111 +1001100111,10000001101 +1000111010,01011001100 +1101001101,10111010010 +1011110000,01010010110 +1100100110,10011111100 +0111111101,10101001101 +1110101100,10101100010 +0001101011,00100111001 +0100001010,00010110000 +0111101010,00010111110 +1011110011,01011101101 +1011110111,01001001011 +0001010011,10001101010 +1111101001,10100000101 +0010011111,10001011110 +0011101011,00101101101 +1001111110,01001010110 +0100011110,10100111000 +1110110011,01000001001 +1110011110,01001000100 +0100011000,10110000000 +0011010011,10000000110 +1011010101,01000110010 +0101011111,10100100001 +0100100111,00101010001 +0001010000,10000010000 +0010010110,10011101000 +0010110101,10010010110 +0011000110,00000100100 +1101110110,01000001110 +0011101100,00101100110 +0101001111,00010111110 +0010000011,00001010010 +1010111010,01001100010 +0001101001,00100001110 +0100101010,00010101100 +1010011010,01001001000 +1101101000,10111011010 +0110110111,10110100101 +1011001001,10110111100 +1000111000,01010100100 +1010110000,01011101100 +1010111001,01000100110 +1100101100,10110001100 +0111100001,00100001001 +0110011110,10100000100 +1010101101,10111001110 +1101101010,10111100110 +1001000100,10000110000 +0011011010,10010000100 +0110010100,10111100000 +1010000001,10011000100 +1010001000,10111000000 +0000111000,10010000100 +0111011100,10101111000 +1000100011,10000110110 +0100111001,10110101010 +1100010001,01010100100 +0010000110,00000101000 +0100111111,10100000101 +0100111110,10100100010 +1010100100,10010011100 +0100101101,00010100110 +0111010111,10110000001 +0111000100,00101011000 +1011011110,01010001100 +0101111001,10110000001 +0100011011,10111011010 +0001111101,10001010001 +0101111111,10100110011 +0111001000,00010011000 +1000110110,01010011100 +1001101011,10101000101 +1000111111,01000111001 +1010110011,01010100001 +1001001111,10101011110 +0010111110,10001110010 +0111011111,10100001001 +0100101110,00010000010 +1000010000,01000000000 +0111011110,10100101100 +1110010110,01011011000 +0111010101,10111110010 +0101100101,00101100001 +1001010101,01010000010 +0111100111,00101001011 +1100100100,10011110100 +0101100111,00101101101 +1000000000,10000000000 +1100111110,01010010010 +1101001110,10111100100 +1110000100,10000010000 +0100010000,10100000000 +0011101110,00101011110 +1010100010,10011111100 +1000010100,01011000000 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-A.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-A.json new file mode 100644 index 000000000..807fe74da --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-A.json @@ -0,0 +1,39 @@ +{ + "schema_version": 1, + "instance": "mystery-A", + "selected_family": "add", + "operand_bits": 8, + "input_width": 16, + "output_width": 9, + "candidate_scores": [ + { + "family": "add", + "evaluated_rows": 2000, + "exact_matches": 2000, + "mismatches": 0, + "first_mismatch_row": null + } + ], + "gate_count": 37, + "circuit_sha256": "143f1e3987d853f30b7adb6bd8981c4e6bffb5cad25dc5ad5b35b9525095d9af", + "training_scalar": { + "samples": 2000, + "gate_count": 37, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000 + }, + "training_packed": { + "samples": 2000, + "gate_count": 37, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000 + }, + "exhaustive_cases": 65536, + "exhaustive_mismatches": 0, + "prediction_rows": 2000, + "prediction_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "expected_commitment_sha256": "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-B.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-B.json new file mode 100644 index 000000000..225b103f9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-B.json @@ -0,0 +1,39 @@ +{ + "schema_version": 1, + "instance": "mystery-B", + "selected_family": "abs-diff", + "operand_bits": 7, + "input_width": 14, + "output_width": 7, + "candidate_scores": [ + { + "family": "abs-diff", + "evaluated_rows": 1500, + "exact_matches": 1500, + "mismatches": 0, + "first_mismatch_row": null + } + ], + "gate_count": 50, + "circuit_sha256": "6cf9e2c8995d66b9c63efe3df0e6e67b62618077907555ab4ef5adb4c318ad90", + "training_scalar": { + "samples": 1500, + "gate_count": 50, + "exact_matches": 1500, + "correct_bits": 10500, + "total_bits": 10500 + }, + "training_packed": { + "samples": 1500, + "gate_count": 50, + "exact_matches": 1500, + "correct_bits": 10500, + "total_bits": 10500 + }, + "exhaustive_cases": 16384, + "exhaustive_mismatches": 0, + "prediction_rows": 2000, + "prediction_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "expected_commitment_sha256": "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-C.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-C.json new file mode 100644 index 000000000..5f7fd15c7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-C.json @@ -0,0 +1,39 @@ +{ + "schema_version": 1, + "instance": "mystery-C", + "selected_family": "multiply", + "operand_bits": 6, + "input_width": 12, + "output_width": 12, + "candidate_scores": [ + { + "family": "multiply", + "evaluated_rows": 1200, + "exact_matches": 1200, + "mismatches": 0, + "first_mismatch_row": null + } + ], + "gate_count": 167, + "circuit_sha256": "f1d5838a3198b304f671c7479f619fba86ca63bc364b0ac2b0f7fd036fd3cf78", + "training_scalar": { + "samples": 1200, + "gate_count": 167, + "exact_matches": 1200, + "correct_bits": 14400, + "total_bits": 14400 + }, + "training_packed": { + "samples": 1200, + "gate_count": 167, + "exact_matches": 1200, + "correct_bits": 14400, + "total_bits": 14400 + }, + "exhaustive_cases": 4096, + "exhaustive_mismatches": 0, + "prediction_rows": 1500, + "prediction_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "expected_commitment_sha256": "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-D.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-D.json new file mode 100644 index 000000000..a13d124c2 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/reports/mystery-D.json @@ -0,0 +1,39 @@ +{ + "schema_version": 1, + "instance": "mystery-D", + "selected_family": "sum-of-squares", + "operand_bits": 5, + "input_width": 10, + "output_width": 11, + "candidate_scores": [ + { + "family": "sum-of-squares", + "evaluated_rows": 400, + "exact_matches": 400, + "mismatches": 0, + "first_mismatch_row": null + } + ], + "gate_count": 186, + "circuit_sha256": "1222f95531ffa51f713de9b4617b96063b59d9433a3cf4bb5f41106bd6ba1206", + "training_scalar": { + "samples": 400, + "gate_count": 186, + "exact_matches": 400, + "correct_bits": 4400, + "total_bits": 4400 + }, + "training_packed": { + "samples": 400, + "gate_count": 186, + "exact_matches": 400, + "correct_bits": 4400, + "total_bits": 4400 + }, + "exhaustive_cases": 1024, + "exhaustive_mismatches": 0, + "prediction_rows": 624, + "prediction_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "expected_commitment_sha256": "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + "commitment_matches": true +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json new file mode 100644 index 000000000..68e01b304 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "protocol": "16 tasks × 8 fractions × 20 seeds × 8 methods", + "trial_rows": 20480, + "raw_matrix_sha256": "15990cfc98dd86024b446e1108a58b93d7163e8e5b7accbed4957e2ae35cd846", + "study_manifest_path": "research/manifest.json", + "study_manifest_sha256": "3d31eb6a01fd5deb1c44b583267b29793b10cd24ff2a11295469e340e3acd042", + "official_mdl_reports": { + "mystery-A": { + "report_path": "mdl-reports/mystery-A.json", + "report_sha256": "bc6e402e55544b2c3d3fc54a928e66e862f0671d560011e70fbea6ea02a5e0be", + "expression": "(x + y)", + "description_cost": 3, + "minimum_unique": true, + "compiled_gate_count": 37 + }, + "mystery-B": { + "report_path": "mdl-reports/mystery-B.json", + "report_sha256": "bbb478d0fde1d2fba17e990b90a9070c03b153d162a035bb202fb62ecea68b0d", + "expression": "abs(x - y)", + "description_cost": 4, + "minimum_unique": true, + "compiled_gate_count": 52 + }, + "mystery-C": { + "report_path": "mdl-reports/mystery-C.json", + "report_sha256": "ceb82c9af97328aaa329cf2f0473adf7cdb64ec1710a913de0cb4054338f5bf7", + "expression": "(x * y)", + "description_cost": 3, + "minimum_unique": true, + "compiled_gate_count": 182 + }, + "mystery-D": { + "report_path": "mdl-reports/mystery-D.json", + "report_sha256": "52f158ed0b132ee955b9b36284c3e602067307c990cc3a2b8fb19d20d341cc42", + "expression": "(square(x) + square(y))", + "description_cost": 5, + "minimum_unique": true, + "compiled_gate_count": 221 + } + }, + "limitations": [ + "No universal learner or global circuit minimality is claimed.", + "Partial-logic baselines use conservative zero completion.", + "Normalized runtime and RSS fields are not performance measurements." + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.csv new file mode 100644 index 000000000..cf338a147 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.csv @@ -0,0 +1,1025 @@ +task,method,fraction_basis_points,expected_trials,missing_trials,successes,semantic_recovery_successes,semantic_recovery_rate,wilson95_low,wilson95_high,mean_held_out_exact_accuracy,mean_held_out_bit_accuracy,median_gate_count,median_description_length +abs-plus-one,legacy-registry,500,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.086471,0.590039,6,3 +abs-plus-one,mdl-enumerator,1000,20,0,20,8,0.400000,0.218807,0.613418,0.685178,0.862292,24,5 +abs-plus-one,mdl-enumerator,2000,20,0,20,17,0.850000,0.639581,0.947631,0.932271,0.974343,36,6 +abs-plus-one,mdl-enumerator,3000,20,0,20,19,0.950000,0.763869,0.991119,0.977823,0.992661,36,6 +abs-plus-one,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629686,,1 +abs-plus-one,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629644,,3 +abs-plus-one,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629243,,5 +abs-plus-one,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630000,,8 +abs-plus-one,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629588,,13 +abs-plus-one,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.628391,,26 +abs-plus-one,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630683,,51 +abs-plus-one,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629286,,102 +abs-plus-one,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629686,,1 +abs-plus-one,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629644,,3 +abs-plus-one,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629243,,5 +abs-plus-one,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630000,,8 +abs-plus-one,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629588,,13 +abs-plus-one,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.628391,,26 +abs-plus-one,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630683,,51 +abs-plus-one,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629286,,102 +abs-plus-one,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629686,,1 +abs-plus-one,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629644,,3 +abs-plus-one,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629243,,5 +abs-plus-one,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630000,,8 +abs-plus-one,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629588,,13 +abs-plus-one,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.628391,,26 +abs-plus-one,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630683,,51 +abs-plus-one,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629286,,102 +abs-plus-one,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.086471,0.590039,6,3 +abs-plus-one,grammar-evolution,1000,20,0,11,0,0.000000,0.000000,0.161125,0.510959,0.785555,24,5 +abs-plus-one,grammar-evolution,2000,20,0,3,0,0.000000,0.000000,0.161125,0.548473,0.828951,10,5 +abs-plus-one,grammar-evolution,3000,20,0,1,0,0.000000,0.000000,0.161125,0.556452,0.853226,10,5 +abs-plus-one,grammar-evolution,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,grammar-evolution,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,grammar-evolution,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,grammar-evolution,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +abs-plus-one,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629686,,1 +abs-plus-one,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629644,,3 +abs-plus-one,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629243,,5 +abs-plus-one,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630000,,8 +abs-plus-one,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629588,,13 +abs-plus-one,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.628391,,26 +abs-plus-one,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.630683,,51 +abs-plus-one,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.629286,,102 +abs-plus-one,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +abs-plus-one,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,36,6 +add-one,legacy-registry,500,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-one,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.036078,0.513098,6,3 +add-one,mdl-enumerator,1000,20,0,20,19,0.950000,0.763869,0.991119,0.952964,0.978340,24,5 +add-one,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493882,,1 +add-one,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493715,,3 +add-one,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493705,,5 +add-one,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493911,,8 +add-one,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493704,,13 +add-one,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.492130,,26 +add-one,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493415,,51 +add-one,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493766,,102 +add-one,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493882,,1 +add-one,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493715,,3 +add-one,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493705,,5 +add-one,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493911,,8 +add-one,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493704,,13 +add-one,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.492130,,26 +add-one,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493415,,51 +add-one,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493766,,102 +add-one,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493882,,1 +add-one,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493715,,3 +add-one,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493705,,5 +add-one,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493911,,8 +add-one,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493704,,13 +add-one,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.492130,,26 +add-one,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493415,,51 +add-one,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493766,,102 +add-one,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.036078,0.513098,6,3 +add-one,grammar-evolution,1000,20,0,20,19,0.950000,0.763869,0.991119,0.952964,0.978340,24,5 +add-one,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493882,,1 +add-one,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493715,,3 +add-one,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493705,,5 +add-one,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493911,,8 +add-one,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493704,,13 +add-one,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.492130,,26 +add-one,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493415,,51 +add-one,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000000,0.493766,,102 +add-one,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-one,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,24,5 +add-xor-x,legacy-registry,500,20,0,2,0,0.000000,0.000000,0.161125,0.058824,0.598431,17,3 +add-xor-x,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +add-xor-x,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.178431,0.624863,4,3.5 +add-xor-x,mdl-enumerator,1000,20,0,20,12,0.600000,0.386582,0.781193,0.764229,0.915494,21,5 +add-xor-x,mdl-enumerator,2000,20,0,20,19,0.950000,0.763869,0.991119,0.978088,0.993705,21,5 +add-xor-x,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.062745,0.506431,,1 +add-xor-x,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.506047,,3 +add-xor-x,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062948,0.506335,,5 +add-xor-x,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.505565,,8 +add-xor-x,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.506214,,13 +add-xor-x,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.063261,0.506000,,26 +add-xor-x,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.058780,0.504683,,51 +add-xor-x,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067532,0.509675,,102 +add-xor-x,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.062745,0.506431,,1 +add-xor-x,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.506047,,3 +add-xor-x,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062948,0.506335,,5 +add-xor-x,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.505565,,8 +add-xor-x,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.506214,,13 +add-xor-x,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.063261,0.506000,,26 +add-xor-x,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.058780,0.504683,,51 +add-xor-x,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067532,0.509675,,102 +add-xor-x,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.062745,0.506431,,1 +add-xor-x,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.506047,,3 +add-xor-x,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062948,0.506335,,5 +add-xor-x,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.505565,,8 +add-xor-x,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.506214,,13 +add-xor-x,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.063261,0.506000,,26 +add-xor-x,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.058780,0.504683,,51 +add-xor-x,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067532,0.509675,,102 +add-xor-x,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.178431,0.624863,4,3.5 +add-xor-x,grammar-evolution,1000,20,0,20,12,0.600000,0.386582,0.781193,0.764229,0.915494,21,5 +add-xor-x,grammar-evolution,2000,20,0,20,19,0.950000,0.763869,0.991119,0.978088,0.993705,21,5 +add-xor-x,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.062745,0.506431,,1 +add-xor-x,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.506047,,3 +add-xor-x,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062948,0.506335,,5 +add-xor-x,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.505565,,8 +add-xor-x,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.506214,,13 +add-xor-x,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.063261,0.506000,,26 +add-xor-x,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.058780,0.504683,,51 +add-xor-x,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067532,0.509675,,102 +add-xor-x,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +add-xor-x,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,21,5 +and,legacy-registry,500,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +and,mdl-enumerator,500,20,0,20,1,0.050000,0.008881,0.236131,0.312353,0.734118,0.5,1 +and,mdl-enumerator,1000,20,0,20,18,0.900000,0.698966,0.972134,0.930830,0.974704,4,3 +and,mdl-enumerator,2000,20,0,20,19,0.950000,0.763869,0.991119,0.961355,0.983068,4,3 +and,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.316667,0.750294,,1 +and,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.316008,0.749802,,3 +and,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.315936,0.749502,,5 +and,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.317944,0.750403,,8 +and,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.316255,0.750051,,13 +and,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.313043,0.748315,,26 +and,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.316585,0.749756,,51 +and,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.315909,0.749188,,102 +and,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.316667,0.750294,,1 +and,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.316008,0.749802,,3 +and,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.315936,0.749502,,5 +and,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.317944,0.750403,,8 +and,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.316255,0.750051,,13 +and,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.313043,0.748315,,26 +and,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.316585,0.749756,,51 +and,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.315909,0.749188,,102 +and,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.316667,0.750294,,1 +and,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.316008,0.749802,,3 +and,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.315936,0.749502,,5 +and,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.317944,0.750403,,8 +and,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.316255,0.750051,,13 +and,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.313043,0.748315,,26 +and,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.316585,0.749756,,51 +and,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.315909,0.749188,,102 +and,grammar-evolution,500,20,0,20,1,0.050000,0.008881,0.236131,0.312353,0.734118,0.5,1 +and,grammar-evolution,1000,20,0,20,18,0.900000,0.698966,0.972134,0.930830,0.974704,4,3 +and,grammar-evolution,2000,20,0,20,19,0.950000,0.763869,0.991119,0.961355,0.983068,4,3 +and,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.316667,0.750294,,1 +and,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.316008,0.749802,,3 +and,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.315936,0.749502,,5 +and,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.317944,0.750403,,8 +and,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.316255,0.750051,,13 +and,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.313043,0.748315,,26 +and,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.316585,0.749756,,51 +and,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.315909,0.749188,,102 +and,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +and,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +max,legacy-registry,500,20,0,1,0,0.000000,0.000000,0.161125,0.117647,0.529412,28,4 +max,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +max,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.529412,0.749020,0,1 +max,mdl-enumerator,1000,20,0,20,10,0.500000,0.299298,0.700702,0.764822,0.879447,13,3 +max,mdl-enumerator,2000,20,0,20,14,0.700000,0.481027,0.854523,0.864542,0.947410,22,3 +max,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.382892,,1 +max,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003755,0.382806,,3 +max,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.382918,,5 +max,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.381552,,8 +max,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003498,0.382716,,13 +max,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003478,0.381576,,26 +max,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.381768,,51 +max,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.003896,0.385065,,102 +max,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.382892,,1 +max,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003755,0.382806,,3 +max,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.382918,,5 +max,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.381552,,8 +max,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003498,0.382716,,13 +max,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003478,0.381576,,26 +max,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.381768,,51 +max,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.003896,0.385065,,102 +max,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.382892,,1 +max,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003755,0.382806,,3 +max,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.382918,,5 +max,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.381552,,8 +max,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003498,0.382716,,13 +max,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003478,0.381576,,26 +max,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.381768,,51 +max,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.003896,0.385065,,102 +max,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.529412,0.749020,0,1 +max,grammar-evolution,1000,20,0,20,10,0.500000,0.299298,0.700702,0.764822,0.879447,13,3 +max,grammar-evolution,2000,20,0,20,14,0.700000,0.481027,0.854523,0.864542,0.947410,22,3 +max,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.382892,,1 +max,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003755,0.382806,,3 +max,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.382918,,5 +max,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.381552,,8 +max,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003498,0.382716,,13 +max,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003478,0.381576,,26 +max,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.381768,,51 +max,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.003896,0.385065,,102 +max,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +max,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,legacy-registry,500,20,0,1,0,0.000000,0.000000,0.161125,0.054902,0.466667,28,4 +min,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +min,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.529412,0.749020,0,1 +min,mdl-enumerator,1000,20,0,20,8,0.400000,0.218807,0.613418,0.719368,0.860079,2,2 +min,mdl-enumerator,2000,20,0,20,15,0.750000,0.531299,0.888138,0.882470,0.942231,22,3 +min,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.120980,0.617059,,1 +min,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.121739,0.617391,,3 +min,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.121912,0.617580,,5 +min,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.119960,0.616633,,8 +min,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.121811,0.617335,,13 +min,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.121957,0.618424,,26 +min,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.119512,0.616524,,51 +min,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.120455,0.618182,,102 +min,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.120980,0.617059,,1 +min,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.121739,0.617391,,3 +min,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.121912,0.617580,,5 +min,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.119960,0.616633,,8 +min,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.121811,0.617335,,13 +min,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.121957,0.618424,,26 +min,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.119512,0.616524,,51 +min,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.120455,0.618182,,102 +min,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.120980,0.617059,,1 +min,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.121739,0.617391,,3 +min,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.121912,0.617580,,5 +min,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.119960,0.616633,,8 +min,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.121811,0.617335,,13 +min,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.121957,0.618424,,26 +min,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.119512,0.616524,,51 +min,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.120455,0.618182,,102 +min,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.529412,0.749020,0,1 +min,grammar-evolution,1000,20,0,20,8,0.400000,0.218807,0.613418,0.719368,0.860079,2,2 +min,grammar-evolution,2000,20,0,20,15,0.750000,0.531299,0.888138,0.882470,0.942231,22,3 +min,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.120980,0.617059,,1 +min,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.121739,0.617391,,3 +min,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.121912,0.617580,,5 +min,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.119960,0.616633,,8 +min,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.121811,0.617335,,13 +min,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.121957,0.618424,,26 +min,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.119512,0.616524,,51 +min,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.120455,0.618182,,102 +min,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +min,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,22,3 +multiply-plus-x,legacy-registry,500,20,0,1,0,0.000000,0.000000,0.161125,0.058824,0.647059,68,3 +multiply-plus-x,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +multiply-plus-x,mdl-enumerator,500,20,0,20,1,0.050000,0.008881,0.236131,0.152353,0.644804,13.5,4 +multiply-plus-x,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.062549,0.653456,,1 +multiply-plus-x,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.653384,,3 +multiply-plus-x,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062550,0.653635,,5 +multiply-plus-x,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.653075,,8 +multiply-plus-x,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.063169,0.653447,,13 +multiply-plus-x,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.062174,0.653152,,26 +multiply-plus-x,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.062195,0.652073,,51 +multiply-plus-x,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067857,0.653084,,102 +multiply-plus-x,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.062549,0.653456,,1 +multiply-plus-x,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.653384,,3 +multiply-plus-x,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062550,0.653635,,5 +multiply-plus-x,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.653075,,8 +multiply-plus-x,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.063169,0.653447,,13 +multiply-plus-x,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.062174,0.653152,,26 +multiply-plus-x,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.062195,0.652073,,51 +multiply-plus-x,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067857,0.653084,,102 +multiply-plus-x,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.062549,0.653456,,1 +multiply-plus-x,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.653384,,3 +multiply-plus-x,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062550,0.653635,,5 +multiply-plus-x,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.653075,,8 +multiply-plus-x,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.063169,0.653447,,13 +multiply-plus-x,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.062174,0.653152,,26 +multiply-plus-x,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.062195,0.652073,,51 +multiply-plus-x,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067857,0.653084,,102 +multiply-plus-x,grammar-evolution,500,20,0,20,1,0.050000,0.008881,0.236131,0.152353,0.644804,13.5,4 +multiply-plus-x,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.062549,0.653456,,1 +multiply-plus-x,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062648,0.653384,,3 +multiply-plus-x,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062550,0.653635,,5 +multiply-plus-x,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.063105,0.653075,,8 +multiply-plus-x,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.063169,0.653447,,13 +multiply-plus-x,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.062174,0.653152,,26 +multiply-plus-x,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.062195,0.652073,,51 +multiply-plus-x,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.067857,0.653084,,102 +multiply-plus-x,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +multiply-plus-x,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,92,5 +mystery-A,legacy-registry,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,legacy-registry,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500222,,328 +mystery-A,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500228,,655 +mystery-A,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500241,,1311 +mystery-A,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500199,,1966 +mystery-A,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500198,,3277 +mystery-A,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500188,,6554 +mystery-A,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000012,0.500199,,13107 +mystery-A,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500187,,26214 +mystery-A,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500222,,328 +mystery-A,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500228,,655 +mystery-A,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500241,,1311 +mystery-A,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500199,,1966 +mystery-A,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500198,,3277 +mystery-A,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500188,,6554 +mystery-A,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000012,0.500199,,13107 +mystery-A,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500187,,26214 +mystery-A,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500222,,328 +mystery-A,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500228,,655 +mystery-A,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500241,,1311 +mystery-A,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500199,,1966 +mystery-A,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500198,,3277 +mystery-A,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500188,,6554 +mystery-A,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000012,0.500199,,13107 +mystery-A,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500187,,26214 +mystery-A,grammar-evolution,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500222,,328 +mystery-A,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500228,,655 +mystery-A,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500241,,1311 +mystery-A,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500199,,1966 +mystery-A,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500198,,3277 +mystery-A,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000016,0.500188,,6554 +mystery-A,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000012,0.500199,,13107 +mystery-A,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.000015,0.500187,,26214 +mystery-A,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-A,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,37,3 +mystery-B,legacy-registry,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,legacy-registry,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.007803,0.566938,,82 +mystery-B,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.007836,0.566990,,164 +mystery-B,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.007816,0.567061,,328 +mystery-B,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.007793,0.566991,,492 +mystery-B,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.007777,0.566844,,819 +mystery-B,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.007860,0.567055,,1638 +mystery-B,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.007679,0.566790,,3277 +mystery-B,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.007762,0.566817,,6554 +mystery-B,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.007803,0.566938,,82 +mystery-B,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.007836,0.566990,,164 +mystery-B,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.007816,0.567061,,328 +mystery-B,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.007793,0.566991,,492 +mystery-B,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.007777,0.566844,,819 +mystery-B,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.007860,0.567055,,1638 +mystery-B,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.007679,0.566790,,3277 +mystery-B,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.007762,0.566817,,6554 +mystery-B,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.007803,0.566938,,82 +mystery-B,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.007836,0.566990,,164 +mystery-B,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.007816,0.567061,,328 +mystery-B,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.007793,0.566991,,492 +mystery-B,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.007777,0.566844,,819 +mystery-B,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.007860,0.567055,,1638 +mystery-B,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.007679,0.566790,,3277 +mystery-B,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.007762,0.566817,,6554 +mystery-B,grammar-evolution,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.007803,0.566938,,82 +mystery-B,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.007836,0.566990,,164 +mystery-B,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.007816,0.567061,,328 +mystery-B,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.007793,0.566991,,492 +mystery-B,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.007777,0.566844,,819 +mystery-B,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.007860,0.567055,,1638 +mystery-B,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.007679,0.566790,,3277 +mystery-B,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.007762,0.566817,,6554 +mystery-B,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-B,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,52,4 +mystery-C,legacy-registry,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,legacy-registry,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.031060,0.614412,,20 +mystery-C,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.030999,0.614373,,41 +mystery-C,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031066,0.614375,,82 +mystery-C,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031022,0.614313,,123 +mystery-C,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.030943,0.614460,,205 +mystery-C,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031186,0.614389,,410 +mystery-C,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.031019,0.614546,,819 +mystery-C,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.030858,0.614346,,1638 +mystery-C,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.031060,0.614412,,20 +mystery-C,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.030999,0.614373,,41 +mystery-C,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031066,0.614375,,82 +mystery-C,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031022,0.614313,,123 +mystery-C,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.030943,0.614460,,205 +mystery-C,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031186,0.614389,,410 +mystery-C,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.031019,0.614546,,819 +mystery-C,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.030858,0.614346,,1638 +mystery-C,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.031060,0.614412,,20 +mystery-C,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.030999,0.614373,,41 +mystery-C,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031066,0.614375,,82 +mystery-C,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031022,0.614313,,123 +mystery-C,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.030943,0.614460,,205 +mystery-C,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031186,0.614389,,410 +mystery-C,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.031019,0.614546,,819 +mystery-C,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.030858,0.614346,,1638 +mystery-C,grammar-evolution,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.031060,0.614412,,20 +mystery-C,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.030999,0.614373,,41 +mystery-C,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031066,0.614375,,82 +mystery-C,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031022,0.614313,,123 +mystery-C,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.030943,0.614460,,205 +mystery-C,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031186,0.614389,,410 +mystery-C,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.031019,0.614546,,819 +mystery-C,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.030858,0.614346,,1638 +mystery-C,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-C,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,182,3 +mystery-D,legacy-registry,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,legacy-registry,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.000981,0.584963,,5 +mystery-D,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000986,0.585167,,10 +mystery-D,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000946,0.584924,,20 +mystery-D,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.001007,0.585041,,31 +mystery-D,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000925,0.584906,,51 +mystery-D,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000976,0.585082,,102 +mystery-D,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000977,0.585015,,205 +mystery-D,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.001059,0.584816,,410 +mystery-D,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.000981,0.584963,,5 +mystery-D,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000986,0.585167,,10 +mystery-D,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000946,0.584924,,20 +mystery-D,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.001007,0.585041,,31 +mystery-D,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000925,0.584906,,51 +mystery-D,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000976,0.585082,,102 +mystery-D,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000977,0.585015,,205 +mystery-D,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.001059,0.584816,,410 +mystery-D,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.000981,0.584963,,5 +mystery-D,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000986,0.585167,,10 +mystery-D,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000946,0.584924,,20 +mystery-D,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.001007,0.585041,,31 +mystery-D,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000925,0.584906,,51 +mystery-D,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000976,0.585082,,102 +mystery-D,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000977,0.585015,,205 +mystery-D,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.001059,0.584816,,410 +mystery-D,grammar-evolution,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.000981,0.584963,,5 +mystery-D,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.000986,0.585167,,10 +mystery-D,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.000946,0.584924,,20 +mystery-D,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.001007,0.585041,,31 +mystery-D,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.000925,0.584906,,51 +mystery-D,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.000976,0.585082,,102 +mystery-D,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.000977,0.585015,,205 +mystery-D,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.001059,0.584816,,410 +mystery-D,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +mystery-D,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,221,5 +or,legacy-registry,500,20,0,2,0,0.000000,0.000000,0.161125,0.117647,0.615686,28,4 +or,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +or,mdl-enumerator,500,20,0,20,1,0.050000,0.008881,0.236131,0.306667,0.700588,0.5,2 +or,mdl-enumerator,1000,20,0,20,19,0.950000,0.763869,0.991119,0.965415,0.987352,4,3 +or,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.003725,0.250098,,1 +or,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.250445,,3 +or,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.250149,,5 +or,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003831,0.250605,,8 +or,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003704,0.249177,,13 +or,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003043,0.250598,,26 +or,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003415,0.249146,,51 +or,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.002922,0.251136,,102 +or,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.003725,0.250098,,1 +or,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.250445,,3 +or,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.250149,,5 +or,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003831,0.250605,,8 +or,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003704,0.249177,,13 +or,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003043,0.250598,,26 +or,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003415,0.249146,,51 +or,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.002922,0.251136,,102 +or,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.003725,0.250098,,1 +or,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.250445,,3 +or,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.250149,,5 +or,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003831,0.250605,,8 +or,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003704,0.249177,,13 +or,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003043,0.250598,,26 +or,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003415,0.249146,,51 +or,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.002922,0.251136,,102 +or,grammar-evolution,500,20,0,20,1,0.050000,0.008881,0.236131,0.306667,0.700588,0.5,2 +or,grammar-evolution,1000,20,0,20,19,0.950000,0.763869,0.991119,0.965415,0.987352,4,3 +or,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.003725,0.250098,,1 +or,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.250445,,3 +or,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003984,0.250149,,5 +or,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003831,0.250605,,8 +or,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.003704,0.249177,,13 +or,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003043,0.250598,,26 +or,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003415,0.249146,,51 +or,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.002922,0.251136,,102 +or,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +or,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +range,legacy-registry,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,legacy-registry,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,mdl-enumerator,500,20,0,20,0,0.000000,0.000000,0.161125,0.246863,0.610098,9.5,2 +range,mdl-enumerator,1000,20,0,20,10,0.500000,0.299298,0.700702,0.778656,0.865613,21,3.5 +range,mdl-enumerator,2000,20,0,20,17,0.850000,0.639581,0.947631,0.933865,0.968127,28,4 +range,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.062353,0.585980,,1 +range,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062451,0.586709,,3 +range,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062351,0.585408,,5 +range,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.062097,0.585988,,8 +range,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.064198,0.587088,,13 +range,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.059783,0.584022,,26 +range,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.063902,0.585549,,51 +range,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.063312,0.585390,,102 +range,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.062353,0.585980,,1 +range,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062451,0.586709,,3 +range,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062351,0.585408,,5 +range,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.062097,0.585988,,8 +range,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.064198,0.587088,,13 +range,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.059783,0.584022,,26 +range,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.063902,0.585549,,51 +range,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.063312,0.585390,,102 +range,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.062353,0.585980,,1 +range,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062451,0.586709,,3 +range,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062351,0.585408,,5 +range,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.062097,0.585988,,8 +range,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.064198,0.587088,,13 +range,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.059783,0.584022,,26 +range,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.063902,0.585549,,51 +range,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.063312,0.585390,,102 +range,grammar-evolution,500,20,0,20,0,0.000000,0.000000,0.161125,0.246863,0.610098,9.5,2 +range,grammar-evolution,1000,20,0,20,10,0.500000,0.299298,0.700702,0.778656,0.865613,21,3.5 +range,grammar-evolution,2000,20,0,20,17,0.850000,0.639581,0.947631,0.933865,0.968127,28,4 +range,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,28,4 +range,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.062353,0.585980,,1 +range,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062451,0.586709,,3 +range,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062351,0.585408,,5 +range,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.062097,0.585988,,8 +range,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.064198,0.587088,,13 +range,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.059783,0.584022,,26 +range,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.063902,0.585549,,51 +range,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.063312,0.585390,,102 +range,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +range,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,40,7 +shift-plus-y,legacy-registry,500,20,0,2,0,0.000000,0.000000,0.161125,0.058824,0.504314,17,3 +shift-plus-y,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +shift-plus-y,mdl-enumerator,500,20,0,20,6,0.300000,0.145477,0.518973,0.326667,0.669882,9,3 +shift-plus-y,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.031176,0.500157,,1 +shift-plus-y,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.031225,0.500119,,3 +shift-plus-y,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031275,0.500996,,5 +shift-plus-y,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031452,0.500000,,8 +shift-plus-y,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.031276,0.499794,,13 +shift-plus-y,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031957,0.499522,,26 +shift-plus-y,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.030244,0.497854,,51 +shift-plus-y,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.032143,0.499416,,102 +shift-plus-y,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.031176,0.500157,,1 +shift-plus-y,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.031225,0.500119,,3 +shift-plus-y,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031275,0.500996,,5 +shift-plus-y,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031452,0.500000,,8 +shift-plus-y,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.031276,0.499794,,13 +shift-plus-y,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031957,0.499522,,26 +shift-plus-y,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.030244,0.497854,,51 +shift-plus-y,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.032143,0.499416,,102 +shift-plus-y,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.031176,0.500157,,1 +shift-plus-y,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.031225,0.500119,,3 +shift-plus-y,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031275,0.500996,,5 +shift-plus-y,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031452,0.500000,,8 +shift-plus-y,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.031276,0.499794,,13 +shift-plus-y,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031957,0.499522,,26 +shift-plus-y,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.030244,0.497854,,51 +shift-plus-y,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.032143,0.499416,,102 +shift-plus-y,grammar-evolution,500,20,0,20,6,0.300000,0.145477,0.518973,0.326667,0.669882,9,3 +shift-plus-y,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.031176,0.500157,,1 +shift-plus-y,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.031225,0.500119,,3 +shift-plus-y,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.031275,0.500996,,5 +shift-plus-y,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.031452,0.500000,,8 +shift-plus-y,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.031276,0.499794,,13 +shift-plus-y,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.031957,0.499522,,26 +shift-plus-y,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.030244,0.497854,,51 +shift-plus-y,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.032143,0.499416,,102 +shift-plus-y,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +shift-plus-y,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,13,4 +square-plus-y,legacy-registry,500,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,1000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +square-plus-y,mdl-enumerator,500,20,0,20,14,0.700000,0.481027,0.854523,0.719608,0.888039,72,4 +square-plus-y,mdl-enumerator,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.569902,,1 +square-plus-y,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.569491,,3 +square-plus-y,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003785,0.569373,,5 +square-plus-y,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.569103,,8 +square-plus-y,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.004115,0.570319,,13 +square-plus-y,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003696,0.569103,,26 +square-plus-y,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.568841,,51 +square-plus-y,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.004545,0.569521,,102 +square-plus-y,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.569902,,1 +square-plus-y,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.569491,,3 +square-plus-y,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003785,0.569373,,5 +square-plus-y,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.569103,,8 +square-plus-y,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.004115,0.570319,,13 +square-plus-y,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003696,0.569103,,26 +square-plus-y,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.568841,,51 +square-plus-y,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.004545,0.569521,,102 +square-plus-y,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.569902,,1 +square-plus-y,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.569491,,3 +square-plus-y,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003785,0.569373,,5 +square-plus-y,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.569103,,8 +square-plus-y,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.004115,0.570319,,13 +square-plus-y,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003696,0.569103,,26 +square-plus-y,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.568841,,51 +square-plus-y,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.004545,0.569521,,102 +square-plus-y,grammar-evolution,500,20,0,20,14,0.700000,0.481027,0.854523,0.719608,0.888039,72,4 +square-plus-y,grammar-evolution,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.003922,0.569902,,1 +square-plus-y,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.003953,0.569491,,3 +square-plus-y,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.003785,0.569373,,5 +square-plus-y,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.003629,0.569103,,8 +square-plus-y,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.004115,0.570319,,13 +square-plus-y,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.003696,0.569103,,26 +square-plus-y,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.003659,0.568841,,51 +square-plus-y,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.004545,0.569521,,102 +square-plus-y,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +square-plus-y,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,72,4 +xor,legacy-registry,500,20,0,12,0,0.000000,0.000000,0.161125,0.568627,0.819608,28,4 +xor,legacy-registry,1000,20,0,4,0,0.000000,0.000000,0.161125,0.565217,0.818182,28,4 +xor,legacy-registry,2000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,legacy-registry,3000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,legacy-registry,5000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,legacy-registry,10000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,legacy-registry,20000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,legacy-registry,40000,20,0,0,0,0.000000,0.000000,0.161125,,,, +xor,mdl-enumerator,500,20,0,20,1,0.050000,0.008881,0.236131,0.232157,0.605490,5.5,2 +xor,mdl-enumerator,1000,20,0,20,18,0.900000,0.698966,0.972134,0.941502,0.973123,4,3 +xor,mdl-enumerator,2000,20,0,20,19,0.950000,0.763869,0.991119,0.970518,0.986454,4,3 +xor,mdl-enumerator,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,mdl-enumerator,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,mdl-enumerator,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,mdl-enumerator,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,mdl-enumerator,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,abc-dont-care,500,20,0,20,0,0.000000,0.000000,0.161125,0.062157,0.499657,,1 +xor,abc-dont-care,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062846,0.499951,,3 +xor,abc-dont-care,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062749,0.500747,,5 +xor,abc-dont-care,3000,20,0,20,0,0.000000,0.000000,0.161125,0.061492,0.499899,,8 +xor,abc-dont-care,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.499126,,13 +xor,abc-dont-care,10000,20,0,20,0,0.000000,0.000000,0.161125,0.061739,0.499674,,26 +xor,abc-dont-care,20000,20,0,20,0,0.000000,0.000000,0.161125,0.057805,0.495244,,51 +xor,abc-dont-care,40000,20,0,20,0,0.000000,0.000000,0.161125,0.060390,0.498782,,102 +xor,robdd,500,20,0,20,0,0.000000,0.000000,0.161125,0.062157,0.499657,,1 +xor,robdd,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062846,0.499951,,3 +xor,robdd,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062749,0.500747,,5 +xor,robdd,3000,20,0,20,0,0.000000,0.000000,0.161125,0.061492,0.499899,,8 +xor,robdd,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.499126,,13 +xor,robdd,10000,20,0,20,0,0.000000,0.000000,0.161125,0.061739,0.499674,,26 +xor,robdd,20000,20,0,20,0,0.000000,0.000000,0.161125,0.057805,0.495244,,51 +xor,robdd,40000,20,0,20,0,0.000000,0.000000,0.161125,0.060390,0.498782,,102 +xor,sat-cegis,500,20,0,20,0,0.000000,0.000000,0.161125,0.062157,0.499657,,1 +xor,sat-cegis,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062846,0.499951,,3 +xor,sat-cegis,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062749,0.500747,,5 +xor,sat-cegis,3000,20,0,20,0,0.000000,0.000000,0.161125,0.061492,0.499899,,8 +xor,sat-cegis,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.499126,,13 +xor,sat-cegis,10000,20,0,20,0,0.000000,0.000000,0.161125,0.061739,0.499674,,26 +xor,sat-cegis,20000,20,0,20,0,0.000000,0.000000,0.161125,0.057805,0.495244,,51 +xor,sat-cegis,40000,20,0,20,0,0.000000,0.000000,0.161125,0.060390,0.498782,,102 +xor,grammar-evolution,500,20,0,20,1,0.050000,0.008881,0.236131,0.232157,0.605490,5.5,2 +xor,grammar-evolution,1000,20,0,20,18,0.900000,0.698966,0.972134,0.941502,0.973123,4,3 +xor,grammar-evolution,2000,20,0,20,19,0.950000,0.763869,0.991119,0.970518,0.986454,4,3 +xor,grammar-evolution,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,grammar-evolution,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,grammar-evolution,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,grammar-evolution,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,grammar-evolution,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,memorization,500,20,0,20,0,0.000000,0.000000,0.161125,0.062157,0.499657,,1 +xor,memorization,1000,20,0,20,0,0.000000,0.000000,0.161125,0.062846,0.499951,,3 +xor,memorization,2000,20,0,20,0,0.000000,0.000000,0.161125,0.062749,0.500747,,5 +xor,memorization,3000,20,0,20,0,0.000000,0.000000,0.161125,0.061492,0.499899,,8 +xor,memorization,5000,20,0,20,0,0.000000,0.000000,0.161125,0.062140,0.499126,,13 +xor,memorization,10000,20,0,20,0,0.000000,0.000000,0.161125,0.061739,0.499674,,26 +xor,memorization,20000,20,0,20,0,0.000000,0.000000,0.161125,0.057805,0.495244,,51 +xor,memorization,40000,20,0,20,0,0.000000,0.000000,0.161125,0.060390,0.498782,,102 +xor,oracle-expression,500,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,1000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,2000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,3000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,5000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,10000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,20000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 +xor,oracle-expression,40000,20,0,20,20,1.000000,0.838875,1.000000,1.000000,1.000000,4,3 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.json new file mode 100644 index 000000000..c41cb8aa3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/aggregate.json @@ -0,0 +1,33804 @@ +{ + "schema_version": 1, + "trial_rows": 20480, + "group_rows": 1024, + "correlations": { + "gate_count_vs_held_out_exact_spearman": 0.32795297094229553, + "description_length_vs_gate_count_spearman": 0.4352961403183276, + "paired_trials": 8380 + }, + "groups": [ + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.08647058823529412, + "mean_held_out_bit_accuracy": 0.5900392156862745, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 6, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 8, + "semantic_recovery_rate": 0.4, + "wilson95_low": 0.21880653237281705, + "wilson95_high": 0.6134184992377469, + "mean_held_out_exact_accuracy": 0.6851778656126482, + "mean_held_out_bit_accuracy": 0.8622924901185771, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 17, + "semantic_recovery_rate": 0.85, + "wilson95_low": 0.6395811352592431, + "wilson95_high": 0.9476312541037835, + "mean_held_out_exact_accuracy": 0.9322709163346612, + "mean_held_out_bit_accuracy": 0.9743426294820718, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9778225806451613, + "mean_held_out_bit_accuracy": 0.9926612903225805, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296862745098037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296442687747037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292430278884462, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.63, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6295884773662552, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6283913043478262, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6306829268292683, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "abs-plus-one", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292857142857142, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296862745098037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296442687747037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292430278884462, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.63, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6295884773662552, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6283913043478262, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6306829268292683, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "abs-plus-one", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292857142857142, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296862745098037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296442687747037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292430278884462, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.63, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6295884773662552, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6283913043478262, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6306829268292683, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "abs-plus-one", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292857142857142, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.08647058823529412, + "mean_held_out_bit_accuracy": 0.5900392156862745, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 6, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 11, + "no-hypothesis": 9, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5109593963348904, + "mean_held_out_bit_accuracy": 0.7855551563061443, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 3, + "no-hypothesis": 17, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.548472775564409, + "mean_held_out_bit_accuracy": 0.8289508632138114, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 10, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 1, + "no-hypothesis": 19, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5564516129032258, + "mean_held_out_bit_accuracy": 0.853225806451613, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 10, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296862745098037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6296442687747037, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292430278884462, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.63, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6295884773662552, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6283913043478262, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6306829268292683, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "abs-plus-one", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.6292857142857142, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "abs-plus-one", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 36, + "median_description_length": 6 + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03607843137254903, + "mean_held_out_bit_accuracy": 0.5130980392156862, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 6, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9529644268774703, + "mean_held_out_bit_accuracy": 0.9783399209486167, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49388235294117644, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937154150197628, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4939112903225807, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49370370370370376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4921304347826087, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4934146341463414, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-one", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937662337662337, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49388235294117644, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937154150197628, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4939112903225807, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49370370370370376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4921304347826087, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4934146341463414, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-one", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937662337662337, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49388235294117644, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937154150197628, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4939112903225807, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49370370370370376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4921304347826087, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4934146341463414, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-one", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937662337662337, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03607843137254903, + "mean_held_out_bit_accuracy": 0.5130980392156862, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 6, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9529644268774703, + "mean_held_out_bit_accuracy": 0.9783399209486167, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49388235294117644, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937154150197628, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4939112903225807, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.49370370370370376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4921304347826087, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4934146341463414, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-one", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0, + "mean_held_out_bit_accuracy": 0.4937662337662337, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-one", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 24, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 2, + "no-hypothesis": 18, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.058823529411764705, + "mean_held_out_bit_accuracy": 0.5984313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 17, + "median_description_length": 3 + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.17843137254901956, + "mean_held_out_bit_accuracy": 0.6248627450980394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3.5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 12, + "semantic_recovery_rate": 0.6, + "wilson95_low": 0.3865815007622531, + "wilson95_high": 0.781193467627183, + "mean_held_out_exact_accuracy": 0.7642292490118577, + "mean_held_out_bit_accuracy": 0.9154940711462451, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9780876494023903, + "mean_held_out_bit_accuracy": 0.9937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274509803921569, + "mean_held_out_bit_accuracy": 0.5064313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.5060474308300396, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0629482071713147, + "mean_held_out_bit_accuracy": 0.5063346613545816, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631048387096774, + "mean_held_out_bit_accuracy": 0.5055645161290323, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06213991769547326, + "mean_held_out_bit_accuracy": 0.5062139917695473, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0632608695652174, + "mean_held_out_bit_accuracy": 0.5059999999999999, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.05878048780487808, + "mean_held_out_bit_accuracy": 0.5046829268292684, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-xor-x", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06753246753246753, + "mean_held_out_bit_accuracy": 0.5096753246753247, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274509803921569, + "mean_held_out_bit_accuracy": 0.5064313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.5060474308300396, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0629482071713147, + "mean_held_out_bit_accuracy": 0.5063346613545816, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631048387096774, + "mean_held_out_bit_accuracy": 0.5055645161290323, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06213991769547326, + "mean_held_out_bit_accuracy": 0.5062139917695473, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0632608695652174, + "mean_held_out_bit_accuracy": 0.5059999999999999, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.05878048780487808, + "mean_held_out_bit_accuracy": 0.5046829268292684, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-xor-x", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06753246753246753, + "mean_held_out_bit_accuracy": 0.5096753246753247, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274509803921569, + "mean_held_out_bit_accuracy": 0.5064313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.5060474308300396, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0629482071713147, + "mean_held_out_bit_accuracy": 0.5063346613545816, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631048387096774, + "mean_held_out_bit_accuracy": 0.5055645161290323, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06213991769547326, + "mean_held_out_bit_accuracy": 0.5062139917695473, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0632608695652174, + "mean_held_out_bit_accuracy": 0.5059999999999999, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.05878048780487808, + "mean_held_out_bit_accuracy": 0.5046829268292684, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-xor-x", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06753246753246753, + "mean_held_out_bit_accuracy": 0.5096753246753247, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.17843137254901956, + "mean_held_out_bit_accuracy": 0.6248627450980394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3.5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 12, + "semantic_recovery_rate": 0.6, + "wilson95_low": 0.3865815007622531, + "wilson95_high": 0.781193467627183, + "mean_held_out_exact_accuracy": 0.7642292490118577, + "mean_held_out_bit_accuracy": 0.9154940711462451, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9780876494023903, + "mean_held_out_bit_accuracy": 0.9937051792828685, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274509803921569, + "mean_held_out_bit_accuracy": 0.5064313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.5060474308300396, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0629482071713147, + "mean_held_out_bit_accuracy": 0.5063346613545816, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631048387096774, + "mean_held_out_bit_accuracy": 0.5055645161290323, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06213991769547326, + "mean_held_out_bit_accuracy": 0.5062139917695473, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0632608695652174, + "mean_held_out_bit_accuracy": 0.5059999999999999, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.05878048780487808, + "mean_held_out_bit_accuracy": 0.5046829268292684, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "add-xor-x", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06753246753246753, + "mean_held_out_bit_accuracy": 0.5096753246753247, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "add-xor-x", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 5 + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.31235294117647044, + "mean_held_out_bit_accuracy": 0.7341176470588238, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0.5, + "median_description_length": 1 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 18, + "semantic_recovery_rate": 0.9, + "wilson95_low": 0.6989663547715128, + "wilson95_high": 0.9721335187862319, + "mean_held_out_exact_accuracy": 0.9308300395256918, + "mean_held_out_bit_accuracy": 0.9747035573122529, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9613545816733067, + "mean_held_out_bit_accuracy": 0.9830677290836654, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31666666666666654, + "mean_held_out_bit_accuracy": 0.7502941176470589, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31600790513833993, + "mean_held_out_bit_accuracy": 0.749802371541502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3159362549800796, + "mean_held_out_bit_accuracy": 0.7495019920318725, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3179435483870967, + "mean_held_out_bit_accuracy": 0.7504032258064518, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3162551440329218, + "mean_held_out_bit_accuracy": 0.7500514403292181, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3130434782608696, + "mean_held_out_bit_accuracy": 0.7483152173913045, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3165853658536586, + "mean_held_out_bit_accuracy": 0.7497560975609756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "and", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.315909090909091, + "mean_held_out_bit_accuracy": 0.7491883116883117, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31666666666666654, + "mean_held_out_bit_accuracy": 0.7502941176470589, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31600790513833993, + "mean_held_out_bit_accuracy": 0.749802371541502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3159362549800796, + "mean_held_out_bit_accuracy": 0.7495019920318725, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3179435483870967, + "mean_held_out_bit_accuracy": 0.7504032258064518, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3162551440329218, + "mean_held_out_bit_accuracy": 0.7500514403292181, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3130434782608696, + "mean_held_out_bit_accuracy": 0.7483152173913045, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3165853658536586, + "mean_held_out_bit_accuracy": 0.7497560975609756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "and", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.315909090909091, + "mean_held_out_bit_accuracy": 0.7491883116883117, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31666666666666654, + "mean_held_out_bit_accuracy": 0.7502941176470589, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31600790513833993, + "mean_held_out_bit_accuracy": 0.749802371541502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3159362549800796, + "mean_held_out_bit_accuracy": 0.7495019920318725, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3179435483870967, + "mean_held_out_bit_accuracy": 0.7504032258064518, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3162551440329218, + "mean_held_out_bit_accuracy": 0.7500514403292181, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3130434782608696, + "mean_held_out_bit_accuracy": 0.7483152173913045, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3165853658536586, + "mean_held_out_bit_accuracy": 0.7497560975609756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "and", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.315909090909091, + "mean_held_out_bit_accuracy": 0.7491883116883117, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.31235294117647044, + "mean_held_out_bit_accuracy": 0.7341176470588238, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0.5, + "median_description_length": 1 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 18, + "semantic_recovery_rate": 0.9, + "wilson95_low": 0.6989663547715128, + "wilson95_high": 0.9721335187862319, + "mean_held_out_exact_accuracy": 0.9308300395256918, + "mean_held_out_bit_accuracy": 0.9747035573122529, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9613545816733067, + "mean_held_out_bit_accuracy": 0.9830677290836654, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31666666666666654, + "mean_held_out_bit_accuracy": 0.7502941176470589, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.31600790513833993, + "mean_held_out_bit_accuracy": 0.749802371541502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3159362549800796, + "mean_held_out_bit_accuracy": 0.7495019920318725, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3179435483870967, + "mean_held_out_bit_accuracy": 0.7504032258064518, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3162551440329218, + "mean_held_out_bit_accuracy": 0.7500514403292181, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3130434782608696, + "mean_held_out_bit_accuracy": 0.7483152173913045, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.3165853658536586, + "mean_held_out_bit_accuracy": 0.7497560975609756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "and", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.315909090909091, + "mean_held_out_bit_accuracy": 0.7491883116883117, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "and", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 1, + "no-hypothesis": 19, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11764705882352941, + "mean_held_out_bit_accuracy": 0.5294117647058824, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5294117647058824, + "mean_held_out_bit_accuracy": 0.7490196078431376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0, + "median_description_length": 1 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 10, + "semantic_recovery_rate": 0.5, + "wilson95_low": 0.2992980081982123, + "wilson95_high": 0.7007019918017877, + "mean_held_out_exact_accuracy": 0.7648221343873515, + "mean_held_out_bit_accuracy": 0.8794466403162055, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 14, + "semantic_recovery_rate": 0.7, + "wilson95_low": 0.4810271816464765, + "wilson95_high": 0.8545227551323956, + "mean_held_out_exact_accuracy": 0.8645418326693226, + "mean_held_out_bit_accuracy": 0.947410358565737, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.38289215686274525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037549407114624506, + "mean_held_out_bit_accuracy": 0.38280632411067195, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.3829183266932271, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.38155241935483863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0034979423868312766, + "mean_held_out_bit_accuracy": 0.3827160493827161, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003478260869565218, + "mean_held_out_bit_accuracy": 0.38157608695652173, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.3817682926829268, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "max", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038961038961038965, + "mean_held_out_bit_accuracy": 0.3850649350649351, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.38289215686274525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037549407114624506, + "mean_held_out_bit_accuracy": 0.38280632411067195, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.3829183266932271, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.38155241935483863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0034979423868312766, + "mean_held_out_bit_accuracy": 0.3827160493827161, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003478260869565218, + "mean_held_out_bit_accuracy": 0.38157608695652173, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.3817682926829268, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "max", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038961038961038965, + "mean_held_out_bit_accuracy": 0.3850649350649351, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.38289215686274525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037549407114624506, + "mean_held_out_bit_accuracy": 0.38280632411067195, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.3829183266932271, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.38155241935483863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0034979423868312766, + "mean_held_out_bit_accuracy": 0.3827160493827161, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003478260869565218, + "mean_held_out_bit_accuracy": 0.38157608695652173, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.3817682926829268, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "max", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038961038961038965, + "mean_held_out_bit_accuracy": 0.3850649350649351, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5294117647058824, + "mean_held_out_bit_accuracy": 0.7490196078431376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0, + "median_description_length": 1 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 10, + "semantic_recovery_rate": 0.5, + "wilson95_low": 0.2992980081982123, + "wilson95_high": 0.7007019918017877, + "mean_held_out_exact_accuracy": 0.7648221343873515, + "mean_held_out_bit_accuracy": 0.8794466403162055, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 14, + "semantic_recovery_rate": 0.7, + "wilson95_low": 0.4810271816464765, + "wilson95_high": 0.8545227551323956, + "mean_held_out_exact_accuracy": 0.8645418326693226, + "mean_held_out_bit_accuracy": 0.947410358565737, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.38289215686274525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037549407114624506, + "mean_held_out_bit_accuracy": 0.38280632411067195, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.3829183266932271, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.38155241935483863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0034979423868312766, + "mean_held_out_bit_accuracy": 0.3827160493827161, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003478260869565218, + "mean_held_out_bit_accuracy": 0.38157608695652173, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.3817682926829268, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "max", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038961038961038965, + "mean_held_out_bit_accuracy": 0.3850649350649351, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "max", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 1, + "no-hypothesis": 19, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.054901960784313725, + "mean_held_out_bit_accuracy": 0.4666666666666667, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5294117647058824, + "mean_held_out_bit_accuracy": 0.7490196078431376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0, + "median_description_length": 1 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 8, + "semantic_recovery_rate": 0.4, + "wilson95_low": 0.21880653237281705, + "wilson95_high": 0.6134184992377469, + "mean_held_out_exact_accuracy": 0.719367588932806, + "mean_held_out_bit_accuracy": 0.8600790513833992, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 2, + "median_description_length": 2 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 15, + "semantic_recovery_rate": 0.75, + "wilson95_low": 0.531299122381256, + "wilson95_high": 0.8881382985923343, + "mean_held_out_exact_accuracy": 0.8824701195219123, + "mean_held_out_bit_accuracy": 0.9422310756972111, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12098039215686274, + "mean_held_out_bit_accuracy": 0.6170588235294119, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12173913043478261, + "mean_held_out_bit_accuracy": 0.6173913043478261, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12191235059760949, + "mean_held_out_bit_accuracy": 0.6175796812749004, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11995967741935483, + "mean_held_out_bit_accuracy": 0.616633064516129, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12181069958847737, + "mean_held_out_bit_accuracy": 0.617335390946502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12195652173913044, + "mean_held_out_bit_accuracy": 0.6184239130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11951219512195128, + "mean_held_out_bit_accuracy": 0.6165243902439025, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "min", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12045454545454548, + "mean_held_out_bit_accuracy": 0.618181818181818, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12098039215686274, + "mean_held_out_bit_accuracy": 0.6170588235294119, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12173913043478261, + "mean_held_out_bit_accuracy": 0.6173913043478261, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12191235059760949, + "mean_held_out_bit_accuracy": 0.6175796812749004, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11995967741935483, + "mean_held_out_bit_accuracy": 0.616633064516129, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12181069958847737, + "mean_held_out_bit_accuracy": 0.617335390946502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12195652173913044, + "mean_held_out_bit_accuracy": 0.6184239130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11951219512195128, + "mean_held_out_bit_accuracy": 0.6165243902439025, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "min", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12045454545454548, + "mean_held_out_bit_accuracy": 0.618181818181818, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12098039215686274, + "mean_held_out_bit_accuracy": 0.6170588235294119, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12173913043478261, + "mean_held_out_bit_accuracy": 0.6173913043478261, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12191235059760949, + "mean_held_out_bit_accuracy": 0.6175796812749004, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11995967741935483, + "mean_held_out_bit_accuracy": 0.616633064516129, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12181069958847737, + "mean_held_out_bit_accuracy": 0.617335390946502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12195652173913044, + "mean_held_out_bit_accuracy": 0.6184239130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11951219512195128, + "mean_held_out_bit_accuracy": 0.6165243902439025, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "min", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12045454545454548, + "mean_held_out_bit_accuracy": 0.618181818181818, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5294117647058824, + "mean_held_out_bit_accuracy": 0.7490196078431376, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0, + "median_description_length": 1 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 8, + "semantic_recovery_rate": 0.4, + "wilson95_low": 0.21880653237281705, + "wilson95_high": 0.6134184992377469, + "mean_held_out_exact_accuracy": 0.719367588932806, + "mean_held_out_bit_accuracy": 0.8600790513833992, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 2, + "median_description_length": 2 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 15, + "semantic_recovery_rate": 0.75, + "wilson95_low": 0.531299122381256, + "wilson95_high": 0.8881382985923343, + "mean_held_out_exact_accuracy": 0.8824701195219123, + "mean_held_out_bit_accuracy": 0.9422310756972111, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12098039215686274, + "mean_held_out_bit_accuracy": 0.6170588235294119, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12173913043478261, + "mean_held_out_bit_accuracy": 0.6173913043478261, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12191235059760949, + "mean_held_out_bit_accuracy": 0.6175796812749004, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11995967741935483, + "mean_held_out_bit_accuracy": 0.616633064516129, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12181069958847737, + "mean_held_out_bit_accuracy": 0.617335390946502, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12195652173913044, + "mean_held_out_bit_accuracy": 0.6184239130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11951219512195128, + "mean_held_out_bit_accuracy": 0.6165243902439025, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "min", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.12045454545454548, + "mean_held_out_bit_accuracy": 0.618181818181818, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "min", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 22, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 1, + "no-hypothesis": 19, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.058823529411764705, + "mean_held_out_bit_accuracy": 0.6470588235294118, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 68, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.1523529411764706, + "mean_held_out_bit_accuracy": 0.6448039215686274, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13.5, + "median_description_length": 4 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254901960784313, + "mean_held_out_bit_accuracy": 0.6534558823529413, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.6533843873517787, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254980079681272, + "mean_held_out_bit_accuracy": 0.6536354581673307, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06310483870967741, + "mean_held_out_bit_accuracy": 0.6530745967741937, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631687242798354, + "mean_held_out_bit_accuracy": 0.6534465020576131, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06217391304347827, + "mean_held_out_bit_accuracy": 0.6531521739130436, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06219512195121953, + "mean_held_out_bit_accuracy": 0.6520731707317073, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "multiply-plus-x", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06785714285714285, + "mean_held_out_bit_accuracy": 0.6530844155844157, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254901960784313, + "mean_held_out_bit_accuracy": 0.6534558823529413, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.6533843873517787, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254980079681272, + "mean_held_out_bit_accuracy": 0.6536354581673307, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06310483870967741, + "mean_held_out_bit_accuracy": 0.6530745967741937, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631687242798354, + "mean_held_out_bit_accuracy": 0.6534465020576131, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06217391304347827, + "mean_held_out_bit_accuracy": 0.6531521739130436, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06219512195121953, + "mean_held_out_bit_accuracy": 0.6520731707317073, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "multiply-plus-x", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06785714285714285, + "mean_held_out_bit_accuracy": 0.6530844155844157, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254901960784313, + "mean_held_out_bit_accuracy": 0.6534558823529413, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.6533843873517787, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254980079681272, + "mean_held_out_bit_accuracy": 0.6536354581673307, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06310483870967741, + "mean_held_out_bit_accuracy": 0.6530745967741937, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631687242798354, + "mean_held_out_bit_accuracy": 0.6534465020576131, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06217391304347827, + "mean_held_out_bit_accuracy": 0.6531521739130436, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06219512195121953, + "mean_held_out_bit_accuracy": 0.6520731707317073, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "multiply-plus-x", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06785714285714285, + "mean_held_out_bit_accuracy": 0.6530844155844157, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.1523529411764706, + "mean_held_out_bit_accuracy": 0.6448039215686274, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13.5, + "median_description_length": 4 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254901960784313, + "mean_held_out_bit_accuracy": 0.6534558823529413, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06264822134387352, + "mean_held_out_bit_accuracy": 0.6533843873517787, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06254980079681272, + "mean_held_out_bit_accuracy": 0.6536354581673307, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06310483870967741, + "mean_held_out_bit_accuracy": 0.6530745967741937, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0631687242798354, + "mean_held_out_bit_accuracy": 0.6534465020576131, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06217391304347827, + "mean_held_out_bit_accuracy": 0.6531521739130436, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06219512195121953, + "mean_held_out_bit_accuracy": 0.6520731707317073, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "multiply-plus-x", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06785714285714285, + "mean_held_out_bit_accuracy": 0.6530844155844157, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "multiply-plus-x", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 92, + "median_description_length": 5 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014568764568764565, + "mean_held_out_bit_accuracy": 0.5002221949590371, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014642191088300126, + "mean_held_out_bit_accuracy": 0.5002284524317169, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 655 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001479174776177501, + "mean_held_out_bit_accuracy": 0.5002410795380824, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1311 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015730690577316343, + "mean_held_out_bit_accuracy": 0.5001989932358032, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1966 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001525883807963507, + "mean_held_out_bit_accuracy": 0.5001979187301792, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001610660879590383, + "mean_held_out_bit_accuracy": 0.5001879104359522, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000012397718819737169, + "mean_held_out_bit_accuracy": 0.5001986813913419, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13107 + }, + { + "task": "mystery-A", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015258633843649866, + "mean_held_out_bit_accuracy": 0.5001870595482313, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26214 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014568764568764565, + "mean_held_out_bit_accuracy": 0.5002221949590371, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014642191088300126, + "mean_held_out_bit_accuracy": 0.5002284524317169, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 655 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001479174776177501, + "mean_held_out_bit_accuracy": 0.5002410795380824, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1311 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015730690577316343, + "mean_held_out_bit_accuracy": 0.5001989932358032, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1966 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001525883807963507, + "mean_held_out_bit_accuracy": 0.5001979187301792, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001610660879590383, + "mean_held_out_bit_accuracy": 0.5001879104359522, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000012397718819737169, + "mean_held_out_bit_accuracy": 0.5001986813913419, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13107 + }, + { + "task": "mystery-A", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015258633843649866, + "mean_held_out_bit_accuracy": 0.5001870595482313, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26214 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014568764568764565, + "mean_held_out_bit_accuracy": 0.5002221949590371, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014642191088300126, + "mean_held_out_bit_accuracy": 0.5002284524317169, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 655 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001479174776177501, + "mean_held_out_bit_accuracy": 0.5002410795380824, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1311 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015730690577316343, + "mean_held_out_bit_accuracy": 0.5001989932358032, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1966 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001525883807963507, + "mean_held_out_bit_accuracy": 0.5001979187301792, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001610660879590383, + "mean_held_out_bit_accuracy": 0.5001879104359522, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000012397718819737169, + "mean_held_out_bit_accuracy": 0.5001986813913419, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13107 + }, + { + "task": "mystery-A", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015258633843649866, + "mean_held_out_bit_accuracy": 0.5001870595482313, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26214 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014568764568764565, + "mean_held_out_bit_accuracy": 0.5002221949590371, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000014642191088300126, + "mean_held_out_bit_accuracy": 0.5002284524317169, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 655 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001479174776177501, + "mean_held_out_bit_accuracy": 0.5002410795380824, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1311 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015730690577316343, + "mean_held_out_bit_accuracy": 0.5001989932358032, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1966 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001525883807963507, + "mean_held_out_bit_accuracy": 0.5001979187301792, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00001610660879590383, + "mean_held_out_bit_accuracy": 0.5001879104359522, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000012397718819737169, + "mean_held_out_bit_accuracy": 0.5001986813913419, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13107 + }, + { + "task": "mystery-A", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.000015258633843649866, + "mean_held_out_bit_accuracy": 0.5001870595482313, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26214 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-A", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 37, + "median_description_length": 3 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007802723592197277, + "mean_held_out_bit_accuracy": 0.5669378866747288, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00783600493218249, + "mean_held_out_bit_accuracy": 0.5669900475603312, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 164 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007816392625809665, + "mean_held_out_bit_accuracy": 0.5670612677058865, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00779322929775988, + "mean_held_out_bit_accuracy": 0.5669910287296394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 492 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007777063925473821, + "mean_held_out_bit_accuracy": 0.5668441099536505, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007859758578597586, + "mean_held_out_bit_accuracy": 0.5670549882776927, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007679102769512475, + "mean_held_out_bit_accuracy": 0.5667903737370433, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-B", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007761953204476093, + "mean_held_out_bit_accuracy": 0.5668173230635082, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007802723592197277, + "mean_held_out_bit_accuracy": 0.5669378866747288, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00783600493218249, + "mean_held_out_bit_accuracy": 0.5669900475603312, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 164 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007816392625809665, + "mean_held_out_bit_accuracy": 0.5670612677058865, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00779322929775988, + "mean_held_out_bit_accuracy": 0.5669910287296394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 492 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007777063925473821, + "mean_held_out_bit_accuracy": 0.5668441099536505, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007859758578597586, + "mean_held_out_bit_accuracy": 0.5670549882776927, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007679102769512475, + "mean_held_out_bit_accuracy": 0.5667903737370433, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-B", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007761953204476093, + "mean_held_out_bit_accuracy": 0.5668173230635082, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007802723592197277, + "mean_held_out_bit_accuracy": 0.5669378866747288, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00783600493218249, + "mean_held_out_bit_accuracy": 0.5669900475603312, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 164 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007816392625809665, + "mean_held_out_bit_accuracy": 0.5670612677058865, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00779322929775988, + "mean_held_out_bit_accuracy": 0.5669910287296394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 492 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007777063925473821, + "mean_held_out_bit_accuracy": 0.5668441099536505, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007859758578597586, + "mean_held_out_bit_accuracy": 0.5670549882776927, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007679102769512475, + "mean_held_out_bit_accuracy": 0.5667903737370433, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-B", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007761953204476093, + "mean_held_out_bit_accuracy": 0.5668173230635082, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007802723592197277, + "mean_held_out_bit_accuracy": 0.5669378866747288, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00783600493218249, + "mean_held_out_bit_accuracy": 0.5669900475603312, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 164 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007816392625809665, + "mean_held_out_bit_accuracy": 0.5670612677058865, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 328 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00779322929775988, + "mean_held_out_bit_accuracy": 0.5669910287296394, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 492 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007777063925473821, + "mean_held_out_bit_accuracy": 0.5668441099536505, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007859758578597586, + "mean_held_out_bit_accuracy": 0.5670549882776927, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007679102769512475, + "mean_held_out_bit_accuracy": 0.5667903737370433, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3277 + }, + { + "task": "mystery-B", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.007761953204476093, + "mean_held_out_bit_accuracy": 0.5668173230635082, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 6554 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-B", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 52, + "median_description_length": 4 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03105986261040236, + "mean_held_out_bit_accuracy": 0.6144115963362775, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030998766954377317, + "mean_held_out_bit_accuracy": 0.614373201808467, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 41 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03106626806178376, + "mean_held_out_bit_accuracy": 0.6143746885899352, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03102189781021898, + "mean_held_out_bit_accuracy": 0.6143132813155466, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 123 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030943202261629398, + "mean_held_out_bit_accuracy": 0.6144596504754561, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03118556701030928, + "mean_held_out_bit_accuracy": 0.6143889039609334, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031019224900823927, + "mean_held_out_bit_accuracy": 0.6145458244329163, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-C", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030858421480878768, + "mean_held_out_bit_accuracy": 0.6143460130187145, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03105986261040236, + "mean_held_out_bit_accuracy": 0.6144115963362775, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030998766954377317, + "mean_held_out_bit_accuracy": 0.614373201808467, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 41 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03106626806178376, + "mean_held_out_bit_accuracy": 0.6143746885899352, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03102189781021898, + "mean_held_out_bit_accuracy": 0.6143132813155466, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 123 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030943202261629398, + "mean_held_out_bit_accuracy": 0.6144596504754561, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03118556701030928, + "mean_held_out_bit_accuracy": 0.6143889039609334, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031019224900823927, + "mean_held_out_bit_accuracy": 0.6145458244329163, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-C", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030858421480878768, + "mean_held_out_bit_accuracy": 0.6143460130187145, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03105986261040236, + "mean_held_out_bit_accuracy": 0.6144115963362775, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030998766954377317, + "mean_held_out_bit_accuracy": 0.614373201808467, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 41 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03106626806178376, + "mean_held_out_bit_accuracy": 0.6143746885899352, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03102189781021898, + "mean_held_out_bit_accuracy": 0.6143132813155466, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 123 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030943202261629398, + "mean_held_out_bit_accuracy": 0.6144596504754561, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03118556701030928, + "mean_held_out_bit_accuracy": 0.6143889039609334, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031019224900823927, + "mean_held_out_bit_accuracy": 0.6145458244329163, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-C", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030858421480878768, + "mean_held_out_bit_accuracy": 0.6143460130187145, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03105986261040236, + "mean_held_out_bit_accuracy": 0.6144115963362775, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030998766954377317, + "mean_held_out_bit_accuracy": 0.614373201808467, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 41 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03106626806178376, + "mean_held_out_bit_accuracy": 0.6143746885899352, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 82 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03102189781021898, + "mean_held_out_bit_accuracy": 0.6143132813155466, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 123 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030943202261629398, + "mean_held_out_bit_accuracy": 0.6144596504754561, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03118556701030928, + "mean_held_out_bit_accuracy": 0.6143889039609334, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031019224900823927, + "mean_held_out_bit_accuracy": 0.6145458244329163, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 819 + }, + { + "task": "mystery-C", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030858421480878768, + "mean_held_out_bit_accuracy": 0.6143460130187145, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1638 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-C", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 182, + "median_description_length": 3 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009813542688910696, + "mean_held_out_bit_accuracy": 0.5849629761798555, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009861932938856018, + "mean_held_out_bit_accuracy": 0.5851667563206026, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 10 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009462151394422306, + "mean_held_out_bit_accuracy": 0.5849239406012315, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.001007049345417926, + "mean_held_out_bit_accuracy": 0.5850407397235193, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 31 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009249743062692704, + "mean_held_out_bit_accuracy": 0.5849061010931516, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009761388286334058, + "mean_held_out_bit_accuracy": 0.5850818379017946, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009768009768009764, + "mean_held_out_bit_accuracy": 0.5850149850149851, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-D", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0010586319218241044, + "mean_held_out_bit_accuracy": 0.584816405093278, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009813542688910696, + "mean_held_out_bit_accuracy": 0.5849629761798555, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009861932938856018, + "mean_held_out_bit_accuracy": 0.5851667563206026, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 10 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009462151394422306, + "mean_held_out_bit_accuracy": 0.5849239406012315, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.001007049345417926, + "mean_held_out_bit_accuracy": 0.5850407397235193, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 31 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009249743062692704, + "mean_held_out_bit_accuracy": 0.5849061010931516, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009761388286334058, + "mean_held_out_bit_accuracy": 0.5850818379017946, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009768009768009764, + "mean_held_out_bit_accuracy": 0.5850149850149851, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-D", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0010586319218241044, + "mean_held_out_bit_accuracy": 0.584816405093278, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009813542688910696, + "mean_held_out_bit_accuracy": 0.5849629761798555, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009861932938856018, + "mean_held_out_bit_accuracy": 0.5851667563206026, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 10 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009462151394422306, + "mean_held_out_bit_accuracy": 0.5849239406012315, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.001007049345417926, + "mean_held_out_bit_accuracy": 0.5850407397235193, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 31 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009249743062692704, + "mean_held_out_bit_accuracy": 0.5849061010931516, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009761388286334058, + "mean_held_out_bit_accuracy": 0.5850818379017946, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009768009768009764, + "mean_held_out_bit_accuracy": 0.5850149850149851, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-D", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0010586319218241044, + "mean_held_out_bit_accuracy": 0.584816405093278, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009813542688910696, + "mean_held_out_bit_accuracy": 0.5849629761798555, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009861932938856018, + "mean_held_out_bit_accuracy": 0.5851667563206026, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 10 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009462151394422306, + "mean_held_out_bit_accuracy": 0.5849239406012315, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 20 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.001007049345417926, + "mean_held_out_bit_accuracy": 0.5850407397235193, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 31 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009249743062692704, + "mean_held_out_bit_accuracy": 0.5849061010931516, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009761388286334058, + "mean_held_out_bit_accuracy": 0.5850818379017946, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0009768009768009764, + "mean_held_out_bit_accuracy": 0.5850149850149851, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 205 + }, + { + "task": "mystery-D", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0010586319218241044, + "mean_held_out_bit_accuracy": 0.584816405093278, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 410 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "mystery-D", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 221, + "median_description_length": 5 + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 2, + "no-hypothesis": 18, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.11764705882352941, + "mean_held_out_bit_accuracy": 0.615686274509804, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.30666666666666653, + "mean_held_out_bit_accuracy": 0.7005882352941178, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0.5, + "median_description_length": 2 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9654150197628459, + "mean_held_out_bit_accuracy": 0.9873517786561266, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037254901960784314, + "mean_held_out_bit_accuracy": 0.2500980392156863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.2504446640316206, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.25014940239043826, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038306451612903207, + "mean_held_out_bit_accuracy": 0.2506048387096774, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037037037037037043, + "mean_held_out_bit_accuracy": 0.2491769547325103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003043478260869566, + "mean_held_out_bit_accuracy": 0.25059782608695647, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003414634146341463, + "mean_held_out_bit_accuracy": 0.2491463414634146, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "or", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0029220779220779226, + "mean_held_out_bit_accuracy": 0.2511363636363636, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037254901960784314, + "mean_held_out_bit_accuracy": 0.2500980392156863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.2504446640316206, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.25014940239043826, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038306451612903207, + "mean_held_out_bit_accuracy": 0.2506048387096774, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037037037037037043, + "mean_held_out_bit_accuracy": 0.2491769547325103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003043478260869566, + "mean_held_out_bit_accuracy": 0.25059782608695647, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003414634146341463, + "mean_held_out_bit_accuracy": 0.2491463414634146, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "or", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0029220779220779226, + "mean_held_out_bit_accuracy": 0.2511363636363636, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037254901960784314, + "mean_held_out_bit_accuracy": 0.2500980392156863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.2504446640316206, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.25014940239043826, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038306451612903207, + "mean_held_out_bit_accuracy": 0.2506048387096774, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037037037037037043, + "mean_held_out_bit_accuracy": 0.2491769547325103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003043478260869566, + "mean_held_out_bit_accuracy": 0.25059782608695647, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003414634146341463, + "mean_held_out_bit_accuracy": 0.2491463414634146, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "or", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0029220779220779226, + "mean_held_out_bit_accuracy": 0.2511363636363636, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.30666666666666653, + "mean_held_out_bit_accuracy": 0.7005882352941178, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 0.5, + "median_description_length": 2 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9654150197628459, + "mean_held_out_bit_accuracy": 0.9873517786561266, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037254901960784314, + "mean_held_out_bit_accuracy": 0.2500980392156863, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.2504446640316206, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0039840637450199185, + "mean_held_out_bit_accuracy": 0.25014940239043826, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0038306451612903207, + "mean_held_out_bit_accuracy": 0.2506048387096774, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037037037037037043, + "mean_held_out_bit_accuracy": 0.2491769547325103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003043478260869566, + "mean_held_out_bit_accuracy": 0.25059782608695647, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003414634146341463, + "mean_held_out_bit_accuracy": 0.2491463414634146, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "or", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0029220779220779226, + "mean_held_out_bit_accuracy": 0.2511363636363636, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "or", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.24686274509803913, + "mean_held_out_bit_accuracy": 0.6100980392156862, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 9.5, + "median_description_length": 2 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 10, + "semantic_recovery_rate": 0.5, + "wilson95_low": 0.2992980081982123, + "wilson95_high": 0.7007019918017877, + "mean_held_out_exact_accuracy": 0.7786561264822136, + "mean_held_out_bit_accuracy": 0.8656126482213438, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 3.5 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 17, + "semantic_recovery_rate": 0.85, + "wilson95_low": 0.6395811352592431, + "wilson95_high": 0.9476312541037835, + "mean_held_out_exact_accuracy": 0.9338645418326694, + "mean_held_out_bit_accuracy": 0.9681274900398407, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235294117647059, + "mean_held_out_bit_accuracy": 0.5859803921568626, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06245059288537549, + "mean_held_out_bit_accuracy": 0.586709486166008, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235059760956172, + "mean_held_out_bit_accuracy": 0.5854083665338646, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062096774193548365, + "mean_held_out_bit_accuracy": 0.5859879032258064, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06419753086419754, + "mean_held_out_bit_accuracy": 0.587088477366255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.059782608695652176, + "mean_held_out_bit_accuracy": 0.5840217391304349, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06390243902439027, + "mean_held_out_bit_accuracy": 0.5855487804878049, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "range", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0633116883116883, + "mean_held_out_bit_accuracy": 0.5853896103896103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235294117647059, + "mean_held_out_bit_accuracy": 0.5859803921568626, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06245059288537549, + "mean_held_out_bit_accuracy": 0.586709486166008, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235059760956172, + "mean_held_out_bit_accuracy": 0.5854083665338646, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062096774193548365, + "mean_held_out_bit_accuracy": 0.5859879032258064, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06419753086419754, + "mean_held_out_bit_accuracy": 0.587088477366255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.059782608695652176, + "mean_held_out_bit_accuracy": 0.5840217391304349, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06390243902439027, + "mean_held_out_bit_accuracy": 0.5855487804878049, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "range", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0633116883116883, + "mean_held_out_bit_accuracy": 0.5853896103896103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235294117647059, + "mean_held_out_bit_accuracy": 0.5859803921568626, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06245059288537549, + "mean_held_out_bit_accuracy": 0.586709486166008, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235059760956172, + "mean_held_out_bit_accuracy": 0.5854083665338646, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062096774193548365, + "mean_held_out_bit_accuracy": 0.5859879032258064, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06419753086419754, + "mean_held_out_bit_accuracy": 0.587088477366255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.059782608695652176, + "mean_held_out_bit_accuracy": 0.5840217391304349, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06390243902439027, + "mean_held_out_bit_accuracy": 0.5855487804878049, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "range", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0633116883116883, + "mean_held_out_bit_accuracy": 0.5853896103896103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.24686274509803913, + "mean_held_out_bit_accuracy": 0.6100980392156862, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 9.5, + "median_description_length": 2 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 10, + "semantic_recovery_rate": 0.5, + "wilson95_low": 0.2992980081982123, + "wilson95_high": 0.7007019918017877, + "mean_held_out_exact_accuracy": 0.7786561264822136, + "mean_held_out_bit_accuracy": 0.8656126482213438, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 21, + "median_description_length": 3.5 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 17, + "semantic_recovery_rate": 0.85, + "wilson95_low": 0.6395811352592431, + "wilson95_high": 0.9476312541037835, + "mean_held_out_exact_accuracy": 0.9338645418326694, + "mean_held_out_bit_accuracy": 0.9681274900398407, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235294117647059, + "mean_held_out_bit_accuracy": 0.5859803921568626, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06245059288537549, + "mean_held_out_bit_accuracy": 0.586709486166008, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06235059760956172, + "mean_held_out_bit_accuracy": 0.5854083665338646, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062096774193548365, + "mean_held_out_bit_accuracy": 0.5859879032258064, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06419753086419754, + "mean_held_out_bit_accuracy": 0.587088477366255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.059782608695652176, + "mean_held_out_bit_accuracy": 0.5840217391304349, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06390243902439027, + "mean_held_out_bit_accuracy": 0.5855487804878049, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "range", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0633116883116883, + "mean_held_out_bit_accuracy": 0.5853896103896103, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "range", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 40, + "median_description_length": 7 + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 2, + "no-hypothesis": 18, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.058823529411764705, + "mean_held_out_bit_accuracy": 0.504313725490196, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 17, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 6, + "semantic_recovery_rate": 0.3, + "wilson95_low": 0.1454772448676043, + "wilson95_high": 0.5189728183535235, + "mean_held_out_exact_accuracy": 0.32666666666666655, + "mean_held_out_bit_accuracy": 0.6698823529411764, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 9, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031176470588235295, + "mean_held_out_bit_accuracy": 0.5001568627450981, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031225296442687744, + "mean_held_out_bit_accuracy": 0.5001185770750988, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127490039840636, + "mean_held_out_bit_accuracy": 0.500996015936255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03145161290322579, + "mean_held_out_bit_accuracy": 0.5, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127572016460905, + "mean_held_out_bit_accuracy": 0.49979423868312756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03195652173913044, + "mean_held_out_bit_accuracy": 0.49952173913043485, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030243902439024407, + "mean_held_out_bit_accuracy": 0.49785365853658525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "shift-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03214285714285715, + "mean_held_out_bit_accuracy": 0.4994155844155844, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031176470588235295, + "mean_held_out_bit_accuracy": 0.5001568627450981, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031225296442687744, + "mean_held_out_bit_accuracy": 0.5001185770750988, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127490039840636, + "mean_held_out_bit_accuracy": 0.500996015936255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03145161290322579, + "mean_held_out_bit_accuracy": 0.5, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127572016460905, + "mean_held_out_bit_accuracy": 0.49979423868312756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03195652173913044, + "mean_held_out_bit_accuracy": 0.49952173913043485, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030243902439024407, + "mean_held_out_bit_accuracy": 0.49785365853658525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "shift-plus-y", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03214285714285715, + "mean_held_out_bit_accuracy": 0.4994155844155844, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031176470588235295, + "mean_held_out_bit_accuracy": 0.5001568627450981, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031225296442687744, + "mean_held_out_bit_accuracy": 0.5001185770750988, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127490039840636, + "mean_held_out_bit_accuracy": 0.500996015936255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03145161290322579, + "mean_held_out_bit_accuracy": 0.5, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127572016460905, + "mean_held_out_bit_accuracy": 0.49979423868312756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03195652173913044, + "mean_held_out_bit_accuracy": 0.49952173913043485, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030243902439024407, + "mean_held_out_bit_accuracy": 0.49785365853658525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "shift-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03214285714285715, + "mean_held_out_bit_accuracy": 0.4994155844155844, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 6, + "semantic_recovery_rate": 0.3, + "wilson95_low": 0.1454772448676043, + "wilson95_high": 0.5189728183535235, + "mean_held_out_exact_accuracy": 0.32666666666666655, + "mean_held_out_bit_accuracy": 0.6698823529411764, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 9, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031176470588235295, + "mean_held_out_bit_accuracy": 0.5001568627450981, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.031225296442687744, + "mean_held_out_bit_accuracy": 0.5001185770750988, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127490039840636, + "mean_held_out_bit_accuracy": 0.500996015936255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03145161290322579, + "mean_held_out_bit_accuracy": 0.5, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03127572016460905, + "mean_held_out_bit_accuracy": 0.49979423868312756, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03195652173913044, + "mean_held_out_bit_accuracy": 0.49952173913043485, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.030243902439024407, + "mean_held_out_bit_accuracy": 0.49785365853658525, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "shift-plus-y", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.03214285714285715, + "mean_held_out_bit_accuracy": 0.4994155844155844, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "shift-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 13, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 14, + "semantic_recovery_rate": 0.7, + "wilson95_low": 0.4810271816464765, + "wilson95_high": 0.8545227551323956, + "mean_held_out_exact_accuracy": 0.7196078431372548, + "mean_held_out_bit_accuracy": 0.8880392156862745, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.5699019607843138, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.5694911067193676, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037848605577689223, + "mean_held_out_bit_accuracy": 0.5693725099601594, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.5691028225806452, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00411522633744856, + "mean_held_out_bit_accuracy": 0.5703189300411523, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036956521739130443, + "mean_held_out_bit_accuracy": 0.569103260869565, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.568841463414634, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "square-plus-y", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.004545454545454546, + "mean_held_out_bit_accuracy": 0.5695211038961038, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.5699019607843138, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.5694911067193676, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037848605577689223, + "mean_held_out_bit_accuracy": 0.5693725099601594, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.5691028225806452, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00411522633744856, + "mean_held_out_bit_accuracy": 0.5703189300411523, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036956521739130443, + "mean_held_out_bit_accuracy": 0.569103260869565, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.568841463414634, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "square-plus-y", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.004545454545454546, + "mean_held_out_bit_accuracy": 0.5695211038961038, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.5699019607843138, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.5694911067193676, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037848605577689223, + "mean_held_out_bit_accuracy": 0.5693725099601594, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.5691028225806452, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00411522633744856, + "mean_held_out_bit_accuracy": 0.5703189300411523, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036956521739130443, + "mean_held_out_bit_accuracy": 0.569103260869565, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.568841463414634, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "square-plus-y", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.004545454545454546, + "mean_held_out_bit_accuracy": 0.5695211038961038, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 14, + "semantic_recovery_rate": 0.7, + "wilson95_low": 0.4810271816464765, + "wilson95_high": 0.8545227551323956, + "mean_held_out_exact_accuracy": 0.7196078431372548, + "mean_held_out_bit_accuracy": 0.8880392156862745, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00392156862745098, + "mean_held_out_bit_accuracy": 0.5699019607843138, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003952569169960474, + "mean_held_out_bit_accuracy": 0.5694911067193676, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0037848605577689223, + "mean_held_out_bit_accuracy": 0.5693725099601594, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.003629032258064514, + "mean_held_out_bit_accuracy": 0.5691028225806452, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.00411522633744856, + "mean_held_out_bit_accuracy": 0.5703189300411523, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036956521739130443, + "mean_held_out_bit_accuracy": 0.569103260869565, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0036585365853658534, + "mean_held_out_bit_accuracy": 0.568841463414634, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "square-plus-y", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.004545454545454546, + "mean_held_out_bit_accuracy": 0.5695211038961038, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "square-plus-y", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 72, + "median_description_length": 4 + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 12, + "no-hypothesis": 8, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.568627450980392, + "mean_held_out_bit_accuracy": 0.819607843137255, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 4, + "no-hypothesis": 16, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.5652173913043478, + "mean_held_out_bit_accuracy": 0.8181818181818182, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 28, + "median_description_length": 4 + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "legacy-registry", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 0, + "no-hypothesis": 20, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": null, + "mean_held_out_bit_accuracy": null, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": null + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.23215686274509792, + "mean_held_out_bit_accuracy": 0.6054901960784314, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 5.5, + "median_description_length": 2 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 18, + "semantic_recovery_rate": 0.9, + "wilson95_low": 0.6989663547715128, + "wilson95_high": 0.9721335187862319, + "mean_held_out_exact_accuracy": 0.941501976284585, + "mean_held_out_bit_accuracy": 0.9731225296442687, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9705179282868526, + "mean_held_out_bit_accuracy": 0.9864541832669322, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "mdl-enumerator", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06215686274509804, + "mean_held_out_bit_accuracy": 0.499656862745098, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06284584980237154, + "mean_held_out_bit_accuracy": 0.49995059288537547, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274900398406372, + "mean_held_out_bit_accuracy": 0.5007470119521912, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061491935483870976, + "mean_held_out_bit_accuracy": 0.4998991935483871, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062139917695473244, + "mean_held_out_bit_accuracy": 0.4991255144032922, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061739130434782616, + "mean_held_out_bit_accuracy": 0.4996739130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0578048780487805, + "mean_held_out_bit_accuracy": 0.4952439024390244, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "xor", + "method": "abc-dont-care", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06038961038961038, + "mean_held_out_bit_accuracy": 0.4987824675324675, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06215686274509804, + "mean_held_out_bit_accuracy": 0.499656862745098, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06284584980237154, + "mean_held_out_bit_accuracy": 0.49995059288537547, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274900398406372, + "mean_held_out_bit_accuracy": 0.5007470119521912, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061491935483870976, + "mean_held_out_bit_accuracy": 0.4998991935483871, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062139917695473244, + "mean_held_out_bit_accuracy": 0.4991255144032922, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061739130434782616, + "mean_held_out_bit_accuracy": 0.4996739130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0578048780487805, + "mean_held_out_bit_accuracy": 0.4952439024390244, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "xor", + "method": "robdd", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06038961038961038, + "mean_held_out_bit_accuracy": 0.4987824675324675, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06215686274509804, + "mean_held_out_bit_accuracy": 0.499656862745098, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06284584980237154, + "mean_held_out_bit_accuracy": 0.49995059288537547, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274900398406372, + "mean_held_out_bit_accuracy": 0.5007470119521912, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061491935483870976, + "mean_held_out_bit_accuracy": 0.4998991935483871, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062139917695473244, + "mean_held_out_bit_accuracy": 0.4991255144032922, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061739130434782616, + "mean_held_out_bit_accuracy": 0.4996739130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0578048780487805, + "mean_held_out_bit_accuracy": 0.4952439024390244, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "xor", + "method": "sat-cegis", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06038961038961038, + "mean_held_out_bit_accuracy": 0.4987824675324675, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 1, + "semantic_recovery_rate": 0.05, + "wilson95_low": 0.008881448800795402, + "wilson95_high": 0.23613119344674205, + "mean_held_out_exact_accuracy": 0.23215686274509792, + "mean_held_out_bit_accuracy": 0.6054901960784314, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 5.5, + "median_description_length": 2 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 18, + "semantic_recovery_rate": 0.9, + "wilson95_low": 0.6989663547715128, + "wilson95_high": 0.9721335187862319, + "mean_held_out_exact_accuracy": 0.941501976284585, + "mean_held_out_bit_accuracy": 0.9731225296442687, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 19, + "semantic_recovery_rate": 0.95, + "wilson95_low": 0.763868806553258, + "wilson95_high": 0.9911185511992047, + "mean_held_out_exact_accuracy": 0.9705179282868526, + "mean_held_out_bit_accuracy": 0.9864541832669322, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "grammar-evolution", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06215686274509804, + "mean_held_out_bit_accuracy": 0.499656862745098, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 1 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06284584980237154, + "mean_held_out_bit_accuracy": 0.49995059288537547, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06274900398406372, + "mean_held_out_bit_accuracy": 0.5007470119521912, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 5 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061491935483870976, + "mean_held_out_bit_accuracy": 0.4998991935483871, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 8 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.062139917695473244, + "mean_held_out_bit_accuracy": 0.4991255144032922, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 13 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.061739130434782616, + "mean_held_out_bit_accuracy": 0.4996739130434783, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 26 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.0578048780487805, + "mean_held_out_bit_accuracy": 0.4952439024390244, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 51 + }, + { + "task": "xor", + "method": "memorization", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 0, + "semantic_recovery_rate": 0, + "wilson95_low": 0, + "wilson95_high": 0.16112515805281938, + "mean_held_out_exact_accuracy": 0.06038961038961038, + "mean_held_out_bit_accuracy": 0.4987824675324675, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": null, + "median_description_length": 102 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 500, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 1000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 2000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 3000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 5000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 10000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 20000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + }, + { + "task": "xor", + "method": "oracle-expression", + "fraction_basis_points": 40000, + "expected_trials": 20, + "missing_trials": 0, + "statuses": { + "success": 20, + "no-hypothesis": 0, + "unsupported": 0, + "timeout": 0, + "resource-limit": 0, + "error": 0 + }, + "semantic_recovery_successes": 20, + "semantic_recovery_rate": 1, + "wilson95_low": 0.8388748419471806, + "wilson95_high": 1, + "mean_held_out_exact_accuracy": 1, + "mean_held_out_bit_accuracy": 1, + "median_runtime_micros": 0, + "runtime_iqr_micros": [ + 0, + 0 + ], + "median_peak_rss_bytes": 0, + "peak_rss_iqr_bytes": [ + 0, + 0 + ], + "median_gate_count": 4, + "median_description_length": 3 + } + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/config.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/config.json new file mode 100644 index 000000000..4f0704d83 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/config.json @@ -0,0 +1,17 @@ +{ + "schema_version": 1, + "fractions": [0.005, 0.01, 0.02, 0.03, 0.05, 0.10, 0.20, 0.40], + "seeds": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + "methods": [ + "legacy-registry", + "mdl-enumerator", + "abc-dont-care", + "robdd", + "sat-cegis", + "grammar-evolution", + "memorization", + "oracle-expression" + ], + "trial_timeout_millis": 30000, + "experiment_seed": 8147115 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/environment.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/environment.json new file mode 100644 index 000000000..b7305d9c9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/environment.json @@ -0,0 +1,6 @@ +{ + "schema_version": 1, + "protocol": "occam-generalization-v1", + "deterministic_runtime_fields": true, + "runtime_and_rss_interpretation": "normalized placeholders; not performance measurements" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/description-vs-gates.svg b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/description-vs-gates.svg new file mode 100644 index 000000000..9d8c7c7aa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/description-vs-gates.svg @@ -0,0 +1,433 @@ + + +Description length vs official gate count + +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-xor-x legacy-registry +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +max legacy-registry +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +min legacy-registry +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +multiply-plus-x legacy-registry +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +or legacy-registry +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +shift-plus-y legacy-registry +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +xor legacy-registry +xor legacy-registry +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression + diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/fraction-vs-recovery.svg b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/fraction-vs-recovery.svg new file mode 100644 index 000000000..61ee4d782 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/fraction-vs-recovery.svg @@ -0,0 +1,13 @@ + + +Observed fraction vs semantic recovery + +legacy-registry +mdl-enumerator +abc-dont-care +robdd +sat-cegis +grammar-evolution +memorization +oracle-expression + diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/gates-vs-accuracy.svg b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/gates-vs-accuracy.svg new file mode 100644 index 000000000..fa92b3d48 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/figures/gates-vs-accuracy.svg @@ -0,0 +1,433 @@ + + +Gate count vs held-out exact accuracy + +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one mdl-enumerator +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one grammar-evolution +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +abs-plus-one oracle-expression +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one mdl-enumerator +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one grammar-evolution +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-one oracle-expression +add-xor-x legacy-registry +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x mdl-enumerator +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x grammar-evolution +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +add-xor-x oracle-expression +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and mdl-enumerator +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and grammar-evolution +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +and oracle-expression +max legacy-registry +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max mdl-enumerator +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max grammar-evolution +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +max oracle-expression +min legacy-registry +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min mdl-enumerator +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min grammar-evolution +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +min oracle-expression +multiply-plus-x legacy-registry +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x mdl-enumerator +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x grammar-evolution +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +multiply-plus-x oracle-expression +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A legacy-registry +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A mdl-enumerator +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A grammar-evolution +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-A oracle-expression +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B legacy-registry +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B mdl-enumerator +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B grammar-evolution +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-B oracle-expression +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C legacy-registry +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C mdl-enumerator +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C grammar-evolution +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-C oracle-expression +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D legacy-registry +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D mdl-enumerator +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D grammar-evolution +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +mystery-D oracle-expression +or legacy-registry +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or mdl-enumerator +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or grammar-evolution +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +or oracle-expression +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range legacy-registry +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range mdl-enumerator +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range grammar-evolution +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +range oracle-expression +shift-plus-y legacy-registry +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y mdl-enumerator +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y grammar-evolution +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +shift-plus-y oracle-expression +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y mdl-enumerator +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y grammar-evolution +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +square-plus-y oracle-expression +xor legacy-registry +xor legacy-registry +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor mdl-enumerator +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor grammar-evolution +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression +xor oracle-expression + diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/manifest.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/manifest.json new file mode 100644 index 000000000..c18431316 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/manifest.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "source_commit": "c96da169042369ba5a593a4611bd8c3dd27b38f8", + "trial_rows": 20480, + "files": { + "config.json": "3f0baed1eda5d86b5c03ea76074fe2882a5143ed6df177c1a3f6b1510112d14a", + "tasks.json": "f0510a535870087e5dcbce5f617c20024412018b671871d782979a3ef17e3e5a", + "raw.jsonl": "15990cfc98dd86024b446e1108a58b93d7163e8e5b7accbed4957e2ae35cd846", + "aggregate.csv": "7ee693513505712cd773d7a01abfdd86896a544df50086a2828ca41cf7e22d04", + "aggregate.json": "78c99e656fa325860741d30119d429f181a44e45b884c061581886412e6de1ec", + "report.md": "19a03bccb9245e5fbd033e839600064de3c4f0a113baf3e14f73d0346d9202fa", + "figures/gates-vs-accuracy.svg": "d65f85600e34fe9146f7e4efa61fd72ad36298914aee863a2d6b7849577a4017", + "figures/fraction-vs-recovery.svg": "2e5de8a53cb2abd2754dd8a7e7d0c82b143efb04c3ed132a4432dbbe121f4b18", + "figures/description-vs-gates.svg": "cb1cfc2ee27085e4f833dbd00a86589ed95af6565ffb9c94bd115438e177ca94", + "environment.json": "748e2bbb30b69426cbd298bf97f569a300789f3587637ff16b600d214fcb95f3" + }, + "external": { + "abc_lock_sha256": "010acbb7d9c9ad4ce3211c2e6316bcd197f9dfe2e8746fc6d0c287476fa64f7a", + "optimization_report_sha256": "960484ba8cdfc51ecf2d42140b41dfbf8163178250951e461fcac590ae1d4788" + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/report.md new file mode 100644 index 000000000..dde76cb58 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/report.md @@ -0,0 +1,22 @@ +# Occam Size–Generalization Study + +This artifact contains exactly 16 tasks × 8 observed fractions × 20 seeds × 8 methods = 20,480 trial records. Observed rows are sampled without replacement; accuracy is evaluated on the held-out complement. Failed searches remain rows. + +## Measured conclusion + +Across 8380 successful trials with both size measures, the Spearman correlation between official gate count and held-out exact accuracy is 0.3280; therefore larger gate counts correlate with higher held-out accuracy. Description length and gate count have Spearman correlation 0.4353. These are associations under the declared grammar, tasks, completion rules, and bounds—not a universal learning law. + +| Method | Successful fits | Full semantic recovery | +|---|---:|---:| +| legacy-registry | 825/2560 | 800/2560 | +| mdl-enumerator | 2560/2560 | 2265/2560 | +| abc-dont-care | 2560/2560 | 0/2560 | +| robdd | 2560/2560 | 0/2560 | +| sat-cegis | 2560/2560 | 0/2560 | +| grammar-evolution | 2435/2560 | 2141/2560 | +| memorization | 2560/2560 | 0/2560 | +| oracle-expression | 2560/2560 | 2560/2560 | + +The four partial-logic baselines use an explicit conservative zero completion in this release-grade deterministic matrix; they fit observed rows but are not presented as complete implementations of every possible ABC/BDD/CEGIS heuristic. The oracle expression is evaluator-only. Runtime and RSS fields are normalized to zero in the hash-stable matrix and must not be interpreted as performance measurements. + +Timeout, resource-limit, unsupported, and no-hypothesis statuses count as failed recovery. No global circuit minimality or grammar universality is claimed. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/tasks.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/tasks.json new file mode 100644 index 000000000..8d81289db --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/research/tasks.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "tasks": [ + {"id":"mystery-A","class":"official","operand_bits":8,"output_bits":9,"oracle":"(x + y)"}, + {"id":"mystery-B","class":"official","operand_bits":7,"output_bits":7,"oracle":"abs(x - y)"}, + {"id":"mystery-C","class":"official","operand_bits":6,"output_bits":12,"oracle":"(x * y)"}, + {"id":"mystery-D","class":"official","operand_bits":5,"output_bits":11,"oracle":"(square(x) + square(y))"}, + {"id":"xor","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x XOR y)"}, + {"id":"and","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x AND y)"}, + {"id":"or","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x OR y)"}, + {"id":"min","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"min(x, y)"}, + {"id":"max","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"max(x, y)"}, + {"id":"square-plus-y","class":"synthetic","operand_bits":4,"output_bits":8,"oracle":"(square(x) + y)"}, + {"id":"add-xor-x","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"((x + y) XOR x)"}, + {"id":"abs-plus-one","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"(abs(x - y) + 1)"}, + {"id":"add-one","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"((x + y) + 1)"}, + {"id":"multiply-plus-x","class":"synthetic","operand_bits":4,"output_bits":8,"oracle":"((x * y) + x)"}, + {"id":"shift-plus-y","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"(shift_left(x, 1) + y)"}, + {"id":"range","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(max(x, y) - min(x, y))"} + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/.gitignore b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock new file mode 100644 index 000000000..bbbc53aae --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock @@ -0,0 +1,874 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clap" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "leb128" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "occam71_rust" +version = "0.5.0" +dependencies = [ + "clap", + "libc", + "proptest", + "rand", + "rand_chacha", + "serde", + "serde_json", + "sha2", + "thiserror 2.0.19", + "varisat", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "partial_ref" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f728bc9b1479656e40cba507034904a8c44027c0efdbbaf6a4bdc5f2d3a910c" +dependencies = [ + "partial_ref_derive", +] + +[[package]] +name = "partial_ref_derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e1d2cb5b898b5a5342e994e0d0c367dbfe69cbf717cd307045ec9fb057581" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_xorshift" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +dependencies = [ + "rand_core", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa 1.0.18", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl 2.0.19", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "varisat" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe609851d1e9196674ac295f656bd8601200a1077343d22b345013497807caf" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "leb128", + "log", + "ordered-float", + "partial_ref", + "rustc-hash", + "serde", + "thiserror 1.0.69", + "varisat-checker", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-macros", + "varisat-internal-proof", + "vec_mut_scan", +] + +[[package]] +name = "varisat-checker" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135c977c5913ed6e98f6b81b8e4d322211303b7d40dae773caef7ad1de6c763b" +dependencies = [ + "anyhow", + "log", + "partial_ref", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-proof", +] + +[[package]] +name = "varisat-dimacs" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1dee4e21be1f04c0a939f7ae710cced47233a578de08a1b3c7d50848402636" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "thiserror 1.0.69", + "varisat-formula", +] + +[[package]] +name = "varisat-formula" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395c5543b9bfd9076d6d3af49d6c34a4b91b0b355998c0a5ec6ed7265d364520" + +[[package]] +name = "varisat-internal-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602ece773543d066aa7848455486c6c0422a3f214da7a2b899100f3c4f12408d" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "varisat-internal-proof" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6163bb7bc9018af077b76d64f976803d141c36a27d640f1437dddc4fd527d207" +dependencies = [ + "anyhow", + "varisat-formula", +] + +[[package]] +name = "vec_mut_scan" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ed610a8d5e63d9c0e31300e8fdb55104c5f21e422743a9dc74848fa8317fd2" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zerocopy" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml new file mode 100644 index 000000000..1539807cd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "occam71_rust" +version = "0.5.0" +edition = "2024" + +[dependencies] +clap = { version = "4.5", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +sha2 = "0.10" +thiserror = "2" +varisat = "0.2.2" +rand = "0.9" +rand_chacha = "0.9" +libc = "0.2" + +[dev-dependencies] +proptest = "1.7" + +# Keep this copied package independent when nested in another checkout. +[workspace] diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/conversion-manifest.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/conversion-manifest.json new file mode 100644 index 000000000..2fa394f70 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/conversion-manifest.json @@ -0,0 +1,155 @@ +{ + "schema_version": 1, + "source": "challenge-71-occam", + "generated_files": [ + "Cargo.lock", + "Cargo.toml", + "src/benchmark.rs", + "src/bin/tool_audit.rs", + "src/circuit.rs", + "src/compiled.rs", + "src/dataset.rs", + "src/dataset_scan.rs", + "src/error.rs", + "src/expression/ast.rs", + "src/expression/canonical.rs", + "src/expression/compile.rs", + "src/expression/enumerate.rs", + "src/expression/evaluate.rs", + "src/expression/mod.rs", + "src/expression/parse.rs", + "src/expression/report.rs", + "src/generate.rs", + "src/learning/family.rs", + "src/learning/inputs.rs", + "src/learning/learner.rs", + "src/learning/mdl.rs", + "src/learning/mod.rs", + "src/learning/prediction.rs", + "src/learning/report.rs", + "src/lib.rs", + "src/limits.rs", + "src/logic/abc.rs", + "src/logic/blif.rs", + "src/logic/library.rs", + "src/logic/mapped.rs", + "src/logic/mod.rs", + "src/logic/report.rs", + "src/main.rs", + "src/metrics.rs", + "src/netlist.rs", + "src/optimization/equivalence.rs", + "src/optimization/mod.rs", + "src/optimization/peephole.rs", + "src/optimization/report.rs", + "src/optimization/rewrite.rs", + "src/optimization/window.rs", + "src/optimize.rs", + "src/packed.rs", + "src/reference.rs", + "src/research/abc_dont_care.rs", + "src/research/adapters.rs", + "src/research/bdd.rs", + "src/research/evolution.rs", + "src/research/learner.rs", + "src/research/memory.rs", + "src/research/mod.rs", + "src/research/process.rs", + "src/research/projection.rs", + "src/research/rss.rs", + "src/research/runner.rs", + "src/research/sampling.rs", + "src/research/sat_cegis.rs", + "src/research/tasks.rs", + "src/research/trial.rs", + "src/scalar.rs", + "src/synthesis/certificate.rs", + "src/synthesis/cnf.rs", + "src/synthesis/mod.rs", + "src/synthesis/problem.rs", + "src/synthesis/solver.rs" + ], + "cargo_manifest_append": "# Keep this copied package independent when nested in another checkout.\\n[workspace]", + "rewrites": { + "src/research/process.rs": [ + [ + "../../../experiments/occam-generalization/tasks.json", + "../../../research/tasks.json" + ] + ], + "src/research/tasks.rs": [ + [ + "../../../experiments/occam-generalization/tasks.json", + "../../../research/tasks.json" + ] + ] + }, + "files": { + "Cargo.lock": "9ddd82e73623e058c22261ce6331b267035cb00fe1fa68857542829a89d84d98", + "Cargo.toml": "dae36b3252dd97a1daf081cd3bc3fa458a6c1979b48c7e5b0bf0fb23e1343f68", + "src/benchmark.rs": "d965668b2f7d458daaa4e588a58ffbce0f377caa3ca4a3a75ae21c2485772b4c", + "src/bin/tool_audit.rs": "84fd08112c38d31641fc4f9b49bf4f6303ee02f4163eb0d76236cdfef694d2ec", + "src/circuit.rs": "2cbe783c0c8aeb7bb30ca56f96bb2ac5e86c8bab28c7a14233ebf514353dc66d", + "src/compiled.rs": "bc5d144611fdc63060a5bb83d2fbc2707f7f478645c88523cea43ba5bd839ffd", + "src/dataset.rs": "a1adb153a85c4d40792f17210d88f6b351872f6665c864019ea1fe7c8bc3dacb", + "src/dataset_scan.rs": "124701ce5e809b77cb9d19d7353e85fe09ff08d936209620bc4c0893dab095bc", + "src/error.rs": "ae56e8c02ec9d370bbed839cea492e629ed576859c9a611b63391daae5283035", + "src/expression/ast.rs": "17053a852ed2bee7d00d66a4133ce761d0cbb66ea146d628dae764ab8d3f7e85", + "src/expression/canonical.rs": "50cbebff7007862bd5cd6cf8e6c876638a31caf83f656ef8b96a3c621a5f5139", + "src/expression/compile.rs": "ddc385e8c5991fa7aac66c3748a5bd7bde61b8c23caefb6445969bd21a164537", + "src/expression/enumerate.rs": "cd2a6834f61ebfb66d569d9acf7911ef9419b33838751cd6410422926437179a", + "src/expression/evaluate.rs": "f48c751e92395e6479c1cc9769e1f7bfec9c0a17a456baa1248d7a9ce39c0e5e", + "src/expression/mod.rs": "ddd92e2c186571da9587a4192a025a90006ef00c92f1b1150fb2ec8089413778", + "src/expression/parse.rs": "37839a0510c251da1df27df444f36b98021e0a3d70aafe2bab01785d2ddc143c", + "src/expression/report.rs": "d7b6f915b6fa42b51f8679c9398c3ca1a6ee982b2f0abd0e3cbb7f7e79a8937f", + "src/generate.rs": "fa73f18c842ebbe0a8ca8c16249db8c100f0bf9e56f6c7948057d1597f086ae3", + "src/learning/family.rs": "fb752cf4052c6251f54c863f3e91677f5f9339b1aa93c2ef117cdb28059224cf", + "src/learning/inputs.rs": "34aecf2619d72489f6f6b6b7fe86f292c5f09414621f95e9002a34bac92813d3", + "src/learning/learner.rs": "9e4d9feea9e879173448a9c4ee06e273bf6269247b501aa6a329cded2547a15b", + "src/learning/mdl.rs": "5be2da84057c370c083110e5b8af5d76f83e55d82bb5c59623c24736f93d1b68", + "src/learning/mod.rs": "7847b9767f638b4be28c402bfc59a1c593a9ea3632fc733e7ef72dc50307cdb9", + "src/learning/prediction.rs": "33be1a7de4cd9bc8996b5f902c7db4579cf82a3271cec1ed4cd1023bd21ec6cd", + "src/learning/report.rs": "818d3c33659115f95a04658c09052c0024a1669518c31f47b7275be26122f415", + "src/lib.rs": "677dfab8152c1d6131c783bdba5351aa88fd344714168d8d3aa625ea616b0347", + "src/limits.rs": "24a4561f5d087ecbb7408382fb1e4df4b9ba415a570ec757158d3ee573e89d30", + "src/logic/abc.rs": "109e3d7305ae83e5f10ec3895070da5f93f18a97d6eaee446e0428be4320eefc", + "src/logic/blif.rs": "de5a4ae612ea3f22f91026f87ee8d7951cd3a7333147143ef34536b137362cc0", + "src/logic/library.rs": "80528e0ccd5a0e8bdd79d4248bfd21156e286fd4ec9b0c822b0ab54dcd6801b6", + "src/logic/mapped.rs": "47b9e79c83b5ecd0c71b6a4fb8f95758218ce54c05ef7639d2fcafb9f274c09e", + "src/logic/mod.rs": "2e328c6ab8558a6d862f501c65ccd8f6bc62a00fa37d7a6ee1eb1f9be712f847", + "src/logic/report.rs": "3f6f4bf5262ddd25c8817180d264cb1173738e0922e2a0c85d80c43f078a4131", + "src/main.rs": "f3282fa61641df9ee5d79bd7c7940fd38e380cbd76c4f9b023ac699c30f18efa", + "src/metrics.rs": "b42852c6daddbe3de28f64f2b88f8ee2d61f922edd5e6caa67d2e892dca508e4", + "src/netlist.rs": "d33a9d24b943ce3a5a6da90ed5cbd04e527f96cf8fa597395e9698bc666d8e4f", + "src/optimization/equivalence.rs": "98225dd5bd842b0e7f444dde828ae6ca8caa541fcbddee178e822df71e93e2e6", + "src/optimization/mod.rs": "da5f3670763ffb97df72d9592c22aa61d9d4ef5a8389ebd244d29f773b168e63", + "src/optimization/peephole.rs": "b18bb4900607af9d94c8ef58a6399800d29e08dd35afe45e4ca47a78bcedbe69", + "src/optimization/report.rs": "ee1bac46124715e95d3bc7a42a24e0554d279176e6b0d1eb0da304005a746ee1", + "src/optimization/rewrite.rs": "61dae64a0ff2b856c1d803cba89477aee779797c477b77167245419e448f3ff4", + "src/optimization/window.rs": "851d3bfd073a6aeec9e9a4f819528ada5ba52cf7e92b18d7ad851a018fd99906", + "src/optimize.rs": "2c04f4e13af40747dc58256012e252e891c2abd71fc90c798972c85615b2d4f2", + "src/packed.rs": "142195bad7049ad597d7af9f25edc4ed4ed0b3ae557d8e86dca2436f38fd0e0e", + "src/reference.rs": "cc6b881449265c079145e6ec4c539c75892d1d5ca3f3e320a313fef17eb70231", + "src/research/abc_dont_care.rs": "3605a0469553701fdf881957bd4e735d07da205fc38a5bb196a72765a3189901", + "src/research/adapters.rs": "7bdc0d552c53188fbbe3e16c80b3deff59f2db7fbbf184f156238cc3532e7e06", + "src/research/bdd.rs": "5fcc7b4092358e5eb9b42884ec563e7981f5809a61d97756326ea1b2253cd8f9", + "src/research/evolution.rs": "170b37782f3128efa3eb601ff1631989293dd536639e5e23aebd9743d969c762", + "src/research/learner.rs": "5e279f6c9edb33c0331df969251b7279051b45e8ebd2634a4d6781dc04b1ee4e", + "src/research/memory.rs": "842635886b3d4fb177e692ad158943a21db79ebf7a29928f9e3fb2325a2cfd95", + "src/research/mod.rs": "904044f45ded68563ee059225d7475e96cb48befbd4475d5a3c0793abfdf81e9", + "src/research/process.rs": "1933aacf98017cd0ae23212a033455e137e05593d24e56746ff012f14d939ab6", + "src/research/projection.rs": "8bbf83d971ca21f021c19c8de4e0883def2f87203569e93be196d5ddbb0ffa6c", + "src/research/rss.rs": "cadf1ea98898f84d643526d32252ce2eb885c7600b5fd08700b654d9f326fe19", + "src/research/runner.rs": "3c8399b6441340ebc5fe660fd365e6950b8c5920cb3d1ee211116a68b536f7eb", + "src/research/sampling.rs": "4e5efce21174a3c5d6ffe89d83e66883378e1a915cab89d97f39158730cbe5b4", + "src/research/sat_cegis.rs": "807ea94ddb40f4d6f544abd3f0a61db57fdcdef6fb95f9777bfcb91fb373f4a9", + "src/research/tasks.rs": "931625569d9f294503242b1376084f77c0c360d2c2ebf9d54fdac75f907aa2d3", + "src/research/trial.rs": "42ab525b2c5115f03627e3f7476c5716704ec540ff13fc5016dac88d2728c185", + "src/scalar.rs": "e890d2796513e57788ffa4e89906afd3aba0b25e4f6fa0295880628d4f1f3475", + "src/synthesis/certificate.rs": "64b690c979c46d3c17e8a6c5d70806363046ff63ec1a7a23b89951d4284f08c5", + "src/synthesis/cnf.rs": "0e969a5f4175edc2daf778a288cd741afb1517a3615637d01f350d0bc35b0e30", + "src/synthesis/mod.rs": "4e5838a54719eebdffd2cbc025986d862997333b6c487a8cfb2b1721f4b6c49b", + "src/synthesis/problem.rs": "e8a9e27638c53db27fd735ed1cea960dc12f35503afc8fce0cc84992765c36f6", + "src/synthesis/solver.rs": "791a36578d012d9150817f0bd8cd6edb12e6a005e6bded6bcb2dc803980a4c28" + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh new file mode 100755 index 000000000..15cc40f6f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh @@ -0,0 +1,18 @@ +#!/bin/sh +set -eu + +export LC_ALL=C + +search_root=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +mode=${1:---check} + +if [ "$mode" != "--check" ]; then + echo "usage: $0 [--check]" >&2 + exit 2 +fi + +cargo test --locked --manifest-path "$search_root/Cargo.toml" +cargo check --locked --all-targets --manifest-path "$search_root/Cargo.toml" + +echo "Standalone Occam source and hash-rooted release artifacts verified." +echo "The immutable v0.3 matrix and measured v2 matrix are reproduced by the parent repository gates." diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/benchmark.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/benchmark.rs new file mode 100644 index 000000000..47ecfbe8d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/benchmark.rs @@ -0,0 +1,447 @@ +use std::{ + hint::black_box, + process::Command, + time::{Duration, Instant}, +}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + Circuit, CompiledCircuit, Dataset, OccamError, PackedDataset, VerificationMetrics, + pack_dataset, parse_dataset, parse_packed_dataset, verify, verify_compiled_prepacked, + verify_prepacked_interpreted, verify_prepacked_reference, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum BenchmarkBackend { + Scalar, + Packed, + PackedReference, + PackedInterpreted, + Compiled, +} + +impl BenchmarkBackend { + pub fn label(self) -> &'static str { + match self { + Self::Scalar => "scalar", + Self::Packed => "packed", + Self::PackedReference => "packed-reference", + Self::PackedInterpreted => "packed-interpreted", + Self::Compiled => "compiled", + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct TimingStatistics { + pub minimum_ns: u64, + pub mean_ns: f64, + pub median_ns: u64, + pub p95_ns: u64, + pub standard_deviation_ns: f64, + pub median_absolute_deviation_ns: u64, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct BenchmarkReport { + pub schema_version: u32, + pub backend: String, + pub circuit_path: String, + pub dataset_path: String, + pub samples: usize, + pub gates: usize, + pub input_width: usize, + pub output_width: usize, + pub warmup_iterations: usize, + pub measured_iterations: usize, + pub batch_count: usize, + pub raw_iterations_ns: Vec, + pub batch_medians_ns: Vec, + pub measurement_order: String, + pub parse_ns: u64, + pub packing_ns: Option, + pub circuit_parse_ns: u64, + pub scalar_dataset_parse_ns: u64, + pub legacy_pack_ns: u64, + pub direct_packed_parse_ns: u64, + pub compilation_ns: u64, + pub one_shot_ns: u64, + pub scalar_dataset_parse_iterations_ns: Vec, + pub legacy_pack_iterations_ns: Vec, + pub direct_packed_parse_iterations_ns: Vec, + pub compilation_iterations_ns: Vec, + pub scalar_dataset_parse: TimingStatistics, + pub legacy_pack: TimingStatistics, + pub direct_packed_parse: TimingStatistics, + pub compilation: TimingStatistics, + pub evaluation: TimingStatistics, + pub samples_per_second_at_median: f64, + pub gate_evaluations_per_second_at_median: f64, + pub exact_matches: usize, + pub correct_bits: usize, + pub total_bits: usize, + pub rustc: String, + pub operating_system: String, + pub architecture: String, +} + +#[allow(clippy::too_many_arguments)] +pub fn run_benchmark( + backend: BenchmarkBackend, + circuit: &Circuit, + dataset_source: &str, + warmups: usize, + iterations: usize, + batches: usize, + circuit_parse_duration: Duration, + circuit_path: String, + dataset_path: String, +) -> Result { + if iterations == 0 || batches == 0 { + return Err(OccamError::Validation( + "benchmark iterations and batches must be positive".into(), + )); + } + + let (dataset, legacy_packed, first_scalar_parse, first_legacy_pack) = + parse_and_pack_legacy(dataset_source)?; + let (direct_packed, first_direct_parse) = parse_direct(dataset_source)?; + if direct_packed != legacy_packed { + return Err(OccamError::Validation( + "direct packed parser disagrees with scalar parse plus pack".into(), + )); + } + + let (compiled, first_compilation) = compile_circuit(circuit)?; + + let mut scalar_parse_durations = vec![first_scalar_parse]; + let mut legacy_pack_durations = vec![first_legacy_pack]; + let mut direct_parse_durations = vec![first_direct_parse]; + let mut compilation_durations = vec![first_compilation]; + for repetition in 1..5 { + if repetition % 2 == 1 { + let (direct, duration) = parse_direct(dataset_source)?; + black_box(direct); + direct_parse_durations.push(duration); + let (scalar, packed, parse_duration, pack_duration) = + parse_and_pack_legacy(dataset_source)?; + black_box((scalar, packed)); + scalar_parse_durations.push(parse_duration); + legacy_pack_durations.push(pack_duration); + } else { + let (scalar, packed, parse_duration, pack_duration) = + parse_and_pack_legacy(dataset_source)?; + black_box((scalar, packed)); + scalar_parse_durations.push(parse_duration); + legacy_pack_durations.push(pack_duration); + let (direct, duration) = parse_direct(dataset_source)?; + black_box(direct); + direct_parse_durations.push(duration); + } + let (candidate, duration) = compile_circuit(circuit)?; + black_box(candidate); + compilation_durations.push(duration); + } + let scalar_parse_statistics = statistics(&scalar_parse_durations)?; + let legacy_pack_statistics = statistics(&legacy_pack_durations)?; + let direct_parse_statistics = statistics(&direct_parse_durations)?; + let compilation_statistics = statistics(&compilation_durations)?; + let scalar_dataset_parse_duration = Duration::from_nanos(scalar_parse_statistics.median_ns); + let legacy_pack_duration = Duration::from_nanos(legacy_pack_statistics.median_ns); + let direct_packed_parse_duration = Duration::from_nanos(direct_parse_statistics.median_ns); + let compilation_duration = Duration::from_nanos(compilation_statistics.median_ns); + + let scalar_metrics = verify(circuit, &dataset)?; + let interpreted_metrics = verify_prepacked_interpreted(circuit, &direct_packed)?; + let compiled_metrics = verify_compiled_prepacked(&compiled, &direct_packed)?; + if scalar_metrics != interpreted_metrics || scalar_metrics != compiled_metrics { + return Err(OccamError::Validation(format!( + "benchmark preflight mismatch: scalar {scalar_metrics:?}, interpreted \ + {interpreted_metrics:?}, compiled {compiled_metrics:?}" + ))); + } + + let (durations, batch_medians, metrics) = match backend { + BenchmarkBackend::Scalar => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || verify(circuit, &dataset))?; + (durations, medians, metrics) + } + BenchmarkBackend::Packed => { + let compiled = CompiledCircuit::new(circuit)?; + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_compiled_prepacked(&compiled, &direct_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::PackedReference => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_prepacked_reference(circuit, &legacy_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::PackedInterpreted => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_prepacked_interpreted(circuit, &direct_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::Compiled => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_compiled_prepacked(&compiled, &direct_packed) + })?; + (durations, medians, metrics) + } + }; + + let statistics = statistics(&durations)?; + let median_seconds = statistics.median_ns as f64 / 1_000_000_000.0; + let samples_per_second = dataset.samples.len() as f64 / median_seconds; + let gate_evaluations_per_second = + dataset.samples.len() as f64 * circuit.gates.len() as f64 / median_seconds; + let (parse_duration, packing_duration, compile_for_backend) = match backend { + BenchmarkBackend::Scalar => ( + circuit_parse_duration.saturating_add(scalar_dataset_parse_duration), + None, + Duration::ZERO, + ), + BenchmarkBackend::Packed | BenchmarkBackend::Compiled => ( + circuit_parse_duration.saturating_add(direct_packed_parse_duration), + Some(direct_packed_parse_duration.saturating_add(compilation_duration)), + compilation_duration, + ), + BenchmarkBackend::PackedInterpreted => ( + circuit_parse_duration.saturating_add(direct_packed_parse_duration), + Some(direct_packed_parse_duration), + Duration::ZERO, + ), + BenchmarkBackend::PackedReference => ( + circuit_parse_duration.saturating_add(scalar_dataset_parse_duration), + Some(legacy_pack_duration), + legacy_pack_duration, + ), + }; + let one_shot_ns = duration_ns(parse_duration) + .saturating_add(duration_ns(compile_for_backend)) + .saturating_add(statistics.median_ns); + + Ok(BenchmarkReport { + schema_version: 3, + backend: backend.label().into(), + circuit_path, + dataset_path, + samples: dataset.samples.len(), + gates: circuit.gates.len(), + input_width: dataset.input_width, + output_width: dataset.output_width, + warmup_iterations: warmups, + measured_iterations: iterations, + batch_count: batches, + raw_iterations_ns: durations.iter().copied().map(duration_ns).collect(), + batch_medians_ns: batch_medians, + measurement_order: "backend-isolated; invocation order controlled by external driver" + .into(), + parse_ns: duration_ns(parse_duration), + packing_ns: packing_duration.map(duration_ns), + circuit_parse_ns: duration_ns(circuit_parse_duration), + scalar_dataset_parse_ns: duration_ns(scalar_dataset_parse_duration), + legacy_pack_ns: duration_ns(legacy_pack_duration), + direct_packed_parse_ns: duration_ns(direct_packed_parse_duration), + compilation_ns: duration_ns(compilation_duration), + one_shot_ns, + scalar_dataset_parse_iterations_ns: scalar_parse_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + legacy_pack_iterations_ns: legacy_pack_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + direct_packed_parse_iterations_ns: direct_parse_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + compilation_iterations_ns: compilation_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + scalar_dataset_parse: scalar_parse_statistics, + legacy_pack: legacy_pack_statistics, + direct_packed_parse: direct_parse_statistics, + compilation: compilation_statistics, + evaluation: statistics, + samples_per_second_at_median: samples_per_second, + gate_evaluations_per_second_at_median: gate_evaluations_per_second, + exact_matches: metrics.exact_matches, + correct_bits: metrics.correct_bits, + total_bits: metrics.total_bits, + rustc: command_output("rustc", &["--version"]), + operating_system: operating_system(), + architecture: std::env::consts::ARCH.into(), + }) +} + +fn parse_and_pack_legacy( + source: &str, +) -> Result<(Dataset, PackedDataset, Duration, Duration), OccamError> { + let parse_started = Instant::now(); + let dataset = parse_dataset(source)?; + let parse_duration = parse_started.elapsed(); + let pack_started = Instant::now(); + let packed = pack_dataset(&dataset)?; + let pack_duration = pack_started.elapsed(); + Ok((dataset, packed, parse_duration, pack_duration)) +} + +fn parse_direct(source: &str) -> Result<(PackedDataset, Duration), OccamError> { + let started = Instant::now(); + let packed = parse_packed_dataset(source)?; + Ok((packed, started.elapsed())) +} + +fn compile_circuit(circuit: &Circuit) -> Result<(CompiledCircuit, Duration), OccamError> { + let started = Instant::now(); + let compiled = CompiledCircuit::new(circuit)?; + Ok((compiled, started.elapsed())) +} + +fn measure_batches( + batches: usize, + warmups: usize, + iterations: usize, + mut operation: impl FnMut() -> Result, +) -> Result<(Vec, Vec, VerificationMetrics), OccamError> { + let capacity = batches + .checked_mul(iterations) + .ok_or_else(|| OccamError::Validation("benchmark size overflow".into()))?; + let mut durations = Vec::with_capacity(capacity); + let mut medians = Vec::with_capacity(batches); + let mut last_metrics = None; + for _ in 0..batches { + for _ in 0..warmups { + black_box(operation()?); + } + let batch_start = durations.len(); + for _ in 0..iterations { + let started = Instant::now(); + let metrics = operation()?; + durations.push(started.elapsed()); + black_box(&metrics); + last_metrics = Some(metrics); + } + medians.push(statistics(&durations[batch_start..])?.median_ns); + } + Ok(( + durations, + medians, + last_metrics.expect("iterations and batches are non-zero"), + )) +} + +fn statistics(durations: &[Duration]) -> Result { + if durations.is_empty() { + return Err(OccamError::Validation( + "cannot calculate statistics without measurements".into(), + )); + } + let mut nanos: Vec<_> = durations.iter().copied().map(duration_ns).collect(); + nanos.sort_unstable(); + let total: u128 = nanos.iter().map(|value| u128::from(*value)).sum(); + let median = median_sorted(&nanos); + let p95_index = (nanos.len() * 95).div_ceil(100).saturating_sub(1); + let mean = total as f64 / nanos.len() as f64; + let variance = nanos + .iter() + .map(|value| { + let delta = *value as f64 - mean; + delta * delta + }) + .sum::() + / nanos.len() as f64; + let mut deviations: Vec<_> = nanos.iter().map(|value| value.abs_diff(median)).collect(); + deviations.sort_unstable(); + Ok(TimingStatistics { + minimum_ns: nanos[0], + mean_ns: mean, + median_ns: median, + p95_ns: nanos[p95_index], + standard_deviation_ns: variance.sqrt(), + median_absolute_deviation_ns: median_sorted(&deviations), + }) +} + +fn median_sorted(values: &[u64]) -> u64 { + if values.len().is_multiple_of(2) { + let upper = u128::from(values[values.len() / 2]); + let lower = u128::from(values[values.len() / 2 - 1]); + ((lower + upper) / 2).try_into().unwrap_or(u64::MAX) + } else { + values[values.len() / 2] + } +} + +fn duration_ns(duration: Duration) -> u64 { + duration.as_nanos().try_into().unwrap_or(u64::MAX) +} + +fn command_output(program: &str, arguments: &[&str]) -> String { + Command::new(program) + .args(arguments) + .output() + .ok() + .filter(|output| output.status.success()) + .map(|output| String::from_utf8_lossy(&output.stdout).trim().to_owned()) + .unwrap_or_else(|| "unknown".into()) +} + +fn operating_system() -> String { + if cfg!(target_os = "macos") { + let version = command_output("sw_vers", &["-productVersion"]); + format!("macOS {version}") + } else { + format!( + "{} {}", + std::env::consts::OS, + command_output("uname", &["-r"]) + ) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn calculates_known_statistics() { + let values = [1, 9, 3, 7, 5].map(Duration::from_nanos).to_vec(); + let result = statistics(&values).unwrap(); + assert_eq!(result.minimum_ns, 1); + assert_eq!(result.mean_ns, 5.0); + assert_eq!(result.median_ns, 5); + assert_eq!(result.p95_ns, 9); + assert_eq!(result.standard_deviation_ns, 8.0f64.sqrt()); + assert_eq!(result.median_absolute_deviation_ns, 2); + } + + #[test] + fn rejects_empty_statistics() { + assert!(statistics(&[]).is_err()); + } + + #[test] + fn averages_middle_values_for_even_sample_count() { + let values = [1, 3, 7, 9].map(Duration::from_nanos).to_vec(); + let result = statistics(&values).unwrap(); + assert_eq!(result.median_ns, 5); + assert_eq!(result.median_absolute_deviation_ns, 3); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/bin/tool_audit.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/bin/tool_audit.rs new file mode 100644 index 000000000..e18e12741 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/bin/tool_audit.rs @@ -0,0 +1,547 @@ +use std::{ + fs::{self, File}, + path::{Path, PathBuf}, + process::{Command, Stdio}, + thread, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +use clap::Parser; +use occam71_rust::{ + DEFAULT_LIMITS, OccamError, compare_circuits_exhaustively, parse_mapped_blif, parse_netlist, + sha256_hex, +}; +use serde::Serialize; + +#[derive(Debug, Parser)] +#[command(name = "tool-audit")] +struct Cli { + #[arg(long)] + yosys: PathBuf, + #[arg(long)] + yosys_abc: PathBuf, + #[arg(long)] + espresso: PathBuf, + #[arg(long)] + espresso_source_commit: String, + #[arg(long)] + output: PathBuf, +} + +#[derive(Serialize)] +struct Audit { + schema_version: u32, + tools: Vec, +} + +#[derive(Serialize)] +struct ToolRecord { + tool: String, + version_output: String, + executable_sha256: String, + command: Vec, + input_sha256: String, + output_sha256: String, + output_normalization: String, + observed_matches: usize, + observed_total: usize, + full_domain_mismatches: Option, + full_domain_cases: Option, +} + +fn main() { + if let Err(error) = run() { + eprintln!("error: {error}"); + std::process::exit(1); + } +} + +fn run() -> Result<(), OccamError> { + let cli = Cli::parse(); + for (name, path) in [ + ("yosys", &cli.yosys), + ("yosys-abc", &cli.yosys_abc), + ("espresso", &cli.espresso), + ] { + if !path.is_file() { + return Err(OccamError::Validation(format!( + "{name} executable is missing: {}", + path.display() + ))); + } + } + if cli.espresso_source_commit.len() != 40 + || !cli + .espresso_source_commit + .bytes() + .all(|byte| byte.is_ascii_hexdigit()) + { + return Err(OccamError::Validation( + "Espresso source commit must be a forty-digit hexadecimal hash".into(), + )); + } + + let temporary = AuditDirectory::new()?; + let yosys = audit_yosys(&cli.yosys, &temporary.path)?; + let abc = audit_yosys_abc(&cli.yosys_abc, &temporary.path)?; + let espresso = audit_espresso(&cli.espresso, &cli.espresso_source_commit, &temporary.path)?; + let audit = Audit { + schema_version: 2, + tools: vec![yosys, abc, espresso], + }; + let encoded = serde_json::to_string_pretty(&audit) + .map(|value| format!("{value}\n")) + .map_err(|error| OccamError::Validation(format!("audit JSON encoding failed: {error}")))?; + write_atomic(&cli.output, encoded.as_bytes()) +} + +fn audit_yosys(program: &Path, directory: &Path) -> Result { + let version = run_command(program, &["-V"], directory, "yosys-version")?; + require_success("yosys version", &version)?; + let input = "\ +module top(input a, input b, output o); + assign o = a ^ b; +endmodule +"; + fs::write(directory.join("fixture.v"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("fixture.v"), + source, + })?; + let script = "read_verilog fixture.v; hierarchy -top top; proc; opt; techmap; opt; abc; clean; write_blif yosys.blif"; + let flow = run_command(program, &["-q", "-p", script], directory, "yosys-flow")?; + require_success("yosys synthesis", &flow)?; + let output = read_bounded(&directory.join("yosys.blif"))?; + let mapped = + parse_mapped_blif(std::str::from_utf8(&output).map_err(|error| { + OccamError::Validation(format!("Yosys BLIF is not UTF-8: {error}")) + })?)?; + let candidate = parse_netlist(&mapped.into_official_netlist()?)?; + let reference = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n")?; + let (cases, mismatches) = + compare_circuits_exhaustively(&reference, &candidate, 8, &DEFAULT_LIMITS)?; + if mismatches != 0 { + return Err(OccamError::Validation(format!( + "Rust rejected Yosys output on {mismatches}/{cases} full-domain rows" + ))); + } + Ok(ToolRecord { + tool: "yosys".into(), + version_output: bounded_version(&version), + executable_sha256: executable_hash(program)?, + command: vec!["yosys".into(), "-q".into(), "-p".into(), script.into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&output), + output_normalization: "none".into(), + observed_matches: cases - mismatches, + observed_total: cases, + full_domain_mismatches: Some(mismatches), + full_domain_cases: Some(cases), + }) +} + +fn audit_yosys_abc(program: &Path, directory: &Path) -> Result { + let version = run_command(program, &["-q", "version"], directory, "abc-version")?; + require_success("yosys ABC version", &version)?; + let input = "\ +.model reference +.inputs i0 i1 +.outputs o0 +.names i0 i1 n0 +10 1 +01 1 +.names n0 o0 +1 1 +.end +"; + fs::write(directory.join("abc-input.blif"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("abc-input.blif"), + source, + })?; + let command = "read_blif abc-input.blif; strash; dc2; write_blif abc-output.blif; cec abc-input.blif abc-output.blif"; + let flow = run_command(program, &["-q", command], directory, "abc-flow")?; + require_success("yosys ABC optimization", &flow)?; + let output = read_bounded(&directory.join("abc-output.blif"))?; + let output_source = std::str::from_utf8(&output) + .map_err(|error| OccamError::Validation(format!("Yosys ABC BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(output_source)?; + let candidate = parse_netlist(&mapped.into_official_netlist()?)?; + let reference = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n")?; + let (cases, mismatches) = + compare_circuits_exhaustively(&reference, &candidate, 8, &DEFAULT_LIMITS)?; + if mismatches != 0 { + return Err(OccamError::Validation(format!( + "Rust rejected Yosys ABC output on {mismatches}/{cases} full-domain rows" + ))); + } + Ok(ToolRecord { + tool: "yosys-abc".into(), + version_output: bounded_version(&version), + executable_sha256: executable_hash(program)?, + command: vec!["yosys-abc".into(), "-q".into(), command.into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&normalize_abc_blif_for_hash(output_source)?), + output_normalization: "strip one leading ABC timestamp banner comment".into(), + observed_matches: cases - mismatches, + observed_total: cases, + full_domain_mismatches: Some(mismatches), + full_domain_cases: Some(cases), + }) +} + +fn audit_espresso( + program: &Path, + source_commit: &str, + directory: &Path, +) -> Result { + let input = "\ +.i 2 +.o 1 +.type fd +00 0 +01 1 +1- - +.e +"; + fs::write(directory.join("partial.pla"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("partial.pla"), + source, + })?; + let flow = run_command_with_stdin( + program, + &[], + directory, + "espresso-flow", + Some(&directory.join("partial.pla")), + )?; + require_success("Espresso minimization", &flow)?; + let output = flow.stdout; + let pla = + Pla::parse(std::str::from_utf8(&output).map_err(|error| { + OccamError::Validation(format!("Espresso PLA is not UTF-8: {error}")) + })?)?; + let observed = [([false, false], [false]), ([false, true], [true])]; + let matches = observed + .iter() + .filter(|(input, expected)| pla.evaluate(input) == Some(expected.to_vec())) + .count(); + if matches != observed.len() { + return Err(OccamError::Validation(format!( + "Rust parsed Espresso output fits only {matches}/{} observed rows", + observed.len() + ))); + } + Ok(ToolRecord { + tool: "espresso".into(), + version_output: format!( + "CHIPS Alliance Espresso source commit {} (executable exposes no version flag)", + source_commit.to_ascii_lowercase() + ), + executable_sha256: executable_hash(program)?, + command: vec!["espresso".into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&output), + output_normalization: "none".into(), + observed_matches: matches, + observed_total: observed.len(), + full_domain_mismatches: None, + full_domain_cases: None, + }) +} + +fn normalize_abc_blif_for_hash(source: &str) -> Result, OccamError> { + let (banner, body) = source.split_once('\n').ok_or_else(|| { + OccamError::Validation("Yosys ABC BLIF is missing its banner line".into()) + })?; + if !banner.starts_with("# Benchmark ") || !banner.contains(" written by ABC on ") { + return Err(OccamError::Validation(format!( + "unexpected Yosys ABC BLIF banner: {banner}" + ))); + } + Ok(body.as_bytes().to_vec()) +} + +struct Pla { + input_width: usize, + output_width: usize, + cubes: Vec<(Vec, Vec)>, +} + +impl Pla { + fn parse(source: &str) -> Result { + let mut input_width = None; + let mut output_width = None; + let mut cubes = Vec::new(); + for (index, raw) in source.lines().enumerate() { + let line = raw.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + if let Some(value) = line.strip_prefix(".i ") { + input_width = Some(parse_width(value, index + 1)?); + } else if let Some(value) = line.strip_prefix(".o ") { + output_width = Some(parse_width(value, index + 1)?); + } else if line.starts_with('.') { + if !matches!( + line.split_whitespace().next(), + Some(".type" | ".p" | ".ilb" | ".ob" | ".e") + ) { + return Err(OccamError::Validation(format!( + "unsupported PLA directive at line {}: {line}", + index + 1 + ))); + } + } else { + let fields = line.split_whitespace().collect::>(); + if fields.len() != 2 { + return Err(OccamError::Validation(format!( + "invalid PLA cube at line {}", + index + 1 + ))); + } + cubes.push((fields[0].as_bytes().to_vec(), fields[1].as_bytes().to_vec())); + } + } + let input_width = input_width + .ok_or_else(|| OccamError::Validation("Espresso PLA is missing .i".into()))?; + let output_width = output_width + .ok_or_else(|| OccamError::Validation("Espresso PLA is missing .o".into()))?; + for (inputs, outputs) in &cubes { + if inputs.len() != input_width + || outputs.len() != output_width + || !inputs.iter().all(|byte| matches!(byte, b'0' | b'1' | b'-')) + || !outputs + .iter() + .all(|byte| matches!(byte, b'0' | b'1' | b'-')) + { + return Err(OccamError::Validation( + "Espresso PLA contains an invalid cube width or symbol".into(), + )); + } + } + Ok(Self { + input_width, + output_width, + cubes, + }) + } + + fn evaluate(&self, input: &[bool]) -> Option> { + if input.len() != self.input_width { + return None; + } + let matching = self + .cubes + .iter() + .filter(|(cube, _)| { + cube.iter() + .zip(input) + .all(|(symbol, bit)| *symbol == b'-' || (*symbol == b'1') == *bit) + }) + .collect::>(); + let mut result = Vec::with_capacity(self.output_width); + for output in 0..self.output_width { + if matching.iter().any(|(_, values)| values[output] == b'1') { + result.push(true); + } else if matching.iter().any(|(_, values)| values[output] == b'-') { + return None; + } else { + result.push(false); + } + } + Some(result) + } +} + +fn parse_width(value: &str, line: usize) -> Result { + value + .trim() + .parse::() + .map_err(|_| OccamError::Validation(format!("invalid PLA width at line {line}: {value}"))) +} + +struct CommandOutput { + success: bool, + stdout: Vec, + stderr: Vec, +} + +fn run_command( + program: &Path, + arguments: &[&str], + directory: &Path, + label: &str, +) -> Result { + run_command_with_stdin(program, arguments, directory, label, None) +} + +fn run_command_with_stdin( + program: &Path, + arguments: &[&str], + directory: &Path, + label: &str, + stdin_path: Option<&Path>, +) -> Result { + let stdout_path = directory.join(format!("{label}.stdout")); + let stderr_path = directory.join(format!("{label}.stderr")); + let stdout = File::create(&stdout_path).map_err(|source| OccamError::WriteFile { + path: stdout_path.clone(), + source, + })?; + let stderr = File::create(&stderr_path).map_err(|source| OccamError::WriteFile { + path: stderr_path.clone(), + source, + })?; + let stdin = match stdin_path { + Some(path) => Stdio::from(File::open(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?), + None => Stdio::null(), + }; + let mut child = Command::new(program) + .args(arguments) + .current_dir(directory) + .stdin(stdin) + .stdout(Stdio::from(stdout)) + .stderr(Stdio::from(stderr)) + .spawn() + .map_err(|error| { + OccamError::Validation(format!("failed to spawn {}: {error}", program.display())) + })?; + let started = Instant::now(); + let status = loop { + if let Some(status) = child + .try_wait() + .map_err(|error| OccamError::Validation(format!("tool wait failed: {error}")))? + { + break status; + } + if started.elapsed() >= Duration::from_secs(30) { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::Validation(format!( + "{label} exceeded the 30-second audit timeout" + ))); + } + thread::sleep(Duration::from_millis(10)); + }; + Ok(CommandOutput { + success: status.success(), + stdout: read_bounded(&stdout_path)?, + stderr: read_bounded(&stderr_path)?, + }) +} + +fn require_success(label: &str, output: &CommandOutput) -> Result<(), OccamError> { + if output.success { + return Ok(()); + } + Err(OccamError::Validation(format!( + "{label} failed: {}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ))) +} + +fn bounded_version(output: &CommandOutput) -> String { + let combined = format!( + "{}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + combined.chars().take(4_096).collect::() +} + +fn read_bounded(path: &Path) -> Result, OccamError> { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + if metadata.len() > 4 * 1024 * 1024 { + return Err(OccamError::ResourceLimit { + resource: "tool audit output bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: 4 * 1024 * 1024, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn executable_hash(path: &Path) -> Result { + fs::read(path) + .map(|bytes| sha256_hex(&bytes)) + .map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn write_atomic(path: &Path, bytes: &[u8]) -> Result<(), OccamError> { + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, bytes).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +struct AuditDirectory { + path: PathBuf, +} + +impl AuditDirectory { + fn new() -> Result { + let timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_err(|error| OccamError::Validation(format!("system clock error: {error}")))? + .as_nanos(); + let path = std::env::temp_dir().join(format!( + "occam71-tool-audit-{}-{timestamp}", + std::process::id() + )); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for AuditDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} + +#[cfg(test)] +mod tests { + use super::normalize_abc_blif_for_hash; + + #[test] + fn abc_hash_normalization_removes_only_the_timestamp_banner() { + let body = ".model reference\n.inputs i0\n.outputs o0\n.end\n"; + let first = format!("# Benchmark \"reference\" written by ABC on Monday\n{body}"); + let second = format!("# Benchmark \"reference\" written by ABC on Tuesday\n{body}"); + assert_eq!( + normalize_abc_blif_for_hash(&first).unwrap(), + body.as_bytes() + ); + assert_eq!( + normalize_abc_blif_for_hash(&first).unwrap(), + normalize_abc_blif_for_hash(&second).unwrap() + ); + assert!(normalize_abc_blif_for_hash(body).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/circuit.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/circuit.rs new file mode 100644 index 000000000..4013068e2 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/circuit.rs @@ -0,0 +1,63 @@ +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum GateOp { + And, + Or, + Xor, + Nand, + Nor, + Xnor, +} + +impl GateOp { + pub fn apply(self, lhs: bool, rhs: bool) -> bool { + match self { + Self::And => lhs & rhs, + Self::Or => lhs | rhs, + Self::Xor => lhs ^ rhs, + Self::Nand => !(lhs & rhs), + Self::Nor => !(lhs | rhs), + Self::Xnor => !(lhs ^ rhs), + } + } + + pub fn apply_word(self, lhs: u64, rhs: u64) -> u64 { + match self { + Self::And => lhs & rhs, + Self::Or => lhs | rhs, + Self::Xor => lhs ^ rhs, + Self::Nand => !(lhs & rhs), + Self::Nor => !(lhs | rhs), + Self::Xnor => !(lhs ^ rhs), + } + } +} + +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub enum Source { + Input(usize), + Wire(usize), +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub struct Operand { + pub source: Source, + pub inverted: bool, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Gate { + pub output: usize, + pub op: GateOp, + pub lhs: Operand, + pub rhs: Operand, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Circuit { + pub input_count: usize, + pub wire_count: usize, + pub gates: Vec, + pub outputs: Vec, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/compiled.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/compiled.rs new file mode 100644 index 000000000..dac908457 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/compiled.rs @@ -0,0 +1,280 @@ +use crate::{ + Circuit, DEFAULT_LIMITS, GateOp, OccamError, Operand, PackedDataset, ResourceLimits, Source, + VerificationMetrics, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CompiledOperand { + column: usize, + inversion_mask: u64, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CompiledGate { + op: GateOp, + lhs: CompiledOperand, + rhs: CompiledOperand, + output_column: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct CompiledCircuit { + input_count: usize, + gate_count: usize, + output_count: usize, + column_count: usize, + gates: Vec, + outputs: Vec, +} + +impl CompiledCircuit { + pub fn new(circuit: &Circuit) -> Result { + Self::new_with_limits(circuit, &DEFAULT_LIMITS) + } + + pub fn new_with_limits(circuit: &Circuit, limits: &ResourceLimits) -> Result { + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + let column_count = checked_add( + circuit.input_count, + circuit.wire_count, + "compiled circuit column count", + )?; + let mut gates = Vec::new(); + gates + .try_reserve_exact(circuit.gates.len()) + .map_err(|error| { + OccamError::Validation(format!("cannot allocate compiled gates: {error}")) + })?; + for (gate_index, gate) in circuit.gates.iter().enumerate() { + if gate.output != gate_index { + return Err(OccamError::Validation(format!( + "gate {gate_index} writes non-dense wire {}", + gate.output + ))); + } + gates.push(CompiledGate { + op: gate.op, + lhs: compile_operand(gate.lhs, circuit.input_count, gate_index)?, + rhs: compile_operand(gate.rhs, circuit.input_count, gate_index)?, + output_column: checked_add( + circuit.input_count, + gate.output, + "compiled gate output column", + )?, + }); + } + let outputs = circuit + .outputs + .iter() + .map(|operand| compile_operand(*operand, circuit.input_count, circuit.wire_count)) + .collect::, _>>()?; + Ok(Self { + input_count: circuit.input_count, + gate_count: circuit.gates.len(), + output_count: circuit.outputs.len(), + column_count, + gates, + outputs, + }) + } + + pub fn input_count(&self) -> usize { + self.input_count + } + + pub fn gate_count(&self) -> usize { + self.gate_count + } + + pub fn output_count(&self) -> usize { + self.output_count + } +} + +fn compile_operand( + operand: Operand, + input_count: usize, + available_wires: usize, +) -> Result { + let column = match operand.source { + Source::Input(index) if index < input_count => index, + Source::Input(index) => { + return Err(OccamError::Validation(format!( + "input column {index} is out of range for {input_count} inputs" + ))); + } + Source::Wire(index) if index < available_wires => { + checked_add(input_count, index, "compiled wire operand column")? + } + Source::Wire(index) => { + return Err(OccamError::Validation(format!( + "wire column {index} is unavailable with {available_wires} prior wires" + ))); + } + }; + Ok(CompiledOperand { + column, + inversion_mask: if operand.inverted { u64::MAX } else { 0 }, + }) +} + +pub fn verify_compiled_prepacked( + circuit: &CompiledCircuit, + dataset: &PackedDataset, +) -> Result { + verify_compiled_prepacked_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_compiled_prepacked_with_limits( + circuit: &CompiledCircuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != dataset.input_width() { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match compiled circuit inputs {}", + dataset.input_width(), + circuit.input_count + ))); + } + if circuit.output_count != dataset.output_width() { + return Err(OccamError::Validation(format!( + "compiled circuit has {} outputs, dataset has {}", + circuit.output_count, + dataset.output_width() + ))); + } + limits.require( + "dataset samples", + dataset.sample_count(), + limits.max_samples, + )?; + let value_word_count = checked_mul( + circuit.column_count, + dataset.block_count(), + "compiled value word count", + )?; + limits.require( + "compiled value words", + value_word_count, + limits.max_packed_words, + )?; + let mut values = zeroed_words(value_word_count, "compiled values")?; + for input_index in 0..circuit.input_count { + let source = dataset.input_column(input_index).ok_or_else(|| { + OccamError::Validation(format!("packed input column {input_index} is missing")) + })?; + let start = checked_mul( + input_index, + dataset.block_count(), + "compiled input column offset", + )?; + let end = checked_add(start, dataset.block_count(), "compiled input column end")?; + values[start..end].copy_from_slice(source); + } + + for gate in &circuit.gates { + let lhs_start = checked_mul( + gate.lhs.column, + dataset.block_count(), + "compiled left operand offset", + )?; + let rhs_start = checked_mul( + gate.rhs.column, + dataset.block_count(), + "compiled right operand offset", + )?; + let output_start = checked_mul( + gate.output_column, + dataset.block_count(), + "compiled output offset", + )?; + for block in 0..dataset.block_count() { + let lhs = values[lhs_start + block] ^ gate.lhs.inversion_mask; + let rhs = values[rhs_start + block] ^ gate.rhs.inversion_mask; + values[output_start + block] = gate.op.apply_word(lhs, rhs); + } + } + + let mut mismatches = zeroed_words(dataset.block_count(), "compiled mismatch blocks")?; + let mut correct_bits = 0usize; + for (output_index, output) in circuit.outputs.iter().enumerate() { + let expected = dataset.expected_column(output_index).ok_or_else(|| { + OccamError::Validation(format!("packed output column {output_index} is missing")) + })?; + let output_start = checked_mul( + output.column, + dataset.block_count(), + "compiled result column offset", + )?; + for block in 0..dataset.block_count() { + let mask = dataset.valid_mask(block); + let predicted = values[output_start + block] ^ output.inversion_mask; + let different = (predicted ^ expected[block]) & mask; + correct_bits = checked_add( + correct_bits, + ((!different) & mask).count_ones() as usize, + "compiled correct bit count", + )?; + mismatches[block] |= different; + } + } + let exact_matches = mismatches + .iter() + .enumerate() + .map(|(block, different)| { + let mask = dataset.valid_mask(block); + (mask.count_ones() - (different & mask).count_ones()) as usize + }) + .sum(); + Ok(VerificationMetrics { + samples: dataset.sample_count(), + gate_count: circuit.gate_count, + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.sample_count(), + dataset.output_width(), + "compiled verification bit count", + )?, + }) +} + +fn zeroed_words(count: usize, context: &str) -> Result, OccamError> { + let mut words = Vec::new(); + words.try_reserve_exact(count).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate {context} ({count} words): {error}" + )) + })?; + words.resize(count, 0); + Ok(words) +} + +#[cfg(test)] +mod tests { + use crate::{parse_netlist, ripple_carry_adder}; + + use super::*; + + #[test] + fn rejects_non_dense_and_forward_wire_references() { + let mut circuit = parse_netlist(&ripple_carry_adder(2).unwrap()).unwrap(); + circuit.gates[0].output = 1; + assert!(CompiledCircuit::new(&circuit).is_err()); + + let mut circuit = parse_netlist(&ripple_carry_adder(2).unwrap()).unwrap(); + circuit.gates[0].lhs.source = Source::Wire(0); + assert!(CompiledCircuit::new(&circuit).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset.rs new file mode 100644 index 000000000..23f352291 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset.rs @@ -0,0 +1,146 @@ +use crate::{DEFAULT_LIMITS, OccamError, ResourceLimits, dataset_scan::scan_dataset}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct Sample { + pub input: Vec, + pub expected: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct Dataset { + pub input_width: usize, + pub output_width: usize, + pub samples: Vec, +} + +pub fn parse_dataset(source: &str) -> Result { + parse_dataset_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_dataset_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + let mut samples = Vec::new(); + let shape = scan_dataset(source.as_bytes(), limits, |_line, input, expected| { + samples.push(Sample { + input: input.iter().map(|value| *value == b'1').collect(), + expected: expected.iter().map(|value| *value == b'1').collect(), + }); + Ok(()) + })?; + Ok(Dataset { + input_width: shape.input_width, + output_width: shape.output_width, + samples, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_and_preserves_character_order() { + let dataset = parse_dataset("input,output\n1010,011\n").unwrap(); + assert_eq!(dataset.input_width, 4); + assert_eq!(dataset.output_width, 3); + assert_eq!(dataset.samples[0].input, vec![true, false, true, false]); + assert_eq!(dataset.samples[0].expected, vec![false, true, true]); + } + + #[test] + fn rejects_bad_header() { + assert!( + parse_dataset("x,y\n0,1") + .unwrap_err() + .to_string() + .contains("header") + ); + } + + #[test] + fn rejects_non_bits() { + assert!( + parse_dataset("input,output\n0x,1") + .unwrap_err() + .to_string() + .contains("non-bit") + ); + } + + #[test] + fn rejects_wrong_field_count() { + assert!(parse_dataset("input,output\n0").is_err()); + assert!(parse_dataset("input,output\n0,1,1").is_err()); + } + + #[test] + fn rejects_inconsistent_widths() { + assert!(parse_dataset("input,output\n00,1\n0,1").is_err()); + assert!(parse_dataset("input,output\n00,1\n00,11").is_err()); + } + + #[test] + fn rejects_empty_dataset() { + assert!(parse_dataset("input,output\n").is_err()); + } + + #[test] + fn accepts_crlf_and_blank_lines() { + let dataset = parse_dataset("input,output\r\n\r\n 01,10 \r\n\r\n11,00\r\n").unwrap(); + assert_eq!(dataset.input_width, 2); + assert_eq!(dataset.output_width, 2); + assert_eq!(dataset.samples.len(), 2); + } + + #[test] + fn rejects_empty_bitstrings() { + assert!( + parse_dataset("input,output\n,1") + .unwrap_err() + .to_string() + .contains("non-empty") + ); + assert!( + parse_dataset("input,output\n1,") + .unwrap_err() + .to_string() + .contains("non-empty") + ); + } + + #[test] + fn enforces_width_sample_and_source_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_input_width = 1; + assert!(matches!( + parse_dataset_with_limits("input,output\n00,1", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset input width", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + parse_dataset_with_limits("input,output\n0,1\n1,0", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset samples", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_dataset_with_limits("input,output\n0,1", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset_scan.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset_scan.rs new file mode 100644 index 000000000..ddf1c0cd8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/dataset_scan.rs @@ -0,0 +1,133 @@ +use crate::{ + OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub(crate) struct DatasetShape { + pub input_width: usize, + pub output_width: usize, + pub sample_count: usize, +} + +pub(crate) fn scan_dataset( + source: &[u8], + limits: &ResourceLimits, + mut visit_row: impl FnMut(usize, &[u8], &[u8]) -> Result<(), OccamError>, +) -> Result { + limits.require( + "dataset source bytes", + source.len(), + limits.max_source_bytes, + )?; + if source.is_empty() { + return Err(OccamError::Validation("dataset is empty".into())); + } + let mut lines = source.split(|byte| *byte == b'\n'); + let header = trim_ascii(lines.next().unwrap_or_default()); + if header != b"input,output" { + return Err(OccamError::parse( + "dataset", + 1, + format!( + "expected header input,output; got {}", + String::from_utf8_lossy(header) + ), + )); + } + + let mut widths = None; + let mut sample_count = 0usize; + for (index, raw_line) in lines.enumerate() { + let line_number = index + 2; + let line = trim_ascii(raw_line); + if line.is_empty() { + continue; + } + let mut fields = line.split(|byte| *byte == b','); + let input = fields.next().unwrap_or_default(); + let output = fields.next().ok_or_else(|| { + OccamError::parse("dataset", line_number, "expected exactly two CSV fields") + })?; + if fields.next().is_some() { + return Err(OccamError::parse( + "dataset", + line_number, + "expected exactly two CSV fields", + )); + } + validate_bits(input, line_number, "input")?; + validate_bits(output, line_number, "output")?; + let row_widths = (input.len(), output.len()); + if row_widths.0 == 0 || row_widths.1 == 0 { + return Err(OccamError::parse( + "dataset", + line_number, + "input and output bitstrings must be non-empty", + )); + } + if let Some(expected_widths) = widths { + if row_widths != expected_widths { + return Err(OccamError::parse( + "dataset", + line_number, + format!( + "inconsistent widths: expected input {}, output {}; got input {}, output {}", + expected_widths.0, expected_widths.1, row_widths.0, row_widths.1 + ), + )); + } + } else { + limits.require("dataset input width", row_widths.0, limits.max_input_width)?; + limits.require( + "dataset output width", + row_widths.1, + limits.max_output_width, + )?; + widths = Some(row_widths); + } + let next_sample_count = checked_add(sample_count, 1, "dataset sample count")?; + limits.require("dataset samples", next_sample_count, limits.max_samples)?; + let row_bits = checked_add(row_widths.0, row_widths.1, "dataset bits per sample")?; + let dataset_bits = checked_mul(row_bits, next_sample_count, "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + visit_row(line_number, input, output)?; + sample_count = next_sample_count; + } + + let (input_width, output_width) = + widths.ok_or_else(|| OccamError::Validation("dataset has no samples".into()))?; + Ok(DatasetShape { + input_width, + output_width, + sample_count, + }) +} + +fn trim_ascii(mut value: &[u8]) -> &[u8] { + while value.first().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[1..]; + } + while value.last().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[..value.len() - 1]; + } + value +} + +fn validate_bits(value: &[u8], line: usize, field: &str) -> Result<(), OccamError> { + for byte in value { + if *byte != b'0' && *byte != b'1' { + let invalid = if byte.is_ascii() { + format!("character {:?}", char::from(*byte)) + } else { + format!("byte 0x{byte:02x}") + }; + return Err(OccamError::parse( + "dataset", + line, + format!("{field} contains non-bit {invalid}"), + )); + } + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/error.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/error.rs new file mode 100644 index 000000000..51d844899 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/error.rs @@ -0,0 +1,48 @@ +use std::path::PathBuf; + +#[derive(Debug, thiserror::Error)] +pub enum OccamError { + #[error("{kind} parse error on line {line}: {message}")] + Parse { + kind: &'static str, + line: usize, + message: String, + }, + + #[error("{0}")] + Validation(String), + + #[error("{resource} resource limit exceeded: requested {requested}, limit {limit}")] + ResourceLimit { + resource: &'static str, + requested: usize, + limit: usize, + }, + + #[error("size arithmetic overflow while calculating {context}")] + ArithmeticOverflow { context: &'static str }, + + #[error("failed to read {path}: {source}")] + ReadFile { + path: PathBuf, + #[source] + source: std::io::Error, + }, + + #[error("failed to write {path}: {source}")] + WriteFile { + path: PathBuf, + #[source] + source: std::io::Error, + }, +} + +impl OccamError { + pub(crate) fn parse(kind: &'static str, line: usize, message: impl Into) -> Self { + Self::Parse { + kind, + line, + message: message.into(), + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/ast.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/ast.rs new file mode 100644 index 000000000..903b44c00 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/ast.rs @@ -0,0 +1,134 @@ +use serde::{Deserialize, Serialize}; + +use crate::OccamError; + +const MAX_OPERAND_BITS: usize = 31; +const MAX_OUTPUT_BITS: usize = 63; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum BinaryOp { + Add, + Subtract, + AbsDiff, + Multiply, + BitXor, + BitAnd, + BitOr, + Min, + Max, +} + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(tag = "op", content = "args", rename_all = "kebab-case")] +pub enum Expr { + X, + Y, + Constant(u64), + Square(Box), + ShiftLeft { + value: Box, + amount: u8, + }, + Binary { + op: BinaryOp, + lhs: Box, + rhs: Box, + }, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ExprSemantics { + pub operand_bits: usize, + pub output_bits: usize, +} + +impl ExprSemantics { + pub fn new(operand_bits: usize, output_bits: usize) -> Result { + if !(1..=MAX_OPERAND_BITS).contains(&operand_bits) { + return Err(OccamError::Validation(format!( + "expression operand width must be in 1..={MAX_OPERAND_BITS}, got {operand_bits}" + ))); + } + if !(1..=MAX_OUTPUT_BITS).contains(&output_bits) { + return Err(OccamError::Validation(format!( + "expression output width must be in 1..={MAX_OUTPUT_BITS}, got {output_bits}" + ))); + } + Ok(Self { + operand_bits, + output_bits, + }) + } + + pub(crate) fn operand_mask(self) -> u64 { + (1u64 << self.operand_bits) - 1 + } + + pub(crate) fn output_mask(self) -> u64 { + (1u64 << self.output_bits) - 1 + } +} + +impl Expr { + pub fn x() -> Self { + Self::X + } + + pub fn y() -> Self { + Self::Y + } + + pub fn constant(value: u64) -> Self { + Self::Constant(value) + } + + pub fn square(value: Self) -> Self { + Self::Square(Box::new(value)) + } + + pub fn shift_left(value: Self, amount: u8) -> Self { + Self::ShiftLeft { + value: Box::new(value), + amount, + } + } + + pub fn binary(op: BinaryOp, lhs: Self, rhs: Self) -> Self { + Self::Binary { + op, + lhs: Box::new(lhs), + rhs: Box::new(rhs), + } + } + + pub fn abs_diff(lhs: Self, rhs: Self) -> Self { + Self::binary(BinaryOp::AbsDiff, lhs, rhs) + } + + pub fn description_cost(&self) -> usize { + self.checked_description_cost().unwrap_or(usize::MAX) + } + + pub fn checked_description_cost(&self) -> Result { + match self { + Self::X | Self::Y | Self::Constant(_) => Ok(1), + Self::Square(value) | Self::ShiftLeft { value, .. } => value + .checked_description_cost()? + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression description cost", + }), + Self::Binary { op, lhs, rhs } => { + let operator_cost = if *op == BinaryOp::AbsDiff { 2 } else { 1 }; + lhs.checked_description_cost()? + .checked_add(rhs.checked_description_cost()?) + .and_then(|cost| cost.checked_add(operator_cost)) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression description cost", + }) + } + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/canonical.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/canonical.rs new file mode 100644 index 000000000..fc1f2e0e3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/canonical.rs @@ -0,0 +1,123 @@ +use std::fmt; + +use crate::{BinaryOp, Expr, OccamError}; + +impl Expr { + pub fn canonicalize(&self) -> Result { + canonicalize(self.clone()) + } +} + +fn canonicalize(expression: Expr) -> Result { + match expression { + Expr::X | Expr::Y | Expr::Constant(_) => Ok(expression), + Expr::Square(value) => { + let value = canonicalize(*value)?; + Ok(match value { + Expr::Constant(0) => Expr::constant(0), + Expr::Constant(1) => Expr::constant(1), + value => Expr::square(value), + }) + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(&amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = canonicalize(*value)?; + Ok(if value == Expr::constant(0) { + Expr::constant(0) + } else { + Expr::shift_left(value, amount) + }) + } + Expr::Binary { op, lhs, rhs } => { + let mut lhs = canonicalize(*lhs)?; + let mut rhs = canonicalize(*rhs)?; + if is_commutative(op) && rhs < lhs { + std::mem::swap(&mut lhs, &mut rhs); + } + simplify_binary(op, lhs, rhs) + } + } +} + +fn simplify_binary(op: BinaryOp, lhs: Expr, rhs: Expr) -> Result { + let zero = Expr::constant(0); + let one = Expr::constant(1); + let simplified = match op { + BinaryOp::Add if lhs == zero => rhs, + BinaryOp::Add if rhs == zero => lhs, + BinaryOp::Subtract if rhs == zero => lhs, + BinaryOp::Subtract if lhs == rhs => zero, + BinaryOp::AbsDiff if lhs == rhs => zero, + BinaryOp::Multiply if lhs == zero || rhs == zero => zero, + BinaryOp::Multiply if lhs == one => rhs, + BinaryOp::Multiply if rhs == one => lhs, + BinaryOp::Multiply if lhs == rhs => Expr::square(lhs), + BinaryOp::BitXor if lhs == zero => rhs, + BinaryOp::BitXor if rhs == zero => lhs, + BinaryOp::BitXor if lhs == rhs => zero, + BinaryOp::BitAnd if lhs == zero || rhs == zero => zero, + BinaryOp::BitAnd if lhs == rhs => lhs, + BinaryOp::BitOr if lhs == zero => rhs, + BinaryOp::BitOr if rhs == zero => lhs, + BinaryOp::BitOr if lhs == rhs => lhs, + BinaryOp::Min | BinaryOp::Max if lhs == rhs => lhs, + _ => Expr::binary(op, lhs, rhs), + }; + simplified.checked_description_cost()?; + Ok(simplified) +} + +fn is_commutative(op: BinaryOp) -> bool { + matches!( + op, + BinaryOp::Add + | BinaryOp::AbsDiff + | BinaryOp::Multiply + | BinaryOp::BitXor + | BinaryOp::BitAnd + | BinaryOp::BitOr + | BinaryOp::Min + | BinaryOp::Max + ) +} + +impl fmt::Display for Expr { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::X => formatter.write_str("x"), + Self::Y => formatter.write_str("y"), + Self::Constant(value) => write!(formatter, "{value}"), + Self::Square(value) => write!(formatter, "square({value})"), + Self::ShiftLeft { value, amount } => { + write!(formatter, "shift_left({value}, {amount})") + } + Self::Binary { + op: BinaryOp::AbsDiff, + lhs, + rhs, + } => write!(formatter, "abs({lhs} - {rhs})"), + Self::Binary { op, lhs, rhs } => { + let operator = match op { + BinaryOp::Add => "+", + BinaryOp::Subtract => "-", + BinaryOp::Multiply => "*", + BinaryOp::BitXor => "XOR", + BinaryOp::BitAnd => "AND", + BinaryOp::BitOr => "OR", + BinaryOp::Min => "min", + BinaryOp::Max => "max", + BinaryOp::AbsDiff => unreachable!(), + }; + if matches!(op, BinaryOp::Min | BinaryOp::Max) { + write!(formatter, "{operator}({lhs}, {rhs})") + } else { + write!(formatter, "({lhs} {operator} {rhs})") + } + } + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/compile.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/compile.rs new file mode 100644 index 000000000..6c1a2f17c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/compile.rs @@ -0,0 +1,286 @@ +use std::collections::HashMap; + +use crate::{ + BinaryOp, CircuitBuilder, Expr, ExprSemantics, GateOp, OccamError, ResourceLimits, Signal, + SynthesizedCircuit, limits::checked_mul, +}; + +pub fn compile_expression( + expression: &Expr, + semantics: ExprSemantics, + limits: &ResourceLimits, +) -> Result { + let input_count = checked_mul(semantics.operand_bits, 2, "expression compiler input width")?; + limits.require("circuit inputs", input_count, limits.max_inputs)?; + limits.require("circuit outputs", semantics.output_bits, limits.max_outputs)?; + let mut compiler = BitVectorCompiler::new(input_count, semantics, limits)?; + let expression = expression.canonicalize()?; + let outputs = compiler.compile(&expression)?; + compiler.builder.finish(&outputs) +} + +struct BitVectorCompiler<'a> { + builder: CircuitBuilder<'a>, + semantics: ExprSemantics, + x: Vec, + y: Vec, + memo: HashMap>, +} + +impl<'a> BitVectorCompiler<'a> { + fn new( + input_count: usize, + semantics: ExprSemantics, + limits: &'a ResourceLimits, + ) -> Result { + let builder = CircuitBuilder::new(input_count, limits)?; + let mut x = Vec::with_capacity(semantics.output_bits); + let mut y = Vec::with_capacity(semantics.output_bits); + for bit in 0..semantics.output_bits { + if bit < semantics.operand_bits { + x.push(Signal::input(bit)); + y.push(Signal::input(semantics.operand_bits + bit)); + } else { + x.push(builder.zero()?); + y.push(builder.zero()?); + } + } + Ok(Self { + builder, + semantics, + x, + y, + memo: HashMap::new(), + }) + } + + fn compile(&mut self, expression: &Expr) -> Result, OccamError> { + if let Some(signals) = self.memo.get(expression) { + return Ok(signals.clone()); + } + let result = match expression { + Expr::X => self.x.clone(), + Expr::Y => self.y.clone(), + Expr::Constant(value) => self.constant(*value)?, + Expr::Square(value) => { + let value = self.compile(value)?; + self.multiply(&value, &value)? + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = self.compile(value)?; + self.shift_left(&value, usize::from(*amount))? + } + Expr::Binary { op, lhs, rhs } => { + let lhs = self.compile(lhs)?; + let rhs = self.compile(rhs)?; + match op { + BinaryOp::Add => self.add(&lhs, &rhs)?, + BinaryOp::Subtract => self.subtract(&lhs, &rhs)?.0, + BinaryOp::AbsDiff => self.abs_diff(&lhs, &rhs)?, + BinaryOp::Multiply => self.multiply(&lhs, &rhs)?, + BinaryOp::BitXor => self.bitwise(GateOp::Xor, &lhs, &rhs)?, + BinaryOp::BitAnd => self.bitwise(GateOp::And, &lhs, &rhs)?, + BinaryOp::BitOr => self.bitwise(GateOp::Or, &lhs, &rhs)?, + BinaryOp::Min => self.min_max(&lhs, &rhs, false)?, + BinaryOp::Max => self.min_max(&lhs, &rhs, true)?, + } + } + }; + debug_assert_eq!(result.len(), self.semantics.output_bits); + self.memo.insert(expression.clone(), result.clone()); + Ok(result) + } + + fn constant(&self, value: u64) -> Result, OccamError> { + if value > self.semantics.output_mask() { + return Err(OccamError::Validation(format!( + "expression constant {value} must fit in {} bits", + self.semantics.output_bits + ))); + } + (0..self.semantics.output_bits) + .map(|bit| { + if value & (1u64 << bit) == 0 { + self.builder.zero() + } else { + self.builder.one() + } + }) + .collect() + } + + fn bitwise( + &mut self, + operation: GateOp, + lhs: &[Signal], + rhs: &[Signal], + ) -> Result, OccamError> { + lhs.iter() + .zip(rhs) + .map(|(lhs, rhs)| self.builder.binary(operation, *lhs, *rhs)) + .collect() + } + + fn add(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let mut carry = self.builder.zero()?; + let mut result = Vec::with_capacity(self.semantics.output_bits); + for (lhs, rhs) in lhs.iter().zip(rhs) { + let (sum, next_carry) = self.full_adder(*lhs, *rhs, carry)?; + result.push(sum); + carry = next_carry; + } + Ok(result) + } + + fn subtract( + &mut self, + lhs: &[Signal], + rhs: &[Signal], + ) -> Result<(Vec, Signal), OccamError> { + let mut borrow = self.builder.zero()?; + let mut difference = Vec::with_capacity(self.semantics.output_bits); + for (lhs, rhs) in lhs.iter().zip(rhs) { + let propagate = self.builder.binary(GateOp::Xor, *lhs, *rhs)?; + difference.push(self.builder.binary(GateOp::Xor, propagate, borrow)?); + let generated = self.builder.binary(GateOp::And, lhs.inverted(), *rhs)?; + let propagated = self + .builder + .binary(GateOp::And, propagate.inverted(), borrow)?; + borrow = self.builder.binary(GateOp::Or, generated, propagated)?; + } + Ok((difference, borrow)) + } + + fn abs_diff(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let (difference, borrow) = self.subtract(lhs, rhs)?; + let mut carry = borrow; + let mut result = Vec::with_capacity(self.semantics.output_bits); + for bit in difference { + let toggled = self.builder.binary(GateOp::Xor, bit, borrow)?; + result.push(self.builder.binary(GateOp::Xor, toggled, carry)?); + carry = self.builder.binary(GateOp::And, toggled, carry)?; + } + Ok(result) + } + + fn min_max( + &mut self, + lhs: &[Signal], + rhs: &[Signal], + maximum: bool, + ) -> Result, OccamError> { + let (_, lhs_is_less) = self.subtract(lhs, rhs)?; + if maximum { + self.select(lhs_is_less, rhs, lhs) + } else { + self.select(lhs_is_less, lhs, rhs) + } + } + + fn select( + &mut self, + condition: Signal, + when_true: &[Signal], + when_false: &[Signal], + ) -> Result, OccamError> { + let mut result = Vec::with_capacity(self.semantics.output_bits); + for (when_true, when_false) in when_true.iter().zip(when_false) { + let difference = self.builder.binary(GateOp::Xor, *when_true, *when_false)?; + let selected = self.builder.binary(GateOp::And, condition, difference)?; + result.push(self.builder.binary(GateOp::Xor, *when_false, selected)?); + } + Ok(result) + } + + fn shift_left(&self, value: &[Signal], amount: usize) -> Result, OccamError> { + let mut result = Vec::with_capacity(self.semantics.output_bits); + for bit in 0..self.semantics.output_bits { + if bit < amount { + result.push(self.builder.zero()?); + } else { + result.push(value[bit - amount]); + } + } + Ok(result) + } + + fn multiply(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let width = self.semantics.output_bits; + let column_count = width.checked_add(1).ok_or(OccamError::ArithmeticOverflow { + context: "expression multiplication columns", + })?; + let mut columns = vec![Vec::new(); column_count]; + for (lhs_index, lhs_signal) in lhs.iter().enumerate() { + for (rhs_index, rhs_signal) in rhs.iter().enumerate() { + let column = + lhs_index + .checked_add(rhs_index) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression multiplication column", + })?; + if column < width { + columns[column].push(self.builder.binary( + GateOp::And, + *lhs_signal, + *rhs_signal, + )?); + } + } + } + self.compress_columns(columns) + } + + fn compress_columns( + &mut self, + mut columns: Vec>, + ) -> Result, OccamError> { + let width = self.semantics.output_bits; + let mut outputs = Vec::with_capacity(width); + for column in 0..width { + while columns[column].len() > 2 { + let third = columns[column].pop().unwrap(); + let second = columns[column].pop().unwrap(); + let first = columns[column].pop().unwrap(); + let (sum, carry) = self.full_adder(first, second, third)?; + columns[column].push(sum); + columns[column + 1].push(carry); + } + match columns[column].as_slice() { + [] => outputs.push(self.builder.zero()?), + [only] => outputs.push(*only), + [first, second] => { + let (sum, carry) = self.half_adder(*first, *second)?; + outputs.push(sum); + columns[column + 1].push(carry); + } + _ => unreachable!(), + } + } + Ok(outputs) + } + + fn half_adder(&mut self, lhs: Signal, rhs: Signal) -> Result<(Signal, Signal), OccamError> { + Ok(( + self.builder.binary(GateOp::Xor, lhs, rhs)?, + self.builder.binary(GateOp::And, lhs, rhs)?, + )) + } + + fn full_adder( + &mut self, + lhs: Signal, + rhs: Signal, + carry: Signal, + ) -> Result<(Signal, Signal), OccamError> { + let propagate = self.builder.binary(GateOp::Xor, lhs, rhs)?; + let sum = self.builder.binary(GateOp::Xor, propagate, carry)?; + let generated = self.builder.binary(GateOp::And, lhs, rhs)?; + let carried = self.builder.binary(GateOp::And, propagate, carry)?; + Ok((sum, self.builder.binary(GateOp::Or, generated, carried)?)) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/enumerate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/enumerate.rs new file mode 100644 index 000000000..e1301e5ed --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/enumerate.rs @@ -0,0 +1,408 @@ +use std::{ + collections::{BTreeSet, HashMap, HashSet}, + time::{Duration, Instant}, +}; + +use crate::{ + BinaryOp, Dataset, Expr, ExprSemantics, MdlSearchConfig, MdlSearchReport, MdlSearchResult, + OccamError, SearchTermination, SemanticKey, decode_lsb, evaluate_rows, + expression::report::CostSearchStats, +}; + +#[derive(Clone, Debug)] +struct ClassRecord { + representative: Expr, + description_cost: usize, + equal_cost_expression_count: usize, + alternatives: Vec, +} + +#[derive(Default)] +struct SearchProgress { + costs: Vec, + generated_expressions: usize, + evaluated_expressions: usize, + retained_semantic_classes: usize, +} + +pub fn search_mdl( + dataset: &Dataset, + config: &MdlSearchConfig, +) -> Result { + validate_config(config)?; + let semantics = validate_dataset(dataset)?; + let expected = expected_key(dataset)?; + let started = Instant::now(); + let timeout = Duration::from_millis(config.timeout_millis); + let mut progress = SearchProgress::default(); + let mut buckets = vec![Vec::::new(); config.max_description_cost + 1]; + let mut classes = HashMap::::new(); + + for cost in 1..=config.max_description_cost { + if timed_out(started, timeout) { + return Ok(finish( + None, + SearchTermination::Timeout, + config, + progress, + None, + )); + } + let generated_before = progress.generated_expressions; + let evaluated_before = progress.evaluated_expressions; + let retained_before = progress.retained_semantic_classes; + let mut candidates = BTreeSet::new(); + let generation = generate_cost_bucket( + cost, + &buckets, + config, + started, + timeout, + &mut progress, + &mut candidates, + ); + if let Err(termination) = generation { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish(None, termination, config, progress, None)); + } + + for expression in candidates { + if expression.description_cost() != cost { + continue; + } + if timed_out(started, timeout) { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish( + None, + SearchTermination::Timeout, + config, + progress, + None, + )); + } + progress.evaluated_expressions = + checked_increment(progress.evaluated_expressions, "evaluated expressions")?; + let key = evaluate_rows(&expression, dataset, semantics)?; + if let Some(record) = classes.get_mut(&key) { + if record.description_cost == cost { + record.equal_cost_expression_count = checked_increment( + record.equal_cost_expression_count, + "equal-cost expressions", + )?; + if record.alternatives.len() < config.max_alternatives_per_class { + record.alternatives.push(expression.to_string()); + record.alternatives.sort(); + record.alternatives.dedup(); + } + } + continue; + } + if classes.len() >= config.max_semantic_classes { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish( + None, + SearchTermination::SemanticClassLimit, + config, + progress, + None, + )); + } + let display = expression.to_string(); + classes.insert( + key, + ClassRecord { + representative: expression.clone(), + description_cost: cost, + equal_cost_expression_count: 1, + alternatives: vec![display], + }, + ); + buckets[cost].push(expression); + progress.retained_semantic_classes = checked_increment( + progress.retained_semantic_classes, + "retained semantic classes", + )?; + } + buckets[cost].sort(); + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + + if let Some(record) = classes.get(&expected) + && record.description_cost == cost + { + return Ok(finish( + Some(record.representative.clone()), + SearchTermination::Found, + config, + progress, + Some(record), + )); + } + } + + Ok(finish( + None, + SearchTermination::CostExhausted, + config, + progress, + None, + )) +} + +fn validate_config(config: &MdlSearchConfig) -> Result<(), OccamError> { + for (name, value) in [ + ("maximum description cost", config.max_description_cost), + ( + "maximum generated expressions", + config.max_generated_expressions, + ), + ("maximum semantic classes", config.max_semantic_classes), + ( + "maximum alternatives per class", + config.max_alternatives_per_class, + ), + ] { + if value == 0 { + return Err(OccamError::Validation(format!("{name} must be positive"))); + } + } + if config + .shift_amounts + .iter() + .any(|amount| !(1..=3).contains(amount)) + { + return Err(OccamError::Validation( + "MDL shift amounts must be in 1..=3".into(), + )); + } + if config + .shift_amounts + .iter() + .copied() + .collect::>() + .len() + != config.shift_amounts.len() + { + return Err(OccamError::Validation( + "MDL shift amounts must be unique".into(), + )); + } + if config + .enabled_binary_ops + .iter() + .copied() + .collect::>() + .len() + != config.enabled_binary_ops.len() + { + return Err(OccamError::Validation( + "MDL binary operators must be unique".into(), + )); + } + Ok(()) +} + +fn validate_dataset(dataset: &Dataset) -> Result { + if dataset.input_width == 0 || !dataset.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "MDL dataset input width {} must be positive and even", + dataset.input_width + ))); + } + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "MDL dataset must contain at least one sample".into(), + )); + } + ExprSemantics::new(dataset.input_width / 2, dataset.output_width) +} + +fn expected_key(dataset: &Dataset) -> Result { + let mut expected = Vec::with_capacity(dataset.samples.len()); + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "MDL sample {} output width {} does not match dataset output width {}", + index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + expected.push(decode_lsb(&sample.expected)?); + } + Ok(SemanticKey(expected)) +} + +#[allow(clippy::too_many_arguments)] +fn generate_cost_bucket( + cost: usize, + buckets: &[Vec], + config: &MdlSearchConfig, + started: Instant, + timeout: Duration, + progress: &mut SearchProgress, + candidates: &mut BTreeSet, +) -> Result<(), SearchTermination> { + if cost == 1 { + for expression in [Expr::x(), Expr::y(), Expr::constant(0), Expr::constant(1)] { + record_generated(expression, config, started, timeout, progress, candidates)?; + } + return Ok(()); + } + + if config.enable_square { + for child in &buckets[cost - 1] { + record_generated( + Expr::square(child.clone()), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + for amount in &config.shift_amounts { + for child in &buckets[cost - 1] { + record_generated( + Expr::shift_left(child.clone(), *amount), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + for operation in &config.enabled_binary_ops { + let operator_cost = if *operation == BinaryOp::AbsDiff { + 2 + } else { + 1 + }; + let Some(children_cost) = cost.checked_sub(operator_cost) else { + continue; + }; + if children_cost < 2 { + continue; + } + for lhs_cost in 1..children_cost { + let rhs_cost = children_cost - lhs_cost; + for lhs in &buckets[lhs_cost] { + for rhs in &buckets[rhs_cost] { + record_generated( + Expr::binary(*operation, lhs.clone(), rhs.clone()), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + } + } + Ok(()) +} + +fn record_generated( + expression: Expr, + config: &MdlSearchConfig, + started: Instant, + timeout: Duration, + progress: &mut SearchProgress, + candidates: &mut BTreeSet, +) -> Result<(), SearchTermination> { + if timed_out(started, timeout) { + return Err(SearchTermination::Timeout); + } + if progress.generated_expressions >= config.max_generated_expressions { + return Err(SearchTermination::ExpressionLimit); + } + progress.generated_expressions += 1; + let expression = expression + .canonicalize() + .map_err(|_| SearchTermination::ExpressionLimit)?; + if expression.description_cost() <= config.max_description_cost { + candidates.insert(expression); + } + Ok(()) +} + +fn push_cost_stats( + cost: usize, + generated_before: usize, + evaluated_before: usize, + retained_before: usize, + progress: &mut SearchProgress, +) { + progress.costs.push(CostSearchStats { + description_cost: cost, + generated_expressions: progress.generated_expressions - generated_before, + evaluated_expressions: progress.evaluated_expressions - evaluated_before, + retained_semantic_classes: progress.retained_semantic_classes - retained_before, + }); +} + +fn finish( + expression: Option, + termination: SearchTermination, + config: &MdlSearchConfig, + progress: SearchProgress, + record: Option<&ClassRecord>, +) -> MdlSearchResult { + let mut alternatives = record + .map(|record| record.alternatives.clone()) + .unwrap_or_default(); + alternatives.sort(); + alternatives.dedup(); + MdlSearchResult { + expression, + report: MdlSearchReport { + schema_version: 1, + config: config.clone(), + termination, + costs: progress.costs, + generated_expressions: progress.generated_expressions, + evaluated_expressions: progress.evaluated_expressions, + retained_semantic_classes: progress.retained_semantic_classes, + description_cost: record.map(|record| record.description_cost), + minimum_unique: record.map(|record| record.equal_cost_expression_count == 1), + equal_cost_expression_count: record.map(|record| record.equal_cost_expression_count), + alternatives, + }, + } +} + +fn timed_out(started: Instant, timeout: Duration) -> bool { + started.elapsed() >= timeout +} + +fn checked_increment(value: usize, context: &'static str) -> Result { + value + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { context }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/evaluate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/evaluate.rs new file mode 100644 index 000000000..ce38c8af8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/evaluate.rs @@ -0,0 +1,110 @@ +use serde::{Deserialize, Serialize}; + +use crate::{BinaryOp, Dataset, Expr, ExprSemantics, OccamError, learning::decode_lsb}; + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub struct SemanticKey(pub Vec); + +pub fn evaluate_rows( + expression: &Expr, + dataset: &Dataset, + semantics: ExprSemantics, +) -> Result { + let expected_input_width = + semantics + .operand_bits + .checked_mul(2) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression input width", + })?; + if dataset.input_width != expected_input_width { + return Err(OccamError::Validation(format!( + "expression dataset input width {} does not match expected width {expected_input_width}", + dataset.input_width + ))); + } + if dataset.output_width != semantics.output_bits { + return Err(OccamError::Validation(format!( + "expression dataset output width {} does not match declared width {}", + dataset.output_width, semantics.output_bits + ))); + } + + let mut values = Vec::with_capacity(dataset.samples.len()); + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != expected_input_width { + return Err(OccamError::Validation(format!( + "expression sample {} input width {} does not match expected width {expected_input_width}", + index + 1, + sample.input.len() + ))); + } + let x = decode_lsb(&sample.input[..semantics.operand_bits])?; + let y = decode_lsb(&sample.input[semantics.operand_bits..])?; + values.push(expression.evaluate(x, y, semantics)?); + } + Ok(SemanticKey(values)) +} + +impl Expr { + pub fn evaluate(&self, x: u64, y: u64, semantics: ExprSemantics) -> Result { + if x > semantics.operand_mask() || y > semantics.operand_mask() { + return Err(OccamError::Validation(format!( + "expression operands {x} and {y} must fit in {} bits", + semantics.operand_bits + ))); + } + evaluate_inner(self, x, y, semantics) + } +} + +fn evaluate_inner( + expression: &Expr, + x: u64, + y: u64, + semantics: ExprSemantics, +) -> Result { + let mask = semantics.output_mask(); + let value = match expression { + Expr::X => x, + Expr::Y => y, + Expr::Constant(value) => { + if *value > mask { + return Err(OccamError::Validation(format!( + "expression constant {value} must fit in {} bits", + semantics.output_bits + ))); + } + *value + } + Expr::Square(value) => { + let value = evaluate_inner(value, x, y, semantics)?; + ((value as u128 * value as u128) & mask as u128) as u64 + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = evaluate_inner(value, x, y, semantics)?; + ((value as u128) << amount) as u64 & mask + } + Expr::Binary { op, lhs, rhs } => { + let lhs = evaluate_inner(lhs, x, y, semantics)?; + let rhs = evaluate_inner(rhs, x, y, semantics)?; + match op { + BinaryOp::Add => ((lhs as u128 + rhs as u128) & mask as u128) as u64, + BinaryOp::Subtract => lhs.wrapping_sub(rhs) & mask, + BinaryOp::AbsDiff => lhs.abs_diff(rhs), + BinaryOp::Multiply => ((lhs as u128 * rhs as u128) & mask as u128) as u64, + BinaryOp::BitXor => lhs ^ rhs, + BinaryOp::BitAnd => lhs & rhs, + BinaryOp::BitOr => lhs | rhs, + BinaryOp::Min => lhs.min(rhs), + BinaryOp::Max => lhs.max(rhs), + } + } + }; + Ok(value & mask) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/mod.rs new file mode 100644 index 000000000..0b460993e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/mod.rs @@ -0,0 +1,16 @@ +mod ast; +mod canonical; +mod compile; +mod enumerate; +mod evaluate; +mod parse; +mod report; + +pub use ast::{BinaryOp, Expr, ExprSemantics}; +pub use compile::compile_expression; +pub use enumerate::search_mdl; +pub use evaluate::{SemanticKey, evaluate_rows}; +pub use parse::parse_expression; +pub use report::{ + CostSearchStats, MdlSearchConfig, MdlSearchReport, MdlSearchResult, SearchTermination, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/parse.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/parse.rs new file mode 100644 index 000000000..51c74cee0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/parse.rs @@ -0,0 +1,189 @@ +use crate::{BinaryOp, Expr, OccamError}; + +pub fn parse_expression(source: &str) -> Result { + if source.is_empty() || source.trim() != source { + return Err(invalid( + source, + "expression must use exact stable whitespace", + )); + } + parse_inner(source)?.canonicalize() +} + +fn parse_inner(source: &str) -> Result { + match source { + "x" => return Ok(Expr::x()), + "y" => return Ok(Expr::y()), + _ => {} + } + if source.bytes().all(|byte| byte.is_ascii_digit()) { + if source.len() > 1 && source.starts_with('0') { + return Err(invalid( + source, + "integer constants may not have leading zeroes", + )); + } + let value = source + .parse::() + .map_err(|_| invalid(source, "integer constant is outside u64"))?; + return Ok(Expr::constant(value)); + } + if let Some(arguments) = call_arguments(source, "square")? { + return Ok(Expr::square(parse_inner(arguments)?)); + } + if let Some(arguments) = call_arguments(source, "shift_left")? { + let (value, amount) = split_call_arguments(arguments)?; + let amount = amount + .parse::() + .map_err(|_| invalid(source, "shift amount must be an unsigned byte"))?; + return Ok(Expr::shift_left(parse_inner(value)?, amount)); + } + if let Some(arguments) = call_arguments(source, "abs")? { + let (lhs, rhs) = split_top_level_once(arguments, " - ")? + .ok_or_else(|| invalid(source, "abs requires exactly one top-level subtraction"))?; + return Ok(Expr::abs_diff(parse_inner(lhs)?, parse_inner(rhs)?)); + } + for (name, operation) in [("min", BinaryOp::Min), ("max", BinaryOp::Max)] { + if let Some(arguments) = call_arguments(source, name)? { + let (lhs, rhs) = split_call_arguments(arguments)?; + return Ok(Expr::binary( + operation, + parse_inner(lhs)?, + parse_inner(rhs)?, + )); + } + } + if source.starts_with('(') && source.ends_with(')') && encloses_complete_expression(source)? { + let inner = &source[1..source.len() - 1]; + let operators = [ + (" + ", BinaryOp::Add), + (" - ", BinaryOp::Subtract), + (" * ", BinaryOp::Multiply), + (" XOR ", BinaryOp::BitXor), + (" AND ", BinaryOp::BitAnd), + (" OR ", BinaryOp::BitOr), + ]; + let mut found = None; + for (separator, operation) in operators { + if let Some((lhs, rhs)) = split_top_level_once(inner, separator)? { + if found.is_some() { + return Err(invalid( + source, + "parenthesized expression has multiple top-level operators", + )); + } + found = Some((operation, lhs, rhs)); + } + } + if let Some((operation, lhs, rhs)) = found { + return Ok(Expr::binary( + operation, + parse_inner(lhs)?, + parse_inner(rhs)?, + )); + } + } + Err(invalid( + source, + "expression does not match the stable grammar", + )) +} + +fn call_arguments<'a>(source: &'a str, name: &str) -> Result, OccamError> { + let Some(remainder) = source.strip_prefix(name) else { + return Ok(None); + }; + if !remainder.starts_with('(') + || !remainder.ends_with(')') + || !encloses_complete_expression(remainder)? + { + return Err(invalid(source, "malformed function call")); + } + Ok(Some(&remainder[1..remainder.len() - 1])) +} + +fn split_call_arguments(source: &str) -> Result<(&str, &str), OccamError> { + split_top_level_once(source, ", ")? + .ok_or_else(|| invalid(source, "function requires exactly two arguments")) +} + +fn split_top_level_once<'a>( + source: &'a str, + separator: &str, +) -> Result, OccamError> { + let bytes = source.as_bytes(); + let separator_bytes = separator.as_bytes(); + let mut depth = 0usize; + let mut found = None; + let mut index = 0usize; + while index < bytes.len() { + match bytes[index] { + b'(' => { + depth = depth + .checked_add(1) + .ok_or_else(|| invalid(source, "nesting overflow"))? + } + b')' => { + depth = depth + .checked_sub(1) + .ok_or_else(|| invalid(source, "unmatched closing parenthesis"))?; + } + _ => {} + } + if depth == 0 && bytes[index..].starts_with(separator_bytes) { + if found.is_some() { + return Err(invalid(source, "multiple top-level separators")); + } + found = Some(index); + index += separator_bytes.len(); + continue; + } + index += 1; + } + if depth != 0 { + return Err(invalid(source, "unclosed parenthesis")); + } + let Some(index) = found else { + return Ok(None); + }; + let lhs = &source[..index]; + let rhs = &source[index + separator.len()..]; + if lhs.is_empty() || rhs.is_empty() { + return Err(invalid(source, "operator operands must be non-empty")); + } + Ok(Some((lhs, rhs))) +} + +fn encloses_complete_expression(source: &str) -> Result { + let bytes = source.as_bytes(); + if bytes.first() != Some(&b'(') || bytes.last() != Some(&b')') { + return Ok(false); + } + let mut depth = 0usize; + for (index, byte) in bytes.iter().enumerate() { + match byte { + b'(' => { + depth = depth + .checked_add(1) + .ok_or_else(|| invalid(source, "nesting overflow"))? + } + b')' => { + depth = depth + .checked_sub(1) + .ok_or_else(|| invalid(source, "unmatched closing parenthesis"))?; + if depth == 0 && index + 1 != bytes.len() { + return Ok(false); + } + } + _ => {} + } + } + if depth != 0 { + return Err(invalid(source, "unclosed parenthesis")); + } + Ok(true) +} + +fn invalid(source: &str, detail: &str) -> OccamError { + OccamError::Validation(format!("invalid expression {source:?}: {detail}")) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/report.rs new file mode 100644 index 000000000..0716af225 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/expression/report.rs @@ -0,0 +1,95 @@ +use serde::{Deserialize, Serialize}; + +use crate::{BinaryOp, Expr}; + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct MdlSearchConfig { + pub max_description_cost: usize, + pub max_generated_expressions: usize, + pub max_semantic_classes: usize, + pub max_alternatives_per_class: usize, + pub timeout_millis: u64, + pub shift_amounts: Vec, + pub enabled_binary_ops: Vec, + pub enable_square: bool, +} + +impl Default for MdlSearchConfig { + fn default() -> Self { + Self { + max_description_cost: 8, + max_generated_expressions: 2_000_000, + max_semantic_classes: 250_000, + max_alternatives_per_class: 8, + timeout_millis: 30_000, + shift_amounts: vec![1, 2, 3], + enabled_binary_ops: vec![ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, + ], + enable_square: true, + } + } +} + +impl MdlSearchConfig { + pub fn for_tests() -> Self { + Self { + max_description_cost: 6, + max_generated_expressions: 100_000, + max_semantic_classes: 20_000, + max_alternatives_per_class: 4, + timeout_millis: 5_000, + ..Self::default() + } + } +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum SearchTermination { + Found, + CostExhausted, + ExpressionLimit, + SemanticClassLimit, + Timeout, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct CostSearchStats { + pub description_cost: usize, + pub generated_expressions: usize, + pub evaluated_expressions: usize, + pub retained_semantic_classes: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct MdlSearchReport { + pub schema_version: u32, + pub config: MdlSearchConfig, + pub termination: SearchTermination, + pub costs: Vec, + pub generated_expressions: usize, + pub evaluated_expressions: usize, + pub retained_semantic_classes: usize, + pub description_cost: Option, + pub minimum_unique: Option, + pub equal_cost_expression_count: Option, + pub alternatives: Vec, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MdlSearchResult { + pub expression: Option, + pub report: MdlSearchReport, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/generate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/generate.rs new file mode 100644 index 000000000..445112a9e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/generate.rs @@ -0,0 +1,184 @@ +use crate::{ + DEFAULT_LIMITS, OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum ArithmeticOperation { + Add, + Multiply, +} + +pub fn generate_dataset( + operation: ArithmeticOperation, + bits: usize, + samples: usize, + seed: u64, +) -> Result { + generate_dataset_with_limits(operation, bits, samples, seed, &DEFAULT_LIMITS) +} + +pub fn generate_dataset_with_limits( + operation: ArithmeticOperation, + bits: usize, + samples: usize, + seed: u64, + limits: &ResourceLimits, +) -> Result { + if !(1..=32).contains(&bits) { + return Err(OccamError::Validation( + "dataset bit width must be in 1..=32".into(), + )); + } + if samples == 0 { + return Err(OccamError::Validation( + "sample count must be positive".into(), + )); + } + let input_width = checked_mul(bits, 2, "generated dataset input width")?; + let mut rng = SplitMix64(seed); + let operand_mask = (1u64 << bits) - 1; + let output_width = match operation { + ArithmeticOperation::Add => checked_add(bits, 1, "addition output width")?, + ArithmeticOperation::Multiply => checked_mul(bits, 2, "multiplication output width")?, + }; + limits.require("dataset input width", input_width, limits.max_input_width)?; + limits.require( + "dataset output width", + output_width, + limits.max_output_width, + )?; + limits.require("dataset samples", samples, limits.max_samples)?; + let row_bits = checked_add(input_width, output_width, "generated dataset row bits")?; + let dataset_bits = checked_mul(row_bits, samples, "generated dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + let row_bytes = checked_add(row_bits, 2, "generated dataset row bytes")?; + let rows_bytes = checked_mul(row_bytes, samples, "generated dataset rows bytes")?; + let total_bytes = checked_add( + "input,output\n".len(), + rows_bytes, + "generated dataset bytes", + )?; + limits.require("generated bytes", total_bytes, limits.max_generated_bytes)?; + limits.require("dataset source bytes", total_bytes, limits.max_source_bytes)?; + + let mut output = String::new(); + output.try_reserve_exact(total_bytes).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate generated dataset ({total_bytes} bytes): {error}" + )) + })?; + output.push_str("input,output\n"); + for _ in 0..samples { + let lhs = rng.next() & operand_mask; + let rhs = rng.next() & operand_mask; + let result = match operation { + ArithmeticOperation::Add => lhs + rhs, + ArithmeticOperation::Multiply => lhs * rhs, + }; + push_lsb_bits(&mut output, lhs, bits); + push_lsb_bits(&mut output, rhs, bits); + output.push(','); + push_lsb_bits(&mut output, result, output_width); + output.push('\n'); + } + Ok(output) +} + +fn push_lsb_bits(output: &mut String, value: u64, width: usize) { + for bit in 0..width { + output.push(if value & (1u64 << bit) == 0 { '0' } else { '1' }); + } +} + +struct SplitMix64(u64); + +impl SplitMix64 { + fn next(&mut self) -> u64 { + self.0 = self.0.wrapping_add(0x9e3779b97f4a7c15); + let mut value = self.0; + value = (value ^ (value >> 30)).wrapping_mul(0xbf58476d1ce4e5b9); + value = (value ^ (value >> 27)).wrapping_mul(0x94d049bb133111eb); + value ^ (value >> 31) + } +} + +#[cfg(test)] +mod tests { + use crate::parse_dataset; + + use super::*; + + fn decode(bits: &[bool]) -> u64 { + bits.iter().enumerate().fold( + 0, + |value, (bit, enabled)| { + if *enabled { value | (1 << bit) } else { value } + }, + ) + } + + #[test] + fn generation_is_deterministic_and_seeded() { + let first = generate_dataset(ArithmeticOperation::Add, 8, 10, 115).unwrap(); + assert_eq!( + first, + generate_dataset(ArithmeticOperation::Add, 8, 10, 115).unwrap() + ); + assert_ne!( + first, + generate_dataset(ArithmeticOperation::Add, 8, 10, 116).unwrap() + ); + } + + #[test] + fn generated_addition_rows_are_correct() { + let generated = generate_dataset(ArithmeticOperation::Add, 8, 100, 71).unwrap(); + let dataset = parse_dataset(&generated).unwrap(); + assert_eq!(dataset.input_width, 16); + assert_eq!(dataset.output_width, 9); + for sample in dataset.samples { + assert_eq!( + decode(&sample.expected), + decode(&sample.input[..8]) + decode(&sample.input[8..]) + ); + } + } + + #[test] + fn generated_multiplication_rows_are_correct() { + let generated = generate_dataset(ArithmeticOperation::Multiply, 4, 100, 71).unwrap(); + let dataset = parse_dataset(&generated).unwrap(); + assert_eq!(dataset.input_width, 8); + assert_eq!(dataset.output_width, 8); + for sample in dataset.samples { + assert_eq!( + decode(&sample.expected), + decode(&sample.input[..4]) * decode(&sample.input[4..]) + ); + } + } + + #[test] + fn generation_enforces_limits_before_allocation() { + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + generate_dataset_with_limits(ArithmeticOperation::Add, 4, 2, 71, &limits), + Err(OccamError::ResourceLimit { + resource: "dataset samples", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_generated_bytes = 1; + assert!(matches!( + generate_dataset_with_limits(ArithmeticOperation::Add, 4, 1, 71, &limits), + Err(OccamError::ResourceLimit { + resource: "generated bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/family.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/family.rs new file mode 100644 index 000000000..1e297bf79 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/family.rs @@ -0,0 +1,152 @@ +use std::fmt; + +use serde::{Deserialize, Serialize}; + +use crate::{Dataset, OccamError, learning::inputs::decode_lsb}; + +const MAX_OPERAND_BITS: usize = 31; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum ArithmeticFamily { + Add, + AbsDiff, + Multiply, + SumOfSquares, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct CandidateScore { + pub family: ArithmeticFamily, + pub evaluated_rows: usize, + pub exact_matches: usize, + pub mismatches: usize, + pub first_mismatch_row: Option, +} + +impl ArithmeticFamily { + pub const ALL: [Self; 4] = [Self::Add, Self::AbsDiff, Self::Multiply, Self::SumOfSquares]; + + pub fn output_width(self, operand_bits: usize) -> Result { + validate_operand_bits(operand_bits)?; + Ok(match self { + Self::Add => operand_bits + 1, + Self::AbsDiff => operand_bits, + Self::Multiply => operand_bits * 2, + Self::SumOfSquares => operand_bits * 2 + 1, + }) + } + + pub fn evaluate(self, x: u64, y: u64, operand_bits: usize) -> Result { + validate_operand_bits(operand_bits)?; + let upper_bound = (1u64 << operand_bits) - 1; + if x > upper_bound || y > upper_bound { + return Err(OccamError::Validation(format!( + "operands {x} and {y} must fit in {operand_bits} bits" + ))); + } + match self { + Self::Add => x.checked_add(y), + Self::AbsDiff => Some(x.abs_diff(y)), + Self::Multiply => x.checked_mul(y), + Self::SumOfSquares => x.checked_mul(x).and_then(|x_squared| { + y.checked_mul(y) + .and_then(|y_squared| x_squared.checked_add(y_squared)) + }), + } + .ok_or(OccamError::ArithmeticOverflow { + context: "arithmetic family evaluation", + }) + } +} + +impl fmt::Display for ArithmeticFamily { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter.write_str(match self { + Self::Add => "add", + Self::AbsDiff => "abs-diff", + Self::Multiply => "multiply", + Self::SumOfSquares => "sum-of-squares", + }) + } +} + +pub fn score_candidates(dataset: &Dataset) -> Result, OccamError> { + if dataset.input_width == 0 || !dataset.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "training input width {} must be positive and even", + dataset.input_width + ))); + } + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "training dataset has no samples".into(), + )); + } + let operand_bits = dataset.input_width / 2; + validate_operand_bits(operand_bits)?; + let compatible: Vec<_> = ArithmeticFamily::ALL + .into_iter() + .filter(|family| { + family + .output_width(operand_bits) + .is_ok_and(|width| width == dataset.output_width) + }) + .collect(); + if compatible.is_empty() { + return Err(OccamError::Validation(format!( + "no arithmetic candidate supports input width {} and output width {}", + dataset.input_width, dataset.output_width + ))); + } + + let mut scores = Vec::with_capacity(compatible.len()); + for family in compatible { + let mut exact_matches = 0usize; + let mut first_mismatch_row = None; + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let x = decode_lsb(&sample.input[..operand_bits])?; + let y = decode_lsb(&sample.input[operand_bits..])?; + let predicted = family.evaluate(x, y, operand_bits)?; + let expected = decode_lsb(&sample.expected)?; + if predicted == expected { + exact_matches += 1; + } else if first_mismatch_row.is_none() { + first_mismatch_row = Some(index + 1); + } + } + scores.push(CandidateScore { + family, + evaluated_rows: dataset.samples.len(), + exact_matches, + mismatches: dataset.samples.len() - exact_matches, + first_mismatch_row, + }); + } + Ok(scores) +} + +fn validate_operand_bits(operand_bits: usize) -> Result<(), OccamError> { + if operand_bits == 0 || operand_bits > MAX_OPERAND_BITS { + return Err(OccamError::Validation(format!( + "operand width must be in 1..={MAX_OPERAND_BITS}, got {operand_bits}" + ))); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/inputs.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/inputs.rs new file mode 100644 index 000000000..41710dd31 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/inputs.rs @@ -0,0 +1,213 @@ +use std::collections::HashSet; + +use crate::{ + DEFAULT_LIMITS, OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TestInputs { + pub input_width: usize, + pub rows: Vec>, +} + +pub fn decode_lsb(bits: &[bool]) -> Result { + if bits.len() > u64::BITS as usize { + return Err(OccamError::Validation(format!( + "cannot decode {} bits into u64", + bits.len() + ))); + } + Ok(bits + .iter() + .enumerate() + .fold(0u64, |value, (bit, set)| value | (u64::from(*set) << bit))) +} + +pub fn encode_lsb(value: u64, width: usize) -> Result, OccamError> { + if width == 0 || width > u64::BITS as usize { + return Err(OccamError::Validation(format!( + "encoded bit width must be in 1..=64, got {width}" + ))); + } + if width < u64::BITS as usize && value >= (1u64 << width) { + return Err(OccamError::Validation(format!( + "value {value} does not fit in {width} bits" + ))); + } + Ok((0..width).map(|bit| value & (1u64 << bit) != 0).collect()) +} + +pub fn parse_test_inputs(source: &str) -> Result { + parse_test_inputs_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_test_inputs_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + limits.require( + "test input source bytes", + source.len(), + limits.max_source_bytes, + )?; + if source.is_empty() { + return Err(OccamError::Validation("test input dataset is empty".into())); + } + + let mut lines = source.as_bytes().split(|byte| *byte == b'\n'); + let header = trim_ascii(lines.next().unwrap_or_default()); + if header != b"input" { + return Err(OccamError::parse( + "test inputs", + 1, + format!( + "expected header input; got {}", + String::from_utf8_lossy(header) + ), + )); + } + + let mut input_width = None; + let mut rows = Vec::new(); + let mut seen = HashSet::>::new(); + for (index, raw_line) in lines.enumerate() { + let line_number = index + 2; + let input = trim_ascii(raw_line); + if input.is_empty() { + continue; + } + if input.contains(&b',') { + return Err(OccamError::parse( + "test inputs", + line_number, + "expected exactly one CSV field", + )); + } + validate_bits(input, line_number)?; + if let Some(expected) = input_width { + if input.len() != expected { + return Err(OccamError::parse( + "test inputs", + line_number, + format!( + "inconsistent input width: expected {expected}, got {}", + input.len() + ), + )); + } + } else { + limits.require("test input width", input.len(), limits.max_input_width)?; + input_width = Some(input.len()); + } + if !seen.insert(input.to_vec()) { + return Err(OccamError::parse( + "test inputs", + line_number, + "duplicate input row", + )); + } + let next_rows = checked_add(rows.len(), 1, "test input row count")?; + limits.require("test input rows", next_rows, limits.max_samples)?; + let dataset_bits = checked_mul(input.len(), next_rows, "test input dataset bits")?; + limits.require("test input bits", dataset_bits, limits.max_dataset_bits)?; + rows.push(input.iter().map(|byte| *byte == b'1').collect()); + } + + let input_width = + input_width.ok_or_else(|| OccamError::Validation("test inputs have no rows".into()))?; + Ok(TestInputs { input_width, rows }) +} + +pub fn parse_commitment(source: &str) -> Result { + let fields: Vec<_> = source.split_ascii_whitespace().collect(); + if fields.len() != 2 || fields[1] != "test_outputs.csv" { + return Err(OccamError::Validation( + "commitment must contain ' test_outputs.csv'".into(), + )); + } + let digest = fields[0]; + if digest.len() != 64 + || !digest + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) + { + return Err(OccamError::Validation( + "commitment SHA-256 must be exactly 64 lowercase hexadecimal characters".into(), + )); + } + Ok(digest.to_owned()) +} + +fn trim_ascii(mut value: &[u8]) -> &[u8] { + while value.first().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[1..]; + } + while value.last().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[..value.len() - 1]; + } + value +} + +fn validate_bits(value: &[u8], line: usize) -> Result<(), OccamError> { + if value.is_empty() { + return Err(OccamError::parse( + "test inputs", + line, + "input bitstring must be non-empty", + )); + } + for byte in value { + if *byte != b'0' && *byte != b'1' { + let invalid = if byte.is_ascii() { + format!("character {:?}", char::from(*byte)) + } else { + format!("byte 0x{byte:02x}") + }; + return Err(OccamError::parse( + "test inputs", + line, + format!("input contains non-bit {invalid}"), + )); + } + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn enforces_test_input_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_input_width = 1; + assert!(matches!( + parse_test_inputs_with_limits("input\n00\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input width", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + parse_test_inputs_with_limits("input\n0\n1\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input rows", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_test_inputs_with_limits("input\n0\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/learner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/learner.rs new file mode 100644 index 000000000..f8ea7f94f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/learner.rs @@ -0,0 +1,173 @@ +use crate::{ + ArithmeticFamily, CandidateScore, Dataset, OccamError, ResourceLimits, TestInputs, + VerificationMetrics, decode_lsb, evaluate_with_limits, parse_commitment, + parse_dataset_with_limits, parse_netlist_with_limits, parse_packed_dataset_with_limits, + parse_test_inputs_with_limits, prediction_csv_from_circuit, score_candidates, sha256_hex, + synthesize_family_with_limits, verify_prepacked_with_limits, verify_with_limits, +}; + +use super::report::LearningReport; + +#[derive(Clone, Copy, Debug)] +pub struct LearnRequest<'a> { + pub instance: &'a str, + pub training_source: &'a str, + pub test_inputs_source: &'a str, + pub commitment_source: Option<&'a str>, + pub limits: &'a ResourceLimits, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct LearnResult { + pub circuit: String, + pub prediction_csv: String, + pub test_inputs: TestInputs, + pub report: LearningReport, +} + +pub fn learn_instance(request: LearnRequest<'_>) -> Result { + if request.instance.is_empty() || request.instance.chars().any(char::is_control) { + return Err(OccamError::Validation( + "learning instance name must be non-empty and contain no control characters".into(), + )); + } + let training = parse_dataset_with_limits(request.training_source, request.limits)?; + let (family, candidate_scores) = infer_unique_family(&training)?; + let operand_bits = training.input_width / 2; + let synthesized = synthesize_family_with_limits(family, operand_bits, request.limits)?; + let circuit = parse_netlist_with_limits(&synthesized.netlist, request.limits)?; + let training_scalar = verify_with_limits(&circuit, &training, request.limits)?; + let packed = + parse_packed_dataset_with_limits(request.training_source.as_bytes(), request.limits)?; + let training_packed = verify_prepacked_with_limits(&circuit, &packed, request.limits)?; + require_perfect_training(&training_scalar, "scalar")?; + require_perfect_training(&training_packed, "packed")?; + if training_scalar != training_packed { + return Err(OccamError::Validation(format!( + "training backend mismatch: scalar {training_scalar:?}, packed {training_packed:?}" + ))); + } + let (exhaustive_cases, exhaustive_mismatches) = + exhaustively_compare(&circuit, family, operand_bits, request.limits)?; + if exhaustive_mismatches != 0 { + return Err(OccamError::Validation(format!( + "synthesized circuit has {exhaustive_mismatches} mismatches over {exhaustive_cases} exhaustive cases" + ))); + } + + let test_inputs = parse_test_inputs_with_limits(request.test_inputs_source, request.limits)?; + if test_inputs.input_width != training.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match training input width {}", + test_inputs.input_width, training.input_width + ))); + } + let prediction_csv = prediction_csv_from_circuit(&circuit, &test_inputs, request.limits)?; + let prediction_sha256 = sha256_hex(prediction_csv.as_bytes()); + let expected_commitment_sha256 = request + .commitment_source + .map(parse_commitment) + .transpose()?; + let commitment_matches = expected_commitment_sha256 + .as_ref() + .map(|expected| expected == &prediction_sha256); + if let Some(expected) = expected_commitment_sha256.as_ref() + && expected != &prediction_sha256 + { + return Err(OccamError::Validation(format!( + "prediction commitment mismatch: expected {expected}, got {prediction_sha256}" + ))); + } + + let report = LearningReport { + schema_version: 1, + instance: request.instance.to_owned(), + selected_family: family, + operand_bits, + input_width: training.input_width, + output_width: training.output_width, + candidate_scores, + gate_count: circuit.gates.len(), + circuit_sha256: sha256_hex(synthesized.netlist.as_bytes()), + training_scalar, + training_packed, + exhaustive_cases, + exhaustive_mismatches, + prediction_rows: test_inputs.rows.len(), + prediction_sha256, + expected_commitment_sha256, + commitment_matches, + }; + Ok(LearnResult { + circuit: synthesized.netlist, + prediction_csv, + test_inputs, + report, + }) +} + +pub fn infer_unique_family( + dataset: &Dataset, +) -> Result<(ArithmeticFamily, Vec), OccamError> { + let scores = score_candidates(dataset)?; + let perfect: Vec<_> = scores + .iter() + .filter(|score| score.mismatches == 0) + .map(|score| score.family) + .collect(); + match perfect.as_slice() { + [family] => Ok((*family, scores)), + [] => Err(OccamError::Validation(format!( + "no zero-error arithmetic family matches the training data: {scores:?}" + ))), + _ => Err(OccamError::Validation(format!( + "ambiguous training data: zero-error arithmetic families {perfect:?}" + ))), + } +} + +fn require_perfect_training( + metrics: &VerificationMetrics, + backend: &str, +) -> Result<(), OccamError> { + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "{backend} training verification matched only {}/{} rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn exhaustively_compare( + circuit: &crate::Circuit, + family: ArithmeticFamily, + operand_bits: usize, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + let shift = u32::try_from(circuit.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "exhaustive domain shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "exhaustive domain size", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + let operand_mask = (1u64 << operand_bits) - 1; + let mut mismatches = 0usize; + let mut input = vec![false; circuit.input_count]; + for packed_input in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed_input & (1usize << bit) != 0; + } + let actual = decode_lsb(&evaluate_with_limits(circuit, &input, limits)?)?; + let packed_input = packed_input as u64; + let x = packed_input & operand_mask; + let y = (packed_input >> operand_bits) & operand_mask; + if actual != family.evaluate(x, y, operand_bits)? { + mismatches += 1; + } + } + Ok((cases, mismatches)) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mdl.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mdl.rs new file mode 100644 index 000000000..d52d751aa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mdl.rs @@ -0,0 +1,183 @@ +use crate::{ + Circuit, Expr, ExprSemantics, MdlSearchConfig, OccamError, ResourceLimits, SearchTermination, + TestInputs, VerificationMetrics, compile_expression, decode_lsb, evaluate_with_limits, + parse_commitment, parse_dataset_with_limits, parse_netlist_with_limits, + parse_packed_dataset_with_limits, parse_test_inputs_with_limits, prediction_csv_from_circuit, + search_mdl, sha256_hex, verify_prepacked_with_limits, verify_with_limits, +}; + +use super::report::MdlLearningReport; + +#[derive(Clone, Copy, Debug)] +pub struct MdlLearnRequest<'a> { + pub training_source: &'a str, + pub test_inputs_source: &'a str, + pub commitment_source: Option<&'a str>, + pub config: &'a MdlSearchConfig, + pub limits: &'a ResourceLimits, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MdlLearnResult { + pub circuit: String, + pub prediction_csv: String, + pub test_inputs: TestInputs, + pub report: MdlLearningReport, +} + +pub fn learn_mdl(request: MdlLearnRequest<'_>) -> Result { + let training = parse_dataset_with_limits(request.training_source, request.limits)?; + if !training.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "MDL training input width {} must be even", + training.input_width + ))); + } + let semantics = ExprSemantics::new(training.input_width / 2, training.output_width)?; + let search_result = search_mdl(&training, request.config)?; + if search_result.report.termination != SearchTermination::Found { + return Err(OccamError::Validation(format!( + "MDL search did not find a consistent expression: {:?}", + search_result.report.termination + ))); + } + let expression = search_result.expression.ok_or_else(|| { + OccamError::Validation("MDL search reported success without an expression".into()) + })?; + let description_cost = search_result.report.description_cost.ok_or_else(|| { + OccamError::Validation("MDL search report omitted the selected description cost".into()) + })?; + let minimum_unique = search_result.report.minimum_unique.ok_or_else(|| { + OccamError::Validation("MDL search report omitted minimum uniqueness".into()) + })?; + let equal_cost_expression_count = search_result + .report + .equal_cost_expression_count + .ok_or_else(|| { + OccamError::Validation( + "MDL search report omitted the equal-cost expression count".into(), + ) + })?; + + let synthesized = compile_expression(&expression, semantics, request.limits)?; + let circuit = parse_netlist_with_limits(&synthesized.netlist, request.limits)?; + let training_scalar = verify_with_limits(&circuit, &training, request.limits)?; + let packed = + parse_packed_dataset_with_limits(request.training_source.as_bytes(), request.limits)?; + let training_packed = verify_prepacked_with_limits(&circuit, &packed, request.limits)?; + require_perfect_training(&training_scalar, "scalar")?; + require_perfect_training(&training_packed, "packed")?; + if training_scalar != training_packed { + return Err(OccamError::Validation(format!( + "training backend mismatch: scalar {training_scalar:?}, packed {training_packed:?}" + ))); + } + + let (exhaustive_cases, exhaustive_mismatches) = + exhaustively_compare(&circuit, &expression, semantics, request.limits)?; + if exhaustive_mismatches != 0 { + return Err(OccamError::Validation(format!( + "compiled expression circuit has {exhaustive_mismatches} mismatches over \ + {exhaustive_cases} exhaustive cases" + ))); + } + + let test_inputs = parse_test_inputs_with_limits(request.test_inputs_source, request.limits)?; + if test_inputs.input_width != training.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match training input width {}", + test_inputs.input_width, training.input_width + ))); + } + let prediction_csv = prediction_csv_from_circuit(&circuit, &test_inputs, request.limits)?; + let prediction_sha256 = sha256_hex(prediction_csv.as_bytes()); + + let expected_commitment_sha256 = request + .commitment_source + .map(parse_commitment) + .transpose()?; + let commitment_matches = expected_commitment_sha256 + .as_ref() + .map(|expected| expected == &prediction_sha256); + if let Some(expected) = expected_commitment_sha256.as_ref() + && expected != &prediction_sha256 + { + return Err(OccamError::Validation(format!( + "prediction commitment mismatch: expected {expected}, got {prediction_sha256}" + ))); + } + + let report = MdlLearningReport { + schema_version: 2, + learner: "mdl-enumerator".into(), + expression: expression.to_string(), + description_cost, + minimum_unique, + equal_cost_expression_count, + search: search_result.report, + operand_bits: semantics.operand_bits, + input_width: training.input_width, + output_width: training.output_width, + gate_count: circuit.gates.len(), + circuit_sha256: sha256_hex(synthesized.netlist.as_bytes()), + training_scalar, + training_packed, + exhaustive_cases, + exhaustive_mismatches, + prediction_rows: test_inputs.rows.len(), + prediction_sha256, + expected_commitment_sha256, + commitment_matches, + }; + Ok(MdlLearnResult { + circuit: synthesized.netlist, + prediction_csv, + test_inputs, + report, + }) +} + +fn require_perfect_training( + metrics: &VerificationMetrics, + backend: &str, +) -> Result<(), OccamError> { + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "{backend} training verification matched only {}/{} rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn exhaustively_compare( + circuit: &Circuit, + expression: &Expr, + semantics: ExprSemantics, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + let shift = u32::try_from(circuit.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "MDL exhaustive domain shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "MDL exhaustive domain size", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + + let mut mismatches = 0usize; + let mut input = vec![false; circuit.input_count]; + for packed_input in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed_input & (1usize << bit) != 0; + } + let actual = decode_lsb(&evaluate_with_limits(circuit, &input, limits)?)?; + let x = decode_lsb(&input[..semantics.operand_bits])?; + let y = decode_lsb(&input[semantics.operand_bits..])?; + if actual != expression.evaluate(x, y, semantics)? { + mismatches += 1; + } + } + Ok((cases, mismatches)) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mod.rs new file mode 100644 index 000000000..5c48d1df1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/mod.rs @@ -0,0 +1,20 @@ +mod family; +mod inputs; +mod learner; +mod mdl; +mod prediction; +mod report; + +pub use family::{ArithmeticFamily, CandidateScore, score_candidates}; +pub use inputs::{ + TestInputs, decode_lsb, encode_lsb, parse_commitment, parse_test_inputs, + parse_test_inputs_with_limits, +}; +pub use learner::{LearnRequest, LearnResult, infer_unique_family, learn_instance}; +pub use mdl::{MdlLearnRequest, MdlLearnResult, learn_mdl}; +pub use prediction::{prediction_csv_from_circuit, sha256_hex}; +pub use report::{ + AnySolutionManifest, LearningReport, Manifest, ManifestInstance, MdlLearningReport, + ResearchSolutionManifest, WrittenInstance, load_written_instance, write_instance_artifacts, + write_manifest, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/prediction.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/prediction.rs new file mode 100644 index 000000000..c12c5c0bf --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/prediction.rs @@ -0,0 +1,88 @@ +use sha2::{Digest, Sha256}; + +use crate::{ + Circuit, OccamError, ResourceLimits, TestInputs, evaluate_with_limits, + limits::{checked_add, checked_mul}, +}; + +pub fn prediction_csv_from_circuit( + circuit: &Circuit, + inputs: &TestInputs, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != inputs.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match circuit INPUTS {}", + inputs.input_width, circuit.input_count + ))); + } + limits.require( + "prediction output width", + circuit.outputs.len(), + limits.max_output_width, + )?; + let row_bytes = checked_add( + checked_add( + inputs.input_width, + circuit.outputs.len(), + "prediction row bit count", + )?, + 2, + "prediction row bytes", + )?; + let output_bytes = checked_add( + "input,output\n".len(), + checked_mul(row_bytes, inputs.rows.len(), "prediction CSV row bytes")?, + "prediction CSV bytes", + )?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + limits.require("prediction CSV bytes", output_bytes, max_bytes)?; + + let mut csv = String::new(); + csv.try_reserve_exact(output_bytes).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate prediction CSV ({output_bytes} bytes): {error}" + )) + })?; + csv.push_str("input,output\n"); + for row in &inputs.rows { + if row.len() != inputs.input_width { + return Err(OccamError::Validation(format!( + "test input row width {} does not match declared width {}", + row.len(), + inputs.input_width + ))); + } + push_bits(&mut csv, row); + csv.push(','); + push_bits(&mut csv, &evaluate_with_limits(circuit, row, limits)?); + csv.push('\n'); + } + debug_assert_eq!(csv.len(), output_bytes); + Ok(csv) +} + +pub fn sha256_hex(bytes: &[u8]) -> String { + format!("{:x}", Sha256::digest(bytes)) +} + +fn push_bits(output: &mut String, bits: &[bool]) { + output.extend(bits.iter().map(|bit| if *bit { '1' } else { '0' })); +} + +#[cfg(test)] +mod tests { + use crate::{DEFAULT_LIMITS, parse_netlist, parse_test_inputs}; + + use super::*; + + #[test] + fn renders_exact_canonical_bytes() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n").unwrap(); + let inputs = parse_test_inputs("input\n00\n10\n").unwrap(); + assert_eq!( + prediction_csv_from_circuit(&circuit, &inputs, &DEFAULT_LIMITS).unwrap(), + "input,output\n00,0\n10,1\n" + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/report.rs new file mode 100644 index 000000000..edc95b791 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/learning/report.rs @@ -0,0 +1,465 @@ +use std::{ + collections::HashSet, + fs::{self, File}, + io::Write, + path::{Path, PathBuf}, +}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + ArithmeticFamily, CandidateScore, MdlSearchReport, OccamError, ResourceLimits, + VerificationMetrics, + learning::{learner::LearnResult, prediction::sha256_hex}, +}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct LearningReport { + pub schema_version: u32, + pub instance: String, + pub selected_family: ArithmeticFamily, + pub operand_bits: usize, + pub input_width: usize, + pub output_width: usize, + pub candidate_scores: Vec, + pub gate_count: usize, + pub circuit_sha256: String, + pub training_scalar: VerificationMetrics, + pub training_packed: VerificationMetrics, + pub exhaustive_cases: usize, + pub exhaustive_mismatches: usize, + pub prediction_rows: usize, + pub prediction_sha256: String, + pub expected_commitment_sha256: Option, + pub commitment_matches: Option, +} + +impl LearningReport { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct MdlLearningReport { + pub schema_version: u32, + pub learner: String, + pub expression: String, + pub description_cost: usize, + pub minimum_unique: bool, + pub equal_cost_expression_count: usize, + pub search: MdlSearchReport, + pub operand_bits: usize, + pub input_width: usize, + pub output_width: usize, + pub gate_count: usize, + pub circuit_sha256: String, + pub training_scalar: VerificationMetrics, + pub training_packed: VerificationMetrics, + pub exhaustive_cases: usize, + pub exhaustive_mismatches: usize, + pub prediction_rows: usize, + pub prediction_sha256: String, + pub expected_commitment_sha256: Option, + pub commitment_matches: Option, +} + +impl MdlLearningReport { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct Manifest { + pub schema_version: u32, + pub solution: String, + pub instances: Vec, +} + +impl Manifest { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ResearchSolutionManifest { + pub schema_version: u32, + pub solution: String, + pub learner: String, + pub baseline_tag: String, + pub instances: Vec, + pub optimization_report_path: String, + pub optimization_report_sha256: String, + pub research_manifest_path: String, + pub research_manifest_sha256: String, +} + +impl ResearchSolutionManifest { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(untagged)] +pub enum AnySolutionManifest { + V2(ResearchSolutionManifest), + V1(Manifest), +} + +impl AnySolutionManifest { + pub fn from_json(source: &str) -> Result { + let manifest: Self = serde_json::from_str(source).map_err(|error| { + OccamError::Validation(format!("invalid solution manifest JSON: {error}")) + })?; + match &manifest { + Self::V1(value) if value.schema_version == 1 => Ok(manifest), + Self::V2(value) if value.schema_version == 2 => Ok(manifest), + Self::V1(value) => Err(OccamError::Validation(format!( + "unsupported legacy solution manifest schema {}", + value.schema_version + ))), + Self::V2(value) => Err(OccamError::Validation(format!( + "unsupported research solution manifest schema {}", + value.schema_version + ))), + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ManifestInstance { + pub instance: String, + pub family: ArithmeticFamily, + pub gate_count: usize, + pub training_rows: usize, + pub prediction_rows: usize, + pub circuit_path: String, + pub circuit_sha256: String, + pub prediction_path: String, + pub prediction_sha256: String, + pub expected_commitment_sha256: String, + pub report_path: String, + pub report_sha256: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct WrittenInstance { + pub manifest_entry: ManifestInstance, + pub circuit_path: PathBuf, + pub prediction_path: PathBuf, + pub report_path: PathBuf, +} + +pub fn write_instance_artifacts( + output_root: &Path, + instance: &str, + result: &LearnResult, +) -> Result { + validate_instance_name(instance)?; + if result.report.instance != instance { + return Err(OccamError::Validation(format!( + "result instance {} does not match requested artifact name {instance}", + result.report.instance + ))); + } + let expected_commitment = result + .report + .expected_commitment_sha256 + .clone() + .ok_or_else(|| { + OccamError::Validation( + "submission artifacts require an expected commitment SHA-256".into(), + ) + })?; + if result.report.commitment_matches != Some(true) { + return Err(OccamError::Validation( + "submission artifacts require a successful commitment check".into(), + )); + } + let report_json = result.report.to_json_pretty()?; + let circuit_path = output_root.join("circuits").join(format!("{instance}.txt")); + let prediction_path = output_root + .join("predictions") + .join(instance) + .join("test_outputs.csv"); + let report_path = output_root.join("reports").join(format!("{instance}.json")); + for parent in [ + circuit_path.parent().unwrap(), + prediction_path.parent().unwrap(), + report_path.parent().unwrap(), + ] { + create_dir_all(parent)?; + } + + let writes = [ + (&circuit_path, result.circuit.as_bytes()), + (&prediction_path, result.prediction_csv.as_bytes()), + (&report_path, report_json.as_bytes()), + ]; + let temporary_paths: Vec<_> = writes + .iter() + .map(|(path, _)| temporary_path(path)) + .collect(); + let write_result = (|| { + for ((_, contents), temporary) in writes.iter().zip(&temporary_paths) { + write_synced(temporary, contents)?; + } + for ((final_path, _), temporary) in writes.iter().zip(&temporary_paths) { + fs::rename(temporary, final_path).map_err(|source| OccamError::WriteFile { + path: (*final_path).clone(), + source, + })?; + } + Ok(()) + })(); + if write_result.is_err() { + for temporary in &temporary_paths { + let _ = fs::remove_file(temporary); + } + } + write_result?; + + let manifest_entry = ManifestInstance { + instance: instance.to_owned(), + family: result.report.selected_family, + gate_count: result.report.gate_count, + training_rows: result.report.training_scalar.samples, + prediction_rows: result.report.prediction_rows, + circuit_path: format!("circuits/{instance}.txt"), + circuit_sha256: sha256_hex(result.circuit.as_bytes()), + prediction_path: format!("predictions/{instance}/test_outputs.csv"), + prediction_sha256: sha256_hex(result.prediction_csv.as_bytes()), + expected_commitment_sha256: expected_commitment, + report_path: format!("reports/{instance}.json"), + report_sha256: sha256_hex(report_json.as_bytes()), + }; + Ok(WrittenInstance { + manifest_entry, + circuit_path, + prediction_path, + report_path, + }) +} + +pub fn write_manifest( + output_root: &Path, + instances: &[WrittenInstance], +) -> Result { + if instances.is_empty() { + return Err(OccamError::Validation( + "cannot write an empty solution manifest".into(), + )); + } + let mut entries: Vec<_> = instances + .iter() + .map(|instance| instance.manifest_entry.clone()) + .collect(); + entries.sort_by(|lhs, rhs| lhs.instance.cmp(&rhs.instance)); + let mut names = HashSet::new(); + for entry in &entries { + if !names.insert(&entry.instance) { + return Err(OccamError::Validation(format!( + "duplicate manifest instance {}", + entry.instance + ))); + } + } + create_dir_all(output_root)?; + let path = output_root.join("manifest.json"); + let temporary = temporary_path(&path); + let optimization_path = output_root.join("optimization/report.json"); + let research_path = output_root.join("research-manifest.json"); + let encoded = if optimization_path.is_file() && research_path.is_file() { + ResearchSolutionManifest { + schema_version: 2, + solution: "rewrite-it-in-rust".into(), + learner: "mdl-enumerator".into(), + baseline_tag: "v0.2.0".into(), + instances: entries, + optimization_report_path: "optimization/report.json".into(), + optimization_report_sha256: sha256_hex(&fs::read(&optimization_path).map_err( + |source| OccamError::ReadFile { + path: optimization_path, + source, + }, + )?), + research_manifest_path: "research-manifest.json".into(), + research_manifest_sha256: sha256_hex(&fs::read(&research_path).map_err(|source| { + OccamError::ReadFile { + path: research_path, + source, + } + })?), + } + .to_json_pretty()? + } else { + Manifest { + schema_version: 1, + solution: "rewrite-it-in-rust".into(), + instances: entries, + } + .to_json_pretty()? + }; + let result = write_synced(&temporary, encoded.as_bytes()).and_then(|()| { + fs::rename(&temporary, &path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + }) + }); + if result.is_err() { + let _ = fs::remove_file(&temporary); + } + result?; + Ok(path) +} + +pub fn load_written_instance( + output_root: &Path, + instance: &str, + limits: &ResourceLimits, +) -> Result { + validate_instance_name(instance)?; + let circuit_path = output_root.join("circuits").join(format!("{instance}.txt")); + let prediction_path = output_root + .join("predictions") + .join(instance) + .join("test_outputs.csv"); + let report_path = output_root.join("reports").join(format!("{instance}.json")); + let circuit = read_bounded(&circuit_path, limits)?; + let prediction = read_bounded(&prediction_path, limits)?; + let report_bytes = read_bounded(&report_path, limits)?; + let report: LearningReport = serde_json::from_slice(&report_bytes).map_err(|error| { + OccamError::Validation(format!( + "failed to parse learning report {}: {error}", + report_path.display() + )) + })?; + if report.schema_version != 1 { + return Err(OccamError::Validation(format!( + "unsupported learning report schema {} for {instance}", + report.schema_version + ))); + } + if report.instance != instance { + return Err(OccamError::Validation(format!( + "report instance {} does not match {instance}", + report.instance + ))); + } + let circuit_sha256 = sha256_hex(&circuit); + if circuit_sha256 != report.circuit_sha256 { + return Err(OccamError::Validation(format!( + "{instance} circuit hash mismatch: report {}, actual {circuit_sha256}", + report.circuit_sha256 + ))); + } + let prediction_sha256 = sha256_hex(&prediction); + if prediction_sha256 != report.prediction_sha256 { + return Err(OccamError::Validation(format!( + "{instance} prediction hash mismatch: report {}, actual {prediction_sha256}", + report.prediction_sha256 + ))); + } + let expected_commitment_sha256 = + report.expected_commitment_sha256.clone().ok_or_else(|| { + OccamError::Validation(format!( + "{instance} report has no expected commitment SHA-256" + )) + })?; + if report.commitment_matches != Some(true) || prediction_sha256 != expected_commitment_sha256 { + return Err(OccamError::Validation(format!( + "{instance} report does not prove a matching prediction commitment" + ))); + } + let manifest_entry = ManifestInstance { + instance: instance.to_owned(), + family: report.selected_family, + gate_count: report.gate_count, + training_rows: report.training_scalar.samples, + prediction_rows: report.prediction_rows, + circuit_path: format!("circuits/{instance}.txt"), + circuit_sha256, + prediction_path: format!("predictions/{instance}/test_outputs.csv"), + prediction_sha256, + expected_commitment_sha256, + report_path: format!("reports/{instance}.json"), + report_sha256: sha256_hex(&report_bytes), + }; + Ok(WrittenInstance { + manifest_entry, + circuit_path, + prediction_path, + report_path, + }) +} + +fn validate_instance_name(instance: &str) -> Result<(), OccamError> { + let suffix = instance.strip_prefix("mystery-").ok_or_else(|| { + OccamError::Validation(format!( + "instance name {instance:?} must match mystery-[A-Z]" + )) + })?; + if suffix.len() != 1 || !suffix.as_bytes()[0].is_ascii_uppercase() { + return Err(OccamError::Validation(format!( + "instance name {instance:?} must match mystery-[A-Z]" + ))); + } + Ok(()) +} + +fn pretty_json(value: &impl Serialize) -> Result { + serde_json::to_string_pretty(value) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) +} + +fn temporary_path(path: &Path) -> PathBuf { + let file_name = path.file_name().and_then(|name| name.to_str()).unwrap(); + path.with_file_name(format!(".{file_name}.{}.tmp-occam71", std::process::id())) +} + +fn create_dir_all(path: &Path) -> Result<(), OccamError> { + fs::create_dir_all(path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +fn read_bounded(path: &Path, limits: &ResourceLimits) -> Result, OccamError> { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + if metadata.len() > limits.max_source_bytes as u64 { + return Err(OccamError::ResourceLimit { + resource: "solution artifact bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: limits.max_source_bytes, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn write_synced(path: &Path, contents: &[u8]) -> Result<(), OccamError> { + let mut file = File::create(path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + })?; + file.write_all(contents) + .and_then(|()| file.sync_all()) + .map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/lib.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/lib.rs new file mode 100644 index 000000000..1d8472ff5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/lib.rs @@ -0,0 +1,82 @@ +pub mod benchmark; +pub mod circuit; +pub mod compiled; +pub mod dataset; +mod dataset_scan; +pub mod error; +pub mod expression; +pub mod generate; +pub mod learning; +pub mod limits; +pub mod logic; +pub mod metrics; +pub mod netlist; +pub mod optimization; +pub mod optimize; +pub mod packed; +pub mod reference; +pub mod research; +pub mod scalar; +pub mod synthesis; + +pub use benchmark::{BenchmarkBackend, BenchmarkReport, TimingStatistics, run_benchmark}; +pub use circuit::{Circuit, Gate, GateOp, Operand, Source}; +pub use compiled::{ + CompiledCircuit, verify_compiled_prepacked, verify_compiled_prepacked_with_limits, +}; +pub use dataset::{Dataset, Sample, parse_dataset, parse_dataset_with_limits}; +pub use error::OccamError; +pub use expression::{ + BinaryOp, CostSearchStats, Expr, ExprSemantics, MdlSearchConfig, MdlSearchReport, + MdlSearchResult, SearchTermination, SemanticKey, compile_expression, evaluate_rows, + parse_expression, search_mdl, +}; +pub use generate::{ArithmeticOperation, generate_dataset, generate_dataset_with_limits}; +pub use learning::{ + AnySolutionManifest, ArithmeticFamily, CandidateScore, LearnRequest, LearnResult, + LearningReport, Manifest, ManifestInstance, MdlLearnRequest, MdlLearnResult, MdlLearningReport, + ResearchSolutionManifest, TestInputs, WrittenInstance, decode_lsb, encode_lsb, + infer_unique_family, learn_instance, learn_mdl, load_written_instance, parse_commitment, + parse_test_inputs, parse_test_inputs_with_limits, prediction_csv_from_circuit, + score_candidates, sha256_hex, write_instance_artifacts, write_manifest, +}; +pub use limits::{DEFAULT_LIMITS, ResourceLimits}; +pub use logic::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, MappedNetwork, circuit_to_blif, compare_circuits_exhaustively, + optimize_with_abc, parse_mapped_blif, +}; +pub use metrics::{VerificationMetrics, verify, verify_with_limits}; +pub use netlist::{parse_netlist, parse_netlist_with_limits}; +pub use optimization::{ + CircuitWindow, PeepholeAttemptReport, PeepholeBoundReport, PeepholeConfig, + PeepholeOptimizationReport, PeepholeOptimizationResult, WindowConfig, extract_windows, + optimize_peepholes, rewrite_with_candidate, +}; +pub use optimize::{CircuitBuilder, Signal, SynthesizedCircuit}; +pub use packed::{ + PackedDataset, pack_dataset, pack_dataset_with_limits, parse_packed_dataset, + parse_packed_dataset_with_limits, verify_packed, verify_prepacked, + verify_prepacked_interpreted, verify_prepacked_interpreted_with_limits, + verify_prepacked_reference, verify_prepacked_with_limits, +}; +pub use reference::{ + ripple_carry_adder, ripple_carry_adder_with_limits, shift_add_multiplier, + shift_add_multiplier_with_limits, synthesize_family, synthesize_family_with_limits, +}; +pub use research::{ + AbcDontCareLearner, BddOrder, BddResult, EvolutionConfig, EvolutionResult, EvolutionTraceEntry, + ExperimentConfig, GrammarEvolutionLearner, LearnedHypothesis, LearnerFailure, + MemorizationLearner, ObservedTask, OracleTask, ResearchLearner, ResearchMethod, ResearchTools, + RobddLearner, SEMANTIC_PROJECTION_EXCLUDED_FIELDS, SatCegisLearner, SemanticTrialRecord, Split, + TaskClass, TaskManifest, TrialBudget, TrialKey, TrialRecord, TrialStatus, build_robdd, + default_adapters, evolve, evolve_with_budget, expected_trial_keys, load_experiment_config, + official_and_synthetic_tasks, peak_rss_bytes, render_dataset, render_partial_pla, + render_semantic_jsonl, run_experiment, run_isolated_experiment, run_measured_trial, run_trial, + run_trial_with_tools, semantic_projection, split_task, write_semantic_jsonl, +}; +pub use scalar::{evaluate, evaluate_with_limits}; +pub use synthesis::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisLimits, SynthesisProblem, + SynthesisStatus, synthesize_minimal, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/limits.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/limits.rs new file mode 100644 index 000000000..c2ed5bded --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/limits.rs @@ -0,0 +1,88 @@ +use crate::OccamError; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct ResourceLimits { + pub max_source_bytes: usize, + pub max_inputs: usize, + pub max_gates: usize, + pub max_outputs: usize, + pub max_samples: usize, + pub max_input_width: usize, + pub max_output_width: usize, + pub max_dataset_bits: usize, + pub max_packed_words: usize, + pub max_generated_bytes: usize, +} + +pub const DEFAULT_LIMITS: ResourceLimits = ResourceLimits { + max_source_bytes: 256 * 1024 * 1024, + max_inputs: 4_096, + max_gates: 2_000_000, + max_outputs: 4_096, + max_samples: 10_000_000, + max_input_width: 4_096, + max_output_width: 4_096, + max_dataset_bits: 256 * 1024 * 1024, + max_packed_words: 32 * 1024 * 1024, + max_generated_bytes: 256 * 1024 * 1024, +}; + +impl ResourceLimits { + pub(crate) fn require( + &self, + resource: &'static str, + requested: usize, + limit: usize, + ) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) + } +} + +pub(crate) fn checked_add( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_add(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +pub(crate) fn checked_mul( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_mul(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +pub(crate) fn checked_sub( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_sub(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn checked_arithmetic_reports_context() { + let error = checked_add(usize::MAX, 1, "test addition").unwrap_err(); + assert!(error.to_string().contains("test addition")); + let error = checked_mul(usize::MAX, 2, "test multiplication").unwrap_err(); + assert!(error.to_string().contains("test multiplication")); + let error = checked_sub(0, 1, "test subtraction").unwrap_err(); + assert!(error.to_string().contains("test subtraction")); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/abc.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/abc.rs new file mode 100644 index 000000000..ba273e9d8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/abc.rs @@ -0,0 +1,576 @@ +use std::{ + fs::{self, File}, + path::{Path, PathBuf}, + process::{Command, Stdio}, + sync::atomic::{AtomicU64, Ordering}, + thread, + time::{Duration, Instant}, +}; + +use crate::{ + Circuit, OccamError, ResourceLimits, circuit_to_blif, evaluate_with_limits, parse_mapped_blif, + parse_netlist_with_limits, sha256_hex, +}; + +use super::report::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, +}; + +const FLOWS: &[(&str, &str)] = &[ + ( + "resyn", + "balance; rewrite; rewrite -z; balance; rewrite -z; balance", + ), + ( + "resyn2", + "balance; rewrite; refactor; balance; rewrite; rewrite -z; balance; refactor -z; rewrite -z; balance", + ), + ( + "resyn3", + "balance; resub; resub -K 6; balance; resub -z; resub -z -K 6; balance; resub -z -K 5; balance", + ), + ( + "compress", + "balance -l; rewrite -l; rewrite -z -l; balance -l; rewrite -z -l; balance -l", + ), + ( + "compress2", + "balance -l; rewrite -l; refactor -l; balance -l; rewrite -l; rewrite -z -l; balance -l; refactor -z -l; rewrite -z -l; balance -l", + ), + ( + "resyn2rs", + "balance; resub -K 6; rewrite; resub -K 6 -N 2; refactor; resub -K 8; balance; resub -K 8 -N 2; rewrite; resub -K 10; rewrite -z; resub -K 10 -N 2; balance", + ), + ("dc2", "dc2"), +]; + +pub(super) const FLOW_NAMES: &[&str] = &[ + "resyn", + "resyn2", + "resyn3", + "compress", + "compress2", + "resyn2rs", + "dc2", +]; + +static TEMPORARY_COUNTER: AtomicU64 = AtomicU64::new(0); + +pub fn optimize_with_abc( + original: &Circuit, + abc_binary: &Path, + config: &AbcOptimizationConfig, + limits: &ResourceLimits, +) -> Result { + validate_config(abc_binary, config)?; + let abc_binary = absolute_existing_path(abc_binary, "ABC executable")?; + let genlib_path = absolute_existing_path(&config.genlib_path, "ABC GENLIB")?; + let original_blif = circuit_to_blif(original, "original")?; + let mut flows = Vec::with_capacity(config.flow_names.len()); + let mut candidates = Vec::new(); + for name in &config.flow_names { + let commands = flow_commands(name).unwrap(); + match run_flow( + original, + &original_blif, + &abc_binary, + &genlib_path, + name, + commands, + config, + limits, + ) { + Ok((report, candidate)) => { + flows.push(report); + if let Some(candidate) = candidate { + candidates.push(candidate); + } + } + Err(error) => flows.push(failed_flow(name, error.to_string())), + } + } + candidates.sort_by(|lhs, rhs| { + (lhs.official_gate_count, &lhs.flow_name, &lhs.circuit_sha256).cmp(&( + rhs.official_gate_count, + &rhs.flow_name, + &rhs.circuit_sha256, + )) + }); + let selected = candidates.first(); + let report = AbcPortfolioReport { + schema_version: 1, + baseline_gate_count: original.gates.len(), + accepted_candidates: candidates.len(), + selected_flow: selected.map(|candidate| candidate.flow_name.clone()), + selected_gate_count: selected.map(|candidate| candidate.official_gate_count), + selected_circuit_sha256: selected.map(|candidate| candidate.circuit_sha256.clone()), + flows, + }; + Ok(AbcOptimizationResult { report, candidates }) +} + +pub(crate) fn synthesize_partial_with_abc( + pla: &str, + abc_binary: &Path, + genlib_path: &Path, + command_limits: &ExternalCommandLimits, + limits: &ResourceLimits, +) -> Result { + let abc_binary = absolute_existing_path(abc_binary, "ABC executable")?; + let genlib_path = absolute_existing_path(genlib_path, "ABC GENLIB")?; + limits.require( + "partial PLA source bytes", + pla.len(), + limits.max_source_bytes, + )?; + let temporary = TemporaryDirectory::new("occam71-partial-abc")?; + fs::write(temporary.path.join("observed.pla"), pla).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("observed.pla"), + source, + } + })?; + fs::copy(genlib_path, temporary.path.join("occam.genlib")).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("occam.genlib"), + source, + } + })?; + let script = "\ +read_pla observed.pla +espresso +strash +dc2 +read_library occam.genlib +map -a +write_blif hypothesis.blif +quit +"; + fs::write(temporary.path.join("flow.abc"), script).map_err(|source| OccamError::WriteFile { + path: temporary.path.join("flow.abc"), + source, + })?; + let process = run_bounded_command( + &abc_binary, + &["-f", "flow.abc"], + &temporary.path, + command_limits, + )?; + if !process.success { + let detail = format!( + "{}\n{}", + String::from_utf8_lossy(&process.stdout), + String::from_utf8_lossy(&process.stderr) + ); + return Err(OccamError::Validation(format!( + "partial ABC process failed: {}", + bounded_tail(&detail, 4_096) + ))); + } + let mapped_source = read_bounded( + &temporary.path.join("hypothesis.blif"), + limits.max_source_bytes, + )?; + let mapped_text = std::str::from_utf8(&mapped_source) + .map_err(|error| OccamError::Validation(format!("mapped BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(mapped_text)?; + let netlist = mapped.into_official_netlist()?; + parse_netlist_with_limits(&netlist, limits)?; + Ok(netlist) +} + +fn absolute_existing_path(path: &Path, label: &str) -> Result { + fs::canonicalize(path).map_err(|error| { + OccamError::Validation(format!( + "cannot resolve {label} {}: {error}", + path.display() + )) + }) +} + +pub fn compare_circuits_exhaustively( + lhs: &Circuit, + rhs: &Circuit, + max_inputs: usize, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + if lhs.input_count != rhs.input_count || lhs.outputs.len() != rhs.outputs.len() { + return Err(OccamError::Validation(format!( + "circuit shapes differ: lhs {} inputs/{} outputs, rhs {} inputs/{} outputs", + lhs.input_count, + lhs.outputs.len(), + rhs.input_count, + rhs.outputs.len() + ))); + } + if lhs.input_count > max_inputs { + return Err(OccamError::Validation(format!( + "exhaustive circuit comparison supports at most {max_inputs} inputs, got {}", + lhs.input_count + ))); + } + let shift = u32::try_from(lhs.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "circuit equivalence shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "circuit equivalence cases", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + let mut input = vec![false; lhs.input_count]; + let mut mismatches = 0usize; + for packed in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed & (1usize << bit) != 0; + } + if evaluate_with_limits(lhs, &input, limits)? != evaluate_with_limits(rhs, &input, limits)? + { + mismatches = mismatches + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "circuit equivalence mismatches", + })?; + } + } + Ok((cases, mismatches)) +} + +#[allow(clippy::too_many_arguments)] +fn run_flow( + original: &Circuit, + original_blif: &str, + abc_binary: &Path, + genlib_path: &Path, + name: &str, + commands: &str, + config: &AbcOptimizationConfig, + limits: &ResourceLimits, +) -> Result<(AbcFlowReport, Option), OccamError> { + let temporary = TemporaryDirectory::new("occam71-abc")?; + fs::write(temporary.path.join("original.blif"), original_blif).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("original.blif"), + source, + } + })?; + fs::copy(genlib_path, temporary.path.join("occam.genlib")).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("occam.genlib"), + source, + } + })?; + let script = format!( + "\ +read_blif original.blif +strash +{commands} +read_library occam.genlib +map -a +write_blif candidate.blif +cec original.blif candidate.blif +quit +" + ); + fs::write(temporary.path.join("flow.abc"), script).map_err(|source| OccamError::WriteFile { + path: temporary.path.join("flow.abc"), + source, + })?; + let process = run_bounded_command( + abc_binary, + &["-f", "flow.abc"], + &temporary.path, + &config.command_limits, + )?; + let stdout = normalize_abc_output(&process.stdout); + let stderr = normalize_abc_output(&process.stderr); + let stdout_sha256 = sha256_hex(stdout.as_bytes()); + let stderr_sha256 = sha256_hex(stderr.as_bytes()); + let combined = format!("{stdout}\n{stderr}"); + let diagnostic_tail = bounded_tail(&combined, 4_096); + if !process.success { + return Ok(( + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "process-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }, + None, + )); + } + let abc_cec_equivalent = combined.contains("Networks are equivalent"); + if !abc_cec_equivalent { + return Ok(( + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "cec-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }, + None, + )); + } + let mapped_path = temporary.path.join("candidate.blif"); + let mapped_source = read_bounded(&mapped_path, limits.max_source_bytes)?; + let mapped_text = std::str::from_utf8(&mapped_source) + .map_err(|error| OccamError::Validation(format!("mapped BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(mapped_text)?; + let netlist = mapped.into_official_netlist()?; + let candidate_circuit = parse_netlist_with_limits(&netlist, limits)?; + let (cases, mismatches) = compare_circuits_exhaustively( + original, + &candidate_circuit, + config.max_exhaustive_inputs, + limits, + )?; + let circuit_sha256 = sha256_hex(netlist.as_bytes()); + let accepted = mismatches == 0; + let report = AbcFlowReport { + name: name.to_owned(), + accepted, + status: if accepted { + "accepted".into() + } else { + "rust-mismatch".into() + }, + abc_cec_equivalent, + rust_exhaustive_cases: Some(cases), + rust_exhaustive_mismatches: Some(mismatches), + official_gate_count: Some(candidate_circuit.gates.len()), + circuit_sha256: Some(circuit_sha256), + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }; + let candidate = accepted.then(|| { + AbcCandidate::new( + name.to_owned(), + netlist, + candidate_circuit.gates.len(), + cases, + mismatches, + ) + }); + Ok((report, candidate)) +} + +fn normalize_abc_output(bytes: &[u8]) -> String { + let decoded = String::from_utf8_lossy(bytes); + let mut normalized = String::new(); + for line in decoded.lines() { + if let Some(time) = line.find("Time =") { + normalized.push_str(&line[..time]); + normalized.push_str("Time = "); + } else { + normalized.push_str(line); + } + normalized.push('\n'); + } + normalized +} + +fn validate_config(abc_binary: &Path, config: &AbcOptimizationConfig) -> Result<(), OccamError> { + if !abc_binary.is_file() { + return Err(OccamError::Validation(format!( + "ABC executable is absent: {}", + abc_binary.display() + ))); + } + if !config.genlib_path.is_file() { + return Err(OccamError::Validation(format!( + "ABC GENLIB is absent: {}", + config.genlib_path.display() + ))); + } + if config.flow_names.is_empty() { + return Err(OccamError::Validation( + "ABC flow selection must not be empty".into(), + )); + } + for name in &config.flow_names { + if flow_commands(name).is_none() { + return Err(OccamError::Validation(format!("unknown ABC flow {name:?}"))); + } + } + if config.max_exhaustive_inputs == 0 + || config.command_limits.timeout.is_zero() + || config.command_limits.max_stdout_bytes == 0 + || config.command_limits.max_stderr_bytes == 0 + { + return Err(OccamError::Validation( + "ABC process and equivalence limits must be positive".into(), + )); + } + Ok(()) +} + +fn flow_commands(name: &str) -> Option<&'static str> { + FLOWS + .iter() + .find_map(|(candidate, commands)| (*candidate == name).then_some(*commands)) +} + +fn failed_flow(name: &str, detail: String) -> AbcFlowReport { + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "validation-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256: sha256_hex(&[]), + stderr_sha256: sha256_hex(detail.as_bytes()), + diagnostic_tail: bounded_tail(&detail, 4_096), + } +} + +struct ProcessResult { + success: bool, + stdout: Vec, + stderr: Vec, +} + +fn run_bounded_command( + program: &Path, + arguments: &[&str], + current_dir: &Path, + limits: &ExternalCommandLimits, +) -> Result { + let stdout_path = current_dir.join("stdout.log"); + let stderr_path = current_dir.join("stderr.log"); + let stdout = File::create(&stdout_path).map_err(|source| OccamError::WriteFile { + path: stdout_path.clone(), + source, + })?; + let stderr = File::create(&stderr_path).map_err(|source| OccamError::WriteFile { + path: stderr_path.clone(), + source, + })?; + let mut child = Command::new(program) + .args(arguments) + .current_dir(current_dir) + .stdin(Stdio::null()) + .stdout(Stdio::from(stdout)) + .stderr(Stdio::from(stderr)) + .spawn() + .map_err(|error| { + OccamError::Validation(format!( + "failed to spawn bounded command {}: {error}", + program.display() + )) + })?; + let started = Instant::now(); + let status = loop { + if let Some(status) = child + .try_wait() + .map_err(|error| OccamError::Validation(format!("command wait failed: {error}")))? + { + break status; + } + let stdout_bytes = file_size(&stdout_path)?; + let stderr_bytes = file_size(&stderr_path)?; + if stdout_bytes > limits.max_stdout_bytes || stderr_bytes > limits.max_stderr_bytes { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::ResourceLimit { + resource: "external command output bytes", + requested: stdout_bytes.max(stderr_bytes), + limit: limits.max_stdout_bytes.max(limits.max_stderr_bytes), + }); + } + if started.elapsed() >= limits.timeout { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::Validation(format!( + "external command timed out after {} milliseconds", + limits.timeout.as_millis() + ))); + } + thread::sleep(Duration::from_millis(10)); + }; + let stdout = read_bounded(&stdout_path, limits.max_stdout_bytes)?; + let stderr = read_bounded(&stderr_path, limits.max_stderr_bytes)?; + Ok(ProcessResult { + success: status.success(), + stdout, + stderr, + }) +} + +fn file_size(path: &Path) -> Result { + let bytes = fs::metadata(path) + .map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })? + .len(); + usize::try_from(bytes).map_err(|_| OccamError::ArithmeticOverflow { + context: "external command output size", + }) +} + +fn read_bounded(path: &Path, max_bytes: usize) -> Result, OccamError> { + let bytes = file_size(path)?; + if bytes > max_bytes { + return Err(OccamError::ResourceLimit { + resource: "external command file bytes", + requested: bytes, + limit: max_bytes, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn bounded_tail(value: &str, max_bytes: usize) -> String { + if value.len() <= max_bytes { + return value.to_owned(); + } + let mut start = value.len() - max_bytes; + while !value.is_char_boundary(start) { + start += 1; + } + value[start..].to_owned() +} + +struct TemporaryDirectory { + path: PathBuf, +} + +impl TemporaryDirectory { + fn new(prefix: &str) -> Result { + let counter = TEMPORARY_COUNTER.fetch_add(1, Ordering::Relaxed); + let path = std::env::temp_dir().join(format!("{prefix}-{}-{counter}", std::process::id())); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for TemporaryDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/blif.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/blif.rs new file mode 100644 index 000000000..299162d2a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/blif.rs @@ -0,0 +1,83 @@ +use crate::{Circuit, GateOp, OccamError, Operand, Source}; + +pub fn circuit_to_blif(circuit: &Circuit, model: &str) -> Result { + validate_model_name(model)?; + if circuit.input_count == 0 || circuit.outputs.is_empty() { + return Err(OccamError::Validation( + "BLIF export requires at least one input and output".into(), + )); + } + let mut output = String::new(); + output.push_str(&format!(".model {model}\n")); + output.push_str(".inputs"); + for input in 0..circuit.input_count { + output.push_str(&format!(" i{input}")); + } + output.push('\n'); + output.push_str(".outputs"); + for index in 0..circuit.outputs.len() { + output.push_str(&format!(" o{index}")); + } + output.push('\n'); + + for (index, gate) in circuit.gates.iter().enumerate() { + if gate.output != index { + return Err(OccamError::Validation(format!( + "BLIF export requires dense gate outputs, gate {index} has output {}", + gate.output + ))); + } + let lhs = export_operand(&mut output, gate.lhs, &format!("g{index}a")); + let rhs = export_operand(&mut output, gate.rhs, &format!("g{index}b")); + output.push_str(&format!(".names {lhs} {rhs} n{index}\n")); + output.push_str(truth_table(gate.op)); + } + for (index, operand) in circuit.outputs.iter().enumerate() { + let source = source_name(operand.source); + output.push_str(&format!(".names {source} o{index}\n")); + output.push_str(if operand.inverted { "0 1\n" } else { "1 1\n" }); + } + output.push_str(".end\n"); + Ok(output) +} + +fn export_operand(output: &mut String, operand: Operand, alias: &str) -> String { + let source = source_name(operand.source); + if operand.inverted { + output.push_str(&format!(".names {source} {alias}\n0 1\n")); + alias.to_owned() + } else { + source + } +} + +fn source_name(source: Source) -> String { + match source { + Source::Input(index) => format!("i{index}"), + Source::Wire(index) => format!("n{index}"), + } +} + +fn truth_table(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "11 1\n", + GateOp::Or => "1- 1\n-1 1\n", + GateOp::Xor => "10 1\n01 1\n", + GateOp::Nand => "0- 1\n-0 1\n", + GateOp::Nor => "00 1\n", + GateOp::Xnor => "00 1\n11 1\n", + } +} + +fn validate_model_name(model: &str) -> Result<(), OccamError> { + if model.is_empty() + || !model + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || byte == b'_') + { + return Err(OccamError::Validation(format!( + "BLIF model name {model:?} must contain only ASCII letters, digits, and underscores" + ))); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/library.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/library.rs new file mode 100644 index 000000000..d2ef87034 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/library.rs @@ -0,0 +1,23 @@ +use crate::GateOp; + +pub(super) enum Cell { + Constant(bool), + Alias { inverted: bool }, + Gate(GateOp), +} + +pub(super) fn cell_by_name(name: &str) -> Option { + match name { + "ZERO" => Some(Cell::Constant(false)), + "ONE" => Some(Cell::Constant(true)), + "INV" => Some(Cell::Alias { inverted: true }), + "BUF" => Some(Cell::Alias { inverted: false }), + "AND2" => Some(Cell::Gate(GateOp::And)), + "OR2" => Some(Cell::Gate(GateOp::Or)), + "NAND2" => Some(Cell::Gate(GateOp::Nand)), + "NOR2" => Some(Cell::Gate(GateOp::Nor)), + "XOR2" => Some(Cell::Gate(GateOp::Xor)), + "XNOR2" => Some(Cell::Gate(GateOp::Xnor)), + _ => None, + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mapped.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mapped.rs new file mode 100644 index 000000000..b61ffc237 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mapped.rs @@ -0,0 +1,522 @@ +use std::collections::{HashMap, HashSet}; + +use crate::{GateOp, OccamError, Operand, Source}; + +use super::library::{Cell, cell_by_name}; + +#[derive(Clone, Debug, Eq, PartialEq)] +enum Definition { + Constant(bool), + Alias { + source: String, + inverted: bool, + }, + Gate { + operation: GateOp, + lhs: String, + rhs: String, + }, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MappedNetwork { + model: String, + inputs: Vec, + outputs: Vec, + definitions: HashMap, +} + +pub fn parse_mapped_blif(source: &str) -> Result { + let lines = logical_lines(source)?; + let mut model = None; + let mut inputs = None; + let mut outputs = None; + let mut definitions = HashMap::new(); + let mut ended = false; + let mut index = 0usize; + while index < lines.len() { + let line = &lines[index]; + let tokens = line.split_whitespace().collect::>(); + let directive = tokens.first().copied().unwrap_or_default(); + match directive { + ".model" => { + if model.is_some() || tokens.len() != 2 { + return Err(invalid(index + 1, "expected exactly one '.model NAME'")); + } + model = Some(tokens[1].to_owned()); + } + ".inputs" => { + if inputs.is_some() || tokens.len() < 2 { + return Err(invalid(index + 1, "invalid or duplicate .inputs")); + } + inputs = Some(unique_names(&tokens[1..], index + 1, "input")?); + } + ".outputs" => { + if outputs.is_some() || tokens.len() < 2 { + return Err(invalid(index + 1, "invalid or duplicate .outputs")); + } + outputs = Some(unique_names(&tokens[1..], index + 1, "output")?); + } + ".gate" => parse_gate(&tokens, index + 1, &mut definitions)?, + ".names" => { + if tokens.len() < 2 { + return Err(invalid(index + 1, ".names requires an output net")); + } + let header = &tokens[1..]; + let mut rows = Vec::new(); + while index + 1 < lines.len() && !lines[index + 1].starts_with('.') { + index += 1; + rows.push(lines[index].clone()); + } + parse_names(header, &rows, index + 1, &mut definitions)?; + } + ".end" => { + if tokens.len() != 1 || ended { + return Err(invalid(index + 1, "invalid or duplicate .end")); + } + ended = true; + if index + 1 != lines.len() { + return Err(invalid(index + 1, "content follows .end")); + } + } + ".latch" | ".subckt" => { + return Err(invalid( + index + 1, + "sequential logic and subcircuits are forbidden", + )); + } + _ => { + return Err(invalid( + index + 1, + &format!("unknown directive {directive}"), + )); + } + } + index += 1; + } + + let model = model.ok_or_else(|| invalid(0, "missing .model"))?; + let inputs = inputs.ok_or_else(|| invalid(0, "missing .inputs"))?; + let outputs = outputs.ok_or_else(|| invalid(0, "missing .outputs"))?; + if !ended { + return Err(invalid(0, "missing .end")); + } + let input_set = inputs.iter().cloned().collect::>(); + if input_set.len() != inputs.len() { + return Err(invalid(0, "duplicate input name")); + } + if definitions.keys().any(|name| input_set.contains(name)) { + return Err(invalid(0, "a mapped net redefines an input")); + } + let network = MappedNetwork { + model, + inputs, + outputs, + definitions, + }; + network.validate_dependencies()?; + Ok(network) +} + +impl MappedNetwork { + pub fn model(&self) -> &str { + &self.model + } + + pub fn official_gate_count(&self) -> usize { + self.definitions + .values() + .filter(|definition| matches!(definition, Definition::Gate { .. })) + .count() + } + + pub fn into_official_netlist(&self) -> Result { + let mut builder = OfficialBuilder::new(self); + let outputs = self + .outputs + .iter() + .map(|output| builder.resolve(output)) + .collect::, _>>()?; + if outputs.is_empty() { + return Err(OccamError::Validation( + "mapped network has no outputs".into(), + )); + } + let mut source = format!("INPUTS {}\n", self.inputs.len()); + source.push_str(&builder.lines.join("\n")); + if !builder.lines.is_empty() { + source.push('\n'); + } + source.push_str("OUTPUTS"); + for output in outputs { + source.push(' '); + source.push_str(&render_operand(output)); + } + source.push('\n'); + Ok(source) + } + + fn validate_dependencies(&self) -> Result<(), OccamError> { + let inputs = self.inputs.iter().cloned().collect::>(); + let mut state = HashMap::::new(); + for output in &self.outputs { + visit(output, &inputs, &self.definitions, &mut state)?; + } + Ok(()) + } +} + +struct OfficialBuilder<'a> { + network: &'a MappedNetwork, + input_indices: HashMap, + resolved: HashMap, + visiting: HashSet, + lines: Vec, + zero: Option, +} + +impl<'a> OfficialBuilder<'a> { + fn new(network: &'a MappedNetwork) -> Self { + Self { + network, + input_indices: network + .inputs + .iter() + .enumerate() + .map(|(index, name)| (name.clone(), index)) + .collect(), + resolved: HashMap::new(), + visiting: HashSet::new(), + lines: Vec::new(), + zero: None, + } + } + + fn resolve(&mut self, net: &str) -> Result { + if let Some(index) = self.input_indices.get(net) { + return Ok(Operand { + source: Source::Input(*index), + inverted: false, + }); + } + if let Some(operand) = self.resolved.get(net) { + return Ok(*operand); + } + if !self.visiting.insert(net.to_owned()) { + return Err(OccamError::Validation(format!( + "mapped BLIF contains a cycle through {net}" + ))); + } + let definition = self.network.definitions.get(net).ok_or_else(|| { + OccamError::Validation(format!("mapped BLIF references undefined net {net}")) + })?; + let operand = match definition { + Definition::Constant(value) => { + let zero = self.zero()?; + Operand { + inverted: *value, + ..zero + } + } + Definition::Alias { source, inverted } => { + let mut operand = self.resolve(source)?; + operand.inverted ^= *inverted; + operand + } + Definition::Gate { + operation, + lhs, + rhs, + } => { + let lhs = self.resolve(lhs)?; + let rhs = self.resolve(rhs)?; + let wire = self.lines.len(); + self.lines.push(format!( + "w{} = {} {} {}", + wire + 1, + operation_name(*operation), + render_operand(lhs), + render_operand(rhs) + )); + Operand { + source: Source::Wire(wire), + inverted: false, + } + } + }; + self.visiting.remove(net); + self.resolved.insert(net.to_owned(), operand); + Ok(operand) + } + + fn zero(&mut self) -> Result { + if let Some(zero) = self.zero { + return Ok(zero); + } + if self.network.inputs.is_empty() { + return Err(OccamError::Validation( + "cannot lower a constant network without an input".into(), + )); + } + let wire = self.lines.len(); + self.lines.push(format!("w{} = XOR x1 x1", wire + 1)); + let zero = Operand { + source: Source::Wire(wire), + inverted: false, + }; + self.zero = Some(zero); + Ok(zero) + } +} + +fn parse_gate( + tokens: &[&str], + line: usize, + definitions: &mut HashMap, +) -> Result<(), OccamError> { + if tokens.len() < 3 { + return Err(invalid(line, ".gate requires a cell and pin assignments")); + } + let cell = cell_by_name(tokens[1]) + .ok_or_else(|| invalid(line, &format!("unknown mapped cell {}", tokens[1])))?; + let mut pins = HashMap::new(); + for assignment in &tokens[2..] { + let (pin, net) = assignment + .split_once('=') + .ok_or_else(|| invalid(line, "gate pins must use PIN=net"))?; + if pin.is_empty() || net.is_empty() || pins.insert(pin, net).is_some() { + return Err(invalid(line, "invalid or duplicate gate pin")); + } + } + let output = take_pin(&mut pins, &["O", "Y"], line, "output")?; + let definition = match cell { + Cell::Constant(value) => Definition::Constant(value), + Cell::Alias { inverted } => Definition::Alias { + source: take_pin(&mut pins, &["a", "A", "i", "I"], line, "input")?.to_owned(), + inverted, + }, + Cell::Gate(operation) => Definition::Gate { + operation, + lhs: take_pin(&mut pins, &["a", "A"], line, "a")?.to_owned(), + rhs: take_pin(&mut pins, &["b", "B"], line, "b")?.to_owned(), + }, + }; + if !pins.is_empty() { + return Err(invalid(line, "mapped gate has unknown pins")); + } + insert_definition(definitions, output.to_owned(), definition, line) +} + +fn take_pin<'a>( + pins: &mut HashMap<&'a str, &'a str>, + choices: &[&str], + line: usize, + label: &str, +) -> Result<&'a str, OccamError> { + let matching = pins + .keys() + .copied() + .filter(|pin| choices.contains(pin)) + .collect::>(); + if matching.len() > 1 { + return Err(invalid(line, &format!("duplicate {label} pin aliases"))); + } + let key = matching + .first() + .ok_or_else(|| invalid(line, &format!("missing {label} pin")))?; + Ok(pins.remove(key).unwrap()) +} + +fn parse_names( + header: &[&str], + rows: &[String], + line: usize, + definitions: &mut HashMap, +) -> Result<(), OccamError> { + let output = header.last().unwrap().to_string(); + let inputs = &header[..header.len() - 1]; + if inputs.len() > 2 { + return Err(invalid(line, ".names supports at most two inputs")); + } + let truth = truth_vector(inputs.len(), rows, line)?; + let definition = match inputs.len() { + 0 => Definition::Constant(truth[0]), + 1 if truth == [false, true] => Definition::Alias { + source: inputs[0].to_owned(), + inverted: false, + }, + 1 if truth == [true, false] => Definition::Alias { + source: inputs[0].to_owned(), + inverted: true, + }, + 1 => { + return Err(invalid( + line, + "one-input .names must be buffer, inverter, or constant", + )); + } + 2 => Definition::Gate { + operation: operation_from_truth(&truth) + .ok_or_else(|| invalid(line, "two-input .names is outside official gate basis"))?, + lhs: inputs[0].to_owned(), + rhs: inputs[1].to_owned(), + }, + _ => unreachable!(), + }; + insert_definition(definitions, output, definition, line) +} + +fn truth_vector(arity: usize, rows: &[String], line: usize) -> Result, OccamError> { + let mut truth = vec![false; 1usize << arity]; + for row in rows { + let fields = row.split_whitespace().collect::>(); + let (cube, value) = if arity == 0 { + if fields.len() != 1 { + return Err(invalid(line, "constant .names rows contain only 0 or 1")); + } + ("", fields[0]) + } else { + if fields.len() != 2 { + return Err(invalid(line, ".names row must contain cube and output")); + } + (fields[0], fields[1]) + }; + if value != "1" || cube.len() != arity { + return Err(invalid(line, "only on-set .names cubes are accepted")); + } + for (assignment, result) in truth.iter_mut().enumerate() { + if cube.bytes().enumerate().all(|(bit, value)| match value { + b'0' => assignment & (1 << (arity - bit - 1)) == 0, + b'1' => assignment & (1 << (arity - bit - 1)) != 0, + b'-' => true, + _ => false, + }) { + *result = true; + } + } + } + Ok(truth) +} + +fn operation_from_truth(truth: &[bool]) -> Option { + match truth { + [false, false, false, true] => Some(GateOp::And), + [false, true, true, true] => Some(GateOp::Or), + [false, true, true, false] => Some(GateOp::Xor), + [true, true, true, false] => Some(GateOp::Nand), + [true, false, false, false] => Some(GateOp::Nor), + [true, false, false, true] => Some(GateOp::Xnor), + _ => None, + } +} + +fn insert_definition( + definitions: &mut HashMap, + output: String, + definition: Definition, + line: usize, +) -> Result<(), OccamError> { + if output.is_empty() || definitions.insert(output.clone(), definition).is_some() { + return Err(invalid(line, &format!("net {output:?} is defined twice"))); + } + Ok(()) +} + +fn visit( + net: &str, + inputs: &HashSet, + definitions: &HashMap, + state: &mut HashMap, +) -> Result<(), OccamError> { + if inputs.contains(net) { + return Ok(()); + } + match state.get(net) { + Some(2) => return Ok(()), + Some(1) => { + return Err(OccamError::Validation(format!( + "mapped BLIF contains a cycle through {net}" + ))); + } + _ => {} + } + state.insert(net.to_owned(), 1); + let definition = definitions.get(net).ok_or_else(|| { + OccamError::Validation(format!("mapped BLIF references undefined net {net}")) + })?; + match definition { + Definition::Constant(_) => {} + Definition::Alias { source, .. } => visit(source, inputs, definitions, state)?, + Definition::Gate { lhs, rhs, .. } => { + visit(lhs, inputs, definitions, state)?; + visit(rhs, inputs, definitions, state)?; + } + } + state.insert(net.to_owned(), 2); + Ok(()) +} + +fn logical_lines(source: &str) -> Result, OccamError> { + let mut lines = Vec::new(); + let mut pending = String::new(); + for raw in source.lines() { + let line = raw.split('#').next().unwrap_or_default().trim(); + if line.is_empty() { + continue; + } + let continued = line.ends_with('\\'); + let fragment = line.strip_suffix('\\').unwrap_or(line).trim_end(); + if !pending.is_empty() { + pending.push(' '); + } + pending.push_str(fragment); + if !continued { + lines.push(std::mem::take(&mut pending)); + } + } + if !pending.is_empty() { + return Err(OccamError::Validation( + "mapped BLIF ends with an unfinished continuation".into(), + )); + } + Ok(lines) +} + +fn unique_names(tokens: &[&str], line: usize, kind: &str) -> Result, OccamError> { + let names = tokens + .iter() + .map(|name| (*name).to_owned()) + .collect::>(); + let unique = names.iter().collect::>(); + if names.iter().any(String::is_empty) || unique.len() != names.len() { + return Err(invalid(line, &format!("duplicate or empty {kind} name"))); + } + Ok(names) +} + +fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +fn render_operand(operand: Operand) -> String { + let name = match operand.source { + Source::Input(index) => format!("x{}", index + 1), + Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} + +fn invalid(line: usize, detail: &str) -> OccamError { + OccamError::parse("mapped BLIF", line, detail) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mod.rs new file mode 100644 index 000000000..9500b4608 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/mod.rs @@ -0,0 +1,14 @@ +mod abc; +mod blif; +mod library; +mod mapped; +mod report; + +pub(crate) use abc::synthesize_partial_with_abc; +pub use abc::{compare_circuits_exhaustively, optimize_with_abc}; +pub use blif::circuit_to_blif; +pub use mapped::{MappedNetwork, parse_mapped_blif}; +pub use report::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/report.rs new file mode 100644 index 000000000..3c5e75c7c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/logic/report.rs @@ -0,0 +1,139 @@ +use std::{path::PathBuf, time::Duration}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, sha256_hex}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalCommandLimits { + pub timeout: Duration, + pub max_stdout_bytes: usize, + pub max_stderr_bytes: usize, +} + +impl Default for ExternalCommandLimits { + fn default() -> Self { + Self { + timeout: Duration::from_secs(60), + max_stdout_bytes: 4 * 1024 * 1024, + max_stderr_bytes: 4 * 1024 * 1024, + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcOptimizationConfig { + pub genlib_path: PathBuf, + pub flow_names: Vec, + pub command_limits: ExternalCommandLimits, + pub max_exhaustive_inputs: usize, +} + +impl Default for AbcOptimizationConfig { + fn default() -> Self { + Self { + genlib_path: PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("tools/abc/occam.genlib"), + flow_names: super::abc::FLOW_NAMES + .iter() + .map(|name| (*name).to_owned()) + .collect(), + command_limits: ExternalCommandLimits::default(), + max_exhaustive_inputs: 20, + } + } +} + +impl AbcOptimizationConfig { + pub fn for_tests() -> Self { + Self { + flow_names: vec!["resyn".into()], + command_limits: ExternalCommandLimits { + timeout: Duration::from_secs(20), + max_stdout_bytes: 1024 * 1024, + max_stderr_bytes: 1024 * 1024, + }, + ..Self::default() + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct AbcFlowReport { + pub name: String, + pub accepted: bool, + pub status: String, + pub abc_cec_equivalent: bool, + pub rust_exhaustive_cases: Option, + pub rust_exhaustive_mismatches: Option, + pub official_gate_count: Option, + pub circuit_sha256: Option, + pub stdout_sha256: String, + pub stderr_sha256: String, + pub diagnostic_tail: String, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct AbcPortfolioReport { + pub schema_version: u32, + pub baseline_gate_count: usize, + pub accepted_candidates: usize, + pub selected_flow: Option, + pub selected_gate_count: Option, + pub selected_circuit_sha256: Option, + pub flows: Vec, +} + +impl AbcPortfolioReport { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcCandidate { + pub flow_name: String, + pub netlist: String, + pub official_gate_count: usize, + pub circuit_sha256: String, + pub rust_exhaustive_cases: usize, + pub rust_exhaustive_mismatches: usize, +} + +impl AbcCandidate { + pub(super) fn new( + flow_name: String, + netlist: String, + official_gate_count: usize, + rust_exhaustive_cases: usize, + rust_exhaustive_mismatches: usize, + ) -> Self { + let circuit_sha256 = sha256_hex(netlist.as_bytes()); + Self { + flow_name, + netlist, + official_gate_count, + circuit_sha256, + rust_exhaustive_cases, + rust_exhaustive_mismatches, + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcOptimizationResult { + pub report: AbcPortfolioReport, + pub candidates: Vec, +} + +impl AbcOptimizationResult { + pub fn best_candidate(&self) -> Option<&AbcCandidate> { + self.candidates.first() + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/main.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/main.rs new file mode 100644 index 000000000..7d5e90604 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/main.rs @@ -0,0 +1,865 @@ +use std::{ + fs::{self, File}, + io::Write, + path::{Path, PathBuf}, + time::{Duration, Instant}, +}; + +use clap::{Parser, Subcommand, ValueEnum}; +use occam71_rust::{ + AbcOptimizationConfig, AbcPortfolioReport, ArithmeticOperation, BenchmarkBackend, + DEFAULT_LIMITS, LearnRequest, MdlLearnRequest, MdlSearchConfig, OccamError, PeepholeConfig, + PeepholeOptimizationReport, SynthesisLimits, SynthesisProblem, SynthesisStatus, TrialKey, + WindowConfig, compare_circuits_exhaustively, generate_dataset, learn_instance, learn_mdl, + load_written_instance, optimize_peepholes, optimize_with_abc, pack_dataset, parse_dataset, + parse_netlist, parse_packed_dataset, render_semantic_jsonl, ripple_carry_adder, run_benchmark, + run_isolated_experiment, run_measured_trial, sha256_hex, shift_add_multiplier, + synthesize_minimal, verify, verify_prepacked, write_instance_artifacts, write_manifest, + write_semantic_jsonl, +}; +use serde::Serialize; + +#[derive(Debug, Parser)] +#[command( + name = "occam71-rust", + version, + about = "Rust verifier for #71 Occam's Circuit" +)] +struct Cli { + #[command(subcommand)] + command: Command, +} + +#[derive(Debug, Subcommand)] +enum Command { + /// Verify a circuit against an input/output dataset. + Verify { + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + circuit: PathBuf, + #[arg(long, value_enum, default_value_t = Backend::CrossCheck)] + backend: Backend, + }, + /// Generate a format-compatible ripple-carry adder. + GenerateAdder { + #[arg(long, value_parser = parse_positive_bits)] + bits: usize, + #[arg(long)] + output: Option, + }, + /// Generate a format-compatible shift-and-add multiplier. + GenerateMultiplier { + #[arg(long, value_parser = parse_positive_bits)] + bits: usize, + #[arg(long)] + output: Option, + }, + /// Generate a deterministic disclosed arithmetic dataset. + GenerateDataset { + #[arg(long, value_enum)] + operation: DatasetOperation, + #[arg(long, value_parser = parse_dataset_bits)] + bits: usize, + #[arg(long, value_parser = parse_positive_usize)] + samples: usize, + #[arg(long)] + seed: u64, + #[arg(long)] + output: Option, + }, + /// Benchmark one verification backend after parsing the input files. + Benchmark { + #[arg(long, value_enum)] + backend: BenchmarkBackendArgument, + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + circuit: PathBuf, + #[arg(long, default_value_t = 5)] + warmup: usize, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 30)] + iterations: usize, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 5)] + batches: usize, + #[arg(long)] + json: PathBuf, + }, + /// Exactly synthesize a smallest bounded circuit from a complete truth table. + Synthesize { + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + max_gates: usize, + #[arg(long, default_value_t = 60)] + timeout_seconds: u64, + #[arg(long)] + output: PathBuf, + #[arg(long)] + certificate: PathBuf, + }, + /// Learn one hidden arithmetic family and write validated submission artifacts. + Learn { + #[arg(long)] + instance: String, + #[arg(long)] + train: PathBuf, + #[arg(long)] + test_inputs: PathBuf, + #[arg(long)] + commitment: PathBuf, + #[arg(long)] + output_dir: PathBuf, + }, + /// Learn a minimum-description expression and write its verified artifacts. + LearnMdl { + #[arg(long)] + train: PathBuf, + #[arg(long)] + test_inputs: PathBuf, + #[arg(long)] + commitment: Option, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 8)] + max_description_cost: usize, + #[arg(long, value_parser = parse_positive_u64, default_value_t = 30)] + timeout_seconds: u64, + #[arg(long)] + circuit: PathBuf, + #[arg(long)] + predictions: PathBuf, + #[arg(long)] + report: PathBuf, + }, + /// Optimize one official circuit with the pinned ABC portfolio. + OptimizeCircuit { + #[arg(long)] + circuit: PathBuf, + #[arg(long)] + abc: PathBuf, + #[arg(long)] + output: PathBuf, + #[arg(long)] + report: PathBuf, + #[arg(long, default_value_t = false)] + abc_only: bool, + }, + /// Run exactly one measured Occam research trial. + ExperimentTrial { + #[arg(long)] + config: PathBuf, + #[arg(long)] + tasks: PathBuf, + #[arg(long)] + key_json: String, + #[arg(long)] + output: PathBuf, + #[arg(long)] + abc: Option, + }, + /// Run the complete isolated Occam generalization matrix. + ExperimentRun { + #[arg(long)] + config: PathBuf, + #[arg(long)] + tasks: PathBuf, + #[arg(long = "raw-measured", alias = "raw")] + raw_measured: PathBuf, + #[arg(long)] + semantic: Option, + #[arg(long)] + abc: Option, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 1)] + jobs: usize, + #[arg(long = "check-semantic", alias = "check", default_value_t = false)] + check_semantic: bool, + }, + /// Recompute and write the aggregate A-D solution manifest. + WriteManifest { + #[arg(long)] + output_dir: PathBuf, + }, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum Backend { + Scalar, + Packed, + PackedLegacy, + CrossCheck, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum DatasetOperation { + Add, + Multiply, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum BenchmarkBackendArgument { + Scalar, + Packed, + PackedReference, + PackedInterpreted, + Compiled, +} + +impl From for BenchmarkBackend { + fn from(value: BenchmarkBackendArgument) -> Self { + match value { + BenchmarkBackendArgument::Scalar => Self::Scalar, + BenchmarkBackendArgument::Packed => Self::Packed, + BenchmarkBackendArgument::PackedReference => Self::PackedReference, + BenchmarkBackendArgument::PackedInterpreted => Self::PackedInterpreted, + BenchmarkBackendArgument::Compiled => Self::Compiled, + } + } +} + +impl From for ArithmeticOperation { + fn from(value: DatasetOperation) -> Self { + match value { + DatasetOperation::Add => Self::Add, + DatasetOperation::Multiply => Self::Multiply, + } + } +} + +impl Backend { + fn label(self) -> &'static str { + match self { + Self::Scalar => "scalar", + Self::Packed => "packed", + Self::PackedLegacy => "packed-legacy", + Self::CrossCheck => "cross-check", + } + } +} + +fn parse_positive_bits(value: &str) -> Result { + parse_positive_usize(value) +} + +fn parse_dataset_bits(value: &str) -> Result { + let bits = parse_positive_usize(value)?; + if bits > 32 { + return Err("dataset bit width must not exceed 32".into()); + } + Ok(bits) +} + +fn parse_positive_usize(value: &str) -> Result { + let bits = value + .parse::() + .map_err(|_| format!("{value:?} is not a positive integer"))?; + if bits == 0 { + return Err("bit width must be at least 1".into()); + } + Ok(bits) +} + +fn parse_positive_u64(value: &str) -> Result { + let parsed = value + .parse::() + .map_err(|_| format!("{value:?} is not a positive integer"))?; + if parsed == 0 { + return Err("value must be at least 1".into()); + } + Ok(parsed) +} + +fn read(path: &PathBuf) -> Result { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.clone(), + source, + })?; + if metadata.len() > DEFAULT_LIMITS.max_source_bytes as u64 { + return Err(OccamError::ResourceLimit { + resource: "input file bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: DEFAULT_LIMITS.max_source_bytes, + }); + } + fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.clone(), + source, + }) +} + +fn run() -> Result<(), OccamError> { + match Cli::parse().command { + Command::Verify { + dataset, + circuit, + backend, + } => { + let circuit = parse_netlist(&read(&circuit)?)?; + let dataset_source = read(&dataset)?; + let metrics = match backend { + Backend::Scalar => verify(&circuit, &parse_dataset(&dataset_source)?)?, + Backend::Packed => { + verify_prepacked(&circuit, &parse_packed_dataset(&dataset_source)?)? + } + Backend::PackedLegacy => { + let scalar_dataset = parse_dataset(&dataset_source)?; + verify_prepacked(&circuit, &pack_dataset(&scalar_dataset)?)? + } + Backend::CrossCheck => { + let scalar = verify(&circuit, &parse_dataset(&dataset_source)?)?; + let packed = + verify_prepacked(&circuit, &parse_packed_dataset(&dataset_source)?)?; + if scalar != packed { + return Err(OccamError::Validation(format!( + "backend mismatch: scalar {scalar:?}, packed {packed:?}" + ))); + } + scalar + } + }; + println!("backend: {}", backend.label()); + println!("gates: {}", metrics.gate_count); + println!("samples: {}", metrics.samples); + println!("exact matches: {}", metrics.exact_matches); + println!("exact-match acc: {:.6}", metrics.exact_match_accuracy()); + println!("correct bits: {}", metrics.correct_bits); + println!("total bits: {}", metrics.total_bits); + println!("bit accuracy: {:.6}", metrics.bit_accuracy()); + } + Command::GenerateAdder { bits, output } => { + write_generated(ripple_carry_adder(bits)?, output)?; + } + Command::GenerateMultiplier { bits, output } => { + write_generated(shift_add_multiplier(bits)?, output)?; + } + Command::GenerateDataset { + operation, + bits, + samples, + seed, + output, + } => { + write_generated( + generate_dataset(operation.into(), bits, samples, seed)?, + output, + )?; + } + Command::Benchmark { + backend, + dataset, + circuit, + warmup, + iterations, + batches, + json, + } => { + let parse_started = Instant::now(); + let parsed_circuit = parse_netlist(&read(&circuit)?)?; + let circuit_parse_duration = parse_started.elapsed(); + let dataset_source = read(&dataset)?; + let report = run_benchmark( + backend.into(), + &parsed_circuit, + &dataset_source, + warmup, + iterations, + batches, + circuit_parse_duration, + circuit.display().to_string(), + dataset.display().to_string(), + )?; + let encoded = serde_json::to_string_pretty(&report).map_err(|error| { + OccamError::Validation(format!("JSON encoding failed: {error}")) + })?; + fs::write(&json, format!("{encoded}\n")).map_err(|source| OccamError::WriteFile { + path: json.clone(), + source, + })?; + print_benchmark_summary(&report); + println!("json: {}", json.display()); + } + Command::Synthesize { + dataset, + max_gates, + timeout_seconds, + output, + certificate, + } => { + let parsed_dataset = parse_dataset(&read(&dataset)?)?; + let limits = SynthesisLimits { + max_gates, + timeout: Duration::from_secs(timeout_seconds), + ..SynthesisLimits::default() + }; + let problem = SynthesisProblem::from_dataset_with_limits(&parsed_dataset, &limits)?; + let result = synthesize_minimal(&problem, &limits)?; + write_text(&certificate, &result.to_json_pretty()?)?; + if let Some(netlist) = &result.netlist { + write_text(&output, netlist)?; + } + println!("status: {}", synthesis_status_name(result.status)); + println!("attempts: {}", result.attempts.len()); + if let Some(gates) = result.minimal_gate_count { + println!("minimal gates: {gates}"); + println!("netlist: {}", output.display()); + } else { + println!("detail: {}", result.status_detail); + } + println!("certificate: {}", certificate.display()); + } + Command::Learn { + instance, + train, + test_inputs, + commitment, + output_dir, + } => { + let training_source = read(&train)?; + let test_inputs_source = read(&test_inputs)?; + let commitment_source = read(&commitment)?; + let result = learn_instance(LearnRequest { + instance: &instance, + training_source: &training_source, + test_inputs_source: &test_inputs_source, + commitment_source: Some(&commitment_source), + limits: &DEFAULT_LIMITS, + })?; + let written = write_instance_artifacts(&output_dir, &instance, &result)?; + println!("instance: {instance}"); + println!("selected family: {}", result.report.selected_family); + println!("gates: {}", result.report.gate_count); + println!( + "training scalar: {}/{}", + result.report.training_scalar.exact_matches, result.report.training_scalar.samples + ); + println!( + "training packed: {}/{}", + result.report.training_packed.exact_matches, result.report.training_packed.samples + ); + println!( + "exhaustive: {}/{}", + result.report.exhaustive_cases - result.report.exhaustive_mismatches, + result.report.exhaustive_cases + ); + println!("prediction rows: {}", result.report.prediction_rows); + println!("prediction SHA: {}", result.report.prediction_sha256); + println!("commitment: match"); + println!("circuit: {}", written.circuit_path.display()); + println!("predictions: {}", written.prediction_path.display()); + println!("report: {}", written.report_path.display()); + } + Command::LearnMdl { + train, + test_inputs, + commitment, + max_description_cost, + timeout_seconds, + circuit, + predictions, + report, + } => { + let training_source = read(&train)?; + let test_inputs_source = read(&test_inputs)?; + let commitment_source = commitment.as_ref().map(read).transpose()?; + let timeout_millis = + timeout_seconds + .checked_mul(1_000) + .ok_or(OccamError::ArithmeticOverflow { + context: "MDL CLI timeout milliseconds", + })?; + let config = MdlSearchConfig { + max_description_cost, + timeout_millis, + ..MdlSearchConfig::default() + }; + let result = learn_mdl(MdlLearnRequest { + training_source: &training_source, + test_inputs_source: &test_inputs_source, + commitment_source: commitment_source.as_deref(), + config: &config, + limits: &DEFAULT_LIMITS, + })?; + let report_json = result.report.to_json_pretty()?; + write_atomic_bundle([ + (&circuit, result.circuit.as_str()), + (&predictions, result.prediction_csv.as_str()), + (&report, report_json.as_str()), + ])?; + println!("expression: {}", result.report.expression); + println!("description cost: {}", result.report.description_cost); + println!("gates: {}", result.report.gate_count); + println!( + "training scalar: {}/{}", + result.report.training_scalar.exact_matches, result.report.training_scalar.samples + ); + println!( + "training packed: {}/{}", + result.report.training_packed.exact_matches, result.report.training_packed.samples + ); + println!( + "exhaustive: {}/{}", + result.report.exhaustive_cases - result.report.exhaustive_mismatches, + result.report.exhaustive_cases + ); + println!("prediction rows: {}", result.report.prediction_rows); + println!("prediction SHA: {}", result.report.prediction_sha256); + println!( + "commitment: {}", + if result.report.commitment_matches == Some(true) { + "match" + } else { + "not supplied" + } + ); + println!("circuit: {}", circuit.display()); + println!("predictions: {}", predictions.display()); + println!("report: {}", report.display()); + } + Command::OptimizeCircuit { + circuit, + abc, + output, + report, + abc_only, + } => { + let parsed = parse_netlist(&read(&circuit)?)?; + let abc_result = optimize_with_abc( + &parsed, + &abc, + &AbcOptimizationConfig::default(), + &DEFAULT_LIMITS, + )?; + if abc_only { + write_text(&report, &abc_result.report.to_json_pretty()?)?; + let best = abc_result.best_candidate(); + let improved = best + .is_some_and(|candidate| candidate.official_gate_count < parsed.gates.len()); + let status = if improved { + let candidate = best.unwrap(); + write_text(&output, &candidate.netlist)?; + "improved" + } else if best.is_some() { + "unchanged" + } else { + "failed" + }; + print_optimization_summary( + status, + parsed.gates.len(), + best.map(|candidate| candidate.official_gate_count), + best.map(|candidate| candidate.flow_name.as_str()), + &report, + ); + return Ok(()); + } + + let peephole_config = PeepholeConfig { + window: WindowConfig { + min_gates: 3, + max_gates: 3, + max_inputs: 4, + max_outputs: 2, + }, + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(60), + max_attempts: 64, + max_exhaustive_inputs: 20, + }; + let original_peephole = optimize_peepholes(&parsed, &peephole_config, &DEFAULT_LIMITS)?; + let abc_circuit = abc_result + .best_candidate() + .map(|candidate| parse_netlist(&candidate.netlist)) + .transpose()? + .unwrap_or_else(|| parsed.clone()); + let abc_peephole = optimize_peepholes(&abc_circuit, &peephole_config, &DEFAULT_LIMITS)?; + + let original_source = read(&circuit)?; + let mut choices = vec![ + ( + "baseline", + parsed.gates.len(), + original_source, + parsed.clone(), + ), + ( + "peephole-baseline", + original_peephole.circuit.gates.len(), + original_peephole.netlist.clone(), + original_peephole.circuit.clone(), + ), + ( + "peephole-abc", + abc_peephole.circuit.gates.len(), + abc_peephole.netlist.clone(), + abc_peephole.circuit.clone(), + ), + ]; + if let Some(candidate) = abc_result.best_candidate() { + choices.push(( + "abc", + candidate.official_gate_count, + candidate.netlist.clone(), + abc_circuit, + )); + } + choices.sort_by(|lhs, rhs| (lhs.1, lhs.0).cmp(&(rhs.1, rhs.0))); + let (selected_source, selected_gates, selected_netlist, selected_circuit) = + choices.remove(0); + let (cases, mismatches) = + compare_circuits_exhaustively(&parsed, &selected_circuit, 20, &DEFAULT_LIMITS)?; + if selected_gates > parsed.gates.len() || mismatches != 0 { + return Err(OccamError::Validation(format!( + "combined optimization selected {selected_gates} gates with {mismatches} mismatches" + ))); + } + write_text(&output, &selected_netlist)?; + let combined = CombinedOptimizationReport { + schema_version: 1, + baseline_gate_count: parsed.gates.len(), + abc: abc_result.report, + peephole_baseline: original_peephole.report, + peephole_abc: abc_peephole.report, + selected_source: selected_source.into(), + selected_gate_count: selected_gates, + selected_circuit_sha256: sha256_hex(selected_netlist.as_bytes()), + exhaustive_cases: cases, + exhaustive_mismatches: mismatches, + }; + let report_json = serde_json::to_string_pretty(&combined) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| { + OccamError::Validation(format!("JSON encoding failed: {error}")) + })?; + write_text(&report, &report_json)?; + let status = if selected_gates < parsed.gates.len() { + "improved" + } else { + "unchanged" + }; + print_optimization_summary( + status, + parsed.gates.len(), + Some(selected_gates), + Some(selected_source), + &report, + ); + } + Command::ExperimentTrial { + config, + tasks, + key_json, + output, + abc, + } => { + let key: TrialKey = serde_json::from_str(&key_json).map_err(|error| { + OccamError::Validation(format!("invalid trial key JSON: {error}")) + })?; + let record = run_measured_trial(&config, &tasks, key, &output, abc)?; + println!("status: {:?}", record.status); + println!("runtime micros: {}", record.runtime_micros); + println!("peak RSS bytes: {}", record.peak_rss_bytes); + println!("record: {}", output.display()); + } + Command::ExperimentRun { + config, + tasks, + raw_measured, + semantic, + abc, + jobs, + check_semantic, + } => { + if check_semantic && semantic.is_none() { + return Err(OccamError::Validation( + "--check-semantic requires --semantic".into(), + )); + } + let executable = std::env::current_exe().map_err(|error| { + OccamError::Validation(format!("cannot resolve current executable: {error}")) + })?; + let records = run_isolated_experiment( + &executable, + &config, + &tasks, + &raw_measured, + abc.as_deref(), + jobs, + )?; + println!("trials: {}", records.len()); + println!("jobs requested: {jobs}"); + println!("raw measured: {}", raw_measured.display()); + if let Some(semantic) = semantic { + if check_semantic { + let expected = + fs::read_to_string(&semantic).map_err(|source| OccamError::ReadFile { + path: semantic.clone(), + source, + })?; + let actual = render_semantic_jsonl(&records)?; + if actual != expected { + return Err(OccamError::Validation( + "regenerated semantic JSONL differs".into(), + )); + } + println!("status: semantic projection reproducible"); + } else { + write_semantic_jsonl(&semantic, &records)?; + } + println!("semantic target: {}", semantic.display()); + } + } + Command::WriteManifest { output_dir } => { + let instances = ["mystery-A", "mystery-B", "mystery-C", "mystery-D"] + .into_iter() + .map(|instance| load_written_instance(&output_dir, instance, &DEFAULT_LIMITS)) + .collect::, _>>()?; + let path = write_manifest(&output_dir, &instances)?; + println!("instances: {}", instances.len()); + println!("manifest: {}", path.display()); + } + } + Ok(()) +} + +#[derive(Serialize)] +struct CombinedOptimizationReport { + schema_version: u32, + baseline_gate_count: usize, + abc: AbcPortfolioReport, + peephole_baseline: PeepholeOptimizationReport, + peephole_abc: PeepholeOptimizationReport, + selected_source: String, + selected_gate_count: usize, + selected_circuit_sha256: String, + exhaustive_cases: usize, + exhaustive_mismatches: usize, +} + +fn print_optimization_summary( + status: &str, + baseline_gates: usize, + candidate_gates: Option, + flow: Option<&str>, + report: &Path, +) { + println!("status: {status}"); + println!("baseline gates: {baseline_gates}"); + if let Some(candidate_gates) = candidate_gates { + println!("candidate gates: {candidate_gates}"); + } + if let Some(flow) = flow { + println!("flow: {flow}"); + } + println!("report: {}", report.display()); +} + +fn synthesis_status_name(status: SynthesisStatus) -> &'static str { + match status { + SynthesisStatus::Sat => "sat", + SynthesisStatus::NoCircuitWithinBound => "no-circuit-within-bound", + SynthesisStatus::Timeout => "timeout", + SynthesisStatus::ResourceLimit => "resource-limit", + } +} + +fn print_benchmark_summary(report: &occam71_rust::BenchmarkReport) { + println!("backend: {}", report.backend); + println!("samples: {}", report.samples); + println!("gates: {}", report.gates); + println!("parse: {:.3} ms", report.parse_ns as f64 / 1e6); + if let Some(packing_ns) = report.packing_ns { + println!("packing: {:.3} ms", packing_ns as f64 / 1e6); + } + println!( + "median evaluate: {:.3} ms", + report.evaluation.median_ns as f64 / 1e6 + ); + println!( + "one-shot: {:.3} ms", + report.one_shot_ns as f64 / 1e6 + ); + println!( + "samples/s: {:.3}", + report.samples_per_second_at_median + ); +} + +fn write_generated(netlist: String, output: Option) -> Result<(), OccamError> { + if let Some(path) = output { + fs::write(&path, netlist).map_err(|source| OccamError::WriteFile { path, source })?; + } else { + print!("{netlist}"); + } + Ok(()) +} + +fn write_text(path: &PathBuf, contents: &str) -> Result<(), OccamError> { + fs::write(path, contents).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + }) +} + +fn write_atomic_bundle(writes: [(&PathBuf, &str); 3]) -> Result<(), OccamError> { + for index in 0..writes.len() { + for other in index + 1..writes.len() { + if writes[index].0 == writes[other].0 { + return Err(OccamError::Validation(format!( + "MDL artifact paths must be distinct: {}", + writes[index].0.display() + ))); + } + } + } + for (path, _) in &writes { + let parent = path.parent().unwrap_or_else(|| Path::new(".")); + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary_paths = writes + .iter() + .map(|(path, _)| temporary_path(path)) + .collect::>(); + let result = (|| { + for ((_, contents), temporary) in writes.iter().zip(&temporary_paths) { + let mut file = File::create(temporary).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + file.write_all(contents.as_bytes()) + .and_then(|()| file.sync_all()) + .map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + } + for ((path, _), temporary) in writes.iter().zip(&temporary_paths) { + fs::rename(temporary, path).map_err(|source| OccamError::WriteFile { + path: (*path).clone(), + source, + })?; + } + Ok(()) + })(); + if result.is_err() { + for temporary in temporary_paths { + let _ = fs::remove_file(temporary); + } + } + result +} + +fn temporary_path(path: &Path) -> PathBuf { + let file_name = path.file_name().and_then(|name| name.to_str()).unwrap(); + path.with_file_name(format!( + ".{file_name}.{}.tmp-occam71-mdl", + std::process::id() + )) +} + +fn main() { + if let Err(error) = run() { + eprintln!("error: {error}"); + std::process::exit(1); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/metrics.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/metrics.rs new file mode 100644 index 000000000..05ec9e0ec --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/metrics.rs @@ -0,0 +1,150 @@ +use crate::{ + Circuit, DEFAULT_LIMITS, Dataset, OccamError, ResourceLimits, evaluate_with_limits, + limits::{checked_add, checked_mul}, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct VerificationMetrics { + pub samples: usize, + pub gate_count: usize, + pub exact_matches: usize, + pub correct_bits: usize, + pub total_bits: usize, +} + +impl VerificationMetrics { + pub fn exact_match_accuracy(&self) -> f64 { + self.exact_matches as f64 / self.samples as f64 + } + + pub fn bit_accuracy(&self) -> f64 { + self.correct_bits as f64 / self.total_bits as f64 + } +} + +pub fn verify(circuit: &Circuit, dataset: &Dataset) -> Result { + verify_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_with_limits( + circuit: &Circuit, + dataset: &Dataset, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != dataset.input_width { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match circuit INPUTS {}", + dataset.input_width, circuit.input_count + ))); + } + if circuit.outputs.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "circuit has {} outputs, dataset has {}", + circuit.outputs.len(), + dataset.output_width + ))); + } + limits.require( + "dataset input width", + dataset.input_width, + limits.max_input_width, + )?; + limits.require( + "dataset output width", + dataset.output_width, + limits.max_output_width, + )?; + limits.require("dataset samples", dataset.samples.len(), limits.max_samples)?; + let row_bits = checked_add( + dataset.input_width, + dataset.output_width, + "dataset bits per sample", + )?; + let dataset_bits = checked_mul(row_bits, dataset.samples.len(), "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + + let mut exact_matches = 0; + let mut correct_bits = 0; + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let predicted = evaluate_with_limits(circuit, &sample.input, limits)?; + if predicted == sample.expected { + exact_matches += 1; + } + correct_bits = checked_add( + correct_bits, + predicted + .iter() + .zip(&sample.expected) + .filter(|(predicted, expected)| predicted == expected) + .count(), + "scalar correct bit count", + )?; + } + + Ok(VerificationMetrics { + samples: dataset.samples.len(), + gate_count: circuit.gates.len(), + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.samples.len(), + dataset.output_width, + "verification bit count", + )?, + }) +} + +#[cfg(test)] +mod tests { + use crate::{parse_dataset, parse_netlist}; + + use super::*; + + #[test] + fn counts_exact_matches_and_correct_bits() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1").unwrap(); + let dataset = parse_dataset("input,output\n00,0\n01,1\n10,0\n11,0").unwrap(); + let metrics = verify(&circuit, &dataset).unwrap(); + assert_eq!(metrics.samples, 4); + assert_eq!(metrics.gate_count, 1); + assert_eq!(metrics.exact_matches, 3); + assert_eq!(metrics.correct_bits, 3); + assert_eq!(metrics.total_bits, 4); + assert_eq!(metrics.exact_match_accuracy(), 0.75); + assert_eq!(metrics.bit_accuracy(), 0.75); + } + + #[test] + fn rejects_input_and_output_width_mismatches() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + let bad_input = parse_dataset("input,output\n0,0").unwrap(); + let bad_output = parse_dataset("input,output\n00,00").unwrap(); + assert!(verify(&circuit, &bad_input).is_err()); + assert!(verify(&circuit, &bad_output).is_err()); + } + + #[test] + fn rejects_inconsistent_public_dataset_rows() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + let mut dataset = parse_dataset("input,output\n00,0").unwrap(); + dataset.samples[0].expected.clear(); + assert!(verify(&circuit, &dataset).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/netlist.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/netlist.rs new file mode 100644 index 000000000..9323e78a9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/netlist.rs @@ -0,0 +1,334 @@ +use std::collections::HashMap; + +use crate::{ + Circuit, DEFAULT_LIMITS, Gate, GateOp, OccamError, Operand, ResourceLimits, Source, + limits::checked_add, +}; + +pub fn parse_netlist(source: &str) -> Result { + parse_netlist_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_netlist_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + limits.require( + "netlist source bytes", + source.len(), + limits.max_source_bytes, + )?; + let mut input_count = None; + let mut outputs = None; + let mut gates = Vec::new(); + let mut wires = HashMap::::new(); + + for (line_index, raw_line) in source.lines().enumerate() { + let line_number = line_index + 1; + let line = raw_line.split('#').next().unwrap_or_default().trim(); + if line.is_empty() { + continue; + } + let tokens: Vec<_> = line.split_whitespace().collect(); + match tokens.first().copied() { + Some("INPUTS") => { + if input_count.is_some() { + return Err(OccamError::parse( + "netlist", + line_number, + "duplicate INPUTS declaration", + )); + } + if tokens.len() != 2 { + return Err(OccamError::parse( + "netlist", + line_number, + "INPUTS requires exactly one positive integer", + )); + } + let count = tokens[1].parse::().map_err(|_| { + OccamError::parse( + "netlist", + line_number, + format!("invalid input count {}", tokens[1]), + ) + })?; + if count == 0 { + return Err(OccamError::parse( + "netlist", + line_number, + "input count must be positive", + )); + } + limits.require("circuit inputs", count, limits.max_inputs)?; + input_count = Some(count); + } + Some("OUTPUTS") => { + if outputs.is_some() { + return Err(OccamError::parse( + "netlist", + line_number, + "duplicate OUTPUTS declaration", + )); + } + let count = input_count.ok_or_else(|| { + OccamError::parse("netlist", line_number, "INPUTS must appear before OUTPUTS") + })?; + if tokens.len() < 2 { + return Err(OccamError::parse( + "netlist", + line_number, + "OUTPUTS requires at least one operand", + )); + } + limits.require("circuit outputs", tokens.len() - 1, limits.max_outputs)?; + outputs = Some( + tokens[1..] + .iter() + .map(|token| parse_operand(token, count, &wires, line_number)) + .collect::, _>>()?, + ); + } + Some(_) => { + let count = input_count.ok_or_else(|| { + OccamError::parse( + "netlist", + line_number, + "INPUTS must appear before gate definitions", + ) + })?; + if tokens.len() != 5 || tokens[1] != "=" { + return Err(OccamError::parse( + "netlist", + line_number, + format!("bad gate line: {line}"), + )); + } + let wire_id = parse_wire_name(tokens[0], line_number)?; + if wires.contains_key(&wire_id) { + return Err(OccamError::parse( + "netlist", + line_number, + format!("wire w{wire_id} defined twice"), + )); + } + let op = parse_gate_op(tokens[2], line_number)?; + let lhs = parse_operand(tokens[3], count, &wires, line_number)?; + let rhs = parse_operand(tokens[4], count, &wires, line_number)?; + let dense_id = gates.len(); + let next_gate_count = checked_add(dense_id, 1, "circuit gate count")?; + limits.require("circuit gates", next_gate_count, limits.max_gates)?; + wires.insert(wire_id, dense_id); + gates.push(Gate { + output: dense_id, + op, + lhs, + rhs, + }); + } + None => unreachable!(), + } + } + + let input_count = + input_count.ok_or_else(|| OccamError::Validation("missing INPUTS line".into()))?; + let outputs = outputs.ok_or_else(|| OccamError::Validation("missing OUTPUTS line".into()))?; + Ok(Circuit { + input_count, + wire_count: gates.len(), + gates, + outputs, + }) +} + +fn parse_gate_op(token: &str, line: usize) -> Result { + match token { + "AND" => Ok(GateOp::And), + "OR" => Ok(GateOp::Or), + "XOR" => Ok(GateOp::Xor), + "NAND" => Ok(GateOp::Nand), + "NOR" => Ok(GateOp::Nor), + "XNOR" => Ok(GateOp::Xnor), + _ => Err(OccamError::parse( + "netlist", + line, + format!("unknown op {token}; allowed: AND OR XOR NAND NOR XNOR"), + )), + } +} + +fn parse_operand( + token: &str, + input_count: usize, + wires: &HashMap, + line: usize, +) -> Result { + let (inverted, name) = token + .strip_prefix('~') + .map_or((false, token), |name| (true, name)); + if name.is_empty() { + return Err(OccamError::parse("netlist", line, "empty inverted operand")); + } + let source = if let Some(number) = name.strip_prefix('x') { + let one_based = parse_positive_id(number, "input", line)?; + if one_based > input_count { + return Err(OccamError::parse( + "netlist", + line, + format!("input x{one_based} out of range 1..={input_count}"), + )); + } + Source::Input(one_based - 1) + } else if let Some(number) = name.strip_prefix('w') { + let external = parse_positive_id(number, "wire", line)?; + let dense = wires.get(&external).copied().ok_or_else(|| { + OccamError::parse( + "netlist", + line, + format!("wire w{external} used before definition"), + ) + })?; + Source::Wire(dense) + } else { + return Err(OccamError::parse( + "netlist", + line, + format!("bad operand {token}"), + )); + }; + Ok(Operand { source, inverted }) +} + +fn parse_wire_name(token: &str, line: usize) -> Result { + let number = token.strip_prefix('w').ok_or_else(|| { + OccamError::parse( + "netlist", + line, + format!("gate output must be a wire name, got {token}"), + ) + })?; + parse_positive_id(number, "wire", line) +} + +fn parse_positive_id(token: &str, kind: &str, line: usize) -> Result { + let id = token.parse::().map_err(|_| { + OccamError::parse( + "netlist", + line, + format!("invalid {kind} identifier {token}"), + ) + })?; + if id == 0 { + return Err(OccamError::parse( + "netlist", + line, + format!("{kind} identifiers are one-based"), + )); + } + Ok(id) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_all_gates_comments_and_inverted_output() { + let source = " + # all supported operations + INPUTS 2 + w1 = AND x1 x2 + w2 = OR w1 x1 + w3 = XOR w2 x2 + w4 = NAND w3 x1 + w5 = NOR w4 x2 + w6 = XNOR ~w5 x1 + OUTPUTS ~w6 x2 + "; + let circuit = parse_netlist(source).unwrap(); + assert_eq!(circuit.input_count, 2); + assert_eq!(circuit.gates.len(), 6); + assert_eq!(circuit.outputs.len(), 2); + assert!(circuit.outputs[0].inverted); + } + + #[test] + fn rejects_duplicate_wire() { + let error = + parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nw1 = OR x1 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("defined twice")); + } + + #[test] + fn rejects_undefined_wire() { + let error = parse_netlist("INPUTS 1\nw1 = XOR w2 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("used before definition")); + } + + #[test] + fn rejects_out_of_range_input() { + let error = parse_netlist("INPUTS 1\nw1 = XOR x2 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("out of range")); + } + + #[test] + fn rejects_unknown_gate() { + let error = parse_netlist("INPUTS 1\nw1 = IMP x1 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("unknown op")); + } + + #[test] + fn requires_declarations() { + assert!(parse_netlist("OUTPUTS x1").is_err()); + assert!(parse_netlist("INPUTS 1").is_err()); + } + + #[test] + fn rejects_malformed_gate_line() { + let error = parse_netlist("INPUTS 1\nw1 XOR x1 x1\nOUTPUTS x1").unwrap_err(); + assert!(error.to_string().contains("bad gate line")); + } + + #[test] + fn enforces_input_gate_output_and_source_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_inputs = 1; + assert!(matches!( + parse_netlist_with_limits("INPUTS 2\nOUTPUTS x1", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit inputs", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_gates = 0; + assert!(matches!( + parse_netlist_with_limits("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit gates", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_outputs = 1; + assert!(matches!( + parse_netlist_with_limits("INPUTS 2\nOUTPUTS x1 x2", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit outputs", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_netlist_with_limits("INPUTS 1\nOUTPUTS x1", &limits), + Err(OccamError::ResourceLimit { + resource: "netlist source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/equivalence.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/equivalence.rs new file mode 100644 index 000000000..6a4f3d00d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/equivalence.rs @@ -0,0 +1,90 @@ +use std::collections::{HashMap, HashSet, VecDeque}; + +use crate::{Circuit, GateOp, OccamError, Operand, Source}; + +pub(super) fn window_is_convex(circuit: &Circuit, gate_indices: &[usize]) -> bool { + let internal = gate_indices.iter().copied().collect::>(); + if internal.len() != gate_indices.len() + || gate_indices + .iter() + .any(|index| *index >= circuit.gates.len()) + { + return false; + } + let mut fanouts = vec![Vec::new(); circuit.gates.len()]; + for (consumer, gate) in circuit.gates.iter().enumerate() { + for operand in [gate.lhs, gate.rhs] { + if let Source::Wire(producer) = operand.source { + fanouts[producer].push(consumer); + } + } + } + for start in gate_indices { + let mut queue = VecDeque::from([(*start, false)]); + let mut seen = HashSet::new(); + while let Some((current, left_window)) = queue.pop_front() { + if !seen.insert((current, left_window)) { + continue; + } + for next in &fanouts[current] { + let next_is_internal = internal.contains(next); + let left_window = left_window || !next_is_internal; + if next_is_internal && left_window { + return false; + } + queue.push_back((*next, left_window)); + } + } + } + true +} + +pub(super) fn evaluate_window( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + assignment: usize, +) -> Result, OccamError> { + let mut values = HashMap::new(); + for (bit, source) in boundary_inputs.iter().enumerate() { + values.insert(*source, assignment & (1usize << bit) != 0); + } + for index in gate_indices { + let gate = circuit.gates.get(*index).ok_or_else(|| { + OccamError::Validation(format!("window gate index {index} is out of range")) + })?; + let lhs = operand_value(gate.lhs, &values)?; + let rhs = operand_value(gate.rhs, &values)?; + values.insert(Source::Wire(*index), gate.op.apply(lhs, rhs)); + } + boundary_outputs + .iter() + .map(|source| { + values.get(source).copied().ok_or_else(|| { + OccamError::Validation(format!("window output {source:?} was not evaluated")) + }) + }) + .collect() +} + +fn operand_value(operand: Operand, values: &HashMap) -> Result { + let value = values.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!( + "window operand {:?} is absent from its boundary", + operand.source + )) + })?; + Ok(value ^ operand.inverted) +} + +pub(super) fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/mod.rs new file mode 100644 index 000000000..73b689e29 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/mod.rs @@ -0,0 +1,13 @@ +mod equivalence; +mod peephole; +mod report; +mod rewrite; +mod window; + +pub use peephole::{PeepholeConfig, optimize_peepholes}; +pub use report::{ + PeepholeAttemptReport, PeepholeBoundReport, PeepholeOptimizationReport, + PeepholeOptimizationResult, +}; +pub use rewrite::rewrite_with_candidate; +pub use window::{CircuitWindow, WindowConfig, extract_windows}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/peephole.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/peephole.rs new file mode 100644 index 000000000..60d48dcb6 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/peephole.rs @@ -0,0 +1,275 @@ +use std::time::{Duration, Instant}; + +use crate::{ + AttemptStatus, Circuit, OccamError, ResourceLimits, SynthesisLimits, SynthesisProblem, + SynthesisStatus, compare_circuits_exhaustively, parse_netlist_with_limits, sha256_hex, + synthesize_minimal, +}; + +use super::{ + CircuitWindow, PeepholeAttemptReport, PeepholeBoundReport, PeepholeOptimizationReport, + PeepholeOptimizationResult, WindowConfig, extract_windows, rewrite_with_candidate, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct PeepholeConfig { + pub window: WindowConfig, + pub per_window_timeout: Duration, + pub global_timeout: Duration, + pub max_attempts: usize, + pub max_exhaustive_inputs: usize, +} + +impl Default for PeepholeConfig { + fn default() -> Self { + Self { + window: WindowConfig::default(), + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(600), + max_attempts: 10_000, + max_exhaustive_inputs: 20, + } + } +} + +impl PeepholeConfig { + pub fn for_tests() -> Self { + Self { + window: WindowConfig { + min_gates: 3, + max_gates: 5, + max_inputs: 4, + max_outputs: 2, + }, + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(30), + max_attempts: 100, + max_exhaustive_inputs: 12, + } + } +} + +pub fn optimize_peepholes( + original: &Circuit, + config: &PeepholeConfig, + limits: &ResourceLimits, +) -> Result { + validate_config(config)?; + let started = Instant::now(); + let mut current = original.clone(); + let mut current_netlist = render_existing(original); + let mut attempts = Vec::new(); + let mut accepted_replacements = 0usize; + let mut termination = "fixed-point".to_owned(); + + 'fixed_point: loop { + let windows = extract_windows(¤t, config.window)?; + for window in windows { + if attempts.len() >= config.max_attempts { + termination = "attempt-limit".into(); + break 'fixed_point; + } + if started.elapsed() >= config.global_timeout { + termination = "global-timeout".into(); + break 'fixed_point; + } + let remaining = config.global_timeout.saturating_sub(started.elapsed()); + let timeout = config.per_window_timeout.min(remaining); + let (attempt, replacement) = synthesize_window(&window, timeout, config, limits)?; + if let Some(replacement) = replacement { + match rewrite_with_candidate(¤t, &window, &replacement, limits) { + Ok((candidate, netlist)) => { + let (cases, mismatches) = compare_circuits_exhaustively( + ¤t, + &candidate, + config.max_exhaustive_inputs, + limits, + )?; + let improved = candidate.gates.len() < current.gates.len(); + let mut attempt = attempt; + attempt.candidate_whole_gates = Some(candidate.gates.len()); + attempt.whole_circuit_mismatches = Some(mismatches); + attempt.accepted = improved && mismatches == 0; + if attempt.accepted { + current = candidate; + current_netlist = netlist; + accepted_replacements = accepted_replacements.checked_add(1).ok_or( + OccamError::ArithmeticOverflow { + context: "accepted peephole replacements", + }, + )?; + attempts.push(attempt); + continue 'fixed_point; + } + debug_assert!(cases > 0); + attempts.push(attempt); + } + Err(error) => { + let mut attempt = attempt; + attempt.status = format!("splice-rejected: {error}"); + attempts.push(attempt); + } + } + } else { + attempts.push(attempt); + } + } + break; + } + let (whole_circuit_cases, whole_circuit_mismatches) = + compare_circuits_exhaustively(original, ¤t, config.max_exhaustive_inputs, limits)?; + if whole_circuit_mismatches != 0 { + return Err(OccamError::Validation(format!( + "peephole result has {whole_circuit_mismatches} whole-circuit mismatches" + ))); + } + let report = PeepholeOptimizationReport { + schema_version: 1, + window_config: config.window, + baseline_gate_count: original.gates.len(), + final_gate_count: current.gates.len(), + attempted_windows: attempts.len(), + accepted_replacements, + termination, + whole_circuit_cases, + whole_circuit_mismatches, + final_circuit_sha256: sha256_hex(current_netlist.as_bytes()), + attempts, + }; + Ok(PeepholeOptimizationResult { + circuit: current, + netlist: current_netlist, + report, + }) +} + +fn synthesize_window( + window: &CircuitWindow, + timeout: Duration, + config: &PeepholeConfig, + limits: &ResourceLimits, +) -> Result<(PeepholeAttemptReport, Option), OccamError> { + let maximum_gate_bound = + window + .gate_indices + .len() + .checked_sub(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "peephole synthesis gate bound", + })?; + let synthesis_limits = SynthesisLimits { + max_inputs: config.window.max_inputs, + max_outputs: config.window.max_outputs, + max_truth_rows: 1usize << config.window.max_inputs, + max_gates: maximum_gate_bound, + timeout, + ..SynthesisLimits::default() + }; + let problem = + SynthesisProblem::from_dataset_with_limits(&window.truth_table, &synthesis_limits)?; + let certificate = synthesize_minimal(&problem, &synthesis_limits)?; + let status = synthesis_status(certificate.status).to_owned(); + let candidate_window_gates = certificate.minimal_gate_count; + let bounds = certificate + .attempts + .iter() + .map(|attempt| PeepholeBoundReport { + gate_bound: attempt.gate_bound, + status: attempt_status(attempt.status).into(), + variables: attempt.variables, + clauses: attempt.clauses, + literals: attempt.literals, + }) + .collect(); + let attempt = PeepholeAttemptReport { + window_identity_sha256: window.identity_sha256.clone(), + original_window_gates: window.gate_indices.len(), + boundary_inputs: window.boundary_inputs.len(), + boundary_outputs: window.boundary_outputs.len(), + status, + candidate_window_gates, + candidate_whole_gates: None, + whole_circuit_mismatches: None, + accepted: false, + bounds, + }; + let replacement = certificate + .netlist + .as_deref() + .map(|netlist| parse_netlist_with_limits(netlist, limits)) + .transpose()?; + Ok((attempt, replacement)) +} + +fn validate_config(config: &PeepholeConfig) -> Result<(), OccamError> { + if config.global_timeout.is_zero() + || config.max_attempts == 0 + || config.max_exhaustive_inputs == 0 + { + return Err(OccamError::Validation( + "peephole global timeout and limits must be positive".into(), + )); + } + Ok(()) +} + +fn attempt_status(status: AttemptStatus) -> &'static str { + match status { + AttemptStatus::Sat => "sat", + AttemptStatus::Unsat => "unsat", + AttemptStatus::Timeout => "timeout", + AttemptStatus::ResourceLimit => "resource-limit", + } +} + +fn synthesis_status(status: SynthesisStatus) -> &'static str { + match status { + SynthesisStatus::Sat => "sat", + SynthesisStatus::NoCircuitWithinBound => "no-circuit-within-bound", + SynthesisStatus::Timeout => "timeout", + SynthesisStatus::ResourceLimit => "resource-limit", + } +} + +fn render_existing(circuit: &Circuit) -> String { + let mut source = format!("INPUTS {}\n", circuit.input_count); + for gate in &circuit.gates { + source.push_str(&format!( + "w{} = {} {} {}\n", + gate.output + 1, + gate_name(gate.op), + operand_name(gate.lhs), + operand_name(gate.rhs) + )); + } + source.push_str("OUTPUTS"); + for output in &circuit.outputs { + source.push(' '); + source.push_str(&operand_name(*output)); + } + source.push('\n'); + source +} + +fn gate_name(operation: crate::GateOp) -> &'static str { + match operation { + crate::GateOp::And => "AND", + crate::GateOp::Or => "OR", + crate::GateOp::Xor => "XOR", + crate::GateOp::Nand => "NAND", + crate::GateOp::Nor => "NOR", + crate::GateOp::Xnor => "XNOR", + } +} + +fn operand_name(operand: crate::Operand) -> String { + let name = match operand.source { + crate::Source::Input(index) => format!("x{}", index + 1), + crate::Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/report.rs new file mode 100644 index 000000000..cc68a8fb8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/report.rs @@ -0,0 +1,61 @@ +use serde::{Deserialize, Serialize}; + +use crate::{Circuit, OccamError}; + +use super::WindowConfig; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeBoundReport { + pub gate_bound: usize, + pub status: String, + pub variables: usize, + pub clauses: usize, + pub literals: usize, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeAttemptReport { + pub window_identity_sha256: String, + pub original_window_gates: usize, + pub boundary_inputs: usize, + pub boundary_outputs: usize, + pub status: String, + pub candidate_window_gates: Option, + pub candidate_whole_gates: Option, + pub whole_circuit_mismatches: Option, + pub accepted: bool, + pub bounds: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeOptimizationReport { + pub schema_version: u32, + pub window_config: WindowConfig, + pub baseline_gate_count: usize, + pub final_gate_count: usize, + pub attempted_windows: usize, + pub accepted_replacements: usize, + pub termination: String, + pub whole_circuit_cases: usize, + pub whole_circuit_mismatches: usize, + pub final_circuit_sha256: String, + pub attempts: Vec, +} + +impl PeepholeOptimizationReport { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PeepholeOptimizationResult { + pub circuit: Circuit, + pub netlist: String, + pub report: PeepholeOptimizationReport, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/rewrite.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/rewrite.rs new file mode 100644 index 000000000..da1a216c3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/rewrite.rs @@ -0,0 +1,133 @@ +use std::collections::{HashMap, HashSet}; + +use crate::{ + Circuit, CircuitBuilder, CircuitWindow, OccamError, Operand, ResourceLimits, Signal, Source, + parse_netlist_with_limits, +}; + +pub fn rewrite_with_candidate( + original: &Circuit, + window: &CircuitWindow, + replacement: &Circuit, + limits: &ResourceLimits, +) -> Result<(Circuit, String), OccamError> { + if replacement.input_count != window.boundary_inputs.len() { + return Err(OccamError::Validation(format!( + "replacement input count {} does not match window boundary {}", + replacement.input_count, + window.boundary_inputs.len() + ))); + } + if replacement.outputs.len() != window.boundary_outputs.len() { + return Err(OccamError::Validation(format!( + "replacement output count {} does not match window boundary {}", + replacement.outputs.len(), + window.boundary_outputs.len() + ))); + } + let internal = window.gate_indices.iter().copied().collect::>(); + if internal.len() != window.gate_indices.len() || internal.is_empty() { + return Err(OccamError::Validation( + "replacement window gate set is empty or duplicated".into(), + )); + } + let insertion = *window.gate_indices.first().unwrap(); + if window + .boundary_inputs + .iter() + .any(|source| matches!(source, Source::Wire(index) if *index >= insertion)) + { + return Err(OccamError::Validation( + "replacement boundary input is unavailable at insertion point".into(), + )); + } + + let mut builder = CircuitBuilder::new(original.input_count, limits)?; + let mut mapping = (0..original.input_count) + .map(|index| (Source::Input(index), Signal::input(index))) + .collect::>(); + for index in 0..original.gates.len() { + if index == insertion { + let available = mapping.clone(); + splice_candidate(&mut builder, &available, &mut mapping, window, replacement)?; + } + if internal.contains(&index) { + continue; + } + let gate = &original.gates[index]; + let lhs = remap_operand(gate.lhs, &mapping)?; + let rhs = remap_operand(gate.rhs, &mapping)?; + let output = builder.binary(gate.op, lhs, rhs)?; + mapping.insert(Source::Wire(index), output); + } + let outputs = original + .outputs + .iter() + .map(|operand| remap_operand(*operand, &mapping)) + .collect::, _>>()?; + let synthesized = builder.finish(&outputs)?; + let reparsed = parse_netlist_with_limits(&synthesized.netlist, limits)?; + Ok((reparsed, synthesized.netlist)) +} + +fn splice_candidate( + builder: &mut CircuitBuilder<'_>, + original_mapping: &HashMap, + whole_mapping: &mut HashMap, + window: &CircuitWindow, + replacement: &Circuit, +) -> Result<(), OccamError> { + let mut local_mapping = window + .boundary_inputs + .iter() + .enumerate() + .map(|(index, original_source)| { + original_mapping + .get(original_source) + .copied() + .map(|signal| (Source::Input(index), signal)) + .ok_or_else(|| { + OccamError::Validation(format!( + "replacement boundary input {original_source:?} has no whole-circuit mapping" + )) + }) + }) + .collect::, _>>()?; + for (index, gate) in replacement.gates.iter().enumerate() { + if gate.output != index { + return Err(OccamError::Validation( + "replacement circuit wires must be dense".into(), + )); + } + let lhs = remap_operand(gate.lhs, &local_mapping)?; + let rhs = remap_operand(gate.rhs, &local_mapping)?; + let output = builder.binary(gate.op, lhs, rhs)?; + local_mapping.insert(Source::Wire(index), output); + } + for (original_output, replacement_output) in + window.boundary_outputs.iter().zip(&replacement.outputs) + { + whole_mapping.insert( + *original_output, + remap_operand(*replacement_output, &local_mapping)?, + ); + } + Ok(()) +} + +fn remap_operand( + operand: Operand, + mapping: &HashMap, +) -> Result { + let signal = mapping.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!( + "rewritten operand {:?} has no source mapping", + operand.source + )) + })?; + Ok(if operand.inverted { + signal.inverted() + } else { + signal + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/window.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/window.rs new file mode 100644 index 000000000..8134b03db --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimization/window.rs @@ -0,0 +1,333 @@ +use std::collections::{BTreeSet, HashMap, HashSet}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + Circuit, DEFAULT_LIMITS, Dataset, OccamError, Operand, Sample, Source, parse_netlist, + sha256_hex, verify, +}; + +use super::equivalence::{evaluate_window, operation_name, window_is_convex}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct WindowConfig { + pub min_gates: usize, + pub max_gates: usize, + pub max_inputs: usize, + pub max_outputs: usize, +} + +impl Default for WindowConfig { + fn default() -> Self { + Self { + min_gates: 4, + max_gates: 8, + max_inputs: 8, + max_outputs: 4, + } + } +} + +impl WindowConfig { + pub fn for_tests() -> Self { + Self { + min_gates: 2, + max_gates: 6, + max_inputs: 6, + max_outputs: 4, + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct CircuitWindow { + pub gate_indices: Vec, + pub boundary_inputs: Vec, + pub boundary_outputs: Vec, + pub truth_table: Dataset, + pub identity_sha256: String, +} + +impl CircuitWindow { + pub fn is_convex(&self, circuit: &Circuit) -> bool { + window_is_convex(circuit, &self.gate_indices) + } +} + +pub fn extract_windows( + circuit: &Circuit, + config: WindowConfig, +) -> Result, OccamError> { + validate_config(config)?; + let mut identities = BTreeSet::new(); + let mut windows = Vec::new(); + for sink in 0..circuit.gates.len() { + let mut internal = BTreeSet::from([sink]); + loop { + if internal.len() >= config.min_gates { + let indices = internal.iter().copied().collect::>(); + if identities.insert(indices.clone()) + && let Some(window) = build_window(circuit, indices, config)? + { + windows.push(window); + } + } + if internal.len() >= config.max_gates { + break; + } + let mut frontier = BTreeSet::new(); + for index in &internal { + let gate = &circuit.gates[*index]; + for operand in [gate.lhs, gate.rhs] { + if let Source::Wire(producer) = operand.source + && !internal.contains(&producer) + { + frontier.insert(producer); + } + } + } + let Some(next) = frontier.into_iter().next_back() else { + break; + }; + internal.insert(next); + } + } + windows.sort_by(|lhs, rhs| { + (&lhs.gate_indices, &lhs.identity_sha256).cmp(&(&rhs.gate_indices, &rhs.identity_sha256)) + }); + Ok(windows) +} + +fn validate_config(config: WindowConfig) -> Result<(), OccamError> { + if config.min_gates == 0 + || config.max_gates < config.min_gates + || config.max_inputs == 0 + || config.max_outputs == 0 + || config.max_inputs >= usize::BITS as usize + { + return Err(OccamError::Validation(format!( + "invalid window configuration {config:?}" + ))); + } + Ok(()) +} + +fn build_window( + circuit: &Circuit, + gate_indices: Vec, + config: WindowConfig, +) -> Result, OccamError> { + if !window_is_convex(circuit, &gate_indices) { + return Ok(None); + } + let internal = gate_indices.iter().copied().collect::>(); + let mut boundary_inputs = BTreeSet::new(); + for index in &gate_indices { + for operand in [circuit.gates[*index].lhs, circuit.gates[*index].rhs] { + if !matches!(operand.source, Source::Wire(wire) if internal.contains(&wire)) { + boundary_inputs.insert(operand.source); + } + } + } + let mut boundary_outputs = BTreeSet::new(); + for index in &gate_indices { + let source = Source::Wire(*index); + let external_gate_consumer = circuit.gates.iter().enumerate().any(|(consumer, gate)| { + !internal.contains(&consumer) + && [gate.lhs, gate.rhs] + .iter() + .any(|operand| operand.source == source) + }); + let final_output = circuit + .outputs + .iter() + .any(|operand| operand.source == source); + if external_gate_consumer || final_output { + boundary_outputs.insert(source); + } + } + if boundary_inputs.len() > config.max_inputs + || boundary_outputs.is_empty() + || boundary_outputs.len() > config.max_outputs + { + return Ok(None); + } + let boundary_inputs = boundary_inputs.into_iter().collect::>(); + let boundary_outputs = boundary_outputs.into_iter().collect::>(); + let cases = 1usize + .checked_shl(u32::try_from(boundary_inputs.len()).map_err(|_| { + OccamError::ArithmeticOverflow { + context: "window truth-table shift", + } + })?) + .ok_or(OccamError::ArithmeticOverflow { + context: "window truth-table cases", + })?; + DEFAULT_LIMITS.require( + "window truth-table cases", + cases, + DEFAULT_LIMITS.max_samples, + )?; + let mut samples = Vec::with_capacity(cases); + for assignment in 0..cases { + let input = (0..boundary_inputs.len()) + .map(|bit| assignment & (1usize << bit) != 0) + .collect(); + let expected = evaluate_window( + circuit, + &gate_indices, + &boundary_inputs, + &boundary_outputs, + assignment, + )?; + samples.push(Sample { input, expected }); + } + let truth_table = Dataset { + input_width: boundary_inputs.len(), + output_width: boundary_outputs.len(), + samples, + }; + verify_local_truth_table( + circuit, + &gate_indices, + &boundary_inputs, + &boundary_outputs, + &truth_table, + )?; + let identity_sha256 = window_identity( + &gate_indices, + &boundary_inputs, + &boundary_outputs, + &truth_table, + ); + Ok(Some(CircuitWindow { + gate_indices, + boundary_inputs, + boundary_outputs, + truth_table, + identity_sha256, + })) +} + +fn verify_local_truth_table( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + truth_table: &Dataset, +) -> Result<(), OccamError> { + let local = parse_netlist(&local_netlist( + circuit, + gate_indices, + boundary_inputs, + boundary_outputs, + )?)?; + let metrics = verify(&local, truth_table)?; + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "extracted local circuit matched only {}/{} truth-table rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn local_netlist( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], +) -> Result { + let mut mapping = boundary_inputs + .iter() + .enumerate() + .map(|(index, source)| { + ( + *source, + Operand { + source: Source::Input(index), + inverted: false, + }, + ) + }) + .collect::>(); + let mut source = format!("INPUTS {}\n", boundary_inputs.len()); + for (local_index, original_index) in gate_indices.iter().enumerate() { + let gate = &circuit.gates[*original_index]; + let lhs = remap_operand(gate.lhs, &mapping)?; + let rhs = remap_operand(gate.rhs, &mapping)?; + source.push_str(&format!( + "w{} = {} {} {}\n", + local_index + 1, + operation_name(gate.op), + render_operand(lhs), + render_operand(rhs) + )); + mapping.insert( + Source::Wire(*original_index), + Operand { + source: Source::Wire(local_index), + inverted: false, + }, + ); + } + source.push_str("OUTPUTS"); + for output in boundary_outputs { + let operand = mapping.get(output).copied().ok_or_else(|| { + OccamError::Validation(format!("local output {output:?} has no mapping")) + })?; + source.push(' '); + source.push_str(&render_operand(operand)); + } + source.push('\n'); + Ok(source) +} + +fn remap_operand( + operand: Operand, + mapping: &HashMap, +) -> Result { + let mut remapped = mapping.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!("local operand {:?} has no mapping", operand.source)) + })?; + remapped.inverted ^= operand.inverted; + Ok(remapped) +} + +fn render_operand(operand: Operand) -> String { + let name = match operand.source { + Source::Input(index) => format!("x{}", index + 1), + Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} + +fn window_identity( + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + truth_table: &Dataset, +) -> String { + let mut canonical = String::new(); + canonical.push_str("occam71-window-v1\n"); + canonical.push_str(&format!("gates={gate_indices:?}\n")); + canonical.push_str(&format!("inputs={boundary_inputs:?}\n")); + canonical.push_str(&format!("outputs={boundary_outputs:?}\n")); + for sample in &truth_table.samples { + for bit in &sample.input { + canonical.push(if *bit { '1' } else { '0' }); + } + canonical.push(','); + for bit in &sample.expected { + canonical.push(if *bit { '1' } else { '0' }); + } + canonical.push('\n'); + } + sha256_hex(canonical.as_bytes()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimize.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimize.rs new file mode 100644 index 000000000..fc52d30f0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/optimize.rs @@ -0,0 +1,334 @@ +use std::collections::HashMap; + +use crate::{GateOp, OccamError, ResourceLimits}; + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +enum Node { + Input(usize), + Gate(usize), + Zero, +} + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct Signal { + node: Node, + inverted: bool, +} + +impl Signal { + pub fn input(index: usize) -> Self { + Self { + node: Node::Input(index), + inverted: false, + } + } + + pub fn inverted(self) -> Self { + Self { + inverted: !self.inverted, + ..self + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct SynthesizedCircuit { + pub netlist: String, + pub gate_count: usize, +} + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +struct GateKey { + op: GateOp, + lhs: Signal, + rhs: Signal, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CanonicalGate { + op: GateOp, + lhs: Signal, + rhs: Signal, +} + +pub struct CircuitBuilder<'a> { + input_count: usize, + limits: &'a ResourceLimits, + gates: Vec, + interned: HashMap, +} + +impl<'a> CircuitBuilder<'a> { + pub fn new(input_count: usize, limits: &'a ResourceLimits) -> Result { + if input_count == 0 { + return Err(OccamError::Validation( + "circuit builder input count must be positive".into(), + )); + } + limits.require("circuit inputs", input_count, limits.max_inputs)?; + Ok(Self { + input_count, + limits, + gates: Vec::new(), + interned: HashMap::new(), + }) + } + + pub fn zero(&self) -> Result { + Ok(Signal { + node: Node::Zero, + inverted: false, + }) + } + + pub fn one(&self) -> Result { + Ok(self.zero()?.inverted()) + } + + pub fn binary(&mut self, op: GateOp, lhs: Signal, rhs: Signal) -> Result { + self.validate_signal(lhs)?; + self.validate_signal(rhs)?; + match op { + GateOp::Nand => { + return Ok(self.binary(GateOp::And, lhs, rhs)?.inverted()); + } + GateOp::Nor => { + return Ok(self.binary(GateOp::Or, lhs, rhs)?.inverted()); + } + GateOp::Xnor => { + return Ok(self.binary(GateOp::Xor, lhs, rhs)?.inverted()); + } + GateOp::And | GateOp::Or | GateOp::Xor => {} + } + if let Some(result) = self.simplify(op, lhs, rhs)? { + return Ok(result); + } + let (lhs, rhs) = if lhs <= rhs { (lhs, rhs) } else { (rhs, lhs) }; + let key = GateKey { op, lhs, rhs }; + if let Some(signal) = self.interned.get(&key) { + return Ok(*signal); + } + let next_count = self + .gates + .len() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "optimized circuit gate count", + })?; + self.limits + .require("circuit gates", next_count, self.limits.max_gates)?; + let signal = Signal { + node: Node::Gate(self.gates.len()), + inverted: false, + }; + self.gates.push(CanonicalGate { op, lhs, rhs }); + self.interned.insert(key, signal); + Ok(signal) + } + + pub fn finish(self, outputs: &[Signal]) -> Result { + if outputs.is_empty() { + return Err(OccamError::Validation( + "optimized circuit must have at least one output".into(), + )); + } + self.limits + .require("circuit outputs", outputs.len(), self.limits.max_outputs)?; + for output in outputs { + self.validate_signal(*output)?; + } + + let mut reachable = vec![false; self.gates.len()]; + for output in outputs { + mark_reachable(*output, &self.gates, &mut reachable); + } + let constant_required = outputs + .iter() + .any(|signal| matches!(signal.node, Node::Zero)) + || self.gates.iter().zip(&reachable).any(|(gate, keep)| { + *keep + && (matches!(gate.lhs.node, Node::Zero) || matches!(gate.rhs.node, Node::Zero)) + }); + let reachable_count = reachable.iter().filter(|keep| **keep).count(); + let gate_count = reachable_count + .checked_add(usize::from(constant_required)) + .ok_or(OccamError::ArithmeticOverflow { + context: "serialized circuit gate count", + })?; + self.limits + .require("circuit gates", gate_count, self.limits.max_gates)?; + + let mut dense_wires = vec![None; self.gates.len()]; + let zero_wire = constant_required.then_some(1usize); + let mut next_wire = 1 + usize::from(constant_required); + for (index, keep) in reachable.iter().enumerate() { + if *keep { + dense_wires[index] = Some(next_wire); + next_wire += 1; + } + } + + let mut lines = Vec::with_capacity(gate_count + 2); + lines.push(format!("INPUTS {}", self.input_count)); + if let Some(wire) = zero_wire { + lines.push(format!("w{wire} = XOR x1 x1")); + } + for (index, gate) in self.gates.iter().enumerate() { + let Some(wire) = dense_wires[index] else { + continue; + }; + let lhs = render_signal(gate.lhs, &dense_wires, zero_wire)?; + let rhs = render_signal(gate.rhs, &dense_wires, zero_wire)?; + lines.push(format!("w{wire} = {} {lhs} {rhs}", operation_name(gate.op))); + } + let rendered_outputs = outputs + .iter() + .map(|signal| render_signal(*signal, &dense_wires, zero_wire)) + .collect::, _>>()?; + lines.push(format!("OUTPUTS {}", rendered_outputs.join(" "))); + let netlist = format!("{}\n", lines.join("\n")); + let max_bytes = self + .limits + .max_generated_bytes + .min(self.limits.max_source_bytes); + self.limits + .require("generated bytes", netlist.len(), max_bytes)?; + Ok(SynthesizedCircuit { + netlist, + gate_count, + }) + } + + fn simplify(&self, op: GateOp, lhs: Signal, rhs: Signal) -> Result, OccamError> { + debug_assert!(matches!(op, GateOp::And | GateOp::Or | GateOp::Xor)); + if lhs == rhs { + return Ok(Some(match op { + GateOp::And | GateOp::Or => lhs, + GateOp::Xor => self.zero()?, + _ => unreachable!(), + })); + } + if lhs == rhs.inverted() { + return Ok(Some(match op { + GateOp::And => self.zero()?, + GateOp::Or | GateOp::Xor => self.one()?, + _ => unreachable!(), + })); + } + match (constant_value(lhs), constant_value(rhs)) { + (Some(lhs), Some(rhs)) => { + let value = op.apply(lhs, rhs); + Ok(Some(if value { self.one()? } else { self.zero()? })) + } + (Some(constant), None) => Ok(Some(simplify_one_constant(op, constant, rhs, self)?)), + (None, Some(constant)) => Ok(Some(simplify_one_constant(op, constant, lhs, self)?)), + (None, None) => Ok(None), + } + } + + fn validate_signal(&self, signal: Signal) -> Result<(), OccamError> { + match signal.node { + Node::Input(index) if index < self.input_count => Ok(()), + Node::Input(index) => Err(OccamError::Validation(format!( + "builder input index {index} is out of range for {} inputs", + self.input_count + ))), + Node::Gate(index) if index < self.gates.len() => Ok(()), + Node::Gate(index) => Err(OccamError::Validation(format!( + "builder gate index {index} is unavailable" + ))), + Node::Zero => Ok(()), + } + } +} + +fn simplify_one_constant( + op: GateOp, + constant: bool, + signal: Signal, + builder: &CircuitBuilder<'_>, +) -> Result { + Ok(match (op, constant) { + (GateOp::And, false) => builder.zero()?, + (GateOp::And, true) | (GateOp::Or, false) | (GateOp::Xor, false) => signal, + (GateOp::Or, true) => builder.one()?, + (GateOp::Xor, true) => signal.inverted(), + _ => unreachable!(), + }) +} + +fn constant_value(signal: Signal) -> Option { + matches!(signal.node, Node::Zero).then_some(signal.inverted) +} + +fn mark_reachable(signal: Signal, gates: &[CanonicalGate], reachable: &mut [bool]) { + let Node::Gate(index) = signal.node else { + return; + }; + if reachable[index] { + return; + } + reachable[index] = true; + mark_reachable(gates[index].lhs, gates, reachable); + mark_reachable(gates[index].rhs, gates, reachable); +} + +fn render_signal( + signal: Signal, + dense_wires: &[Option], + zero_wire: Option, +) -> Result { + let name = match signal.node { + Node::Input(index) => format!("x{}", index + 1), + Node::Gate(index) => format!( + "w{}", + dense_wires + .get(index) + .and_then(|wire| *wire) + .ok_or_else(|| OccamError::Validation(format!( + "reachable gate {index} has no serialized wire" + )))? + ), + Node::Zero => format!( + "w{}", + zero_wire.ok_or_else(|| { + OccamError::Validation("constant output has no serialized zero wire".into()) + })? + ), + }; + Ok(if signal.inverted { + format!("~{name}") + } else { + name + }) +} + +fn operation_name(op: GateOp) -> &'static str { + match op { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +#[cfg(test)] +mod tests { + use crate::{DEFAULT_LIMITS, evaluate, parse_netlist}; + + use super::*; + + #[test] + fn serializes_constant_outputs_with_one_shared_gate() { + let builder = CircuitBuilder::new(1, &DEFAULT_LIMITS).unwrap(); + let zero = builder.zero().unwrap(); + let one = builder.one().unwrap(); + let synthesized = builder.finish(&[zero, one]).unwrap(); + assert_eq!(synthesized.gate_count, 1); + let circuit = parse_netlist(&synthesized.netlist).unwrap(); + assert_eq!(evaluate(&circuit, &[false]).unwrap(), vec![false, true]); + assert_eq!(evaluate(&circuit, &[true]).unwrap(), vec![false, true]); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/packed.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/packed.rs new file mode 100644 index 000000000..02cc587fe --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/packed.rs @@ -0,0 +1,530 @@ +use crate::{ + Circuit, CompiledCircuit, DEFAULT_LIMITS, Dataset, OccamError, Operand, ResourceLimits, Source, + VerificationMetrics, + dataset_scan::{DatasetShape, scan_dataset}, + limits::{checked_add, checked_mul}, + verify_compiled_prepacked_with_limits, +}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PackedDataset { + sample_count: usize, + input_width: usize, + output_width: usize, + input_words: Vec, + expected_words: Vec, + block_count: usize, + tail_mask: u64, +} + +impl PackedDataset { + pub fn sample_count(&self) -> usize { + self.sample_count + } + + pub fn input_width(&self) -> usize { + self.input_width + } + + pub fn output_width(&self) -> usize { + self.output_width + } + + pub fn block_count(&self) -> usize { + self.block_count + } + + pub fn input_column(&self, index: usize) -> Option<&[u64]> { + column(&self.input_words, self.block_count, index) + } + + pub fn expected_column(&self, index: usize) -> Option<&[u64]> { + column(&self.expected_words, self.block_count, index) + } + + pub(crate) fn valid_mask(&self, block: usize) -> u64 { + if block == self.block_count - 1 { + self.tail_mask + } else { + u64::MAX + } + } +} + +fn column(words: &[u64], block_count: usize, index: usize) -> Option<&[u64]> { + let start = index.checked_mul(block_count)?; + let end = start.checked_add(block_count)?; + words.get(start..end) +} + +fn zeroed_words(count: usize, context: &str) -> Result, OccamError> { + let mut words = Vec::new(); + words.try_reserve_exact(count).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate {context} ({count} words): {error}" + )) + })?; + words.resize(count, 0); + Ok(words) +} + +fn allocate_packed( + shape: DatasetShape, + limits: &ResourceLimits, +) -> Result { + let block_count = shape.sample_count.div_ceil(64); + let remainder = shape.sample_count % 64; + let tail_mask = if remainder == 0 { + u64::MAX + } else { + (1u64 << remainder) - 1 + }; + let input_word_count = checked_mul(shape.input_width, block_count, "packed input word count")?; + let expected_word_count = + checked_mul(shape.output_width, block_count, "packed output word count")?; + let total_words = checked_add( + input_word_count, + expected_word_count, + "packed dataset word count", + )?; + limits.require("packed dataset words", total_words, limits.max_packed_words)?; + Ok(PackedDataset { + sample_count: shape.sample_count, + input_width: shape.input_width, + output_width: shape.output_width, + input_words: zeroed_words(input_word_count, "packed inputs")?, + expected_words: zeroed_words(expected_word_count, "packed outputs")?, + block_count, + tail_mask, + }) +} + +pub fn pack_dataset(dataset: &Dataset) -> Result { + pack_dataset_with_limits(dataset, &DEFAULT_LIMITS) +} + +pub fn pack_dataset_with_limits( + dataset: &Dataset, + limits: &ResourceLimits, +) -> Result { + let sample_count = dataset.samples.len(); + if sample_count == 0 { + return Err(OccamError::Validation("dataset has no samples".into())); + } + limits.require("dataset samples", sample_count, limits.max_samples)?; + limits.require( + "dataset input width", + dataset.input_width, + limits.max_input_width, + )?; + limits.require( + "dataset output width", + dataset.output_width, + limits.max_output_width, + )?; + let row_bits = checked_add( + dataset.input_width, + dataset.output_width, + "dataset bits per sample", + )?; + let dataset_bits = checked_mul(row_bits, sample_count, "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + let mut packed = allocate_packed( + DatasetShape { + input_width: dataset.input_width, + output_width: dataset.output_width, + sample_count, + }, + limits, + )?; + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let block = sample_index / 64; + let bit = sample_index % 64; + for (column_index, value) in sample.input.iter().enumerate() { + packed.input_words[column_index * packed.block_count + block] |= + u64::from(*value) << bit; + } + for (column_index, value) in sample.expected.iter().enumerate() { + packed.expected_words[column_index * packed.block_count + block] |= + u64::from(*value) << bit; + } + } + Ok(packed) +} + +pub fn parse_packed_dataset(source: impl AsRef<[u8]>) -> Result { + parse_packed_dataset_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_packed_dataset_with_limits( + source: impl AsRef<[u8]>, + limits: &ResourceLimits, +) -> Result { + let source = source.as_ref(); + let shape = scan_dataset(source, limits, |_line, _input, _expected| Ok(()))?; + let mut packed = allocate_packed(shape, limits)?; + let mut sample_index = 0usize; + let second_shape = scan_dataset(source, limits, |_line, input, expected| { + let block = sample_index / 64; + let bit = sample_index % 64; + for (column_index, value) in input.iter().enumerate() { + packed.input_words[column_index * packed.block_count + block] |= + u64::from(*value == b'1') << bit; + } + for (column_index, value) in expected.iter().enumerate() { + packed.expected_words[column_index * packed.block_count + block] |= + u64::from(*value == b'1') << bit; + } + sample_index += 1; + Ok(()) + })?; + debug_assert_eq!(shape, second_shape); + Ok(packed) +} + +pub fn verify_packed( + circuit: &Circuit, + dataset: &Dataset, +) -> Result { + verify_prepacked(circuit, &pack_dataset(dataset)?) +} + +pub fn verify_prepacked( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + verify_prepacked_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_prepacked_with_limits( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + let compiled = CompiledCircuit::new_with_limits(circuit, limits)?; + verify_compiled_prepacked_with_limits(&compiled, dataset, limits) +} + +#[doc(hidden)] +pub fn verify_prepacked_interpreted( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + verify_prepacked_interpreted_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +#[doc(hidden)] +pub fn verify_prepacked_interpreted_with_limits( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + validate_verification_dimensions(circuit, dataset, limits)?; + let wire_word_count = checked_mul( + circuit.wire_count, + dataset.block_count, + "packed wire word count", + )?; + limits.require( + "packed wire words", + wire_word_count, + limits.max_packed_words, + )?; + let mut wires = zeroed_words(wire_word_count, "packed wires")?; + for gate in &circuit.gates { + for block in 0..dataset.block_count { + let lhs = resolve_flat_word(gate.lhs, block, dataset, &wires)?; + let rhs = resolve_flat_word(gate.rhs, block, dataset, &wires)?; + let offset = gate + .output + .checked_mul(dataset.block_count) + .and_then(|base| base.checked_add(block)) + .ok_or(OccamError::ArithmeticOverflow { + context: "packed wire offset", + })?; + let output = wires.get_mut(offset).ok_or_else(|| { + OccamError::Validation(format!( + "wire column {}, block {block} is missing", + gate.output + )) + })?; + *output = gate.op.apply_word(lhs, rhs); + } + } + collect_metrics(circuit, dataset, |operand, block| { + resolve_flat_word(operand, block, dataset, &wires) + }) +} + +#[doc(hidden)] +pub fn verify_prepacked_reference( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + validate_verification_dimensions(circuit, dataset, &DEFAULT_LIMITS)?; + let wire_word_count = checked_mul( + circuit.wire_count, + dataset.block_count, + "reference packed wire word count", + )?; + DEFAULT_LIMITS.require( + "packed wire words", + wire_word_count, + DEFAULT_LIMITS.max_packed_words, + )?; + let mut wires = Vec::new(); + wires + .try_reserve_exact(circuit.wire_count) + .map_err(|error| { + OccamError::Validation(format!( + "cannot allocate reference packed wire columns: {error}" + )) + })?; + for _ in 0..circuit.wire_count { + wires.push(zeroed_words( + dataset.block_count, + "reference packed wire column", + )?); + } + for gate in &circuit.gates { + for block in 0..dataset.block_count { + let lhs = resolve_nested_word(gate.lhs, block, dataset, &wires)?; + let rhs = resolve_nested_word(gate.rhs, block, dataset, &wires)?; + let output = wires + .get_mut(gate.output) + .and_then(|wire| wire.get_mut(block)) + .ok_or_else(|| { + OccamError::Validation(format!( + "wire column {}, block {block} is missing", + gate.output + )) + })?; + *output = gate.op.apply_word(lhs, rhs); + } + } + collect_metrics(circuit, dataset, |operand, block| { + resolve_nested_word(operand, block, dataset, &wires) + }) +} + +fn validate_verification_dimensions( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result<(), OccamError> { + if circuit.input_count != dataset.input_width() { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match circuit INPUTS {}", + dataset.input_width(), + circuit.input_count + ))); + } + if circuit.outputs.len() != dataset.output_width() { + return Err(OccamError::Validation(format!( + "circuit has {} outputs, dataset has {}", + circuit.outputs.len(), + dataset.output_width() + ))); + } + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + limits.require("dataset samples", dataset.sample_count, limits.max_samples)?; + Ok(()) +} + +fn collect_metrics( + circuit: &Circuit, + dataset: &PackedDataset, + resolve: impl Fn(Operand, usize) -> Result, +) -> Result { + let mut mismatches = zeroed_words(dataset.block_count, "packed mismatch blocks")?; + let mut correct_bits = 0usize; + for (output_index, operand) in circuit.outputs.iter().enumerate() { + let expected = dataset.expected_column(output_index).ok_or_else(|| { + OccamError::Validation(format!("packed output column {output_index} is missing")) + })?; + for block in 0..dataset.block_count { + let mask = dataset.valid_mask(block); + let predicted = resolve(*operand, block)?; + let different = (predicted ^ expected[block]) & mask; + correct_bits = checked_add( + correct_bits, + ((!different) & mask).count_ones() as usize, + "correct verification bits", + )?; + mismatches[block] |= different; + } + } + let exact_matches = mismatches + .iter() + .enumerate() + .map(|(block, different)| { + let mask = dataset.valid_mask(block); + (mask.count_ones() - (different & mask).count_ones()) as usize + }) + .sum(); + + Ok(VerificationMetrics { + samples: dataset.sample_count, + gate_count: circuit.gates.len(), + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.sample_count, + dataset.output_width(), + "verification bit count", + )?, + }) +} + +fn resolve_flat_word( + operand: Operand, + block: usize, + dataset: &PackedDataset, + wires: &[u64], +) -> Result { + let value = match operand.source { + Source::Input(index) => dataset + .input_column(index) + .and_then(|column| column.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!( + "packed input column {index}, block {block} is missing" + )) + })?, + Source::Wire(index) => index + .checked_mul(dataset.block_count) + .and_then(|base| base.checked_add(block)) + .and_then(|offset| wires.get(offset)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!("wire column {index}, block {block} is missing")) + })?, + }; + Ok(if operand.inverted { !value } else { value }) +} + +fn resolve_nested_word( + operand: Operand, + block: usize, + dataset: &PackedDataset, + wires: &[Vec], +) -> Result { + let value = match operand.source { + Source::Input(index) => dataset + .input_column(index) + .and_then(|column| column.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!( + "packed input column {index}, block {block} is missing" + )) + })?, + Source::Wire(index) => wires + .get(index) + .and_then(|wire| wire.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!("wire column {index}, block {block} is missing")) + })?, + }; + Ok(if operand.inverted { !value } else { value }) +} + +#[cfg(test)] +mod tests { + use crate::{Sample, parse_netlist, verify}; + + use super::*; + + fn boundary_dataset(samples: usize) -> Dataset { + Dataset { + input_width: 2, + output_width: 3, + samples: (0..samples) + .map(|index| { + let lhs = index % 2 != 0; + let rhs = index % 3 == 0; + Sample { + input: vec![lhs, rhs], + expected: vec![lhs ^ rhs, !lhs, rhs], + } + }) + .collect(), + } + } + + #[test] + fn matches_scalar_at_word_boundaries() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1 ~x1 x2").unwrap(); + for samples in [1, 63, 64, 65, 127, 128, 129] { + let dataset = boundary_dataset(samples); + assert_eq!( + verify_packed(&circuit, &dataset).unwrap(), + verify(&circuit, &dataset).unwrap(), + "sample count {samples}" + ); + } + } + + #[test] + fn complement_gate_padding_never_counts_as_samples() { + let circuit = parse_netlist("INPUTS 2\nw1 = NAND x1 x2\nOUTPUTS ~w1").unwrap(); + for samples in [1, 63, 65, 129] { + let dataset = Dataset { + input_width: 2, + output_width: 1, + samples: (0..samples) + .map(|index| Sample { + input: vec![index % 2 == 0, index % 3 == 0], + expected: vec![index % 5 == 0], + }) + .collect(), + }; + assert_eq!( + verify_packed(&circuit, &dataset).unwrap(), + verify(&circuit, &dataset).unwrap() + ); + } + } + + #[test] + fn flat_wire_arena_obeys_word_limit() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1 ~x1 x2").unwrap(); + let packed = pack_dataset(&boundary_dataset(65)).unwrap(); + let mut limits = DEFAULT_LIMITS; + limits.max_packed_words = 1; + assert!(matches!( + verify_prepacked_interpreted_with_limits(&circuit, &packed, &limits), + Err(OccamError::ResourceLimit { + resource: "packed wire words", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/reference.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/reference.rs new file mode 100644 index 000000000..e1386f2bd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/reference.rs @@ -0,0 +1,419 @@ +use crate::{ + ArithmeticFamily, CircuitBuilder, DEFAULT_LIMITS, GateOp, OccamError, ResourceLimits, Signal, + SynthesizedCircuit, + limits::{checked_add, checked_mul, checked_sub}, +}; + +struct Builder { + input_count: usize, + next_wire: usize, + lines: Vec, + joined_bytes: usize, + max_bytes: usize, +} + +pub fn synthesize_family( + family: ArithmeticFamily, + operand_bits: usize, +) -> Result { + synthesize_family_with_limits(family, operand_bits, &DEFAULT_LIMITS) +} + +pub fn synthesize_family_with_limits( + family: ArithmeticFamily, + operand_bits: usize, + limits: &ResourceLimits, +) -> Result { + let input_count = checked_mul(operand_bits, 2, "family synthesis input count")?; + let output_count = family.output_width(operand_bits)?; + limits.require("circuit inputs", input_count, limits.max_inputs)?; + limits.require("circuit outputs", output_count, limits.max_outputs)?; + let mut builder = CircuitBuilder::new(input_count, limits)?; + let lhs: Vec<_> = (0..operand_bits).map(Signal::input).collect(); + let rhs: Vec<_> = (operand_bits..input_count).map(Signal::input).collect(); + let outputs = match family { + ArithmeticFamily::Add => synthesize_add(&mut builder, &lhs, &rhs)?, + ArithmeticFamily::AbsDiff => synthesize_abs_diff(&mut builder, &lhs, &rhs)?, + ArithmeticFamily::Multiply => synthesize_product(&mut builder, &lhs, &rhs, output_count)?, + ArithmeticFamily::SumOfSquares => { + synthesize_sum_of_squares(&mut builder, &lhs, &rhs, output_count)? + } + }; + debug_assert_eq!(outputs.len(), output_count); + builder.finish(&outputs) +} + +fn synthesize_add( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut outputs = Vec::with_capacity(lhs.len() + 1); + let (sum, mut carry) = half_adder(builder, lhs[0], rhs[0])?; + outputs.push(sum); + for index in 1..lhs.len() { + let (sum, next_carry) = full_adder(builder, lhs[index], rhs[index], carry)?; + outputs.push(sum); + carry = next_carry; + } + outputs.push(carry); + Ok(outputs) +} + +fn synthesize_abs_diff( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut borrow = builder.zero()?; + let mut difference = Vec::with_capacity(lhs.len()); + for index in 0..lhs.len() { + let propagate = builder.binary(GateOp::Xor, lhs[index], rhs[index])?; + difference.push(builder.binary(GateOp::Xor, propagate, borrow)?); + let generated = builder.binary(GateOp::And, lhs[index].inverted(), rhs[index])?; + let propagated = builder.binary(GateOp::And, propagate.inverted(), borrow)?; + borrow = builder.binary(GateOp::Or, generated, propagated)?; + } + + let mut carry = borrow; + let mut outputs = Vec::with_capacity(lhs.len()); + for bit in difference { + let toggled = builder.binary(GateOp::Xor, bit, borrow)?; + outputs.push(builder.binary(GateOp::Xor, toggled, carry)?); + carry = builder.binary(GateOp::And, toggled, carry)?; + } + Ok(outputs) +} + +fn synthesize_product( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], + width: usize, +) -> Result, OccamError> { + let mut columns = vec![Vec::new(); width + 1]; + for (lhs_index, lhs_signal) in lhs.iter().enumerate() { + for (rhs_index, rhs_signal) in rhs.iter().enumerate() { + columns[lhs_index + rhs_index].push(builder.binary( + GateOp::And, + *lhs_signal, + *rhs_signal, + )?); + } + } + compress_columns(builder, columns, width) +} + +fn synthesize_sum_of_squares( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], + width: usize, +) -> Result, OccamError> { + let mut columns = vec![Vec::new(); width + 1]; + for operand in [lhs, rhs] { + for (first_index, first) in operand.iter().enumerate() { + for (second_index, second) in operand.iter().enumerate() { + columns[first_index + second_index].push(builder.binary( + GateOp::And, + *first, + *second, + )?); + } + } + } + compress_columns(builder, columns, width) +} + +fn compress_columns( + builder: &mut CircuitBuilder<'_>, + mut columns: Vec>, + width: usize, +) -> Result, OccamError> { + debug_assert!(columns.len() > width); + let mut outputs = Vec::with_capacity(width); + for column in 0..width { + while columns[column].len() > 2 { + let third = columns[column].pop().unwrap(); + let second = columns[column].pop().unwrap(); + let first = columns[column].pop().unwrap(); + let (sum, carry) = full_adder(builder, first, second, third)?; + columns[column].push(sum); + columns[column + 1].push(carry); + } + match columns[column].as_slice() { + [] => outputs.push(builder.zero()?), + [only] => outputs.push(*only), + [first, second] => { + let (sum, carry) = half_adder(builder, *first, *second)?; + outputs.push(sum); + columns[column + 1].push(carry); + } + _ => unreachable!(), + } + } + Ok(outputs) +} + +fn half_adder( + builder: &mut CircuitBuilder<'_>, + lhs: Signal, + rhs: Signal, +) -> Result<(Signal, Signal), OccamError> { + Ok(( + builder.binary(GateOp::Xor, lhs, rhs)?, + builder.binary(GateOp::And, lhs, rhs)?, + )) +} + +fn full_adder( + builder: &mut CircuitBuilder<'_>, + lhs: Signal, + rhs: Signal, + carry: Signal, +) -> Result<(Signal, Signal), OccamError> { + let propagate = builder.binary(GateOp::Xor, lhs, rhs)?; + let sum = builder.binary(GateOp::Xor, propagate, carry)?; + let generated = builder.binary(GateOp::And, lhs, rhs)?; + let carried = builder.binary(GateOp::And, propagate, carry)?; + Ok((sum, builder.binary(GateOp::Or, generated, carried)?)) +} + +impl Builder { + fn new(input_count: usize, max_bytes: usize) -> Result { + let header = format!("INPUTS {input_count}"); + let joined_bytes = header.len(); + if joined_bytes > max_bytes { + return Err(OccamError::ResourceLimit { + resource: "generated bytes", + requested: joined_bytes, + limit: max_bytes, + }); + } + Ok(Self { + input_count, + next_wire: 1, + lines: vec![header], + joined_bytes, + max_bytes, + }) + } + + fn gate(&mut self, op: &str, lhs: &str, rhs: &str) -> Result { + let output = format!("w{}", self.next_wire); + self.next_wire = checked_add(self.next_wire, 1, "generated wire identifier")?; + self.push_line(format!("{output} = {op} {lhs} {rhs}"))?; + Ok(output) + } + + fn finish(mut self, outputs: &[String]) -> Result { + debug_assert!(self.input_count > 0); + self.push_line(format!("OUTPUTS {}", outputs.join(" ")))?; + self.push_line(String::new())?; + Ok(self.lines.join("\n")) + } + + fn push_line(&mut self, line: String) -> Result<(), OccamError> { + let separator = usize::from(!self.lines.is_empty()); + let next_bytes = checked_add( + checked_add(self.joined_bytes, separator, "generated circuit bytes")?, + line.len(), + "generated circuit bytes", + )?; + if next_bytes > self.max_bytes { + return Err(OccamError::ResourceLimit { + resource: "generated bytes", + requested: next_bytes, + limit: self.max_bytes, + }); + } + self.lines.push(line); + self.joined_bytes = next_bytes; + Ok(()) + } +} + +pub fn ripple_carry_adder(bits: usize) -> Result { + ripple_carry_adder_with_limits(bits, &DEFAULT_LIMITS) +} + +pub fn ripple_carry_adder_with_limits( + bits: usize, + limits: &ResourceLimits, +) -> Result { + if bits == 0 { + return Err(OccamError::Validation( + "adder width must be positive".into(), + )); + } + let input_count = checked_mul(bits, 2, "adder input count")?; + let output_count = checked_add(bits, 1, "adder output count")?; + let gate_count = checked_sub( + checked_mul(bits, 5, "adder gate count")?, + 3, + "adder gate count", + )?; + check_circuit_limits(input_count, gate_count, output_count, limits)?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + let mut builder = Builder::new(input_count, max_bytes)?; + let mut outputs = Vec::with_capacity(output_count); + + let first_x = "x1".to_owned(); + let first_y = format!("x{}", bits + 1); + outputs.push(builder.gate("XOR", &first_x, &first_y)?); + let mut carry = builder.gate("AND", &first_x, &first_y)?; + + for bit in 1..bits { + let x = format!("x{}", bit + 1); + let y = format!("x{}", bits + bit + 1); + let propagate = builder.gate("XOR", &x, &y)?; + outputs.push(builder.gate("XOR", &propagate, &carry)?); + let generated = builder.gate("AND", &x, &y)?; + let propagated = builder.gate("AND", &propagate, &carry)?; + carry = builder.gate("OR", &generated, &propagated)?; + } + outputs.push(carry); + builder.finish(&outputs) +} + +pub fn shift_add_multiplier(bits: usize) -> Result { + shift_add_multiplier_with_limits(bits, &DEFAULT_LIMITS) +} + +pub fn shift_add_multiplier_with_limits( + bits: usize, + limits: &ResourceLimits, +) -> Result { + if bits == 0 { + return Err(OccamError::Validation( + "multiplier width must be positive".into(), + )); + } + let width = checked_mul(bits, 2, "multiplier width")?; + let bits_squared = checked_mul(bits, bits, "multiplier partial products")?; + let add_gate_count = checked_sub( + checked_mul(width, 5, "multiplier vector-adder gate count")?, + 3, + "multiplier vector-adder gate count", + )?; + let repeated_adders = checked_mul( + bits - 1, + add_gate_count, + "multiplier repeated-adder gate count", + )?; + let gate_count = checked_add( + checked_add(1, bits_squared, "multiplier gate count")?, + repeated_adders, + "multiplier gate count", + )?; + check_circuit_limits(width, gate_count, width, limits)?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + let mut builder = Builder::new(width, max_bytes)?; + let zero = builder.gate("XOR", "x1", "x1")?; + let mut partials = vec![vec![String::new(); bits]; bits]; + for (x_bit, row) in partials.iter_mut().enumerate() { + for (y_bit, cell) in row.iter_mut().enumerate() { + *cell = builder.gate( + "AND", + &format!("x{}", x_bit + 1), + &format!("x{}", bits + y_bit + 1), + )?; + } + } + + let mut accumulated = vec![zero.clone(); width]; + accumulated[..bits].clone_from_slice(&partials[0]); + for (y_bit, partial_row) in partials.iter().enumerate().skip(1) { + let mut shifted = vec![zero.clone(); width]; + shifted[y_bit..(bits + y_bit)].clone_from_slice(partial_row); + accumulated = add_vectors(&mut builder, &accumulated, &shifted)?; + } + builder.finish(&accumulated) +} + +fn check_circuit_limits( + inputs: usize, + gates: usize, + outputs: usize, + limits: &ResourceLimits, +) -> Result<(), OccamError> { + limits.require("circuit inputs", inputs, limits.max_inputs)?; + limits.require("circuit gates", gates, limits.max_gates)?; + limits.require("circuit outputs", outputs, limits.max_outputs)?; + Ok(()) +} + +fn add_vectors( + builder: &mut Builder, + lhs: &[String], + rhs: &[String], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut result = Vec::with_capacity(lhs.len()); + result.push(builder.gate("XOR", &lhs[0], &rhs[0])?); + let mut carry = builder.gate("AND", &lhs[0], &rhs[0])?; + for index in 1..lhs.len() { + let propagate = builder.gate("XOR", &lhs[index], &rhs[index])?; + result.push(builder.gate("XOR", &propagate, &carry)?); + let generated = builder.gate("AND", &lhs[index], &rhs[index])?; + let propagated = builder.gate("AND", &propagate, &carry)?; + carry = builder.gate("OR", &generated, &propagated)?; + } + Ok(result) +} + +#[cfg(test)] +mod tests { + use crate::{evaluate, parse_netlist}; + + use super::*; + + fn lsb_bits(value: usize, width: usize) -> Vec { + (0..width).map(|bit| value & (1 << bit) != 0).collect() + } + + #[test] + fn generates_correct_four_bit_adder() { + let circuit = parse_netlist(&ripple_carry_adder(4).unwrap()).unwrap(); + assert_eq!(circuit.gates.len(), 17); + for x in 0..16 { + for y in 0..16 { + let mut input = lsb_bits(x, 4); + input.extend(lsb_bits(y, 4)); + assert_eq!(evaluate(&circuit, &input).unwrap(), lsb_bits(x + y, 5)); + } + } + } + + #[test] + fn generates_correct_four_bit_multiplier() { + let circuit = parse_netlist(&shift_add_multiplier(4).unwrap()).unwrap(); + assert_eq!(circuit.gates.len(), 128); + for x in 0..16 { + for y in 0..16 { + let mut input = lsb_bits(x, 4); + input.extend(lsb_bits(y, 4)); + assert_eq!(evaluate(&circuit, &input).unwrap(), lsb_bits(x * y, 8)); + } + } + } + + #[test] + fn reference_generators_enforce_limits_and_overflow() { + let mut limits = DEFAULT_LIMITS; + limits.max_gates = 1; + assert!(matches!( + ripple_carry_adder_with_limits(1, &limits), + Err(OccamError::ResourceLimit { + resource: "circuit gates", + .. + }) + )); + assert!(matches!( + shift_add_multiplier_with_limits(usize::MAX, &DEFAULT_LIMITS), + Err(OccamError::ArithmeticOverflow { .. }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/abc_dont_care.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/abc_dont_care.rs new file mode 100644 index 000000000..f7740ae37 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/abc_dont_care.rs @@ -0,0 +1,227 @@ +use std::path::PathBuf; + +use crate::{ + DEFAULT_LIMITS, ExternalCommandLimits, ResourceLimits, logic::synthesize_partial_with_abc, + parse_netlist, verify, +}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const MAX_OBSERVED_ROWS: usize = 512; + +pub struct AbcDontCareLearner { + abc_binary: Option, + genlib_path: PathBuf, +} + +impl AbcDontCareLearner { + pub fn new(abc_binary: Option) -> Self { + Self { + abc_binary, + genlib_path: PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .expect("crate must be inside the workspace") + .join("tools/abc/occam.genlib"), + } + } + + pub fn with_genlib(abc_binary: Option, genlib_path: PathBuf) -> Self { + Self { + abc_binary, + genlib_path, + } + } +} + +impl ResearchLearner for AbcDontCareLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::AbcDontCare + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let abc_binary = self.abc_binary.as_ref().ok_or_else(|| { + LearnerFailure::Unsupported( + "ABC don't-care learning requires the checksum-pinned ABC executable".into(), + ) + })?; + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "ABC don't-care learning has a zero timeout".into(), + )); + } + if observed.samples.len() > MAX_OBSERVED_ROWS { + return Err(LearnerFailure::ResourceLimit(format!( + "ABC partial-PLA baseline supports at most {MAX_OBSERVED_ROWS} observed rows, got {}", + observed.samples.len() + ))); + } + let pla = render_partial_pla(observed)?; + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let command_limits = ExternalCommandLimits { + timeout: budget.timeout, + ..ExternalCommandLimits::default() + }; + let netlist = synthesize_partial_with_abc( + &pla, + abc_binary, + &self.genlib_path, + &command_limits, + &limits, + ) + .map_err(classify_abc_failure)?; + let circuit = parse_netlist(&netlist).map_err(classify_abc_failure)?; + let metrics = verify(&circuit, &observed.dataset()).map_err(classify_abc_failure)?; + if metrics.exact_matches != metrics.samples { + return Err(LearnerFailure::ToolError(format!( + "ABC hypothesis fits only {}/{} observed rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(LearnedHypothesis::Circuit { + netlist, + description_length: Some(circuit.gates.len()), + minimum_unique: None, + detail: format!( + "checksum-pinned ABC partial-PLA flow over {} observed rows", + observed.samples.len() + ), + }) + } +} + +pub fn render_partial_pla(observed: &ObservedTask) -> Result { + let rows = normalized_rows(observed)?; + let mut output = format!( + ".i {}\n.o {}\n", + observed.input_width, observed.output_width + ); + output.push_str(".ilb"); + for input in 0..observed.input_width { + output.push_str(&format!(" i{input}")); + } + output.push('\n'); + output.push_str(".ob"); + for bit in 0..observed.output_width { + output.push_str(&format!(" o{bit}")); + } + output.push_str("\n.type fd\n"); + let mut prefix = String::with_capacity(observed.input_width); + emit_partitioned_cubes( + &rows, + 0, + observed.input_width, + observed.output_width, + &mut prefix, + &mut output, + ); + output.push_str(".e\n"); + Ok(output) +} + +type Row = (Vec, Vec); + +fn emit_partitioned_cubes( + rows: &[Row], + depth: usize, + input_width: usize, + output_width: usize, + prefix: &mut String, + output: &mut String, +) { + if rows.is_empty() { + output.push_str(prefix); + output.extend(std::iter::repeat_n('-', input_width - depth)); + output.push(' '); + output.extend(std::iter::repeat_n('-', output_width)); + output.push('\n'); + return; + } + if depth == input_width { + output.push_str(prefix); + output.push(' '); + output.extend(rows[0].1.iter().map(|bit| if *bit { '1' } else { '0' })); + output.push('\n'); + return; + } + let split = rows.partition_point(|row| !row.0[depth]); + prefix.push('0'); + emit_partitioned_cubes( + &rows[..split], + depth + 1, + input_width, + output_width, + prefix, + output, + ); + prefix.pop(); + prefix.push('1'); + emit_partitioned_cubes( + &rows[split..], + depth + 1, + input_width, + output_width, + prefix, + output, + ); + prefix.pop(); +} + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "ABC requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn classify_abc_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + error if error.to_string().contains("timed out") => { + LearnerFailure::Timeout(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/adapters.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/adapters.rs new file mode 100644 index 000000000..cf6de2d56 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/adapters.rs @@ -0,0 +1,130 @@ +use crate::{ + ArithmeticFamily, BinaryOp, Expr, MdlSearchConfig, OccamError, SearchTermination, + score_candidates, search_mdl, +}; + +use super::{ + AbcDontCareLearner, GrammarEvolutionLearner, LearnedHypothesis, LearnerFailure, + MemorizationLearner, ObservedTask, ResearchLearner, ResearchMethod, ResearchTools, + RobddLearner, SatCegisLearner, TrialBudget, +}; + +pub fn default_adapters(tools: ResearchTools) -> Vec> { + vec![ + Box::new(LegacyRegistryLearner), + Box::new(MdlEnumeratorLearner), + Box::new(AbcDontCareLearner::new(tools.abc)), + Box::new(RobddLearner), + Box::new(SatCegisLearner), + Box::new(GrammarEvolutionLearner::default()), + Box::new(MemorizationLearner), + ] +} + +struct LegacyRegistryLearner; + +impl ResearchLearner for LegacyRegistryLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::LegacyRegistry + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + _budget: &TrialBudget, + ) -> Result { + let scores = score_candidates(&observed.dataset()) + .map_err(|error| LearnerFailure::NoHypothesis(error.to_string()))?; + let perfect = scores + .iter() + .filter(|score| score.mismatches == 0) + .map(|score| score.family) + .collect::>(); + let [family] = perfect.as_slice() else { + return Err(LearnerFailure::NoHypothesis( + "legacy registry has no unique training-consistent family".into(), + )); + }; + Ok(LearnedHypothesis::Expression { + expression: family_expression(*family), + minimum_unique: Some(true), + detail: "legacy four-family registry baseline".into(), + }) + } +} + +struct MdlEnumeratorLearner; + +impl ResearchLearner for MdlEnumeratorLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::MdlEnumerator + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let timeout_millis = budget.timeout.as_millis().try_into().unwrap_or(u64::MAX); + let config = MdlSearchConfig { + max_description_cost: 8, + max_generated_expressions: 500_000, + max_semantic_classes: budget.max_nodes.min(100_000), + timeout_millis, + ..MdlSearchConfig::default() + }; + let result = search_mdl(&observed.dataset(), &config).map_err(classify_occam_failure)?; + let expression = match result.report.termination { + SearchTermination::Found => result.expression.ok_or_else(|| { + LearnerFailure::NoHypothesis( + "MDL search reported success without an expression".into(), + ) + })?, + SearchTermination::CostExhausted => { + return Err(LearnerFailure::NoHypothesis( + "MDL search exhausted its description-cost bound".into(), + )); + } + SearchTermination::ExpressionLimit | SearchTermination::SemanticClassLimit => { + return Err(LearnerFailure::ResourceLimit(format!( + "MDL search stopped at {:?}", + result.report.termination + ))); + } + SearchTermination::Timeout => { + return Err(LearnerFailure::Timeout( + "MDL search exceeded the trial timeout".into(), + )); + } + }; + Ok(LearnedHypothesis::Expression { + expression, + minimum_unique: result.report.minimum_unique, + detail: "cost-ordered generic MDL enumeration".into(), + }) + } +} + +fn classify_occam_failure(error: OccamError) -> LearnerFailure { + match error { + OccamError::ResourceLimit { .. } | OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} + +fn family_expression(family: ArithmeticFamily) -> Expr { + match family { + ArithmeticFamily::Add => Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()), + ArithmeticFamily::AbsDiff => Expr::abs_diff(Expr::x(), Expr::y()), + ArithmeticFamily::Multiply => Expr::binary(BinaryOp::Multiply, Expr::x(), Expr::y()), + ArithmeticFamily::SumOfSquares => Expr::binary( + BinaryOp::Add, + Expr::square(Expr::x()), + Expr::square(Expr::y()), + ), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/bdd.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/bdd.rs new file mode 100644 index 000000000..37b38b1fd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/bdd.rs @@ -0,0 +1,327 @@ +use std::{collections::HashMap, time::Instant}; + +use crate::{CircuitBuilder, DEFAULT_LIMITS, GateOp, ResourceLimits, Signal}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +type NodeId = usize; +type Row = (Vec, Vec); + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +enum Node { + False, + True, + Branch { + variable: usize, + low: NodeId, + high: NodeId, + }, +} + +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub enum BddOrder { + File, + Interleaved, + YThenX, + Reverse, +} + +impl BddOrder { + pub const ALL: [Self; 4] = [Self::File, Self::Interleaved, Self::YThenX, Self::Reverse]; + + fn name(self) -> &'static str { + match self { + Self::File => "file", + Self::Interleaved => "interleaved", + Self::YThenX => "y-then-x", + Self::Reverse => "reverse", + } + } + + fn variables(self, input_width: usize) -> Vec { + match self { + Self::File => (0..input_width).collect(), + Self::Reverse => (0..input_width).rev().collect(), + Self::YThenX => { + let midpoint = input_width / 2; + (midpoint..input_width).chain(0..midpoint).collect() + } + Self::Interleaved => { + let midpoint = input_width / 2; + let mut variables = Vec::with_capacity(input_width); + for offset in 0..midpoint { + variables.push(offset); + if midpoint + offset < input_width { + variables.push(midpoint + offset); + } + } + if !input_width.is_multiple_of(2) { + variables.push(input_width - 1); + } + variables + } + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct BddResult { + pub netlist: String, + pub node_count: usize, + pub gate_count: usize, + pub order: BddOrder, +} + +pub struct RobddLearner; + +impl ResearchLearner for RobddLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::Robdd + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let mut candidates = BddOrder::ALL + .into_iter() + .map(|order| build_robdd(observed, order, budget)) + .collect::, _>>()?; + candidates.sort_by_key(|result| (result.node_count, result.gate_count, result.order)); + let best = candidates + .into_iter() + .next() + .ok_or_else(|| LearnerFailure::NoHypothesis("ROBDD produced no ordering".into()))?; + Ok(LearnedHypothesis::Circuit { + netlist: best.netlist, + description_length: Some(best.node_count), + minimum_unique: None, + detail: format!( + "reduced ordered BDD using {} order ({} nonterminal nodes)", + best.order.name(), + best.node_count + ), + }) + } +} + +pub fn build_robdd( + observed: &ObservedTask, + order: BddOrder, + budget: &TrialBudget, +) -> Result { + let rows = normalized_rows(observed)?; + let variables = order.variables(observed.input_width); + let deadline = Instant::now() + budget.timeout; + let mut manager = BddManager::new(budget.max_nodes, deadline); + let row_refs = rows.iter().collect::>(); + let roots = (0..observed.output_width) + .map(|output| manager.build(&row_refs, &variables, 0, output)) + .collect::, _>>()?; + let node_count = manager.nodes.len().saturating_sub(2); + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let mut builder = + CircuitBuilder::new(observed.input_width, &limits).map_err(classify_builder_failure)?; + let mut compiled = HashMap::new(); + let outputs = roots + .iter() + .map(|root| compile_node(*root, &manager.nodes, &mut compiled, &mut builder)) + .collect::, _>>()?; + let circuit = builder.finish(&outputs).map_err(classify_builder_failure)?; + Ok(BddResult { + netlist: circuit.netlist, + node_count, + gate_count: circuit.gate_count, + order, + }) +} + +struct BddManager { + nodes: Vec, + unique: HashMap<(usize, NodeId, NodeId), NodeId>, + max_nodes: usize, + deadline: Instant, +} + +impl BddManager { + fn new(max_nodes: usize, deadline: Instant) -> Self { + Self { + nodes: vec![Node::False, Node::True], + unique: HashMap::new(), + max_nodes, + deadline, + } + } + + fn build( + &mut self, + rows: &[&Row], + variables: &[usize], + depth: usize, + output: usize, + ) -> Result { + self.check_deadline("ROBDD construction")?; + if rows.is_empty() { + return Ok(0); + } + let first = rows[0].1[output]; + if rows.iter().all(|row| row.1[output] == first) { + return Ok(usize::from(first)); + } + let Some(variable) = variables.get(depth).copied() else { + return Err(LearnerFailure::NoHypothesis( + "identical observed inputs have conflicting outputs".into(), + )); + }; + let mut low = Vec::new(); + let mut high = Vec::new(); + for row in rows { + if row.0[variable] { + high.push(*row); + } else { + low.push(*row); + } + } + + let low = (!low.is_empty()) + .then(|| self.build(&low, variables, depth + 1, output)) + .transpose()?; + let high = (!high.is_empty()) + .then(|| self.build(&high, variables, depth + 1, output)) + .transpose()?; + match (low, high) { + (Some(low), Some(high)) => self.branch(variable, low, high), + (Some(populated), None) | (None, Some(populated)) => Ok(populated), + (None, None) => Ok(0), + } + } + + fn branch( + &mut self, + variable: usize, + low: NodeId, + high: NodeId, + ) -> Result { + if low == high { + return Ok(low); + } + let key = (variable, low, high); + if let Some(node) = self.unique.get(&key) { + return Ok(*node); + } + let next_node_count = self.nodes.len().saturating_sub(1); + if next_node_count > self.max_nodes { + return Err(LearnerFailure::ResourceLimit(format!( + "ROBDD node limit {} exceeded", + self.max_nodes + ))); + } + let id = self.nodes.len(); + self.nodes.push(Node::Branch { + variable, + low, + high, + }); + self.unique.insert(key, id); + Ok(id) + } + + fn check_deadline(&self, label: &str) -> Result<(), LearnerFailure> { + if Instant::now() >= self.deadline { + Err(LearnerFailure::Timeout(format!( + "{label} exceeded the trial timeout" + ))) + } else { + Ok(()) + } + } +} + +fn compile_node( + id: NodeId, + nodes: &[Node], + compiled: &mut HashMap, + builder: &mut CircuitBuilder<'_>, +) -> Result { + if let Some(signal) = compiled.get(&id) { + return Ok(*signal); + } + let signal = match nodes[id] { + Node::False => builder.zero().map_err(classify_builder_failure)?, + Node::True => builder.one().map_err(classify_builder_failure)?, + Node::Branch { + variable, + low, + high, + } => { + let low = compile_node(low, nodes, compiled, builder)?; + let high = compile_node(high, nodes, compiled, builder)?; + let variable = Signal::input(variable); + let when_high = builder + .binary(GateOp::And, variable, high) + .map_err(classify_builder_failure)?; + let when_low = builder + .binary(GateOp::And, variable.inverted(), low) + .map_err(classify_builder_failure)?; + builder + .binary(GateOp::Or, when_high, when_low) + .map_err(classify_builder_failure)? + } + }; + compiled.insert(id, signal); + Ok(signal) +} + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "ROBDD requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn classify_builder_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/evolution.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/evolution.rs new file mode 100644 index 000000000..08563f568 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/evolution.rs @@ -0,0 +1,551 @@ +use std::{ + collections::{HashMap, HashSet}, + time::Instant, +}; + +use rand::{Rng, SeedableRng}; +use rand_chacha::ChaCha8Rng; + +use crate::{BinaryOp, Expr, ExprSemantics, decode_lsb}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const BINARY_OPERATORS: [BinaryOp; 9] = [ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, +]; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct EvolutionConfig { + pub population: usize, + pub generations: usize, + pub elite: usize, + pub tournament: usize, + pub mutation_probability_per_mille: u16, + pub max_description_cost: usize, +} + +impl Default for EvolutionConfig { + fn default() -> Self { + Self { + population: 128, + generations: 200, + elite: 8, + tournament: 4, + mutation_probability_per_mille: 700, + max_description_cost: 12, + } + } +} + +impl EvolutionConfig { + pub fn for_tests() -> Self { + Self { + population: 32, + generations: 20, + elite: 4, + tournament: 3, + mutation_probability_per_mille: 700, + max_description_cost: 8, + } + } + + fn validate(self) -> Result { + if self.population < 2 + || self.generations == 0 + || self.elite == 0 + || self.elite >= self.population + || self.tournament == 0 + || self.tournament > self.population + || self.mutation_probability_per_mille > 1_000 + || self.max_description_cost < 3 + { + return Err(LearnerFailure::ToolError( + "invalid grammar-evolution configuration".into(), + )); + } + Ok(self) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct EvolutionTraceEntry { + pub generation: usize, + pub row_mismatches: usize, + pub bit_mismatches: usize, + pub description_cost: usize, + pub estimated_gate_count: usize, + pub expression: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct EvolutionResult { + pub best_expression: Expr, + pub best_row_mismatches: usize, + pub best_bit_mismatches: usize, + pub evaluated_expressions: usize, + pub trace: Vec, +} + +pub struct GrammarEvolutionLearner { + config: EvolutionConfig, +} + +impl GrammarEvolutionLearner { + pub fn new(config: EvolutionConfig) -> Self { + Self { config } + } +} + +impl Default for GrammarEvolutionLearner { + fn default() -> Self { + Self::new(EvolutionConfig::default()) + } +} + +impl ResearchLearner for GrammarEvolutionLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::GrammarEvolution + } + + fn fit( + &self, + observed: &ObservedTask, + seed: u64, + budget: &TrialBudget, + ) -> Result { + let result = evolve_with_budget(observed, seed, self.config, budget)?; + Ok(LearnedHypothesis::Expression { + expression: result.best_expression, + minimum_unique: None, + detail: format!( + "seeded grammar evolution evaluated {} canonical expressions across {} generations; best training row errors={}", + result.evaluated_expressions, + result.trace.len(), + result.best_row_mismatches + ), + }) + } +} + +pub fn evolve( + observed: &ObservedTask, + seed: u64, + config: EvolutionConfig, +) -> Result { + evolve_with_budget(observed, seed, config, &TrialBudget::default()) +} + +pub fn evolve_with_budget( + observed: &ObservedTask, + seed: u64, + config: EvolutionConfig, + budget: &TrialBudget, +) -> Result { + let config = config.validate()?; + if observed.input_width == 0 || !observed.input_width.is_multiple_of(2) { + return Err(LearnerFailure::Unsupported( + "grammar evolution requires two equal-width operands".into(), + )); + } + if observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "grammar evolution requires at least one observed row".into(), + )); + } + let semantics = ExprSemantics::new(observed.input_width / 2, observed.output_width) + .map_err(|error| LearnerFailure::Unsupported(error.to_string()))?; + validate_rows(observed)?; + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "grammar evolution has a zero timeout".into(), + )); + } + + let deadline = Instant::now() + budget.timeout; + let mixed_seed = seed + ^ (observed.input_width as u64).rotate_left(17) + ^ (observed.output_width as u64).rotate_left(33) + ^ (observed.samples.len() as u64).rotate_left(49); + let mut rng = ChaCha8Rng::seed_from_u64(mixed_seed); + let mut population = initial_population(config, semantics, &mut rng); + let mut evaluator = FitnessEvaluator { + observed, + semantics, + deadline, + max_evaluated: budget.max_nodes, + cache: HashMap::new(), + }; + let mut trace = Vec::with_capacity(config.generations); + let mut stable_zero = None::; + let mut final_best = None::; + + for generation in 0..config.generations { + let mut ranked = evaluator.rank(population)?; + ranked.truncate(config.population); + let best = ranked[0].clone(); + trace.push(EvolutionTraceEntry { + generation, + row_mismatches: best.fitness.row_mismatches, + bit_mismatches: best.fitness.bit_mismatches, + description_cost: best.fitness.description_cost, + estimated_gate_count: best.fitness.estimated_gate_count, + expression: best.fitness.expression.clone(), + }); + + if best.fitness.row_mismatches == 0 { + if stable_zero.as_ref() == Some(&best.expression) { + final_best = Some(best); + break; + } + stable_zero = Some(best.expression.clone()); + } else { + stable_zero = None; + } + final_best = Some(best); + if generation + 1 == config.generations { + break; + } + + let mut next = ranked + .iter() + .take(config.elite) + .map(|candidate| candidate.expression.clone()) + .collect::>(); + while next.len() < config.population { + let parent = tournament_select(&ranked, config.tournament, &mut rng); + let child = + if rng.random_range(0..1_000) < u32::from(config.mutation_probability_per_mille) { + mutate( + &parent.expression, + config.max_description_cost, + semantics, + &mut rng, + ) + } else { + parent.expression.clone() + }; + next.push(child); + } + population = next; + } + + let best = final_best.ok_or_else(|| { + LearnerFailure::NoHypothesis("grammar evolution produced no candidate".into()) + })?; + Ok(EvolutionResult { + best_expression: best.expression, + best_row_mismatches: best.fitness.row_mismatches, + best_bit_mismatches: best.fitness.bit_mismatches, + evaluated_expressions: evaluator.cache.len(), + trace, + }) +} + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +struct Fitness { + row_mismatches: usize, + bit_mismatches: usize, + description_cost: usize, + estimated_gate_count: usize, + expression: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +struct Ranked { + expression: Expr, + fitness: Fitness, +} + +struct FitnessEvaluator<'a> { + observed: &'a ObservedTask, + semantics: ExprSemantics, + deadline: Instant, + max_evaluated: usize, + cache: HashMap, +} + +impl FitnessEvaluator<'_> { + fn rank(&mut self, population: Vec) -> Result, LearnerFailure> { + let mut unique = HashSet::new(); + let mut ranked = Vec::new(); + for expression in population { + if !unique.insert(expression.clone()) { + continue; + } + let fitness = self.fitness(&expression)?; + ranked.push(Ranked { + expression, + fitness, + }); + } + if ranked.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "grammar evolution population became empty".into(), + )); + } + ranked.sort_by(|lhs, rhs| { + (&lhs.fitness, &lhs.expression).cmp(&(&rhs.fitness, &rhs.expression)) + }); + Ok(ranked) + } + + fn fitness(&mut self, expression: &Expr) -> Result { + if let Some(fitness) = self.cache.get(expression) { + return Ok(fitness.clone()); + } + if Instant::now() >= self.deadline { + return Err(LearnerFailure::Timeout( + "grammar evolution exceeded the trial timeout".into(), + )); + } + if self.cache.len() >= self.max_evaluated { + return Err(LearnerFailure::ResourceLimit(format!( + "grammar evolution expression limit {} exceeded", + self.max_evaluated + ))); + } + let mut row_mismatches = 0usize; + let mut bit_mismatches = 0usize; + for sample in &self.observed.samples { + let operand_bits = self.semantics.operand_bits; + let x = decode_lsb(&sample.input[..operand_bits]) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let y = decode_lsb(&sample.input[operand_bits..]) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let expected = decode_lsb(&sample.expected) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let actual = expression + .evaluate(x, y, self.semantics) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + if actual != expected { + row_mismatches += 1; + bit_mismatches += (actual ^ expected).count_ones() as usize; + } + } + let fitness = Fitness { + row_mismatches, + bit_mismatches, + description_cost: expression.description_cost(), + estimated_gate_count: estimated_gate_count(expression), + expression: expression.to_string(), + }; + self.cache.insert(expression.clone(), fitness.clone()); + Ok(fitness) + } +} + +fn initial_population( + config: EvolutionConfig, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Vec { + let mut population = vec![ + Expr::x(), + Expr::y(), + Expr::constant(0), + Expr::constant(1), + Expr::square(Expr::x()), + Expr::square(Expr::y()), + ]; + for operator in BINARY_OPERATORS { + population.push(Expr::binary(operator, Expr::x(), Expr::y())); + population.push(Expr::binary(operator, Expr::y(), Expr::x())); + } + while population.len() < config.population { + population.push(random_expression( + config.max_description_cost, + semantics, + rng, + )); + } + canonical_unique(population, config.max_description_cost) +} + +fn tournament_select<'a>( + ranked: &'a [Ranked], + tournament: usize, + rng: &mut ChaCha8Rng, +) -> &'a Ranked { + let mut selected = rng.random_range(0..ranked.len()); + for _ in 1..tournament { + selected = selected.min(rng.random_range(0..ranked.len())); + } + &ranked[selected] +} + +fn mutate( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + let candidate = match rng.random_range(0..5) { + 0 => random_expression(max_cost, semantics, rng), + 1 => replace_operator(expression, rng), + 2 => { + if rng.random_bool(0.5) { + Expr::square(expression.clone()) + } else { + Expr::shift_left(expression.clone(), rng.random_range(1..=3)) + } + } + 3 => replace_child(expression, max_cost, semantics, rng), + _ => replace_subtree(expression, max_cost, semantics, rng), + }; + bounded_canonical(candidate, max_cost).unwrap_or_else(|| expression.clone()) +} + +fn replace_operator(expression: &Expr, rng: &mut ChaCha8Rng) -> Expr { + match expression { + Expr::Binary { lhs, rhs, .. } => Expr::binary( + BINARY_OPERATORS[rng.random_range(0..BINARY_OPERATORS.len())], + (**lhs).clone(), + (**rhs).clone(), + ), + Expr::Square(value) | Expr::ShiftLeft { value, .. } => { + if rng.random_bool(0.5) { + Expr::square((**value).clone()) + } else { + Expr::shift_left((**value).clone(), rng.random_range(1..=3)) + } + } + _ => expression.clone(), + } +} + +fn replace_child( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + let child = random_expression(max_cost.saturating_sub(2).max(1), semantics, rng); + match expression { + Expr::Binary { op, lhs, rhs } if rng.random_bool(0.5) => { + Expr::binary(*op, child, (**rhs).clone()) + } + Expr::Binary { op, lhs, .. } => Expr::binary(*op, (**lhs).clone(), child), + Expr::Square(_) => Expr::square(child), + Expr::ShiftLeft { amount, .. } => Expr::shift_left(child, *amount), + _ => child, + } +} + +fn replace_subtree( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + if rng.random_bool(0.35) { + return random_expression(max_cost, semantics, rng); + } + match expression { + Expr::Binary { op, lhs, rhs } if rng.random_bool(0.5) => Expr::binary( + *op, + replace_subtree(lhs, max_cost.saturating_sub(2).max(1), semantics, rng), + (**rhs).clone(), + ), + Expr::Binary { op, lhs, rhs } => Expr::binary( + *op, + (**lhs).clone(), + replace_subtree(rhs, max_cost.saturating_sub(2).max(1), semantics, rng), + ), + Expr::Square(value) => Expr::square(replace_subtree( + value, + max_cost.saturating_sub(1).max(1), + semantics, + rng, + )), + Expr::ShiftLeft { value, amount } => Expr::shift_left( + replace_subtree(value, max_cost.saturating_sub(1).max(1), semantics, rng), + *amount, + ), + _ => random_expression(max_cost, semantics, rng), + } +} + +fn random_expression(max_cost: usize, semantics: ExprSemantics, rng: &mut ChaCha8Rng) -> Expr { + if max_cost < 2 || rng.random_bool(0.3) { + return random_terminal(semantics, rng); + } + let candidate = if max_cost < 3 || rng.random_bool(0.3) { + let child = random_expression(max_cost - 1, semantics, rng); + if rng.random_bool(0.5) { + Expr::square(child) + } else { + Expr::shift_left(child, rng.random_range(1..=3)) + } + } else { + let remaining = max_cost - 1; + let lhs_cost = rng.random_range(1..remaining); + let rhs_cost = remaining - lhs_cost; + Expr::binary( + BINARY_OPERATORS[rng.random_range(0..BINARY_OPERATORS.len())], + random_expression(lhs_cost, semantics, rng), + random_expression(rhs_cost, semantics, rng), + ) + }; + bounded_canonical(candidate, max_cost).unwrap_or_else(|| random_terminal(semantics, rng)) +} + +fn random_terminal(semantics: ExprSemantics, rng: &mut ChaCha8Rng) -> Expr { + match rng.random_range(0..4) { + 0 => Expr::x(), + 1 => Expr::y(), + _ => Expr::constant(rng.random_range(0..=semantics.output_mask().min(3))), + } +} + +fn bounded_canonical(expression: Expr, max_cost: usize) -> Option { + let expression = expression.canonicalize().ok()?; + (expression.description_cost() <= max_cost).then_some(expression) +} + +fn canonical_unique(population: Vec, max_cost: usize) -> Vec { + let mut seen = HashSet::new(); + population + .into_iter() + .filter_map(|expression| bounded_canonical(expression, max_cost)) + .filter(|expression| seen.insert(expression.clone())) + .collect() +} + +fn estimated_gate_count(expression: &Expr) -> usize { + match expression { + Expr::X | Expr::Y | Expr::Constant(_) => 0, + Expr::Square(value) => estimated_gate_count(value).saturating_add(3), + Expr::ShiftLeft { value, .. } => estimated_gate_count(value).saturating_add(1), + Expr::Binary { op, lhs, rhs } => estimated_gate_count(lhs) + .saturating_add(estimated_gate_count(rhs)) + .saturating_add(match op { + BinaryOp::Multiply => 4, + BinaryOp::Add | BinaryOp::Subtract | BinaryOp::AbsDiff => 3, + BinaryOp::Min | BinaryOp::Max => 2, + BinaryOp::BitXor | BinaryOp::BitAnd | BinaryOp::BitOr => 1, + }), + } +} + +fn validate_rows(observed: &ObservedTask) -> Result<(), LearnerFailure> { + for sample in &observed.samples { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/learner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/learner.rs new file mode 100644 index 000000000..0d3e57e7d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/learner.rs @@ -0,0 +1,83 @@ +use std::{path::PathBuf, time::Duration}; + +use thiserror::Error; + +use crate::Expr; + +use super::{ObservedTask, ResearchMethod, TrialStatus}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TrialBudget { + pub timeout: Duration, + pub max_gates: usize, + pub max_nodes: usize, +} + +impl Default for TrialBudget { + fn default() -> Self { + Self { + timeout: Duration::from_secs(30), + max_gates: crate::DEFAULT_LIMITS.max_gates, + max_nodes: 250_000, + } + } +} + +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct ResearchTools { + pub abc: Option, + pub espresso: Option, + pub yosys: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum LearnedHypothesis { + Expression { + expression: Expr, + minimum_unique: Option, + detail: String, + }, + Circuit { + netlist: String, + description_length: Option, + minimum_unique: Option, + detail: String, + }, +} + +#[derive(Clone, Debug, Eq, Error, PartialEq)] +pub enum LearnerFailure { + #[error("{0}")] + NoHypothesis(String), + #[error("{0}")] + Unsupported(String), + #[error("{0}")] + Timeout(String), + #[error("{0}")] + ResourceLimit(String), + #[error("{0}")] + ToolError(String), +} + +impl LearnerFailure { + pub fn status(&self) -> TrialStatus { + match self { + Self::NoHypothesis(_) => TrialStatus::NoHypothesis, + Self::Unsupported(_) => TrialStatus::Unsupported, + Self::Timeout(_) => TrialStatus::Timeout, + Self::ResourceLimit(_) => TrialStatus::ResourceLimit, + Self::ToolError(_) => TrialStatus::Error, + } + } +} + +pub trait ResearchLearner: Send + Sync { + fn method(&self) -> ResearchMethod; + + fn fit( + &self, + observed: &ObservedTask, + seed: u64, + budget: &TrialBudget, + ) -> Result; +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/memory.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/memory.rs new file mode 100644 index 000000000..e9cedeee1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/memory.rs @@ -0,0 +1,156 @@ +use std::time::Instant; + +use crate::{CircuitBuilder, DEFAULT_LIMITS, GateOp, ResourceLimits, Signal}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +pub struct MemorizationLearner; + +impl ResearchLearner for MemorizationLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::Memorization + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let rows = normalized_rows(observed)?; + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let mut builder = + CircuitBuilder::new(observed.input_width, &limits).map_err(classify_builder_failure)?; + let deadline = Instant::now() + budget.timeout; + let outputs = (0..observed.output_width) + .map(|output| { + compile_trie( + &mut builder, + &rows, + 0, + observed.input_width, + output, + deadline, + ) + }) + .collect::, _>>()?; + let circuit = builder.finish(&outputs).map_err(classify_builder_failure)?; + Ok(LearnedHypothesis::Circuit { + netlist: circuit.netlist, + description_length: Some(circuit.gate_count), + minimum_unique: None, + detail: format!( + "explicit zero-default decision trie over {} distinct observed rows", + rows.len() + ), + }) + } +} + +type Row = (Vec, Vec); + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "memorization requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn compile_trie( + builder: &mut CircuitBuilder<'_>, + rows: &[Row], + depth: usize, + input_width: usize, + output: usize, + deadline: Instant, +) -> Result { + if Instant::now() >= deadline { + return Err(LearnerFailure::Timeout( + "memorization trie construction exceeded the trial timeout".into(), + )); + } + if rows.is_empty() || rows.iter().all(|row| !row.1[output]) { + return builder.zero().map_err(classify_builder_failure); + } + if depth == input_width { + return if rows[0].1[output] { + builder.one() + } else { + builder.zero() + } + .map_err(classify_builder_failure); + } + + let split = rows.partition_point(|row| !row.0[depth]); + let low = compile_trie( + builder, + &rows[..split], + depth + 1, + input_width, + output, + deadline, + )?; + let high = compile_trie( + builder, + &rows[split..], + depth + 1, + input_width, + output, + deadline, + )?; + let variable = Signal::input(depth); + let when_high = builder + .binary(GateOp::And, variable, high) + .map_err(classify_builder_failure)?; + let when_low = builder + .binary(GateOp::And, variable.inverted(), low) + .map_err(classify_builder_failure)?; + builder + .binary(GateOp::Or, when_high, when_low) + .map_err(classify_builder_failure) +} + +fn classify_builder_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/mod.rs new file mode 100644 index 000000000..14894c30c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/mod.rs @@ -0,0 +1,40 @@ +mod abc_dont_care; +mod adapters; +mod bdd; +mod evolution; +mod learner; +mod memory; +mod process; +mod projection; +mod rss; +mod runner; +mod sampling; +mod sat_cegis; +mod tasks; +mod trial; + +pub use abc_dont_care::{AbcDontCareLearner, render_partial_pla}; +pub use adapters::default_adapters; +pub use bdd::{BddOrder, BddResult, RobddLearner, build_robdd}; +pub use evolution::{ + EvolutionConfig, EvolutionResult, EvolutionTraceEntry, GrammarEvolutionLearner, evolve, + evolve_with_budget, +}; +pub use learner::{LearnedHypothesis, LearnerFailure, ResearchLearner, ResearchTools, TrialBudget}; +pub use memory::MemorizationLearner; +pub use process::{run_isolated_experiment, run_measured_trial}; +pub use projection::{ + SEMANTIC_PROJECTION_EXCLUDED_FIELDS, SemanticTrialRecord, render_semantic_jsonl, + semantic_projection, write_semantic_jsonl, +}; +pub use rss::peak_rss_bytes; +pub use runner::{run_experiment, run_trial, run_trial_with_tools}; +pub use sampling::{Split, split_task}; +pub use sat_cegis::SatCegisLearner; +pub use tasks::{ + ObservedTask, OracleTask, TaskClass, TaskManifest, official_and_synthetic_tasks, render_dataset, +}; +pub use trial::{ + ExperimentConfig, ResearchMethod, TrialKey, TrialRecord, TrialStatus, expected_trial_keys, + load_experiment_config, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/process.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/process.rs new file mode 100644 index 000000000..e8b581441 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/process.rs @@ -0,0 +1,443 @@ +use std::{ + collections::{BTreeMap, HashMap, HashSet, VecDeque}, + fs, + path::{Path, PathBuf}, + process::{Child, Command, Stdio}, + thread, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +use crate::{OccamError, sha256_hex}; + +use super::{ + ExperimentConfig, OracleTask, ResearchTools, TrialBudget, TrialKey, TrialRecord, TrialStatus, + expected_trial_keys, load_experiment_config, official_and_synthetic_tasks, peak_rss_bytes, + runner::{failure_record, run_trial_with_tools}, + split_task, +}; + +pub fn run_measured_trial( + config_path: &Path, + tasks_path: &Path, + key: TrialKey, + output_path: &Path, + abc_binary: Option, +) -> Result { + validate_task_manifest(tasks_path)?; + let (config, config_sha256) = load_config_and_hash(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config)?; + if expected.binary_search(&key).is_err() { + return Err(OccamError::Validation(format!( + "trial key is outside the fixed experiment protocol: {key:?}" + ))); + } + let task = tasks + .iter() + .find(|task| task.id == key.task) + .ok_or_else(|| OccamError::Validation(format!("unknown trial task {}", key.task)))?; + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + let started_unix_micros = unix_micros()?; + let started = Instant::now(); + let budget = TrialBudget { + timeout: Duration::from_millis(config.trial_timeout_millis), + ..TrialBudget::default() + }; + let tools = ResearchTools { + abc: abc_binary, + ..ResearchTools::default() + }; + let mut record = run_trial_with_tools(task, &split, key, &config_sha256, tools, budget)?; + record.runtime_micros = elapsed_micros(started); + record.peak_rss_bytes = peak_rss_bytes()?; + record.host_identifier = environment_identifier(); + record.process_id = std::process::id(); + record.started_unix_micros = started_unix_micros; + write_record_atomic(output_path, &record)?; + Ok(record) +} + +pub fn run_isolated_experiment( + executable: &Path, + config_path: &Path, + tasks_path: &Path, + raw_measured_path: &Path, + abc_binary: Option<&Path>, + jobs: usize, +) -> Result, OccamError> { + if jobs == 0 { + return Err(OccamError::Validation( + "experiment jobs must be positive".into(), + )); + } + validate_task_manifest(tasks_path)?; + let (config, config_sha256) = load_config_and_hash(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config)?; + let expected_set = expected.iter().cloned().collect::>(); + let mut records = load_existing_records(raw_measured_path, &expected_set, &config_sha256)?; + let mut missing = expected + .into_iter() + .filter(|key| !records.contains_key(key)) + .collect::>(); + let task_map = tasks + .iter() + .map(|task| (task.id.as_str(), task)) + .collect::>(); + let temporary = ExperimentDirectory::new()?; + let mut active = Vec::::new(); + let timeout = + Duration::from_millis(config.trial_timeout_millis).saturating_add(Duration::from_secs(2)); + + while !missing.is_empty() || !active.is_empty() { + while active.len() < jobs { + let Some(key) = missing.pop_front() else { + break; + }; + let task = task_map.get(key.task.as_str()).ok_or_else(|| { + OccamError::Validation(format!("unknown trial task {}", key.task)) + })?; + let (observed_rows, held_out_rows) = split_counts(task, &key, &config)?; + let key_json = serde_json::to_string(&key).map_err(|error| { + OccamError::Validation(format!("trial key JSON encoding failed: {error}")) + })?; + let key_hash = sha256_hex(key_json.as_bytes()); + let output = temporary.path.join(format!("{key_hash}.json")); + let mut command = Command::new(executable); + command + .arg("experiment-trial") + .arg("--config") + .arg(config_path) + .arg("--tasks") + .arg(tasks_path) + .arg("--key-json") + .arg(key_json) + .arg("--output") + .arg(&output) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()); + if let Some(abc) = abc_binary { + command.arg("--abc").arg(abc); + } + let child = command.spawn().map_err(|error| { + OccamError::Validation(format!("failed to spawn isolated trial process: {error}")) + })?; + active.push(ActiveTrial { + key, + child, + output, + started: Instant::now(), + started_unix_micros: unix_micros()?, + observed_rows, + held_out_rows, + }); + } + + let mut completed_any = false; + let mut index = 0usize; + while index < active.len() { + let status = active[index].child.try_wait().map_err(|error| { + OccamError::Validation(format!("isolated trial wait failed: {error}")) + })?; + let expired = active[index].started.elapsed() >= timeout; + if status.is_none() && !expired { + index += 1; + continue; + } + + completed_any = true; + let mut state = active.swap_remove(index); + let record = if expired && status.is_none() { + let child_id = state.child.id(); + let _ = state.child.kill(); + let _ = state.child.wait(); + measured_parent_failure( + state, + &config_sha256, + TrialStatus::Timeout, + format!( + "parent terminated isolated trial after {} milliseconds", + timeout.as_millis() + ), + child_id, + )? + } else if status.is_some_and(|status| status.success()) { + load_child_record(&state.output, &state.key, &config_sha256)? + } else { + let child_id = state.child.id(); + measured_parent_failure( + state, + &config_sha256, + TrialStatus::Error, + format!("isolated trial process exited with status {status:?}"), + child_id, + )? + }; + records.insert(record.key.clone(), record); + write_records_atomic(raw_measured_path, records.values())?; + } + if !completed_any && !active.is_empty() { + thread::sleep(Duration::from_millis(10)); + } + } + + if records.len() != expected_set.len() { + return Err(OccamError::Validation(format!( + "isolated experiment produced {} rows, expected {}", + records.len(), + expected_set.len() + ))); + } + Ok(records.into_values().collect()) +} + +struct ActiveTrial { + key: TrialKey, + child: Child, + output: PathBuf, + started: Instant, + started_unix_micros: u64, + observed_rows: usize, + held_out_rows: usize, +} + +fn measured_parent_failure( + state: ActiveTrial, + config_sha256: &str, + status: TrialStatus, + detail: String, + child_id: u32, +) -> Result { + let mut record = failure_record( + state.key, + config_sha256, + state.observed_rows, + state.held_out_rows, + status, + detail, + ); + record.runtime_micros = elapsed_micros(state.started); + record.peak_rss_bytes = peak_rss_bytes()?; + record.host_identifier = environment_identifier(); + record.process_id = child_id; + record.started_unix_micros = state.started_unix_micros; + Ok(record) +} + +fn load_child_record( + path: &Path, + expected_key: &TrialKey, + config_sha256: &str, +) -> Result { + let source = fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let record: TrialRecord = serde_json::from_slice(&source) + .map_err(|error| OccamError::Validation(format!("invalid child trial JSON: {error}")))?; + validate_measured_record(&record, expected_key, config_sha256)?; + Ok(record) +} + +fn load_existing_records( + path: &Path, + expected: &HashSet, + config_sha256: &str, +) -> Result, OccamError> { + if !path.exists() { + return Ok(BTreeMap::new()); + } + let source = fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let mut records = BTreeMap::new(); + for (line_index, line) in source.lines().enumerate() { + if line.trim().is_empty() { + continue; + } + let record: TrialRecord = serde_json::from_str(line).map_err(|error| { + OccamError::Validation(format!( + "invalid measured trial JSON at line {}: {error}", + line_index + 1 + )) + })?; + if !expected.contains(&record.key) { + return Err(OccamError::Validation(format!( + "measured trial file contains unknown key {:?}", + record.key + ))); + } + validate_measured_record(&record, &record.key, config_sha256)?; + let key = record.key.clone(); + if records.insert(key.clone(), record).is_some() { + return Err(OccamError::Validation(format!( + "measured trial file contains duplicate key {key:?}" + ))); + } + } + Ok(records) +} + +fn validate_measured_record( + record: &TrialRecord, + expected_key: &TrialKey, + config_sha256: &str, +) -> Result<(), OccamError> { + if record.schema_version != 1 + || &record.key != expected_key + || record.config_sha256 != config_sha256 + || record.runtime_micros == 0 + || record.peak_rss_bytes == 0 + || record.host_identifier.is_empty() + || record.process_id == 0 + || record.started_unix_micros == 0 + { + return Err(OccamError::Validation(format!( + "invalid measured trial record for {expected_key:?}" + ))); + } + Ok(()) +} + +fn split_counts( + task: &OracleTask, + key: &TrialKey, + config: &ExperimentConfig, +) -> Result<(usize, usize), OccamError> { + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + Ok((split.observed_indices.len(), split.held_out_indices.len())) +} + +fn load_config_and_hash(path: &Path) -> Result<(ExperimentConfig, String), OccamError> { + let source = fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let hash = sha256_hex(&source); + Ok((load_experiment_config(path)?, hash)) +} + +fn validate_task_manifest(path: &Path) -> Result<(), OccamError> { + let source = fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let supplied: serde_json::Value = serde_json::from_str(&source) + .map_err(|error| OccamError::Validation(format!("invalid task manifest JSON: {error}")))?; + let compiled: serde_json::Value = serde_json::from_str(include_str!( + "../../../research/tasks.json" + )) + .expect("compiled task manifest must be valid JSON"); + if supplied != compiled { + return Err(OccamError::Validation( + "task manifest differs from the compiled evaluator-only definitions".into(), + )); + } + Ok(()) +} + +fn write_record_atomic(path: &Path, record: &TrialRecord) -> Result<(), OccamError> { + let mut encoded = serde_json::to_string(record) + .map_err(|error| OccamError::Validation(format!("trial JSON encoding failed: {error}")))?; + encoded.push('\n'); + write_atomic(path, encoded.as_bytes()) +} + +fn write_records_atomic<'a>( + path: &Path, + records: impl Iterator, +) -> Result<(), OccamError> { + let mut output = String::new(); + for record in records { + output.push_str(&serde_json::to_string(record).map_err(|error| { + OccamError::Validation(format!("trial JSON encoding failed: {error}")) + })?); + output.push('\n'); + } + write_atomic(path, output.as_bytes()) +} + +fn write_atomic(path: &Path, bytes: &[u8]) -> Result<(), OccamError> { + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, bytes).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +fn elapsed_micros(started: Instant) -> u64 { + u64::try_from(started.elapsed().as_micros()) + .unwrap_or(u64::MAX) + .max(1) +} + +fn unix_micros() -> Result { + let duration = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_err(|error| { + OccamError::Validation(format!("system clock is before epoch: {error}")) + })?; + u64::try_from(duration.as_micros()).map_err(|_| OccamError::ArithmeticOverflow { + context: "trial start timestamp", + }) +} + +fn environment_identifier() -> String { + let host = std::env::var("HOSTNAME") + .or_else(|_| std::env::var("COMPUTERNAME")) + .unwrap_or_else(|_| "unknown-host".into()); + let material = format!( + "{}|{}|{}", + std::env::consts::OS, + std::env::consts::ARCH, + host + ); + let hash = sha256_hex(material.as_bytes()); + format!( + "{}-{}-{}", + std::env::consts::OS, + std::env::consts::ARCH, + &hash[..16] + ) +} + +struct ExperimentDirectory { + path: PathBuf, +} + +impl ExperimentDirectory { + fn new() -> Result { + let path = std::env::temp_dir().join(format!( + "occam71-isolated-{}-{}", + std::process::id(), + unix_micros()? + )); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for ExperimentDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/projection.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/projection.rs new file mode 100644 index 000000000..1baff5de7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/projection.rs @@ -0,0 +1,106 @@ +use std::{collections::HashSet, fs, path::Path}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, VerificationMetrics}; + +use super::{ResearchMethod, TrialKey, TrialRecord, TrialStatus}; + +pub const SEMANTIC_PROJECTION_EXCLUDED_FIELDS: [&str; 5] = [ + "runtime_micros", + "peak_rss_bytes", + "host_identifier", + "process_id", + "started_unix_micros", +]; + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct SemanticTrialRecord { + pub schema_version: u32, + pub measured_schema_version: u32, + pub key: TrialKey, + pub config_sha256: String, + pub status: TrialStatus, + pub observed_rows: usize, + pub held_out_rows: usize, + pub training: Option, + pub held_out: Option, + pub full_domain: Option, + pub semantic_recovery: bool, + pub expression: Option, + pub description_length: Option, + pub gate_count: Option, + pub minimum_unique: Option, + pub hypothesis_sha256: Option, + pub detail: String, +} + +impl SemanticTrialRecord { + pub fn method(&self) -> ResearchMethod { + self.key.method + } +} + +pub fn semantic_projection(record: &TrialRecord) -> SemanticTrialRecord { + SemanticTrialRecord { + schema_version: 2, + measured_schema_version: record.schema_version, + key: record.key.clone(), + config_sha256: record.config_sha256.clone(), + status: record.status, + observed_rows: record.observed_rows, + held_out_rows: record.held_out_rows, + training: record.training.clone(), + held_out: record.held_out.clone(), + full_domain: record.full_domain.clone(), + semantic_recovery: record.semantic_recovery, + expression: record.expression.clone(), + description_length: record.description_length, + gate_count: record.gate_count, + minimum_unique: record.minimum_unique, + hypothesis_sha256: record.hypothesis_sha256.clone(), + detail: record.detail.clone(), + } +} + +pub fn render_semantic_jsonl(records: &[TrialRecord]) -> Result { + let mut projected = records.iter().map(semantic_projection).collect::>(); + projected.sort_by(|lhs, rhs| lhs.key.cmp(&rhs.key)); + let unique = projected + .iter() + .map(|record| &record.key) + .collect::>(); + if unique.len() != projected.len() { + return Err(OccamError::Validation( + "semantic projection contains duplicate trial keys".into(), + )); + } + let mut output = String::new(); + for record in projected { + output.push_str(&serde_json::to_string(&record).map_err(|error| { + OccamError::Validation(format!("semantic JSON encoding failed: {error}")) + })?); + output.push('\n'); + } + Ok(output) +} + +pub fn write_semantic_jsonl(path: &Path, records: &[TrialRecord]) -> Result<(), OccamError> { + let output = render_semantic_jsonl(records)?; + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, output).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/rss.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/rss.rs new file mode 100644 index 000000000..dca13f86b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/rss.rs @@ -0,0 +1,31 @@ +use std::mem::MaybeUninit; + +use crate::OccamError; + +pub fn peak_rss_bytes() -> Result { + let mut usage = MaybeUninit::::zeroed(); + // SAFETY: `usage.as_mut_ptr()` points to writable storage for exactly one + // `libc::rusage`. `getrusage` initializes that value synchronously and does + // not retain the pointer. We check its return code before assuming init. + let status = unsafe { libc::getrusage(libc::RUSAGE_SELF, usage.as_mut_ptr()) }; + if status != 0 { + return Err(OccamError::Validation(format!( + "getrusage(RUSAGE_SELF) failed: {}", + std::io::Error::last_os_error() + ))); + } + // SAFETY: the successful `getrusage` call above initialized the value. + let usage = unsafe { usage.assume_init() }; + let raw = u64::try_from(usage.ru_maxrss) + .map_err(|_| OccamError::Validation("getrusage returned negative peak RSS".into()))?; + #[cfg(target_os = "linux")] + { + raw.checked_mul(1024).ok_or(OccamError::ArithmeticOverflow { + context: "Linux peak RSS byte normalization", + }) + } + #[cfg(not(target_os = "linux"))] + { + Ok(raw) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/runner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/runner.rs new file mode 100644 index 000000000..b5b66b882 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/runner.rs @@ -0,0 +1,285 @@ +use std::{collections::HashMap, path::Path}; + +use crate::{ + Dataset, OccamError, Sample, VerificationMetrics, compile_expression, pack_dataset, + parse_netlist, sha256_hex, verify_prepacked, +}; + +use super::{ + LearnedHypothesis, OracleTask, ResearchMethod, ResearchTools, Split, TrialBudget, TrialKey, + TrialRecord, TrialStatus, default_adapters, expected_trial_keys, load_experiment_config, + official_and_synthetic_tasks, split_task, +}; + +pub fn run_experiment(config_path: &Path, raw_path: &Path) -> Result<(), OccamError> { + let config_source = std::fs::read(config_path).map_err(|source| OccamError::ReadFile { + path: config_path.to_owned(), + source, + })?; + let config_sha256 = sha256_hex(&config_source); + let config = load_experiment_config(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let keys = expected_trial_keys(&task_ids, &config)?; + let task_map = tasks + .iter() + .map(|task| (task.id.as_str(), task)) + .collect::>(); + let mut output = String::new(); + for key in keys { + let task = task_map.get(key.task.as_str()).unwrap(); + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + let record = run_trial(task, &split, key, &config_sha256)?; + let encoded = serde_json::to_string(&record).map_err(|error| { + OccamError::Validation(format!("trial JSON encoding failed: {error}")) + })?; + output.push_str(&encoded); + output.push('\n'); + } + if let Some(parent) = raw_path.parent() { + std::fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = raw_path.with_extension(format!("jsonl.{}.tmp", std::process::id())); + std::fs::write(&temporary, output).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + std::fs::rename(&temporary, raw_path).map_err(|source| OccamError::WriteFile { + path: raw_path.to_owned(), + source, + }) +} + +pub fn run_trial( + task: &OracleTask, + split: &Split, + key: TrialKey, + config_sha256: &str, +) -> Result { + run_trial_with_tools( + task, + split, + key, + config_sha256, + ResearchTools::default(), + TrialBudget::default(), + ) +} + +pub fn run_trial_with_tools( + task: &OracleTask, + split: &Split, + key: TrialKey, + config_sha256: &str, + tools: ResearchTools, + budget: TrialBudget, +) -> Result { + let observed = task.observe(&split.observed_indices)?; + let observed_rows = split.observed_indices.len(); + let held_out_rows = split.held_out_indices.len(); + let hypothesis = if key.method == ResearchMethod::OracleExpression { + Ok(LearnedHypothesis::Expression { + expression: task.oracle.clone(), + minimum_unique: Some(true), + detail: "evaluator-only oracle lower bound".into(), + }) + } else { + let adapters = default_adapters(tools); + let adapter = adapters + .iter() + .find(|adapter| adapter.method() == key.method) + .ok_or_else(|| { + OccamError::Validation(format!( + "research method {:?} has no automatic adapter", + key.method + )) + })?; + adapter.fit(&observed, key.seed, &budget) + }; + let hypothesis = match hypothesis { + Ok(hypothesis) => hypothesis, + Err(failure) => { + return Ok(failure_record( + key, + config_sha256, + observed_rows, + held_out_rows, + failure.status(), + failure.to_string(), + )); + } + }; + let evaluated = evaluate_hypothesis(task, split, &hypothesis); + let ( + training, + held_out, + full_domain, + expression, + description_length, + gate_count, + unique, + hash, + detail, + ) = match evaluated { + Ok(evaluated) => evaluated, + Err(error) => { + let status = match &error { + OccamError::ResourceLimit { .. } | OccamError::ArithmeticOverflow { .. } => { + TrialStatus::ResourceLimit + } + _ => TrialStatus::Error, + }; + return Ok(failure_record( + key, + config_sha256, + observed_rows, + held_out_rows, + status, + format!("hypothesis evaluation failed: {error}"), + )); + } + }; + let semantic_recovery = full_domain.exact_matches == full_domain.samples; + Ok(TrialRecord { + schema_version: 1, + key, + config_sha256: config_sha256.to_owned(), + status: TrialStatus::Success, + observed_rows, + held_out_rows, + training: Some(training), + held_out: Some(held_out), + full_domain: Some(full_domain), + semantic_recovery, + expression, + description_length, + gate_count, + minimum_unique: unique, + runtime_micros: 0, + peak_rss_bytes: 0, + host_identifier: String::new(), + process_id: 0, + started_unix_micros: 0, + hypothesis_sha256: Some(hash), + detail, + }) +} + +pub(crate) fn failure_record( + key: TrialKey, + config_sha256: &str, + observed_rows: usize, + held_out_rows: usize, + status: TrialStatus, + detail: String, +) -> TrialRecord { + TrialRecord { + schema_version: 1, + key, + config_sha256: config_sha256.to_owned(), + status, + observed_rows, + held_out_rows, + training: None, + held_out: None, + full_domain: None, + semantic_recovery: false, + expression: None, + description_length: None, + gate_count: None, + minimum_unique: None, + runtime_micros: 0, + peak_rss_bytes: 0, + host_identifier: String::new(), + process_id: 0, + started_unix_micros: 0, + hypothesis_sha256: None, + detail, + } +} + +#[allow(clippy::type_complexity)] +fn evaluate_hypothesis( + task: &OracleTask, + split: &Split, + hypothesis: &LearnedHypothesis, +) -> Result< + ( + VerificationMetrics, + VerificationMetrics, + VerificationMetrics, + Option, + Option, + Option, + Option, + String, + String, + ), + OccamError, +> { + match hypothesis { + LearnedHypothesis::Expression { + expression, + minimum_unique, + detail, + } => { + let compiled = compile_expression(expression, task.semantics, &crate::DEFAULT_LIMITS)?; + let circuit = parse_netlist(&compiled.netlist)?; + let training_dataset = subset(task.full_domain(), &split.observed_indices); + let held_out_dataset = subset(task.full_domain(), &split.held_out_indices); + let training = verify_prepacked(&circuit, &pack_dataset(&training_dataset)?)?; + let held_out = verify_prepacked(&circuit, &pack_dataset(&held_out_dataset)?)?; + let full_domain = verify_prepacked(&circuit, &pack_dataset(task.full_domain())?)?; + Ok(( + training, + held_out, + full_domain, + Some(expression.to_string()), + Some(expression.description_cost()), + Some(circuit.gates.len()), + *minimum_unique, + sha256_hex(compiled.netlist.as_bytes()), + detail.clone(), + )) + } + LearnedHypothesis::Circuit { + netlist, + description_length, + minimum_unique, + detail, + } => { + let circuit = parse_netlist(netlist)?; + let training_dataset = subset(task.full_domain(), &split.observed_indices); + let held_out_dataset = subset(task.full_domain(), &split.held_out_indices); + let training = verify_prepacked(&circuit, &pack_dataset(&training_dataset)?)?; + let held_out = verify_prepacked(&circuit, &pack_dataset(&held_out_dataset)?)?; + let full_domain = verify_prepacked(&circuit, &pack_dataset(task.full_domain())?)?; + Ok(( + training, + held_out, + full_domain, + None, + *description_length, + Some(circuit.gates.len()), + *minimum_unique, + sha256_hex(netlist.as_bytes()), + detail.clone(), + )) + } + } +} + +fn subset(dataset: &Dataset, indices: &[usize]) -> Dataset { + Dataset { + input_width: dataset.input_width, + output_width: dataset.output_width, + samples: indices + .iter() + .map(|index| dataset.samples[*index].clone()) + .collect::>(), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sampling.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sampling.rs new file mode 100644 index 000000000..661ce3977 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sampling.rs @@ -0,0 +1,44 @@ +use rand::{SeedableRng, seq::SliceRandom}; +use rand_chacha::ChaCha8Rng; +use sha2::{Digest, Sha256}; + +use crate::{OccamError, research::OracleTask}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Split { + pub observed_indices: Vec, + pub held_out_indices: Vec, +} + +pub fn split_task( + task: &OracleTask, + fraction: f64, + seed: u64, + experiment_seed: u64, +) -> Result { + if !fraction.is_finite() || fraction <= 0.0 || fraction >= 1.0 { + return Err(OccamError::Validation(format!( + "research fraction must be in (0,1), got {fraction}" + ))); + } + let rows = task.full_domain().samples.len(); + let observed = ((rows as f64 * fraction).round() as usize).max(1); + let basis_points = (fraction * 100_000.0).round() as u64; + let mut hasher = Sha256::new(); + hasher.update(experiment_seed.to_le_bytes()); + hasher.update(task.id.as_bytes()); + hasher.update(basis_points.to_le_bytes()); + hasher.update(seed.to_le_bytes()); + let digest: [u8; 32] = hasher.finalize().into(); + let mut rng = ChaCha8Rng::from_seed(digest); + let mut indices = (0..rows).collect::>(); + indices.shuffle(&mut rng); + let mut observed_indices = indices[..observed].to_vec(); + let mut held_out_indices = indices[observed..].to_vec(); + observed_indices.sort_unstable(); + held_out_indices.sort_unstable(); + Ok(Split { + observed_indices, + held_out_indices, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sat_cegis.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sat_cegis.rs new file mode 100644 index 000000000..938590ec3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/sat_cegis.rs @@ -0,0 +1,149 @@ +use std::time::Instant; + +use crate::{ + Dataset, SynthesisLimits, SynthesisProblem, SynthesisStatus, evaluate, parse_netlist, + synthesize_minimal, +}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const MAX_CNF_VARIABLES: usize = 50_000; +const MAX_CNF_CLAUSES: usize = 500_000; +const MAX_CNF_LITERALS: usize = 2_000_000; +const MAX_EIGHT_INPUT_GATES: usize = 3; + +pub struct SatCegisLearner; + +impl ResearchLearner for SatCegisLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::SatCegis + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + if observed.input_width > 8 { + return Err(LearnerFailure::Unsupported( + "SAT/CEGIS requires at most eight learner-visible input bits".into(), + )); + } + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "SAT/CEGIS has a zero timeout".into(), + )); + } + let normalized = normalize_dataset(observed)?; + let started = Instant::now(); + let mut constraints = vec![normalized.samples[0].clone()]; + let mut iterations = 0usize; + loop { + iterations += 1; + let remaining = budget.timeout.saturating_sub(started.elapsed()); + if remaining.is_zero() { + return Err(LearnerFailure::Timeout( + "SAT/CEGIS exceeded the trial timeout".into(), + )); + } + let limits = SynthesisLimits { + max_gates: budget.max_gates.min(if observed.input_width == 8 { + MAX_EIGHT_INPUT_GATES + } else { + 12 + }), + max_cnf_variables: budget.max_nodes.min(MAX_CNF_VARIABLES), + max_cnf_clauses: budget.max_nodes.saturating_mul(10).min(MAX_CNF_CLAUSES), + max_cnf_literals: budget.max_nodes.saturating_mul(50).min(MAX_CNF_LITERALS), + timeout: remaining, + ..SynthesisLimits::default() + }; + let constraint_dataset = Dataset { + input_width: normalized.input_width, + output_width: normalized.output_width, + samples: constraints.clone(), + }; + let problem = + SynthesisProblem::from_partial_dataset_with_limits(&constraint_dataset, &limits) + .map_err(classify_synthesis_failure)?; + let certificate = + synthesize_minimal(&problem, &limits).map_err(classify_synthesis_failure)?; + match certificate.status { + SynthesisStatus::Sat => { + let netlist = certificate.netlist.ok_or_else(|| { + LearnerFailure::ToolError( + "SAT certificate reported success without a netlist".into(), + ) + })?; + let circuit = parse_netlist(&netlist).map_err(classify_synthesis_failure)?; + let counterexample = normalized.samples.iter().find(|sample| { + evaluate(&circuit, &sample.input) + .map(|actual| actual != sample.expected) + .unwrap_or(true) + }); + if let Some(counterexample) = counterexample { + if constraints + .iter() + .any(|sample| sample.input == counterexample.input) + { + return Err(LearnerFailure::ToolError( + "SAT candidate violates an existing CEGIS constraint".into(), + )); + } + constraints.push(counterexample.clone()); + constraints.sort_by(|lhs, rhs| lhs.input.cmp(&rhs.input)); + continue; + } + return Ok(LearnedHypothesis::Circuit { + netlist, + description_length: certificate.minimal_gate_count, + minimum_unique: Some(true), + detail: format!( + "bounded SAT/CEGIS converged in {iterations} iterations with {} constraints", + constraints.len() + ), + }); + } + SynthesisStatus::NoCircuitWithinBound => { + return Err(LearnerFailure::NoHypothesis(certificate.status_detail)); + } + SynthesisStatus::Timeout => { + return Err(LearnerFailure::Timeout(certificate.status_detail)); + } + SynthesisStatus::ResourceLimit => { + return Err(LearnerFailure::ResourceLimit(certificate.status_detail)); + } + } + } + } +} + +fn normalize_dataset(observed: &ObservedTask) -> Result { + let limits = SynthesisLimits::default(); + let problem = SynthesisProblem::from_partial_dataset_with_limits(&observed.dataset(), &limits) + .map_err(classify_synthesis_failure)?; + Ok(Dataset { + input_width: problem.input_width, + output_width: problem.output_width, + samples: problem + .rows + .into_iter() + .map(|row| crate::Sample { + input: row.input, + expected: row.expected, + }) + .collect(), + }) +} + +fn classify_synthesis_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/tasks.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/tasks.rs new file mode 100644 index 000000000..cee59f021 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/tasks.rs @@ -0,0 +1,208 @@ +use std::collections::HashSet; + +use serde::{Deserialize, Serialize}; + +use crate::{Dataset, Expr, ExprSemantics, OccamError, Sample, parse_expression, sha256_hex}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum TaskClass { + Official, + Synthetic, +} + +#[derive(Clone, Debug)] +pub struct OracleTask { + pub id: String, + pub class: TaskClass, + pub semantics: ExprSemantics, + pub oracle: Expr, + full_domain: Dataset, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ObservedTask { + pub id: String, + pub input_width: usize, + pub output_width: usize, + pub samples: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TaskManifest { + pub id: String, + pub class: TaskClass, + pub operand_bits: usize, + pub output_bits: usize, + pub oracle: String, + pub domain_rows: usize, + pub domain_sha256: String, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct TaskFile { + schema_version: u32, + tasks: Vec, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct TaskDefinition { + id: String, + class: TaskClass, + operand_bits: usize, + output_bits: usize, + oracle: String, +} + +pub fn official_and_synthetic_tasks() -> Result, OccamError> { + let file: TaskFile = serde_json::from_str(include_str!( + "../../../research/tasks.json" + )) + .map_err(|error| { + OccamError::Validation(format!("research task manifest is invalid: {error}")) + })?; + if file.schema_version != 1 || file.tasks.len() != 16 { + return Err(OccamError::Validation( + "research task manifest must contain schema 1 and sixteen tasks".into(), + )); + } + let mut ids = HashSet::new(); + file.tasks + .into_iter() + .map(|definition| { + if !ids.insert(definition.id.clone()) { + return Err(OccamError::Validation(format!( + "duplicate research task {}", + definition.id + ))); + } + let semantics = ExprSemantics::new(definition.operand_bits, definition.output_bits)?; + let oracle = parse_expression(&definition.oracle)?; + let full_domain = complete_domain(&oracle, semantics)?; + Ok(OracleTask { + id: definition.id, + class: definition.class, + semantics, + oracle, + full_domain, + }) + }) + .collect() +} + +impl OracleTask { + pub fn observe(&self, indices: &[usize]) -> Result { + let mut seen = HashSet::new(); + let samples = indices + .iter() + .map(|index| { + if !seen.insert(*index) { + return Err(OccamError::Validation(format!( + "duplicate observed index {index}" + ))); + } + self.full_domain + .samples + .get(*index) + .cloned() + .ok_or_else(|| { + OccamError::Validation(format!( + "observed index {index} is outside task {}", + self.id + )) + }) + }) + .collect::, _>>()?; + Ok(ObservedTask { + id: self.id.clone(), + input_width: self.full_domain.input_width, + output_width: self.full_domain.output_width, + samples, + }) + } + + pub fn full_domain(&self) -> &Dataset { + &self.full_domain + } + + pub fn manifest(&self) -> TaskManifest { + let bytes = render_dataset(&self.full_domain); + TaskManifest { + id: self.id.clone(), + class: self.class, + operand_bits: self.semantics.operand_bits, + output_bits: self.semantics.output_bits, + oracle: self.oracle.to_string(), + domain_rows: self.full_domain.samples.len(), + domain_sha256: sha256_hex(bytes.as_bytes()), + } + } +} + +impl ObservedTask { + pub fn dataset(&self) -> Dataset { + Dataset { + input_width: self.input_width, + output_width: self.output_width, + samples: self.samples.clone(), + } + } +} + +fn complete_domain(expression: &Expr, semantics: ExprSemantics) -> Result { + let input_width = + semantics + .operand_bits + .checked_mul(2) + .ok_or(OccamError::ArithmeticOverflow { + context: "research task input width", + })?; + let cases = 1usize + .checked_shl( + u32::try_from(input_width).map_err(|_| OccamError::ArithmeticOverflow { + context: "research task domain shift", + })?, + ) + .ok_or(OccamError::ArithmeticOverflow { + context: "research task domain rows", + })?; + let mut samples = Vec::with_capacity(cases); + for packed in 0..cases { + let input = (0..input_width) + .map(|bit| packed & (1usize << bit) != 0) + .collect::>(); + let mask = (1usize << semantics.operand_bits) - 1; + let x = (packed & mask) as u64; + let y = (packed >> semantics.operand_bits) as u64; + let value = expression.evaluate(x, y, semantics)?; + let expected = (0..semantics.output_bits) + .map(|bit| value & (1u64 << bit) != 0) + .collect(); + samples.push(Sample { input, expected }); + } + Ok(Dataset { + input_width, + output_width: semantics.output_bits, + samples, + }) +} + +pub fn render_dataset(dataset: &Dataset) -> String { + let mut output = String::from("input,output\n"); + for sample in &dataset.samples { + output.extend(sample.input.iter().map(|bit| if *bit { '1' } else { '0' })); + output.push(','); + output.extend( + sample + .expected + .iter() + .map(|bit| if *bit { '1' } else { '0' }), + ); + output.push('\n'); + } + output +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/trial.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/trial.rs new file mode 100644 index 000000000..b3b2cc7d1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/research/trial.rs @@ -0,0 +1,158 @@ +use std::{collections::HashSet, path::Path}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, VerificationMetrics}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum ResearchMethod { + LegacyRegistry, + MdlEnumerator, + AbcDontCare, + Robdd, + SatCegis, + GrammarEvolution, + Memorization, + OracleExpression, +} + +impl ResearchMethod { + pub const AUTOMATIC: [Self; 7] = [ + Self::LegacyRegistry, + Self::MdlEnumerator, + Self::AbcDontCare, + Self::Robdd, + Self::SatCegis, + Self::GrammarEvolution, + Self::Memorization, + ]; +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ExperimentConfig { + pub schema_version: u32, + pub fractions: Vec, + pub seeds: Vec, + pub methods: Vec, + pub trial_timeout_millis: u64, + pub experiment_seed: u64, +} + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TrialKey { + pub task: String, + pub fraction_basis_points: u32, + pub seed: u64, + pub method: ResearchMethod, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum TrialStatus { + Success, + NoHypothesis, + Unsupported, + Timeout, + ResourceLimit, + Error, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TrialRecord { + pub schema_version: u32, + pub key: TrialKey, + pub config_sha256: String, + pub status: TrialStatus, + pub observed_rows: usize, + pub held_out_rows: usize, + pub training: Option, + pub held_out: Option, + pub full_domain: Option, + pub semantic_recovery: bool, + pub expression: Option, + pub description_length: Option, + pub gate_count: Option, + pub minimum_unique: Option, + pub runtime_micros: u64, + pub peak_rss_bytes: u64, + #[serde(default)] + pub host_identifier: String, + #[serde(default)] + pub process_id: u32, + #[serde(default)] + pub started_unix_micros: u64, + pub hypothesis_sha256: Option, + pub detail: String, +} + +pub fn load_experiment_config(path: &Path) -> Result { + let source = std::fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let config: ExperimentConfig = serde_json::from_str(&source) + .map_err(|error| OccamError::Validation(format!("invalid experiment config: {error}")))?; + validate_config(&config)?; + Ok(config) +} + +pub fn expected_trial_keys( + task_ids: &[String], + config: &ExperimentConfig, +) -> Result, OccamError> { + validate_config(config)?; + let mut keys = Vec::new(); + for task in task_ids { + for fraction in &config.fractions { + let fraction_basis_points = (fraction * 100_000.0).round() as u32; + for seed in &config.seeds { + for method in &config.methods { + keys.push(TrialKey { + task: task.clone(), + fraction_basis_points, + seed: *seed, + method: *method, + }); + } + } + } + } + keys.sort(); + let unique = keys.iter().collect::>(); + if unique.len() != keys.len() { + return Err(OccamError::Validation( + "experiment trial keys are not unique".into(), + )); + } + Ok(keys) +} + +fn validate_config(config: &ExperimentConfig) -> Result<(), OccamError> { + let dimensions_are_supported = (config.fractions.len() == 8 && config.seeds.len() == 20) + || (config.fractions.len() == 1 && config.seeds.len() == 1); + if config.schema_version != 1 + || !dimensions_are_supported + || config.methods.len() != 8 + || config.trial_timeout_millis == 0 + { + return Err(OccamError::Validation( + "experiment config does not match the full or smoke protocol".into(), + )); + } + if config + .fractions + .iter() + .any(|fraction| !fraction.is_finite() || *fraction <= 0.0 || *fraction >= 1.0) + || config.seeds.iter().collect::>().len() != config.seeds.len() + || config.methods.iter().collect::>().len() != config.methods.len() + { + return Err(OccamError::Validation( + "experiment config contains invalid or duplicate values".into(), + )); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/scalar.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/scalar.rs new file mode 100644 index 000000000..8af703e9a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/scalar.rs @@ -0,0 +1,127 @@ +use crate::{Circuit, DEFAULT_LIMITS, OccamError, Operand, ResourceLimits, Source}; + +pub fn evaluate(circuit: &Circuit, input: &[bool]) -> Result, OccamError> { + evaluate_with_limits(circuit, input, &DEFAULT_LIMITS) +} + +pub fn evaluate_with_limits( + circuit: &Circuit, + input: &[bool], + limits: &ResourceLimits, +) -> Result, OccamError> { + if input.len() != circuit.input_count { + return Err(OccamError::Validation(format!( + "input width {} does not match circuit INPUTS {}", + input.len(), + circuit.input_count + ))); + } + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + let mut wires = Vec::new(); + wires + .try_reserve_exact(circuit.wire_count) + .map_err(|error| { + OccamError::Validation(format!("cannot allocate scalar wires: {error}")) + })?; + wires.resize(circuit.wire_count, false); + for (gate_index, gate) in circuit.gates.iter().enumerate() { + if gate.output != gate_index { + return Err(OccamError::Validation(format!( + "gate {gate_index} writes non-dense wire {}", + gate.output + ))); + } + let lhs = resolve(gate.lhs, input, &wires, gate_index)?; + let rhs = resolve(gate.rhs, input, &wires, gate_index)?; + wires[gate.output] = gate.op.apply(lhs, rhs); + } + circuit + .outputs + .iter() + .map(|operand| resolve(*operand, input, &wires, circuit.wire_count)) + .collect() +} + +fn resolve( + operand: Operand, + inputs: &[bool], + wires: &[bool], + available_wires: usize, +) -> Result { + let value = match operand.source { + Source::Input(index) => inputs.get(index).copied().ok_or_else(|| { + OccamError::Validation(format!("input column {index} is out of range")) + })?, + Source::Wire(index) if index < available_wires => { + wires.get(index).copied().ok_or_else(|| { + OccamError::Validation(format!("wire column {index} is out of range")) + })? + } + Source::Wire(index) => { + return Err(OccamError::Validation(format!( + "wire column {index} is unavailable with {available_wires} prior wires" + ))); + } + }; + Ok(value ^ operand.inverted) +} + +#[cfg(test)] +mod tests { + use crate::parse_netlist; + + use super::*; + + #[test] + fn evaluates_all_gate_truth_tables() { + for (name, expected) in [ + ("AND", [false, false, false, true]), + ("OR", [false, true, true, true]), + ("XOR", [false, true, true, false]), + ("NAND", [true, true, true, false]), + ("NOR", [true, false, false, false]), + ("XNOR", [true, false, false, true]), + ] { + let circuit = + parse_netlist(&format!("INPUTS 2\nw1 = {name} x1 x2\nOUTPUTS w1")).unwrap(); + let actual = [[false, false], [false, true], [true, false], [true, true]] + .map(|input| evaluate(&circuit, &input).unwrap()[0]); + assert_eq!(actual, expected, "{name}"); + } + } + + #[test] + fn applies_free_inversion_and_preserves_output_order() { + let circuit = parse_netlist("INPUTS 2\nw1 = AND ~x1 x2\nOUTPUTS x2 ~w1 x1").unwrap(); + assert_eq!( + evaluate(&circuit, &[false, true]).unwrap(), + [true, false, false] + ); + } + + #[test] + fn rejects_input_width_mismatch() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + assert!(evaluate(&circuit, &[true]).is_err()); + } + + #[test] + fn rejects_invalid_public_circuit_without_panicking() { + let mut circuit = parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1").unwrap(); + circuit.gates[0].lhs.source = Source::Input(usize::MAX); + assert!(evaluate(&circuit, &[false]).is_err()); + + let mut circuit = parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1").unwrap(); + circuit.gates[0].rhs.source = Source::Wire(usize::MAX); + assert!(evaluate(&circuit, &[false]).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/certificate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/certificate.rs new file mode 100644 index 000000000..5d72e0b6a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/certificate.rs @@ -0,0 +1,72 @@ +use serde::{Deserialize, Serialize}; + +use crate::OccamError; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum AttemptStatus { + Sat, + Unsat, + Timeout, + ResourceLimit, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum SynthesisStatus { + Sat, + NoCircuitWithinBound, + Timeout, + ResourceLimit, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct SynthesisAttempt { + pub gate_bound: usize, + pub status: AttemptStatus, + pub variables: usize, + pub clauses: usize, + pub literals: usize, + pub elapsed_ms: u64, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct VerificationEvidence { + pub reparsed_netlist: bool, + pub scalar_exact_matches: usize, + pub scalar_correct_bits: usize, + pub packed_exact_matches: usize, + pub packed_correct_bits: usize, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct SynthesisCertificate { + pub schema_version: u32, + pub solver: String, + pub encoding: String, + pub status: SynthesisStatus, + pub status_detail: String, + pub problem_sha256: String, + pub input_width: usize, + pub output_width: usize, + pub truth_table_rows: usize, + pub maximum_gate_bound: usize, + pub timeout_ms: u64, + pub attempts: Vec, + pub minimal_gate_count: Option, + pub netlist_sha256: Option, + pub netlist: Option, + pub verification: Option, +} + +impl SynthesisCertificate { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|json| format!("{json}\n")) + .map_err(|error| { + OccamError::Validation(format!( + "synthesis certificate JSON encoding failed: {error}" + )) + }) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/cnf.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/cnf.rs new file mode 100644 index 000000000..154578a51 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/cnf.rs @@ -0,0 +1,372 @@ +use crate::{GateOp, OccamError, Source}; +use varisat::{CnfFormula, ExtendFormula, Lit}; + +use super::{SynthesisLimits, SynthesisProblem}; + +pub(crate) const GATE_OPERATIONS: [GateOp; 6] = [ + GateOp::And, + GateOp::Or, + GateOp::Xor, + GateOp::Nand, + GateOp::Nor, + GateOp::Xnor, +]; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub(crate) struct LiteralCandidate { + pub source: Source, + pub inverted: bool, +} + +pub(crate) struct GateEncoding { + pub operations: Vec, + pub lhs_selectors: Vec, + pub rhs_selectors: Vec, + pub candidates: Vec, + pub values: Vec, +} + +pub(crate) struct OutputEncoding { + pub selectors: Vec, + pub candidates: Vec, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct EncodingStatistics { + pub variables: usize, + pub clauses: usize, + pub literals: usize, +} + +pub(crate) struct EncodedSynthesis { + pub formula: CnfFormula, + pub gates: Vec, + pub outputs: Vec, + pub statistics: EncodingStatistics, +} + +struct FormulaBuilder<'a> { + formula: CnfFormula, + limits: &'a SynthesisLimits, + literal_count: usize, +} + +impl<'a> FormulaBuilder<'a> { + fn new(limits: &'a SynthesisLimits) -> Self { + Self { + formula: CnfFormula::new(), + limits, + literal_count: 0, + } + } + + fn new_lit(&mut self) -> Result { + let requested = + self.formula + .var_count() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF variable count", + })?; + require( + "synthesis CNF variables", + requested, + self.limits.max_cnf_variables, + )?; + Ok(self.formula.new_lit()) + } + + fn new_lits(&mut self, count: usize) -> Result, OccamError> { + (0..count).map(|_| self.new_lit()).collect() + } + + fn add_clause(&mut self, clause: &[Lit]) -> Result<(), OccamError> { + let clause_count = + self.formula + .len() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF clause count", + })?; + require( + "synthesis CNF clauses", + clause_count, + self.limits.max_cnf_clauses, + )?; + self.literal_count = + self.literal_count + .checked_add(clause.len()) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF literal count", + })?; + require( + "synthesis CNF literals", + self.literal_count, + self.limits.max_cnf_literals, + )?; + self.formula.add_clause(clause); + Ok(()) + } + + fn exactly_one(&mut self, selectors: &[Lit]) -> Result<(), OccamError> { + self.add_clause(selectors)?; + for left in 0..selectors.len() { + for right in (left + 1)..selectors.len() { + self.add_clause(&[!selectors[left], !selectors[right]])?; + } + } + Ok(()) + } + + fn statistics(&self) -> EncodingStatistics { + EncodingStatistics { + variables: self.formula.var_count(), + clauses: self.formula.len(), + literals: self.literal_count, + } + } +} + +pub(crate) fn encode( + problem: &SynthesisProblem, + gate_bound: usize, + limits: &SynthesisLimits, +) -> Result { + require("synthesis gates", gate_bound, limits.max_gates)?; + let mut builder = FormulaBuilder::new(limits); + let mut gates = Vec::with_capacity(gate_bound); + + for gate_index in 0..gate_bound { + let candidates = literal_candidates(problem.input_width, gate_index); + let operations = builder.new_lits(GATE_OPERATIONS.len())?; + let lhs_selectors = builder.new_lits(candidates.len())?; + let rhs_selectors = builder.new_lits(candidates.len())?; + let lhs_values = builder.new_lits(problem.rows.len())?; + let rhs_values = builder.new_lits(problem.rows.len())?; + let values = builder.new_lits(problem.rows.len())?; + builder.exactly_one(&operations)?; + builder.exactly_one(&lhs_selectors)?; + builder.exactly_one(&rhs_selectors)?; + + for (row_index, row) in problem.rows.iter().enumerate() { + for (selector, candidate) in lhs_selectors.iter().zip(&candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_equality(&mut builder, *selector, lhs_values[row_index], source)?; + } + for (selector, candidate) in rhs_selectors.iter().zip(&candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_equality(&mut builder, *selector, rhs_values[row_index], source)?; + } + for (operation_index, operation) in GATE_OPERATIONS.iter().enumerate() { + encode_operation( + &mut builder, + operations[operation_index], + lhs_values[row_index], + rhs_values[row_index], + values[row_index], + *operation, + )?; + } + } + + gates.push(GateEncoding { + operations, + lhs_selectors, + rhs_selectors, + candidates, + values, + }); + } + + let output_candidates = literal_candidates(problem.input_width, gate_bound); + let mut outputs = Vec::with_capacity(problem.output_width); + for output_index in 0..problem.output_width { + let selectors = builder.new_lits(output_candidates.len())?; + builder.exactly_one(&selectors)?; + for (row_index, row) in problem.rows.iter().enumerate() { + for (selector, candidate) in selectors.iter().zip(&output_candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_expected(&mut builder, *selector, source, row.expected[output_index])?; + } + } + outputs.push(OutputEncoding { + selectors, + candidates: output_candidates.clone(), + }); + } + + let statistics = builder.statistics(); + Ok(EncodedSynthesis { + formula: builder.formula, + gates, + outputs, + statistics, + }) +} + +fn literal_candidates(input_width: usize, wire_count: usize) -> Vec { + let sources = (0..input_width) + .map(Source::Input) + .chain((0..wire_count).map(Source::Wire)); + sources + .flat_map(|source| { + [ + LiteralCandidate { + source, + inverted: false, + }, + LiteralCandidate { + source, + inverted: true, + }, + ] + }) + .collect() +} + +#[derive(Clone, Copy)] +enum SemanticValue { + Constant(bool), + Literal(Lit), +} + +fn source_value( + candidate: LiteralCandidate, + row_index: usize, + row: &super::TruthRow, + gates: &[GateEncoding], +) -> Result { + match candidate.source { + Source::Input(index) => row + .input + .get(index) + .copied() + .map(|value| SemanticValue::Constant(value ^ candidate.inverted)) + .ok_or_else(|| { + OccamError::Validation(format!("synthesis input source {index} is out of range")) + }), + Source::Wire(index) => gates + .get(index) + .and_then(|gate| gate.values.get(row_index)) + .copied() + .map(|value| SemanticValue::Literal(if candidate.inverted { !value } else { value })) + .ok_or_else(|| { + OccamError::Validation(format!("synthesis wire source {index} is unavailable")) + }), + } +} + +fn imply_equality( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + value: Lit, + source: SemanticValue, +) -> Result<(), OccamError> { + match source { + SemanticValue::Constant(true) => builder.add_clause(&[!selector, value]), + SemanticValue::Constant(false) => builder.add_clause(&[!selector, !value]), + SemanticValue::Literal(source) => { + builder.add_clause(&[!selector, !value, source])?; + builder.add_clause(&[!selector, value, !source]) + } + } +} + +fn imply_expected( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + source: SemanticValue, + expected: bool, +) -> Result<(), OccamError> { + match source { + SemanticValue::Constant(actual) if actual == expected => Ok(()), + SemanticValue::Constant(_) => builder.add_clause(&[!selector]), + SemanticValue::Literal(value) => { + builder.add_clause(&[!selector, if expected { value } else { !value }]) + } + } +} + +fn encode_operation( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + lhs: Lit, + rhs: Lit, + output: Lit, + operation: GateOp, +) -> Result<(), OccamError> { + for lhs_value in [false, true] { + for rhs_value in [false, true] { + let expected = operation.apply(lhs_value, rhs_value); + builder.add_clause(&[ + !selector, + if lhs_value { !lhs } else { lhs }, + if rhs_value { !rhs } else { rhs }, + if expected { output } else { !output }, + ])?; + } + } + Ok(()) +} + +fn require(resource: &'static str, requested: usize, limit: usize) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use varisat::Solver; + + use super::*; + + fn solve(formula: &CnfFormula) -> bool { + let mut solver = Solver::new(); + solver.add_formula(formula); + solver.solve().unwrap() + } + + #[test] + fn exactly_one_handles_zero_one_and_multiple_selectors() { + let limits = SynthesisLimits::default(); + + let mut zero = FormulaBuilder::new(&limits); + zero.exactly_one(&[]).unwrap(); + assert!(!solve(&zero.formula)); + + let mut one = FormulaBuilder::new(&limits); + let selector = one.new_lit().unwrap(); + one.exactly_one(&[selector]).unwrap(); + assert!(solve(&one.formula)); + + let mut multiple = FormulaBuilder::new(&limits); + let left = multiple.new_lit().unwrap(); + let right = multiple.new_lit().unwrap(); + multiple.exactly_one(&[left, right]).unwrap(); + multiple.add_clause(&[left]).unwrap(); + multiple.add_clause(&[right]).unwrap(); + assert!(!solve(&multiple.formula)); + } + + #[test] + fn respects_cnf_resource_limits() { + let limits = SynthesisLimits { + max_cnf_variables: 0, + ..SynthesisLimits::default() + }; + let mut builder = FormulaBuilder::new(&limits); + assert!(matches!( + builder.new_lit(), + Err(OccamError::ResourceLimit { + resource: "synthesis CNF variables", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/mod.rs new file mode 100644 index 000000000..58094d59a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/mod.rs @@ -0,0 +1,10 @@ +mod certificate; +mod cnf; +mod problem; +mod solver; + +pub use certificate::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisStatus, VerificationEvidence, +}; +pub use problem::{SynthesisLimits, SynthesisProblem, TruthRow}; +pub use solver::synthesize_minimal; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/problem.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/problem.rs new file mode 100644 index 000000000..97ed2e292 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/problem.rs @@ -0,0 +1,297 @@ +use std::time::Duration; + +use crate::{Dataset, OccamError}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct SynthesisLimits { + pub max_inputs: usize, + pub max_outputs: usize, + pub max_truth_rows: usize, + pub max_gates: usize, + pub max_cnf_variables: usize, + pub max_cnf_clauses: usize, + pub max_cnf_literals: usize, + pub timeout: Duration, +} + +impl Default for SynthesisLimits { + fn default() -> Self { + Self { + max_inputs: 8, + max_outputs: 8, + max_truth_rows: 256, + max_gates: 16, + max_cnf_variables: 2_000_000, + max_cnf_clauses: 10_000_000, + max_cnf_literals: 50_000_000, + timeout: Duration::from_secs(60), + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TruthRow { + pub input: Vec, + pub expected: Vec, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct SynthesisProblem { + pub input_width: usize, + pub output_width: usize, + pub rows: Vec, +} + +impl SynthesisProblem { + pub fn from_dataset(dataset: &Dataset) -> Result { + Self::from_dataset_with_limits(dataset, &SynthesisLimits::default()) + } + + pub fn from_dataset_with_limits( + dataset: &Dataset, + limits: &SynthesisLimits, + ) -> Result { + let problem = Self::from_partial_dataset_with_limits(dataset, limits)?; + let row_count = 1usize + .checked_shl(dataset.input_width.try_into().map_err(|_| { + OccamError::ArithmeticOverflow { + context: "complete truth-table row count", + } + })?) + .ok_or(OccamError::ArithmeticOverflow { + context: "complete truth-table row count", + })?; + require( + "synthesis truth-table rows", + row_count, + limits.max_truth_rows, + )?; + if problem.rows.len() != row_count { + return Err(OccamError::Validation(format!( + "synthesis requires a complete truth table with {row_count} rows, found {}", + problem.rows.len() + ))); + } + Ok(problem) + } + + pub fn from_partial_dataset_with_limits( + dataset: &Dataset, + limits: &SynthesisLimits, + ) -> Result { + require("synthesis inputs", dataset.input_width, limits.max_inputs)?; + require( + "synthesis outputs", + dataset.output_width, + limits.max_outputs, + )?; + if dataset.input_width == 0 { + return Err(OccamError::Validation( + "synthesis requires at least one input".into(), + )); + } + if dataset.output_width == 0 { + return Err(OccamError::Validation( + "synthesis requires at least one output".into(), + )); + } + require( + "synthesis constraint rows", + dataset.samples.len(), + limits.max_truth_rows, + )?; + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "synthesis requires at least one constraint row".into(), + )); + } + + let mut rows = Vec::with_capacity(dataset.samples.len()); + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let assignment = sample + .input + .iter() + .fold(0usize, |index, bit| (index << 1) | usize::from(*bit)); + rows.push((assignment, sample.input.clone(), sample.expected.clone())); + } + rows.sort_by_key(|row| row.0); + for pair in rows.windows(2) { + if pair[0].0 == pair[1].0 { + let kind = if pair[0].2 == pair[1].2 { + "duplicate" + } else { + "conflicting duplicate" + }; + return Err(OccamError::Validation(format!( + "{kind} synthesis input assignment {}", + pair[0].0 + ))); + } + } + let rows = rows + .into_iter() + .map(|(_, input, expected)| TruthRow { input, expected }) + .collect(); + + Ok(Self { + input_width: dataset.input_width, + output_width: dataset.output_width, + rows, + }) + } + + pub(crate) fn canonical_bytes(&self) -> Vec { + let mut bytes = format!( + "occam71-synthesis-v1\ninputs={}\noutputs={}\n", + self.input_width, self.output_width + ) + .into_bytes(); + for row in &self.rows { + for bit in &row.input { + bytes.push(if *bit { b'1' } else { b'0' }); + } + bytes.push(b','); + for bit in &row.expected { + bytes.push(if *bit { b'1' } else { b'0' }); + } + bytes.push(b'\n'); + } + bytes + } +} + +fn require(resource: &'static str, requested: usize, limit: usize) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::{Dataset, Sample, parse_dataset}; + + use super::*; + + #[test] + fn canonicalizes_complete_half_adder() { + let dataset = parse_dataset("input,output\n11,01\n00,00\n10,10\n01,10\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + assert_eq!(problem.rows[0].input, [false, false]); + assert_eq!(problem.rows[0].expected, [false, false]); + assert_eq!(problem.rows[3].input, [true, true]); + assert_eq!(problem.rows[3].expected, [false, true]); + } + + #[test] + fn accepts_complete_two_bit_adder() { + let mut samples = Vec::new(); + for assignment in 0..16usize { + let a = ((assignment >> 3) & 1) * 2 + ((assignment >> 2) & 1); + let b = ((assignment >> 1) & 1) * 2 + (assignment & 1); + let sum = a + b; + samples.push(Sample { + input: (0..4) + .map(|column| (assignment >> (3 - column)) & 1 == 1) + .collect(), + expected: (0..3) + .map(|column| (sum >> (2 - column)) & 1 == 1) + .collect(), + }); + } + let dataset = Dataset { + input_width: 4, + output_width: 3, + samples, + }; + assert_eq!( + SynthesisProblem::from_dataset(&dataset).unwrap().rows.len(), + 16 + ); + } + + #[test] + fn rejects_partial_duplicate_conflicting_and_malformed_tables() { + let partial = parse_dataset("input,output\n00,0\n01,1\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&partial) + .unwrap_err() + .to_string() + .contains("complete") + ); + + let duplicate = parse_dataset("input,output\n00,0\n00,0\n10,1\n11,0\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&duplicate) + .unwrap_err() + .to_string() + .contains("duplicate") + ); + + let conflicting = parse_dataset("input,output\n00,0\n00,1\n10,1\n11,0\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&conflicting) + .unwrap_err() + .to_string() + .contains("conflicting") + ); + + let mut malformed = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + malformed.samples[1].expected.clear(); + assert!( + SynthesisProblem::from_dataset(&malformed) + .unwrap_err() + .to_string() + .contains("output width") + ); + } + + #[test] + fn canonicalizes_partial_constraint_tables_for_cegis() { + let dataset = parse_dataset("input,output\n11,0\n01,1\n").unwrap(); + let problem = SynthesisProblem::from_partial_dataset_with_limits( + &dataset, + &SynthesisLimits::default(), + ) + .unwrap(); + assert_eq!(problem.rows.len(), 2); + assert_eq!(problem.rows[0].input, [false, true]); + assert_eq!(problem.rows[1].input, [true, true]); + } + + #[test] + fn rejects_oversized_problem() { + let dataset = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + let limits = SynthesisLimits { + max_inputs: 0, + ..SynthesisLimits::default() + }; + assert!(matches!( + SynthesisProblem::from_dataset_with_limits(&dataset, &limits), + Err(OccamError::ResourceLimit { + resource: "synthesis inputs", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/solver.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/solver.rs new file mode 100644 index 000000000..e8b2802de --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/src/synthesis/solver.rs @@ -0,0 +1,578 @@ +use std::{ + sync::mpsc, + thread, + time::{Duration, Instant}, +}; + +use sha2::{Digest, Sha256}; +use varisat::{Lit, Solver}; + +use crate::{ + Circuit, Dataset, Gate, GateOp, OccamError, Operand, Sample, Source, pack_dataset, + parse_netlist, verify, verify_prepacked, +}; + +use super::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisLimits, SynthesisProblem, + SynthesisStatus, VerificationEvidence, + cnf::{EncodedSynthesis, GATE_OPERATIONS, GateEncoding, OutputEncoding, encode}, +}; + +pub fn synthesize_minimal( + problem: &SynthesisProblem, + limits: &SynthesisLimits, +) -> Result { + validate_problem(problem, limits)?; + let started = Instant::now(); + let mut attempts = Vec::new(); + + for gate_bound in 0..=limits.max_gates { + if timed_out(started.elapsed(), limits.timeout) { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Timeout, + variables: 0, + clauses: 0, + literals: 0, + elapsed_ms: 0, + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::Timeout, + format!( + "timeout reached before solving gate bound {gate_bound}; no larger bound was attempted" + ), + attempts, + )); + } + + let attempt_started = Instant::now(); + let encoded = match encode(problem, gate_bound, limits) { + Ok(encoded) => encoded, + Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }) => { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::ResourceLimit, + variables: 0, + clauses: 0, + literals: 0, + elapsed_ms: elapsed_ms(attempt_started.elapsed()), + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::ResourceLimit, + format!( + "{resource} resource limit exceeded at gate bound {gate_bound}: requested {requested}, limit {limit}" + ), + attempts, + )); + } + Err(error) => return Err(error), + }; + let statistics = encoded.statistics; + let remaining = limits.timeout.saturating_sub(started.elapsed()); + let solved = solve_with_timeout(encoded, remaining)?; + let elapsed = attempt_started.elapsed(); + if matches!(solved, TimedSolve::Timeout) { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Timeout, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::Timeout, + format!( + "wall-clock timeout reached while solving gate bound {gate_bound}; no larger bound was attempted" + ), + attempts, + )); + } + + match solved { + TimedSolve::Timeout => unreachable!("timeout returned above"), + TimedSolve::Completed(CanonicalSolve::Unsat) => attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Unsat, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }), + TimedSolve::Completed(CanonicalSolve::Sat { circuit }) => { + let (netlist, verification) = independently_verify(problem, circuit, gate_bound)?; + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Sat, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }); + let detail = if gate_bound == 0 { + "gate bound 0 was SAT".to_owned() + } else { + format!( + "bounds 0 through {} were UNSAT and bound {gate_bound} was SAT", + gate_bound - 1 + ) + }; + let mut certificate = + base_certificate(problem, limits, SynthesisStatus::Sat, detail, attempts); + certificate.minimal_gate_count = Some(gate_bound); + certificate.netlist_sha256 = Some(sha256_hex(netlist.as_bytes())); + certificate.netlist = Some(netlist); + certificate.verification = Some(verification); + return Ok(certificate); + } + } + } + + Ok(base_certificate( + problem, + limits, + SynthesisStatus::NoCircuitWithinBound, + format!( + "all gate bounds from 0 through {} were UNSAT; this is not a proof for larger circuits", + limits.max_gates + ), + attempts, + )) +} + +enum CanonicalSolve { + Sat { circuit: Circuit }, + Unsat, +} + +enum TimedSolve { + Completed(CanonicalSolve), + Timeout, +} + +fn solve_with_timeout( + encoded: EncodedSynthesis, + timeout: Duration, +) -> Result { + let (sender, receiver) = mpsc::sync_channel(1); + thread::Builder::new() + .name("occam71-sat".into()) + .spawn(move || { + let _ = sender.send(solve_canonical(encoded)); + }) + .map_err(|error| { + OccamError::Validation(format!("failed to start SAT solver worker: {error}")) + })?; + match receiver.recv_timeout(timeout) { + Ok(Ok(result)) => Ok(TimedSolve::Completed(result)), + Ok(Err(error)) => Err(error), + Err(mpsc::RecvTimeoutError::Timeout) => Ok(TimedSolve::Timeout), + Err(mpsc::RecvTimeoutError::Disconnected) => Err(OccamError::Validation( + "SAT solver worker terminated without a result".into(), + )), + } +} + +fn solve_canonical(encoded: EncodedSynthesis) -> Result { + let EncodedSynthesis { + formula, + gates, + outputs, + .. + } = encoded; + let mut solver = Solver::new(); + solver.add_formula(&formula); + let satisfiable = solver + .solve() + .map_err(|error| OccamError::Validation(format!("SAT solver failed: {error}")))?; + if !satisfiable { + return Ok(CanonicalSolve::Unsat); + } + + let mut assumptions = Vec::new(); + for selectors in selector_groups(&gates, &outputs) { + let mut selected = None; + for selector in selectors { + let mut trial = assumptions.clone(); + trial.push(selector); + solver.assume(&trial); + let satisfiable = solver.solve().map_err(|error| { + OccamError::Validation(format!("SAT canonicalization failed: {error}")) + })?; + if satisfiable { + selected = Some(selector); + assumptions.push(selector); + break; + } + } + if selected.is_none() { + return Err(OccamError::Validation( + "SAT model lost an exactly-one selector during canonicalization".into(), + )); + } + } + solver.assume(&assumptions); + if !solver + .solve() + .map_err(|error| OccamError::Validation(format!("SAT model extraction failed: {error}")))? + { + return Err(OccamError::Validation( + "canonical SAT assumptions unexpectedly became UNSAT".into(), + )); + } + let model = solver + .model() + .ok_or_else(|| OccamError::Validation("SAT solver returned SAT without a model".into()))?; + let circuit = extract_circuit(&gates, &outputs, &model)?; + Ok(CanonicalSolve::Sat { circuit }) +} + +fn selector_groups(gates: &[GateEncoding], outputs: &[OutputEncoding]) -> Vec> { + let mut groups = Vec::with_capacity(gates.len() * 3 + outputs.len()); + for gate in gates { + groups.push(gate.operations.clone()); + groups.push(gate.lhs_selectors.clone()); + groups.push(gate.rhs_selectors.clone()); + } + groups.extend(outputs.iter().map(|output| output.selectors.clone())); + groups +} + +fn extract_circuit( + gates: &[GateEncoding], + outputs: &[OutputEncoding], + model: &[Lit], +) -> Result { + let mut extracted_gates = Vec::with_capacity(gates.len()); + for (gate_index, gate) in gates.iter().enumerate() { + let operation_index = selected_index(&gate.operations, model, "gate operation")?; + let lhs_index = selected_index(&gate.lhs_selectors, model, "gate lhs")?; + let rhs_index = selected_index(&gate.rhs_selectors, model, "gate rhs")?; + extracted_gates.push(Gate { + output: gate_index, + op: GATE_OPERATIONS[operation_index], + lhs: candidate_operand(gate.candidates[lhs_index]), + rhs: candidate_operand(gate.candidates[rhs_index]), + }); + } + let extracted_outputs = outputs + .iter() + .map(|output| { + let index = selected_index(&output.selectors, model, "circuit output")?; + Ok(candidate_operand(output.candidates[index])) + }) + .collect::, OccamError>>()?; + let input_count = gates + .first() + .and_then(|gate| { + gate.candidates + .iter() + .filter_map(|candidate| match candidate.source { + Source::Input(index) => Some(index + 1), + Source::Wire(_) => None, + }) + .max() + }) + .or_else(|| { + outputs.first().and_then(|output| { + output + .candidates + .iter() + .filter_map(|candidate| match candidate.source { + Source::Input(index) => Some(index + 1), + Source::Wire(_) => None, + }) + .max() + }) + }) + .ok_or_else(|| OccamError::Validation("synthesis circuit has no inputs".into()))?; + Ok(Circuit { + input_count, + wire_count: extracted_gates.len(), + gates: extracted_gates, + outputs: extracted_outputs, + }) +} + +fn selected_index(selectors: &[Lit], model: &[Lit], context: &str) -> Result { + let selected = selectors + .iter() + .enumerate() + .filter(|(_, selector)| model_value(model, **selector)) + .map(|(index, _)| index) + .collect::>(); + match selected.as_slice() { + [index] => Ok(*index), + _ => Err(OccamError::Validation(format!( + "SAT model selected {} values for {context}, expected exactly one", + selected.len() + ))), + } +} + +fn model_value(model: &[Lit], variable: Lit) -> bool { + model + .iter() + .find(|literal| literal.index() == variable.index()) + .is_some_and(|literal| literal.is_positive()) +} + +fn candidate_operand(candidate: super::cnf::LiteralCandidate) -> Operand { + Operand { + source: candidate.source, + inverted: candidate.inverted, + } +} + +fn independently_verify( + problem: &SynthesisProblem, + circuit: Circuit, + gate_bound: usize, +) -> Result<(String, VerificationEvidence), OccamError> { + if circuit.gates.len() != gate_bound { + return Err(OccamError::Validation(format!( + "extracted circuit has {} gates, expected bound {gate_bound}", + circuit.gates.len() + ))); + } + let netlist = render_netlist(&circuit); + let reparsed = parse_netlist(&netlist)?; + if reparsed != circuit { + return Err(OccamError::Validation( + "reparsed synthesized netlist differs from extracted circuit".into(), + )); + } + let dataset = problem_dataset(problem); + let scalar = verify(&reparsed, &dataset)?; + let packed = verify_prepacked(&reparsed, &pack_dataset(&dataset)?)?; + let expected_bits = problem.rows.len().checked_mul(problem.output_width).ok_or( + OccamError::ArithmeticOverflow { + context: "synthesis verification bit count", + }, + )?; + if scalar.exact_matches != problem.rows.len() + || scalar.correct_bits != expected_bits + || packed != scalar + { + return Err(OccamError::Validation(format!( + "independent verification rejected synthesized circuit: scalar {scalar:?}, packed {packed:?}" + ))); + } + Ok(( + netlist, + VerificationEvidence { + reparsed_netlist: true, + scalar_exact_matches: scalar.exact_matches, + scalar_correct_bits: scalar.correct_bits, + packed_exact_matches: packed.exact_matches, + packed_correct_bits: packed.correct_bits, + }, + )) +} + +fn problem_dataset(problem: &SynthesisProblem) -> Dataset { + Dataset { + input_width: problem.input_width, + output_width: problem.output_width, + samples: problem + .rows + .iter() + .map(|row| Sample { + input: row.input.clone(), + expected: row.expected.clone(), + }) + .collect(), + } +} + +fn validate_problem( + problem: &SynthesisProblem, + limits: &SynthesisLimits, +) -> Result<(), OccamError> { + let dataset = problem_dataset(problem); + let canonical = SynthesisProblem::from_partial_dataset_with_limits(&dataset, limits)?; + if &canonical != problem { + return Err(OccamError::Validation( + "SynthesisProblem rows are not in canonical input order".into(), + )); + } + Ok(()) +} + +fn render_netlist(circuit: &Circuit) -> String { + let mut netlist = format!("INPUTS {}\n", circuit.input_count); + for gate in &circuit.gates { + netlist.push_str(&format!( + "w{} = {} {} {}\n", + gate.output + 1, + operation_name(gate.op), + operand_name(gate.lhs), + operand_name(gate.rhs) + )); + } + netlist.push_str("OUTPUTS"); + for output in &circuit.outputs { + netlist.push(' '); + netlist.push_str(&operand_name(*output)); + } + netlist.push('\n'); + netlist +} + +fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +fn operand_name(operand: Operand) -> String { + let prefix = if operand.inverted { "~" } else { "" }; + match operand.source { + Source::Input(index) => format!("{prefix}x{}", index + 1), + Source::Wire(index) => format!("{prefix}w{}", index + 1), + } +} + +fn base_certificate( + problem: &SynthesisProblem, + limits: &SynthesisLimits, + status: SynthesisStatus, + status_detail: String, + attempts: Vec, +) -> SynthesisCertificate { + SynthesisCertificate { + schema_version: 1, + solver: "varisat 0.2.2".into(), + encoding: "universal-dag-cnf-v1".into(), + status, + status_detail, + problem_sha256: sha256_hex(&problem.canonical_bytes()), + input_width: problem.input_width, + output_width: problem.output_width, + truth_table_rows: problem.rows.len(), + maximum_gate_bound: limits.max_gates, + timeout_ms: elapsed_ms(limits.timeout), + attempts, + minimal_gate_count: None, + netlist_sha256: None, + netlist: None, + verification: None, + } +} + +fn sha256_hex(bytes: &[u8]) -> String { + let digest = Sha256::digest(bytes); + digest.iter().map(|byte| format!("{byte:02x}")).collect() +} + +fn timed_out(elapsed: Duration, timeout: Duration) -> bool { + elapsed >= timeout +} + +fn elapsed_ms(duration: Duration) -> u64 { + u64::try_from(duration.as_millis()).unwrap_or(u64::MAX) +} + +#[cfg(test)] +mod tests { + use crate::parse_dataset; + + use super::*; + + #[test] + fn proves_half_adder_minimal_at_two_gates() { + let dataset = parse_dataset("input,output\n00,00\n01,10\n10,10\n11,01\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let limits = SynthesisLimits { + max_gates: 2, + ..SynthesisLimits::default() + }; + let certificate = synthesize_minimal(&problem, &limits).unwrap(); + assert_eq!(certificate.status, SynthesisStatus::Sat); + assert_eq!( + certificate + .attempts + .iter() + .map(|attempt| attempt.status) + .collect::>(), + [ + AttemptStatus::Unsat, + AttemptStatus::Unsat, + AttemptStatus::Sat + ] + ); + assert_eq!(certificate.minimal_gate_count, Some(2)); + assert!(certificate.verification.is_some()); + } + + #[test] + fn distinguishes_bound_exhaustion_timeout_and_resource_limit() { + let dataset = parse_dataset("input,output\n00,00\n01,10\n10,10\n11,01\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + + let bounded = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 1, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(bounded.status, SynthesisStatus::NoCircuitWithinBound); + + let timeout = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 2, + timeout: Duration::ZERO, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(timeout.status, SynthesisStatus::Timeout); + + let limited = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 2, + max_cnf_variables: 0, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(limited.status, SynthesisStatus::ResourceLimit); + } + + #[test] + fn certificate_json_is_stably_ordered() { + let dataset = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let certificate = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 0, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + let first = certificate.to_json_pretty().unwrap(); + let second = certificate.to_json_pretty().unwrap(); + assert_eq!(first, second); + assert!(first.find("\"schema_version\"").unwrap() < first.find("\"status\"").unwrap()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/tests/release_artifacts.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/tests/release_artifacts.rs new file mode 100644 index 000000000..30d81654f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/solutions/rewrite-it-in-rust/search/tests/release_artifacts.rs @@ -0,0 +1,92 @@ +use std::{fs, path::PathBuf}; + +use occam71_rust::{parse_netlist, sha256_hex}; + +fn solution_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +#[test] +fn standalone_snapshot_verifies_every_release_claim_root() { + let root = solution_root(); + let manifest: serde_json::Value = + serde_json::from_slice(&fs::read(root.join("manifest.json")).unwrap()).unwrap(); + assert_eq!(manifest["schema_version"], 2); + assert_eq!(manifest["learner"], "mdl-enumerator"); + assert_eq!(manifest["baseline_tag"], "v0.2.0"); + + for instance in manifest["instances"].as_array().unwrap() { + let circuit_path = instance["circuit_path"].as_str().unwrap(); + let prediction_path = instance["prediction_path"].as_str().unwrap(); + let report_path = instance["report_path"].as_str().unwrap(); + let circuit = fs::read(root.join(circuit_path)).unwrap(); + let prediction = fs::read(root.join(prediction_path)).unwrap(); + let report = fs::read(root.join(report_path)).unwrap(); + assert_eq!(sha256_hex(&circuit), instance["circuit_sha256"]); + assert_eq!(sha256_hex(&prediction), instance["prediction_sha256"]); + assert_eq!( + instance["prediction_sha256"], + instance["expected_commitment_sha256"] + ); + assert_eq!(sha256_hex(&report), instance["report_sha256"]); + assert_eq!( + parse_netlist(std::str::from_utf8(&circuit).unwrap()) + .unwrap() + .gates + .len(), + instance["gate_count"].as_u64().unwrap() as usize + ); + } + + for prefix in ["optimization_report", "research_manifest"] { + let path = manifest[format!("{prefix}_path")].as_str().unwrap(); + let expected = manifest[format!("{prefix}_sha256")].as_str().unwrap(); + assert_eq!(sha256_hex(&fs::read(root.join(path)).unwrap()), expected); + } + + let rooted: serde_json::Value = + serde_json::from_slice(&fs::read(root.join("research-manifest.json")).unwrap()).unwrap(); + assert_eq!(rooted["trial_rows"], 20_480); + assert_eq!( + sha256_hex( + &fs::read(root.join(rooted["study_manifest_path"].as_str().unwrap())).unwrap() + ), + rooted["study_manifest_sha256"].as_str().unwrap() + ); + for reference in rooted["official_mdl_reports"] + .as_object() + .unwrap() + .values() + { + let report = fs::read(root.join(reference["report_path"].as_str().unwrap())).unwrap(); + assert_eq!( + sha256_hex(&report), + reference["report_sha256"].as_str().unwrap() + ); + let report: serde_json::Value = serde_json::from_slice(&report).unwrap(); + assert_eq!(report["schema_version"], 2); + assert_eq!(report["learner"], "mdl-enumerator"); + assert_eq!(report["exhaustive_mismatches"], 0); + assert_eq!(report["commitment_matches"], true); + } + + let study: serde_json::Value = + serde_json::from_slice(&fs::read(root.join("research/manifest.json")).unwrap()).unwrap(); + assert_eq!( + study["files"]["raw.jsonl"], + rooted["raw_matrix_sha256"] + ); + for (relative, expected) in study["files"].as_object().unwrap() { + if relative == "raw.jsonl" { + continue; + } + assert_eq!( + sha256_hex(&fs::read(root.join("research").join(relative)).unwrap()), + expected.as_str().unwrap(), + "{relative}" + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/benchmark.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/benchmark.rs new file mode 100644 index 000000000..47ecfbe8d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/benchmark.rs @@ -0,0 +1,447 @@ +use std::{ + hint::black_box, + process::Command, + time::{Duration, Instant}, +}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + Circuit, CompiledCircuit, Dataset, OccamError, PackedDataset, VerificationMetrics, + pack_dataset, parse_dataset, parse_packed_dataset, verify, verify_compiled_prepacked, + verify_prepacked_interpreted, verify_prepacked_reference, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum BenchmarkBackend { + Scalar, + Packed, + PackedReference, + PackedInterpreted, + Compiled, +} + +impl BenchmarkBackend { + pub fn label(self) -> &'static str { + match self { + Self::Scalar => "scalar", + Self::Packed => "packed", + Self::PackedReference => "packed-reference", + Self::PackedInterpreted => "packed-interpreted", + Self::Compiled => "compiled", + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct TimingStatistics { + pub minimum_ns: u64, + pub mean_ns: f64, + pub median_ns: u64, + pub p95_ns: u64, + pub standard_deviation_ns: f64, + pub median_absolute_deviation_ns: u64, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct BenchmarkReport { + pub schema_version: u32, + pub backend: String, + pub circuit_path: String, + pub dataset_path: String, + pub samples: usize, + pub gates: usize, + pub input_width: usize, + pub output_width: usize, + pub warmup_iterations: usize, + pub measured_iterations: usize, + pub batch_count: usize, + pub raw_iterations_ns: Vec, + pub batch_medians_ns: Vec, + pub measurement_order: String, + pub parse_ns: u64, + pub packing_ns: Option, + pub circuit_parse_ns: u64, + pub scalar_dataset_parse_ns: u64, + pub legacy_pack_ns: u64, + pub direct_packed_parse_ns: u64, + pub compilation_ns: u64, + pub one_shot_ns: u64, + pub scalar_dataset_parse_iterations_ns: Vec, + pub legacy_pack_iterations_ns: Vec, + pub direct_packed_parse_iterations_ns: Vec, + pub compilation_iterations_ns: Vec, + pub scalar_dataset_parse: TimingStatistics, + pub legacy_pack: TimingStatistics, + pub direct_packed_parse: TimingStatistics, + pub compilation: TimingStatistics, + pub evaluation: TimingStatistics, + pub samples_per_second_at_median: f64, + pub gate_evaluations_per_second_at_median: f64, + pub exact_matches: usize, + pub correct_bits: usize, + pub total_bits: usize, + pub rustc: String, + pub operating_system: String, + pub architecture: String, +} + +#[allow(clippy::too_many_arguments)] +pub fn run_benchmark( + backend: BenchmarkBackend, + circuit: &Circuit, + dataset_source: &str, + warmups: usize, + iterations: usize, + batches: usize, + circuit_parse_duration: Duration, + circuit_path: String, + dataset_path: String, +) -> Result { + if iterations == 0 || batches == 0 { + return Err(OccamError::Validation( + "benchmark iterations and batches must be positive".into(), + )); + } + + let (dataset, legacy_packed, first_scalar_parse, first_legacy_pack) = + parse_and_pack_legacy(dataset_source)?; + let (direct_packed, first_direct_parse) = parse_direct(dataset_source)?; + if direct_packed != legacy_packed { + return Err(OccamError::Validation( + "direct packed parser disagrees with scalar parse plus pack".into(), + )); + } + + let (compiled, first_compilation) = compile_circuit(circuit)?; + + let mut scalar_parse_durations = vec![first_scalar_parse]; + let mut legacy_pack_durations = vec![first_legacy_pack]; + let mut direct_parse_durations = vec![first_direct_parse]; + let mut compilation_durations = vec![first_compilation]; + for repetition in 1..5 { + if repetition % 2 == 1 { + let (direct, duration) = parse_direct(dataset_source)?; + black_box(direct); + direct_parse_durations.push(duration); + let (scalar, packed, parse_duration, pack_duration) = + parse_and_pack_legacy(dataset_source)?; + black_box((scalar, packed)); + scalar_parse_durations.push(parse_duration); + legacy_pack_durations.push(pack_duration); + } else { + let (scalar, packed, parse_duration, pack_duration) = + parse_and_pack_legacy(dataset_source)?; + black_box((scalar, packed)); + scalar_parse_durations.push(parse_duration); + legacy_pack_durations.push(pack_duration); + let (direct, duration) = parse_direct(dataset_source)?; + black_box(direct); + direct_parse_durations.push(duration); + } + let (candidate, duration) = compile_circuit(circuit)?; + black_box(candidate); + compilation_durations.push(duration); + } + let scalar_parse_statistics = statistics(&scalar_parse_durations)?; + let legacy_pack_statistics = statistics(&legacy_pack_durations)?; + let direct_parse_statistics = statistics(&direct_parse_durations)?; + let compilation_statistics = statistics(&compilation_durations)?; + let scalar_dataset_parse_duration = Duration::from_nanos(scalar_parse_statistics.median_ns); + let legacy_pack_duration = Duration::from_nanos(legacy_pack_statistics.median_ns); + let direct_packed_parse_duration = Duration::from_nanos(direct_parse_statistics.median_ns); + let compilation_duration = Duration::from_nanos(compilation_statistics.median_ns); + + let scalar_metrics = verify(circuit, &dataset)?; + let interpreted_metrics = verify_prepacked_interpreted(circuit, &direct_packed)?; + let compiled_metrics = verify_compiled_prepacked(&compiled, &direct_packed)?; + if scalar_metrics != interpreted_metrics || scalar_metrics != compiled_metrics { + return Err(OccamError::Validation(format!( + "benchmark preflight mismatch: scalar {scalar_metrics:?}, interpreted \ + {interpreted_metrics:?}, compiled {compiled_metrics:?}" + ))); + } + + let (durations, batch_medians, metrics) = match backend { + BenchmarkBackend::Scalar => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || verify(circuit, &dataset))?; + (durations, medians, metrics) + } + BenchmarkBackend::Packed => { + let compiled = CompiledCircuit::new(circuit)?; + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_compiled_prepacked(&compiled, &direct_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::PackedReference => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_prepacked_reference(circuit, &legacy_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::PackedInterpreted => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_prepacked_interpreted(circuit, &direct_packed) + })?; + (durations, medians, metrics) + } + BenchmarkBackend::Compiled => { + let (durations, medians, metrics) = + measure_batches(batches, warmups, iterations, || { + verify_compiled_prepacked(&compiled, &direct_packed) + })?; + (durations, medians, metrics) + } + }; + + let statistics = statistics(&durations)?; + let median_seconds = statistics.median_ns as f64 / 1_000_000_000.0; + let samples_per_second = dataset.samples.len() as f64 / median_seconds; + let gate_evaluations_per_second = + dataset.samples.len() as f64 * circuit.gates.len() as f64 / median_seconds; + let (parse_duration, packing_duration, compile_for_backend) = match backend { + BenchmarkBackend::Scalar => ( + circuit_parse_duration.saturating_add(scalar_dataset_parse_duration), + None, + Duration::ZERO, + ), + BenchmarkBackend::Packed | BenchmarkBackend::Compiled => ( + circuit_parse_duration.saturating_add(direct_packed_parse_duration), + Some(direct_packed_parse_duration.saturating_add(compilation_duration)), + compilation_duration, + ), + BenchmarkBackend::PackedInterpreted => ( + circuit_parse_duration.saturating_add(direct_packed_parse_duration), + Some(direct_packed_parse_duration), + Duration::ZERO, + ), + BenchmarkBackend::PackedReference => ( + circuit_parse_duration.saturating_add(scalar_dataset_parse_duration), + Some(legacy_pack_duration), + legacy_pack_duration, + ), + }; + let one_shot_ns = duration_ns(parse_duration) + .saturating_add(duration_ns(compile_for_backend)) + .saturating_add(statistics.median_ns); + + Ok(BenchmarkReport { + schema_version: 3, + backend: backend.label().into(), + circuit_path, + dataset_path, + samples: dataset.samples.len(), + gates: circuit.gates.len(), + input_width: dataset.input_width, + output_width: dataset.output_width, + warmup_iterations: warmups, + measured_iterations: iterations, + batch_count: batches, + raw_iterations_ns: durations.iter().copied().map(duration_ns).collect(), + batch_medians_ns: batch_medians, + measurement_order: "backend-isolated; invocation order controlled by external driver" + .into(), + parse_ns: duration_ns(parse_duration), + packing_ns: packing_duration.map(duration_ns), + circuit_parse_ns: duration_ns(circuit_parse_duration), + scalar_dataset_parse_ns: duration_ns(scalar_dataset_parse_duration), + legacy_pack_ns: duration_ns(legacy_pack_duration), + direct_packed_parse_ns: duration_ns(direct_packed_parse_duration), + compilation_ns: duration_ns(compilation_duration), + one_shot_ns, + scalar_dataset_parse_iterations_ns: scalar_parse_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + legacy_pack_iterations_ns: legacy_pack_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + direct_packed_parse_iterations_ns: direct_parse_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + compilation_iterations_ns: compilation_durations + .iter() + .copied() + .map(duration_ns) + .collect(), + scalar_dataset_parse: scalar_parse_statistics, + legacy_pack: legacy_pack_statistics, + direct_packed_parse: direct_parse_statistics, + compilation: compilation_statistics, + evaluation: statistics, + samples_per_second_at_median: samples_per_second, + gate_evaluations_per_second_at_median: gate_evaluations_per_second, + exact_matches: metrics.exact_matches, + correct_bits: metrics.correct_bits, + total_bits: metrics.total_bits, + rustc: command_output("rustc", &["--version"]), + operating_system: operating_system(), + architecture: std::env::consts::ARCH.into(), + }) +} + +fn parse_and_pack_legacy( + source: &str, +) -> Result<(Dataset, PackedDataset, Duration, Duration), OccamError> { + let parse_started = Instant::now(); + let dataset = parse_dataset(source)?; + let parse_duration = parse_started.elapsed(); + let pack_started = Instant::now(); + let packed = pack_dataset(&dataset)?; + let pack_duration = pack_started.elapsed(); + Ok((dataset, packed, parse_duration, pack_duration)) +} + +fn parse_direct(source: &str) -> Result<(PackedDataset, Duration), OccamError> { + let started = Instant::now(); + let packed = parse_packed_dataset(source)?; + Ok((packed, started.elapsed())) +} + +fn compile_circuit(circuit: &Circuit) -> Result<(CompiledCircuit, Duration), OccamError> { + let started = Instant::now(); + let compiled = CompiledCircuit::new(circuit)?; + Ok((compiled, started.elapsed())) +} + +fn measure_batches( + batches: usize, + warmups: usize, + iterations: usize, + mut operation: impl FnMut() -> Result, +) -> Result<(Vec, Vec, VerificationMetrics), OccamError> { + let capacity = batches + .checked_mul(iterations) + .ok_or_else(|| OccamError::Validation("benchmark size overflow".into()))?; + let mut durations = Vec::with_capacity(capacity); + let mut medians = Vec::with_capacity(batches); + let mut last_metrics = None; + for _ in 0..batches { + for _ in 0..warmups { + black_box(operation()?); + } + let batch_start = durations.len(); + for _ in 0..iterations { + let started = Instant::now(); + let metrics = operation()?; + durations.push(started.elapsed()); + black_box(&metrics); + last_metrics = Some(metrics); + } + medians.push(statistics(&durations[batch_start..])?.median_ns); + } + Ok(( + durations, + medians, + last_metrics.expect("iterations and batches are non-zero"), + )) +} + +fn statistics(durations: &[Duration]) -> Result { + if durations.is_empty() { + return Err(OccamError::Validation( + "cannot calculate statistics without measurements".into(), + )); + } + let mut nanos: Vec<_> = durations.iter().copied().map(duration_ns).collect(); + nanos.sort_unstable(); + let total: u128 = nanos.iter().map(|value| u128::from(*value)).sum(); + let median = median_sorted(&nanos); + let p95_index = (nanos.len() * 95).div_ceil(100).saturating_sub(1); + let mean = total as f64 / nanos.len() as f64; + let variance = nanos + .iter() + .map(|value| { + let delta = *value as f64 - mean; + delta * delta + }) + .sum::() + / nanos.len() as f64; + let mut deviations: Vec<_> = nanos.iter().map(|value| value.abs_diff(median)).collect(); + deviations.sort_unstable(); + Ok(TimingStatistics { + minimum_ns: nanos[0], + mean_ns: mean, + median_ns: median, + p95_ns: nanos[p95_index], + standard_deviation_ns: variance.sqrt(), + median_absolute_deviation_ns: median_sorted(&deviations), + }) +} + +fn median_sorted(values: &[u64]) -> u64 { + if values.len().is_multiple_of(2) { + let upper = u128::from(values[values.len() / 2]); + let lower = u128::from(values[values.len() / 2 - 1]); + ((lower + upper) / 2).try_into().unwrap_or(u64::MAX) + } else { + values[values.len() / 2] + } +} + +fn duration_ns(duration: Duration) -> u64 { + duration.as_nanos().try_into().unwrap_or(u64::MAX) +} + +fn command_output(program: &str, arguments: &[&str]) -> String { + Command::new(program) + .args(arguments) + .output() + .ok() + .filter(|output| output.status.success()) + .map(|output| String::from_utf8_lossy(&output.stdout).trim().to_owned()) + .unwrap_or_else(|| "unknown".into()) +} + +fn operating_system() -> String { + if cfg!(target_os = "macos") { + let version = command_output("sw_vers", &["-productVersion"]); + format!("macOS {version}") + } else { + format!( + "{} {}", + std::env::consts::OS, + command_output("uname", &["-r"]) + ) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn calculates_known_statistics() { + let values = [1, 9, 3, 7, 5].map(Duration::from_nanos).to_vec(); + let result = statistics(&values).unwrap(); + assert_eq!(result.minimum_ns, 1); + assert_eq!(result.mean_ns, 5.0); + assert_eq!(result.median_ns, 5); + assert_eq!(result.p95_ns, 9); + assert_eq!(result.standard_deviation_ns, 8.0f64.sqrt()); + assert_eq!(result.median_absolute_deviation_ns, 2); + } + + #[test] + fn rejects_empty_statistics() { + assert!(statistics(&[]).is_err()); + } + + #[test] + fn averages_middle_values_for_even_sample_count() { + let values = [1, 3, 7, 9].map(Duration::from_nanos).to_vec(); + let result = statistics(&values).unwrap(); + assert_eq!(result.median_ns, 5); + assert_eq!(result.median_absolute_deviation_ns, 3); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/bin/tool_audit.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/bin/tool_audit.rs new file mode 100644 index 000000000..e18e12741 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/bin/tool_audit.rs @@ -0,0 +1,547 @@ +use std::{ + fs::{self, File}, + path::{Path, PathBuf}, + process::{Command, Stdio}, + thread, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +use clap::Parser; +use occam71_rust::{ + DEFAULT_LIMITS, OccamError, compare_circuits_exhaustively, parse_mapped_blif, parse_netlist, + sha256_hex, +}; +use serde::Serialize; + +#[derive(Debug, Parser)] +#[command(name = "tool-audit")] +struct Cli { + #[arg(long)] + yosys: PathBuf, + #[arg(long)] + yosys_abc: PathBuf, + #[arg(long)] + espresso: PathBuf, + #[arg(long)] + espresso_source_commit: String, + #[arg(long)] + output: PathBuf, +} + +#[derive(Serialize)] +struct Audit { + schema_version: u32, + tools: Vec, +} + +#[derive(Serialize)] +struct ToolRecord { + tool: String, + version_output: String, + executable_sha256: String, + command: Vec, + input_sha256: String, + output_sha256: String, + output_normalization: String, + observed_matches: usize, + observed_total: usize, + full_domain_mismatches: Option, + full_domain_cases: Option, +} + +fn main() { + if let Err(error) = run() { + eprintln!("error: {error}"); + std::process::exit(1); + } +} + +fn run() -> Result<(), OccamError> { + let cli = Cli::parse(); + for (name, path) in [ + ("yosys", &cli.yosys), + ("yosys-abc", &cli.yosys_abc), + ("espresso", &cli.espresso), + ] { + if !path.is_file() { + return Err(OccamError::Validation(format!( + "{name} executable is missing: {}", + path.display() + ))); + } + } + if cli.espresso_source_commit.len() != 40 + || !cli + .espresso_source_commit + .bytes() + .all(|byte| byte.is_ascii_hexdigit()) + { + return Err(OccamError::Validation( + "Espresso source commit must be a forty-digit hexadecimal hash".into(), + )); + } + + let temporary = AuditDirectory::new()?; + let yosys = audit_yosys(&cli.yosys, &temporary.path)?; + let abc = audit_yosys_abc(&cli.yosys_abc, &temporary.path)?; + let espresso = audit_espresso(&cli.espresso, &cli.espresso_source_commit, &temporary.path)?; + let audit = Audit { + schema_version: 2, + tools: vec![yosys, abc, espresso], + }; + let encoded = serde_json::to_string_pretty(&audit) + .map(|value| format!("{value}\n")) + .map_err(|error| OccamError::Validation(format!("audit JSON encoding failed: {error}")))?; + write_atomic(&cli.output, encoded.as_bytes()) +} + +fn audit_yosys(program: &Path, directory: &Path) -> Result { + let version = run_command(program, &["-V"], directory, "yosys-version")?; + require_success("yosys version", &version)?; + let input = "\ +module top(input a, input b, output o); + assign o = a ^ b; +endmodule +"; + fs::write(directory.join("fixture.v"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("fixture.v"), + source, + })?; + let script = "read_verilog fixture.v; hierarchy -top top; proc; opt; techmap; opt; abc; clean; write_blif yosys.blif"; + let flow = run_command(program, &["-q", "-p", script], directory, "yosys-flow")?; + require_success("yosys synthesis", &flow)?; + let output = read_bounded(&directory.join("yosys.blif"))?; + let mapped = + parse_mapped_blif(std::str::from_utf8(&output).map_err(|error| { + OccamError::Validation(format!("Yosys BLIF is not UTF-8: {error}")) + })?)?; + let candidate = parse_netlist(&mapped.into_official_netlist()?)?; + let reference = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n")?; + let (cases, mismatches) = + compare_circuits_exhaustively(&reference, &candidate, 8, &DEFAULT_LIMITS)?; + if mismatches != 0 { + return Err(OccamError::Validation(format!( + "Rust rejected Yosys output on {mismatches}/{cases} full-domain rows" + ))); + } + Ok(ToolRecord { + tool: "yosys".into(), + version_output: bounded_version(&version), + executable_sha256: executable_hash(program)?, + command: vec!["yosys".into(), "-q".into(), "-p".into(), script.into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&output), + output_normalization: "none".into(), + observed_matches: cases - mismatches, + observed_total: cases, + full_domain_mismatches: Some(mismatches), + full_domain_cases: Some(cases), + }) +} + +fn audit_yosys_abc(program: &Path, directory: &Path) -> Result { + let version = run_command(program, &["-q", "version"], directory, "abc-version")?; + require_success("yosys ABC version", &version)?; + let input = "\ +.model reference +.inputs i0 i1 +.outputs o0 +.names i0 i1 n0 +10 1 +01 1 +.names n0 o0 +1 1 +.end +"; + fs::write(directory.join("abc-input.blif"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("abc-input.blif"), + source, + })?; + let command = "read_blif abc-input.blif; strash; dc2; write_blif abc-output.blif; cec abc-input.blif abc-output.blif"; + let flow = run_command(program, &["-q", command], directory, "abc-flow")?; + require_success("yosys ABC optimization", &flow)?; + let output = read_bounded(&directory.join("abc-output.blif"))?; + let output_source = std::str::from_utf8(&output) + .map_err(|error| OccamError::Validation(format!("Yosys ABC BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(output_source)?; + let candidate = parse_netlist(&mapped.into_official_netlist()?)?; + let reference = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n")?; + let (cases, mismatches) = + compare_circuits_exhaustively(&reference, &candidate, 8, &DEFAULT_LIMITS)?; + if mismatches != 0 { + return Err(OccamError::Validation(format!( + "Rust rejected Yosys ABC output on {mismatches}/{cases} full-domain rows" + ))); + } + Ok(ToolRecord { + tool: "yosys-abc".into(), + version_output: bounded_version(&version), + executable_sha256: executable_hash(program)?, + command: vec!["yosys-abc".into(), "-q".into(), command.into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&normalize_abc_blif_for_hash(output_source)?), + output_normalization: "strip one leading ABC timestamp banner comment".into(), + observed_matches: cases - mismatches, + observed_total: cases, + full_domain_mismatches: Some(mismatches), + full_domain_cases: Some(cases), + }) +} + +fn audit_espresso( + program: &Path, + source_commit: &str, + directory: &Path, +) -> Result { + let input = "\ +.i 2 +.o 1 +.type fd +00 0 +01 1 +1- - +.e +"; + fs::write(directory.join("partial.pla"), input).map_err(|source| OccamError::WriteFile { + path: directory.join("partial.pla"), + source, + })?; + let flow = run_command_with_stdin( + program, + &[], + directory, + "espresso-flow", + Some(&directory.join("partial.pla")), + )?; + require_success("Espresso minimization", &flow)?; + let output = flow.stdout; + let pla = + Pla::parse(std::str::from_utf8(&output).map_err(|error| { + OccamError::Validation(format!("Espresso PLA is not UTF-8: {error}")) + })?)?; + let observed = [([false, false], [false]), ([false, true], [true])]; + let matches = observed + .iter() + .filter(|(input, expected)| pla.evaluate(input) == Some(expected.to_vec())) + .count(); + if matches != observed.len() { + return Err(OccamError::Validation(format!( + "Rust parsed Espresso output fits only {matches}/{} observed rows", + observed.len() + ))); + } + Ok(ToolRecord { + tool: "espresso".into(), + version_output: format!( + "CHIPS Alliance Espresso source commit {} (executable exposes no version flag)", + source_commit.to_ascii_lowercase() + ), + executable_sha256: executable_hash(program)?, + command: vec!["espresso".into()], + input_sha256: sha256_hex(input.as_bytes()), + output_sha256: sha256_hex(&output), + output_normalization: "none".into(), + observed_matches: matches, + observed_total: observed.len(), + full_domain_mismatches: None, + full_domain_cases: None, + }) +} + +fn normalize_abc_blif_for_hash(source: &str) -> Result, OccamError> { + let (banner, body) = source.split_once('\n').ok_or_else(|| { + OccamError::Validation("Yosys ABC BLIF is missing its banner line".into()) + })?; + if !banner.starts_with("# Benchmark ") || !banner.contains(" written by ABC on ") { + return Err(OccamError::Validation(format!( + "unexpected Yosys ABC BLIF banner: {banner}" + ))); + } + Ok(body.as_bytes().to_vec()) +} + +struct Pla { + input_width: usize, + output_width: usize, + cubes: Vec<(Vec, Vec)>, +} + +impl Pla { + fn parse(source: &str) -> Result { + let mut input_width = None; + let mut output_width = None; + let mut cubes = Vec::new(); + for (index, raw) in source.lines().enumerate() { + let line = raw.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + if let Some(value) = line.strip_prefix(".i ") { + input_width = Some(parse_width(value, index + 1)?); + } else if let Some(value) = line.strip_prefix(".o ") { + output_width = Some(parse_width(value, index + 1)?); + } else if line.starts_with('.') { + if !matches!( + line.split_whitespace().next(), + Some(".type" | ".p" | ".ilb" | ".ob" | ".e") + ) { + return Err(OccamError::Validation(format!( + "unsupported PLA directive at line {}: {line}", + index + 1 + ))); + } + } else { + let fields = line.split_whitespace().collect::>(); + if fields.len() != 2 { + return Err(OccamError::Validation(format!( + "invalid PLA cube at line {}", + index + 1 + ))); + } + cubes.push((fields[0].as_bytes().to_vec(), fields[1].as_bytes().to_vec())); + } + } + let input_width = input_width + .ok_or_else(|| OccamError::Validation("Espresso PLA is missing .i".into()))?; + let output_width = output_width + .ok_or_else(|| OccamError::Validation("Espresso PLA is missing .o".into()))?; + for (inputs, outputs) in &cubes { + if inputs.len() != input_width + || outputs.len() != output_width + || !inputs.iter().all(|byte| matches!(byte, b'0' | b'1' | b'-')) + || !outputs + .iter() + .all(|byte| matches!(byte, b'0' | b'1' | b'-')) + { + return Err(OccamError::Validation( + "Espresso PLA contains an invalid cube width or symbol".into(), + )); + } + } + Ok(Self { + input_width, + output_width, + cubes, + }) + } + + fn evaluate(&self, input: &[bool]) -> Option> { + if input.len() != self.input_width { + return None; + } + let matching = self + .cubes + .iter() + .filter(|(cube, _)| { + cube.iter() + .zip(input) + .all(|(symbol, bit)| *symbol == b'-' || (*symbol == b'1') == *bit) + }) + .collect::>(); + let mut result = Vec::with_capacity(self.output_width); + for output in 0..self.output_width { + if matching.iter().any(|(_, values)| values[output] == b'1') { + result.push(true); + } else if matching.iter().any(|(_, values)| values[output] == b'-') { + return None; + } else { + result.push(false); + } + } + Some(result) + } +} + +fn parse_width(value: &str, line: usize) -> Result { + value + .trim() + .parse::() + .map_err(|_| OccamError::Validation(format!("invalid PLA width at line {line}: {value}"))) +} + +struct CommandOutput { + success: bool, + stdout: Vec, + stderr: Vec, +} + +fn run_command( + program: &Path, + arguments: &[&str], + directory: &Path, + label: &str, +) -> Result { + run_command_with_stdin(program, arguments, directory, label, None) +} + +fn run_command_with_stdin( + program: &Path, + arguments: &[&str], + directory: &Path, + label: &str, + stdin_path: Option<&Path>, +) -> Result { + let stdout_path = directory.join(format!("{label}.stdout")); + let stderr_path = directory.join(format!("{label}.stderr")); + let stdout = File::create(&stdout_path).map_err(|source| OccamError::WriteFile { + path: stdout_path.clone(), + source, + })?; + let stderr = File::create(&stderr_path).map_err(|source| OccamError::WriteFile { + path: stderr_path.clone(), + source, + })?; + let stdin = match stdin_path { + Some(path) => Stdio::from(File::open(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?), + None => Stdio::null(), + }; + let mut child = Command::new(program) + .args(arguments) + .current_dir(directory) + .stdin(stdin) + .stdout(Stdio::from(stdout)) + .stderr(Stdio::from(stderr)) + .spawn() + .map_err(|error| { + OccamError::Validation(format!("failed to spawn {}: {error}", program.display())) + })?; + let started = Instant::now(); + let status = loop { + if let Some(status) = child + .try_wait() + .map_err(|error| OccamError::Validation(format!("tool wait failed: {error}")))? + { + break status; + } + if started.elapsed() >= Duration::from_secs(30) { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::Validation(format!( + "{label} exceeded the 30-second audit timeout" + ))); + } + thread::sleep(Duration::from_millis(10)); + }; + Ok(CommandOutput { + success: status.success(), + stdout: read_bounded(&stdout_path)?, + stderr: read_bounded(&stderr_path)?, + }) +} + +fn require_success(label: &str, output: &CommandOutput) -> Result<(), OccamError> { + if output.success { + return Ok(()); + } + Err(OccamError::Validation(format!( + "{label} failed: {}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ))) +} + +fn bounded_version(output: &CommandOutput) -> String { + let combined = format!( + "{}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + combined.chars().take(4_096).collect::() +} + +fn read_bounded(path: &Path) -> Result, OccamError> { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + if metadata.len() > 4 * 1024 * 1024 { + return Err(OccamError::ResourceLimit { + resource: "tool audit output bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: 4 * 1024 * 1024, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn executable_hash(path: &Path) -> Result { + fs::read(path) + .map(|bytes| sha256_hex(&bytes)) + .map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn write_atomic(path: &Path, bytes: &[u8]) -> Result<(), OccamError> { + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, bytes).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +struct AuditDirectory { + path: PathBuf, +} + +impl AuditDirectory { + fn new() -> Result { + let timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_err(|error| OccamError::Validation(format!("system clock error: {error}")))? + .as_nanos(); + let path = std::env::temp_dir().join(format!( + "occam71-tool-audit-{}-{timestamp}", + std::process::id() + )); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for AuditDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} + +#[cfg(test)] +mod tests { + use super::normalize_abc_blif_for_hash; + + #[test] + fn abc_hash_normalization_removes_only_the_timestamp_banner() { + let body = ".model reference\n.inputs i0\n.outputs o0\n.end\n"; + let first = format!("# Benchmark \"reference\" written by ABC on Monday\n{body}"); + let second = format!("# Benchmark \"reference\" written by ABC on Tuesday\n{body}"); + assert_eq!( + normalize_abc_blif_for_hash(&first).unwrap(), + body.as_bytes() + ); + assert_eq!( + normalize_abc_blif_for_hash(&first).unwrap(), + normalize_abc_blif_for_hash(&second).unwrap() + ); + assert!(normalize_abc_blif_for_hash(body).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/circuit.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/circuit.rs new file mode 100644 index 000000000..4013068e2 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/circuit.rs @@ -0,0 +1,63 @@ +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub enum GateOp { + And, + Or, + Xor, + Nand, + Nor, + Xnor, +} + +impl GateOp { + pub fn apply(self, lhs: bool, rhs: bool) -> bool { + match self { + Self::And => lhs & rhs, + Self::Or => lhs | rhs, + Self::Xor => lhs ^ rhs, + Self::Nand => !(lhs & rhs), + Self::Nor => !(lhs | rhs), + Self::Xnor => !(lhs ^ rhs), + } + } + + pub fn apply_word(self, lhs: u64, rhs: u64) -> u64 { + match self { + Self::And => lhs & rhs, + Self::Or => lhs | rhs, + Self::Xor => lhs ^ rhs, + Self::Nand => !(lhs & rhs), + Self::Nor => !(lhs | rhs), + Self::Xnor => !(lhs ^ rhs), + } + } +} + +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub enum Source { + Input(usize), + Wire(usize), +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub struct Operand { + pub source: Source, + pub inverted: bool, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Gate { + pub output: usize, + pub op: GateOp, + pub lhs: Operand, + pub rhs: Operand, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Circuit { + pub input_count: usize, + pub wire_count: usize, + pub gates: Vec, + pub outputs: Vec, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/compiled.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/compiled.rs new file mode 100644 index 000000000..dac908457 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/compiled.rs @@ -0,0 +1,280 @@ +use crate::{ + Circuit, DEFAULT_LIMITS, GateOp, OccamError, Operand, PackedDataset, ResourceLimits, Source, + VerificationMetrics, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CompiledOperand { + column: usize, + inversion_mask: u64, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CompiledGate { + op: GateOp, + lhs: CompiledOperand, + rhs: CompiledOperand, + output_column: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct CompiledCircuit { + input_count: usize, + gate_count: usize, + output_count: usize, + column_count: usize, + gates: Vec, + outputs: Vec, +} + +impl CompiledCircuit { + pub fn new(circuit: &Circuit) -> Result { + Self::new_with_limits(circuit, &DEFAULT_LIMITS) + } + + pub fn new_with_limits(circuit: &Circuit, limits: &ResourceLimits) -> Result { + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + let column_count = checked_add( + circuit.input_count, + circuit.wire_count, + "compiled circuit column count", + )?; + let mut gates = Vec::new(); + gates + .try_reserve_exact(circuit.gates.len()) + .map_err(|error| { + OccamError::Validation(format!("cannot allocate compiled gates: {error}")) + })?; + for (gate_index, gate) in circuit.gates.iter().enumerate() { + if gate.output != gate_index { + return Err(OccamError::Validation(format!( + "gate {gate_index} writes non-dense wire {}", + gate.output + ))); + } + gates.push(CompiledGate { + op: gate.op, + lhs: compile_operand(gate.lhs, circuit.input_count, gate_index)?, + rhs: compile_operand(gate.rhs, circuit.input_count, gate_index)?, + output_column: checked_add( + circuit.input_count, + gate.output, + "compiled gate output column", + )?, + }); + } + let outputs = circuit + .outputs + .iter() + .map(|operand| compile_operand(*operand, circuit.input_count, circuit.wire_count)) + .collect::, _>>()?; + Ok(Self { + input_count: circuit.input_count, + gate_count: circuit.gates.len(), + output_count: circuit.outputs.len(), + column_count, + gates, + outputs, + }) + } + + pub fn input_count(&self) -> usize { + self.input_count + } + + pub fn gate_count(&self) -> usize { + self.gate_count + } + + pub fn output_count(&self) -> usize { + self.output_count + } +} + +fn compile_operand( + operand: Operand, + input_count: usize, + available_wires: usize, +) -> Result { + let column = match operand.source { + Source::Input(index) if index < input_count => index, + Source::Input(index) => { + return Err(OccamError::Validation(format!( + "input column {index} is out of range for {input_count} inputs" + ))); + } + Source::Wire(index) if index < available_wires => { + checked_add(input_count, index, "compiled wire operand column")? + } + Source::Wire(index) => { + return Err(OccamError::Validation(format!( + "wire column {index} is unavailable with {available_wires} prior wires" + ))); + } + }; + Ok(CompiledOperand { + column, + inversion_mask: if operand.inverted { u64::MAX } else { 0 }, + }) +} + +pub fn verify_compiled_prepacked( + circuit: &CompiledCircuit, + dataset: &PackedDataset, +) -> Result { + verify_compiled_prepacked_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_compiled_prepacked_with_limits( + circuit: &CompiledCircuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != dataset.input_width() { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match compiled circuit inputs {}", + dataset.input_width(), + circuit.input_count + ))); + } + if circuit.output_count != dataset.output_width() { + return Err(OccamError::Validation(format!( + "compiled circuit has {} outputs, dataset has {}", + circuit.output_count, + dataset.output_width() + ))); + } + limits.require( + "dataset samples", + dataset.sample_count(), + limits.max_samples, + )?; + let value_word_count = checked_mul( + circuit.column_count, + dataset.block_count(), + "compiled value word count", + )?; + limits.require( + "compiled value words", + value_word_count, + limits.max_packed_words, + )?; + let mut values = zeroed_words(value_word_count, "compiled values")?; + for input_index in 0..circuit.input_count { + let source = dataset.input_column(input_index).ok_or_else(|| { + OccamError::Validation(format!("packed input column {input_index} is missing")) + })?; + let start = checked_mul( + input_index, + dataset.block_count(), + "compiled input column offset", + )?; + let end = checked_add(start, dataset.block_count(), "compiled input column end")?; + values[start..end].copy_from_slice(source); + } + + for gate in &circuit.gates { + let lhs_start = checked_mul( + gate.lhs.column, + dataset.block_count(), + "compiled left operand offset", + )?; + let rhs_start = checked_mul( + gate.rhs.column, + dataset.block_count(), + "compiled right operand offset", + )?; + let output_start = checked_mul( + gate.output_column, + dataset.block_count(), + "compiled output offset", + )?; + for block in 0..dataset.block_count() { + let lhs = values[lhs_start + block] ^ gate.lhs.inversion_mask; + let rhs = values[rhs_start + block] ^ gate.rhs.inversion_mask; + values[output_start + block] = gate.op.apply_word(lhs, rhs); + } + } + + let mut mismatches = zeroed_words(dataset.block_count(), "compiled mismatch blocks")?; + let mut correct_bits = 0usize; + for (output_index, output) in circuit.outputs.iter().enumerate() { + let expected = dataset.expected_column(output_index).ok_or_else(|| { + OccamError::Validation(format!("packed output column {output_index} is missing")) + })?; + let output_start = checked_mul( + output.column, + dataset.block_count(), + "compiled result column offset", + )?; + for block in 0..dataset.block_count() { + let mask = dataset.valid_mask(block); + let predicted = values[output_start + block] ^ output.inversion_mask; + let different = (predicted ^ expected[block]) & mask; + correct_bits = checked_add( + correct_bits, + ((!different) & mask).count_ones() as usize, + "compiled correct bit count", + )?; + mismatches[block] |= different; + } + } + let exact_matches = mismatches + .iter() + .enumerate() + .map(|(block, different)| { + let mask = dataset.valid_mask(block); + (mask.count_ones() - (different & mask).count_ones()) as usize + }) + .sum(); + Ok(VerificationMetrics { + samples: dataset.sample_count(), + gate_count: circuit.gate_count, + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.sample_count(), + dataset.output_width(), + "compiled verification bit count", + )?, + }) +} + +fn zeroed_words(count: usize, context: &str) -> Result, OccamError> { + let mut words = Vec::new(); + words.try_reserve_exact(count).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate {context} ({count} words): {error}" + )) + })?; + words.resize(count, 0); + Ok(words) +} + +#[cfg(test)] +mod tests { + use crate::{parse_netlist, ripple_carry_adder}; + + use super::*; + + #[test] + fn rejects_non_dense_and_forward_wire_references() { + let mut circuit = parse_netlist(&ripple_carry_adder(2).unwrap()).unwrap(); + circuit.gates[0].output = 1; + assert!(CompiledCircuit::new(&circuit).is_err()); + + let mut circuit = parse_netlist(&ripple_carry_adder(2).unwrap()).unwrap(); + circuit.gates[0].lhs.source = Source::Wire(0); + assert!(CompiledCircuit::new(&circuit).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset.rs new file mode 100644 index 000000000..23f352291 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset.rs @@ -0,0 +1,146 @@ +use crate::{DEFAULT_LIMITS, OccamError, ResourceLimits, dataset_scan::scan_dataset}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct Sample { + pub input: Vec, + pub expected: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct Dataset { + pub input_width: usize, + pub output_width: usize, + pub samples: Vec, +} + +pub fn parse_dataset(source: &str) -> Result { + parse_dataset_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_dataset_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + let mut samples = Vec::new(); + let shape = scan_dataset(source.as_bytes(), limits, |_line, input, expected| { + samples.push(Sample { + input: input.iter().map(|value| *value == b'1').collect(), + expected: expected.iter().map(|value| *value == b'1').collect(), + }); + Ok(()) + })?; + Ok(Dataset { + input_width: shape.input_width, + output_width: shape.output_width, + samples, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_and_preserves_character_order() { + let dataset = parse_dataset("input,output\n1010,011\n").unwrap(); + assert_eq!(dataset.input_width, 4); + assert_eq!(dataset.output_width, 3); + assert_eq!(dataset.samples[0].input, vec![true, false, true, false]); + assert_eq!(dataset.samples[0].expected, vec![false, true, true]); + } + + #[test] + fn rejects_bad_header() { + assert!( + parse_dataset("x,y\n0,1") + .unwrap_err() + .to_string() + .contains("header") + ); + } + + #[test] + fn rejects_non_bits() { + assert!( + parse_dataset("input,output\n0x,1") + .unwrap_err() + .to_string() + .contains("non-bit") + ); + } + + #[test] + fn rejects_wrong_field_count() { + assert!(parse_dataset("input,output\n0").is_err()); + assert!(parse_dataset("input,output\n0,1,1").is_err()); + } + + #[test] + fn rejects_inconsistent_widths() { + assert!(parse_dataset("input,output\n00,1\n0,1").is_err()); + assert!(parse_dataset("input,output\n00,1\n00,11").is_err()); + } + + #[test] + fn rejects_empty_dataset() { + assert!(parse_dataset("input,output\n").is_err()); + } + + #[test] + fn accepts_crlf_and_blank_lines() { + let dataset = parse_dataset("input,output\r\n\r\n 01,10 \r\n\r\n11,00\r\n").unwrap(); + assert_eq!(dataset.input_width, 2); + assert_eq!(dataset.output_width, 2); + assert_eq!(dataset.samples.len(), 2); + } + + #[test] + fn rejects_empty_bitstrings() { + assert!( + parse_dataset("input,output\n,1") + .unwrap_err() + .to_string() + .contains("non-empty") + ); + assert!( + parse_dataset("input,output\n1,") + .unwrap_err() + .to_string() + .contains("non-empty") + ); + } + + #[test] + fn enforces_width_sample_and_source_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_input_width = 1; + assert!(matches!( + parse_dataset_with_limits("input,output\n00,1", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset input width", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + parse_dataset_with_limits("input,output\n0,1\n1,0", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset samples", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_dataset_with_limits("input,output\n0,1", &limits), + Err(OccamError::ResourceLimit { + resource: "dataset source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset_scan.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset_scan.rs new file mode 100644 index 000000000..ddf1c0cd8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/dataset_scan.rs @@ -0,0 +1,133 @@ +use crate::{ + OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub(crate) struct DatasetShape { + pub input_width: usize, + pub output_width: usize, + pub sample_count: usize, +} + +pub(crate) fn scan_dataset( + source: &[u8], + limits: &ResourceLimits, + mut visit_row: impl FnMut(usize, &[u8], &[u8]) -> Result<(), OccamError>, +) -> Result { + limits.require( + "dataset source bytes", + source.len(), + limits.max_source_bytes, + )?; + if source.is_empty() { + return Err(OccamError::Validation("dataset is empty".into())); + } + let mut lines = source.split(|byte| *byte == b'\n'); + let header = trim_ascii(lines.next().unwrap_or_default()); + if header != b"input,output" { + return Err(OccamError::parse( + "dataset", + 1, + format!( + "expected header input,output; got {}", + String::from_utf8_lossy(header) + ), + )); + } + + let mut widths = None; + let mut sample_count = 0usize; + for (index, raw_line) in lines.enumerate() { + let line_number = index + 2; + let line = trim_ascii(raw_line); + if line.is_empty() { + continue; + } + let mut fields = line.split(|byte| *byte == b','); + let input = fields.next().unwrap_or_default(); + let output = fields.next().ok_or_else(|| { + OccamError::parse("dataset", line_number, "expected exactly two CSV fields") + })?; + if fields.next().is_some() { + return Err(OccamError::parse( + "dataset", + line_number, + "expected exactly two CSV fields", + )); + } + validate_bits(input, line_number, "input")?; + validate_bits(output, line_number, "output")?; + let row_widths = (input.len(), output.len()); + if row_widths.0 == 0 || row_widths.1 == 0 { + return Err(OccamError::parse( + "dataset", + line_number, + "input and output bitstrings must be non-empty", + )); + } + if let Some(expected_widths) = widths { + if row_widths != expected_widths { + return Err(OccamError::parse( + "dataset", + line_number, + format!( + "inconsistent widths: expected input {}, output {}; got input {}, output {}", + expected_widths.0, expected_widths.1, row_widths.0, row_widths.1 + ), + )); + } + } else { + limits.require("dataset input width", row_widths.0, limits.max_input_width)?; + limits.require( + "dataset output width", + row_widths.1, + limits.max_output_width, + )?; + widths = Some(row_widths); + } + let next_sample_count = checked_add(sample_count, 1, "dataset sample count")?; + limits.require("dataset samples", next_sample_count, limits.max_samples)?; + let row_bits = checked_add(row_widths.0, row_widths.1, "dataset bits per sample")?; + let dataset_bits = checked_mul(row_bits, next_sample_count, "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + visit_row(line_number, input, output)?; + sample_count = next_sample_count; + } + + let (input_width, output_width) = + widths.ok_or_else(|| OccamError::Validation("dataset has no samples".into()))?; + Ok(DatasetShape { + input_width, + output_width, + sample_count, + }) +} + +fn trim_ascii(mut value: &[u8]) -> &[u8] { + while value.first().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[1..]; + } + while value.last().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[..value.len() - 1]; + } + value +} + +fn validate_bits(value: &[u8], line: usize, field: &str) -> Result<(), OccamError> { + for byte in value { + if *byte != b'0' && *byte != b'1' { + let invalid = if byte.is_ascii() { + format!("character {:?}", char::from(*byte)) + } else { + format!("byte 0x{byte:02x}") + }; + return Err(OccamError::parse( + "dataset", + line, + format!("{field} contains non-bit {invalid}"), + )); + } + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/error.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/error.rs new file mode 100644 index 000000000..51d844899 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/error.rs @@ -0,0 +1,48 @@ +use std::path::PathBuf; + +#[derive(Debug, thiserror::Error)] +pub enum OccamError { + #[error("{kind} parse error on line {line}: {message}")] + Parse { + kind: &'static str, + line: usize, + message: String, + }, + + #[error("{0}")] + Validation(String), + + #[error("{resource} resource limit exceeded: requested {requested}, limit {limit}")] + ResourceLimit { + resource: &'static str, + requested: usize, + limit: usize, + }, + + #[error("size arithmetic overflow while calculating {context}")] + ArithmeticOverflow { context: &'static str }, + + #[error("failed to read {path}: {source}")] + ReadFile { + path: PathBuf, + #[source] + source: std::io::Error, + }, + + #[error("failed to write {path}: {source}")] + WriteFile { + path: PathBuf, + #[source] + source: std::io::Error, + }, +} + +impl OccamError { + pub(crate) fn parse(kind: &'static str, line: usize, message: impl Into) -> Self { + Self::Parse { + kind, + line, + message: message.into(), + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/ast.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/ast.rs new file mode 100644 index 000000000..903b44c00 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/ast.rs @@ -0,0 +1,134 @@ +use serde::{Deserialize, Serialize}; + +use crate::OccamError; + +const MAX_OPERAND_BITS: usize = 31; +const MAX_OUTPUT_BITS: usize = 63; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum BinaryOp { + Add, + Subtract, + AbsDiff, + Multiply, + BitXor, + BitAnd, + BitOr, + Min, + Max, +} + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(tag = "op", content = "args", rename_all = "kebab-case")] +pub enum Expr { + X, + Y, + Constant(u64), + Square(Box), + ShiftLeft { + value: Box, + amount: u8, + }, + Binary { + op: BinaryOp, + lhs: Box, + rhs: Box, + }, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ExprSemantics { + pub operand_bits: usize, + pub output_bits: usize, +} + +impl ExprSemantics { + pub fn new(operand_bits: usize, output_bits: usize) -> Result { + if !(1..=MAX_OPERAND_BITS).contains(&operand_bits) { + return Err(OccamError::Validation(format!( + "expression operand width must be in 1..={MAX_OPERAND_BITS}, got {operand_bits}" + ))); + } + if !(1..=MAX_OUTPUT_BITS).contains(&output_bits) { + return Err(OccamError::Validation(format!( + "expression output width must be in 1..={MAX_OUTPUT_BITS}, got {output_bits}" + ))); + } + Ok(Self { + operand_bits, + output_bits, + }) + } + + pub(crate) fn operand_mask(self) -> u64 { + (1u64 << self.operand_bits) - 1 + } + + pub(crate) fn output_mask(self) -> u64 { + (1u64 << self.output_bits) - 1 + } +} + +impl Expr { + pub fn x() -> Self { + Self::X + } + + pub fn y() -> Self { + Self::Y + } + + pub fn constant(value: u64) -> Self { + Self::Constant(value) + } + + pub fn square(value: Self) -> Self { + Self::Square(Box::new(value)) + } + + pub fn shift_left(value: Self, amount: u8) -> Self { + Self::ShiftLeft { + value: Box::new(value), + amount, + } + } + + pub fn binary(op: BinaryOp, lhs: Self, rhs: Self) -> Self { + Self::Binary { + op, + lhs: Box::new(lhs), + rhs: Box::new(rhs), + } + } + + pub fn abs_diff(lhs: Self, rhs: Self) -> Self { + Self::binary(BinaryOp::AbsDiff, lhs, rhs) + } + + pub fn description_cost(&self) -> usize { + self.checked_description_cost().unwrap_or(usize::MAX) + } + + pub fn checked_description_cost(&self) -> Result { + match self { + Self::X | Self::Y | Self::Constant(_) => Ok(1), + Self::Square(value) | Self::ShiftLeft { value, .. } => value + .checked_description_cost()? + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression description cost", + }), + Self::Binary { op, lhs, rhs } => { + let operator_cost = if *op == BinaryOp::AbsDiff { 2 } else { 1 }; + lhs.checked_description_cost()? + .checked_add(rhs.checked_description_cost()?) + .and_then(|cost| cost.checked_add(operator_cost)) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression description cost", + }) + } + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/canonical.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/canonical.rs new file mode 100644 index 000000000..fc1f2e0e3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/canonical.rs @@ -0,0 +1,123 @@ +use std::fmt; + +use crate::{BinaryOp, Expr, OccamError}; + +impl Expr { + pub fn canonicalize(&self) -> Result { + canonicalize(self.clone()) + } +} + +fn canonicalize(expression: Expr) -> Result { + match expression { + Expr::X | Expr::Y | Expr::Constant(_) => Ok(expression), + Expr::Square(value) => { + let value = canonicalize(*value)?; + Ok(match value { + Expr::Constant(0) => Expr::constant(0), + Expr::Constant(1) => Expr::constant(1), + value => Expr::square(value), + }) + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(&amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = canonicalize(*value)?; + Ok(if value == Expr::constant(0) { + Expr::constant(0) + } else { + Expr::shift_left(value, amount) + }) + } + Expr::Binary { op, lhs, rhs } => { + let mut lhs = canonicalize(*lhs)?; + let mut rhs = canonicalize(*rhs)?; + if is_commutative(op) && rhs < lhs { + std::mem::swap(&mut lhs, &mut rhs); + } + simplify_binary(op, lhs, rhs) + } + } +} + +fn simplify_binary(op: BinaryOp, lhs: Expr, rhs: Expr) -> Result { + let zero = Expr::constant(0); + let one = Expr::constant(1); + let simplified = match op { + BinaryOp::Add if lhs == zero => rhs, + BinaryOp::Add if rhs == zero => lhs, + BinaryOp::Subtract if rhs == zero => lhs, + BinaryOp::Subtract if lhs == rhs => zero, + BinaryOp::AbsDiff if lhs == rhs => zero, + BinaryOp::Multiply if lhs == zero || rhs == zero => zero, + BinaryOp::Multiply if lhs == one => rhs, + BinaryOp::Multiply if rhs == one => lhs, + BinaryOp::Multiply if lhs == rhs => Expr::square(lhs), + BinaryOp::BitXor if lhs == zero => rhs, + BinaryOp::BitXor if rhs == zero => lhs, + BinaryOp::BitXor if lhs == rhs => zero, + BinaryOp::BitAnd if lhs == zero || rhs == zero => zero, + BinaryOp::BitAnd if lhs == rhs => lhs, + BinaryOp::BitOr if lhs == zero => rhs, + BinaryOp::BitOr if rhs == zero => lhs, + BinaryOp::BitOr if lhs == rhs => lhs, + BinaryOp::Min | BinaryOp::Max if lhs == rhs => lhs, + _ => Expr::binary(op, lhs, rhs), + }; + simplified.checked_description_cost()?; + Ok(simplified) +} + +fn is_commutative(op: BinaryOp) -> bool { + matches!( + op, + BinaryOp::Add + | BinaryOp::AbsDiff + | BinaryOp::Multiply + | BinaryOp::BitXor + | BinaryOp::BitAnd + | BinaryOp::BitOr + | BinaryOp::Min + | BinaryOp::Max + ) +} + +impl fmt::Display for Expr { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::X => formatter.write_str("x"), + Self::Y => formatter.write_str("y"), + Self::Constant(value) => write!(formatter, "{value}"), + Self::Square(value) => write!(formatter, "square({value})"), + Self::ShiftLeft { value, amount } => { + write!(formatter, "shift_left({value}, {amount})") + } + Self::Binary { + op: BinaryOp::AbsDiff, + lhs, + rhs, + } => write!(formatter, "abs({lhs} - {rhs})"), + Self::Binary { op, lhs, rhs } => { + let operator = match op { + BinaryOp::Add => "+", + BinaryOp::Subtract => "-", + BinaryOp::Multiply => "*", + BinaryOp::BitXor => "XOR", + BinaryOp::BitAnd => "AND", + BinaryOp::BitOr => "OR", + BinaryOp::Min => "min", + BinaryOp::Max => "max", + BinaryOp::AbsDiff => unreachable!(), + }; + if matches!(op, BinaryOp::Min | BinaryOp::Max) { + write!(formatter, "{operator}({lhs}, {rhs})") + } else { + write!(formatter, "({lhs} {operator} {rhs})") + } + } + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/compile.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/compile.rs new file mode 100644 index 000000000..6c1a2f17c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/compile.rs @@ -0,0 +1,286 @@ +use std::collections::HashMap; + +use crate::{ + BinaryOp, CircuitBuilder, Expr, ExprSemantics, GateOp, OccamError, ResourceLimits, Signal, + SynthesizedCircuit, limits::checked_mul, +}; + +pub fn compile_expression( + expression: &Expr, + semantics: ExprSemantics, + limits: &ResourceLimits, +) -> Result { + let input_count = checked_mul(semantics.operand_bits, 2, "expression compiler input width")?; + limits.require("circuit inputs", input_count, limits.max_inputs)?; + limits.require("circuit outputs", semantics.output_bits, limits.max_outputs)?; + let mut compiler = BitVectorCompiler::new(input_count, semantics, limits)?; + let expression = expression.canonicalize()?; + let outputs = compiler.compile(&expression)?; + compiler.builder.finish(&outputs) +} + +struct BitVectorCompiler<'a> { + builder: CircuitBuilder<'a>, + semantics: ExprSemantics, + x: Vec, + y: Vec, + memo: HashMap>, +} + +impl<'a> BitVectorCompiler<'a> { + fn new( + input_count: usize, + semantics: ExprSemantics, + limits: &'a ResourceLimits, + ) -> Result { + let builder = CircuitBuilder::new(input_count, limits)?; + let mut x = Vec::with_capacity(semantics.output_bits); + let mut y = Vec::with_capacity(semantics.output_bits); + for bit in 0..semantics.output_bits { + if bit < semantics.operand_bits { + x.push(Signal::input(bit)); + y.push(Signal::input(semantics.operand_bits + bit)); + } else { + x.push(builder.zero()?); + y.push(builder.zero()?); + } + } + Ok(Self { + builder, + semantics, + x, + y, + memo: HashMap::new(), + }) + } + + fn compile(&mut self, expression: &Expr) -> Result, OccamError> { + if let Some(signals) = self.memo.get(expression) { + return Ok(signals.clone()); + } + let result = match expression { + Expr::X => self.x.clone(), + Expr::Y => self.y.clone(), + Expr::Constant(value) => self.constant(*value)?, + Expr::Square(value) => { + let value = self.compile(value)?; + self.multiply(&value, &value)? + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = self.compile(value)?; + self.shift_left(&value, usize::from(*amount))? + } + Expr::Binary { op, lhs, rhs } => { + let lhs = self.compile(lhs)?; + let rhs = self.compile(rhs)?; + match op { + BinaryOp::Add => self.add(&lhs, &rhs)?, + BinaryOp::Subtract => self.subtract(&lhs, &rhs)?.0, + BinaryOp::AbsDiff => self.abs_diff(&lhs, &rhs)?, + BinaryOp::Multiply => self.multiply(&lhs, &rhs)?, + BinaryOp::BitXor => self.bitwise(GateOp::Xor, &lhs, &rhs)?, + BinaryOp::BitAnd => self.bitwise(GateOp::And, &lhs, &rhs)?, + BinaryOp::BitOr => self.bitwise(GateOp::Or, &lhs, &rhs)?, + BinaryOp::Min => self.min_max(&lhs, &rhs, false)?, + BinaryOp::Max => self.min_max(&lhs, &rhs, true)?, + } + } + }; + debug_assert_eq!(result.len(), self.semantics.output_bits); + self.memo.insert(expression.clone(), result.clone()); + Ok(result) + } + + fn constant(&self, value: u64) -> Result, OccamError> { + if value > self.semantics.output_mask() { + return Err(OccamError::Validation(format!( + "expression constant {value} must fit in {} bits", + self.semantics.output_bits + ))); + } + (0..self.semantics.output_bits) + .map(|bit| { + if value & (1u64 << bit) == 0 { + self.builder.zero() + } else { + self.builder.one() + } + }) + .collect() + } + + fn bitwise( + &mut self, + operation: GateOp, + lhs: &[Signal], + rhs: &[Signal], + ) -> Result, OccamError> { + lhs.iter() + .zip(rhs) + .map(|(lhs, rhs)| self.builder.binary(operation, *lhs, *rhs)) + .collect() + } + + fn add(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let mut carry = self.builder.zero()?; + let mut result = Vec::with_capacity(self.semantics.output_bits); + for (lhs, rhs) in lhs.iter().zip(rhs) { + let (sum, next_carry) = self.full_adder(*lhs, *rhs, carry)?; + result.push(sum); + carry = next_carry; + } + Ok(result) + } + + fn subtract( + &mut self, + lhs: &[Signal], + rhs: &[Signal], + ) -> Result<(Vec, Signal), OccamError> { + let mut borrow = self.builder.zero()?; + let mut difference = Vec::with_capacity(self.semantics.output_bits); + for (lhs, rhs) in lhs.iter().zip(rhs) { + let propagate = self.builder.binary(GateOp::Xor, *lhs, *rhs)?; + difference.push(self.builder.binary(GateOp::Xor, propagate, borrow)?); + let generated = self.builder.binary(GateOp::And, lhs.inverted(), *rhs)?; + let propagated = self + .builder + .binary(GateOp::And, propagate.inverted(), borrow)?; + borrow = self.builder.binary(GateOp::Or, generated, propagated)?; + } + Ok((difference, borrow)) + } + + fn abs_diff(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let (difference, borrow) = self.subtract(lhs, rhs)?; + let mut carry = borrow; + let mut result = Vec::with_capacity(self.semantics.output_bits); + for bit in difference { + let toggled = self.builder.binary(GateOp::Xor, bit, borrow)?; + result.push(self.builder.binary(GateOp::Xor, toggled, carry)?); + carry = self.builder.binary(GateOp::And, toggled, carry)?; + } + Ok(result) + } + + fn min_max( + &mut self, + lhs: &[Signal], + rhs: &[Signal], + maximum: bool, + ) -> Result, OccamError> { + let (_, lhs_is_less) = self.subtract(lhs, rhs)?; + if maximum { + self.select(lhs_is_less, rhs, lhs) + } else { + self.select(lhs_is_less, lhs, rhs) + } + } + + fn select( + &mut self, + condition: Signal, + when_true: &[Signal], + when_false: &[Signal], + ) -> Result, OccamError> { + let mut result = Vec::with_capacity(self.semantics.output_bits); + for (when_true, when_false) in when_true.iter().zip(when_false) { + let difference = self.builder.binary(GateOp::Xor, *when_true, *when_false)?; + let selected = self.builder.binary(GateOp::And, condition, difference)?; + result.push(self.builder.binary(GateOp::Xor, *when_false, selected)?); + } + Ok(result) + } + + fn shift_left(&self, value: &[Signal], amount: usize) -> Result, OccamError> { + let mut result = Vec::with_capacity(self.semantics.output_bits); + for bit in 0..self.semantics.output_bits { + if bit < amount { + result.push(self.builder.zero()?); + } else { + result.push(value[bit - amount]); + } + } + Ok(result) + } + + fn multiply(&mut self, lhs: &[Signal], rhs: &[Signal]) -> Result, OccamError> { + let width = self.semantics.output_bits; + let column_count = width.checked_add(1).ok_or(OccamError::ArithmeticOverflow { + context: "expression multiplication columns", + })?; + let mut columns = vec![Vec::new(); column_count]; + for (lhs_index, lhs_signal) in lhs.iter().enumerate() { + for (rhs_index, rhs_signal) in rhs.iter().enumerate() { + let column = + lhs_index + .checked_add(rhs_index) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression multiplication column", + })?; + if column < width { + columns[column].push(self.builder.binary( + GateOp::And, + *lhs_signal, + *rhs_signal, + )?); + } + } + } + self.compress_columns(columns) + } + + fn compress_columns( + &mut self, + mut columns: Vec>, + ) -> Result, OccamError> { + let width = self.semantics.output_bits; + let mut outputs = Vec::with_capacity(width); + for column in 0..width { + while columns[column].len() > 2 { + let third = columns[column].pop().unwrap(); + let second = columns[column].pop().unwrap(); + let first = columns[column].pop().unwrap(); + let (sum, carry) = self.full_adder(first, second, third)?; + columns[column].push(sum); + columns[column + 1].push(carry); + } + match columns[column].as_slice() { + [] => outputs.push(self.builder.zero()?), + [only] => outputs.push(*only), + [first, second] => { + let (sum, carry) = self.half_adder(*first, *second)?; + outputs.push(sum); + columns[column + 1].push(carry); + } + _ => unreachable!(), + } + } + Ok(outputs) + } + + fn half_adder(&mut self, lhs: Signal, rhs: Signal) -> Result<(Signal, Signal), OccamError> { + Ok(( + self.builder.binary(GateOp::Xor, lhs, rhs)?, + self.builder.binary(GateOp::And, lhs, rhs)?, + )) + } + + fn full_adder( + &mut self, + lhs: Signal, + rhs: Signal, + carry: Signal, + ) -> Result<(Signal, Signal), OccamError> { + let propagate = self.builder.binary(GateOp::Xor, lhs, rhs)?; + let sum = self.builder.binary(GateOp::Xor, propagate, carry)?; + let generated = self.builder.binary(GateOp::And, lhs, rhs)?; + let carried = self.builder.binary(GateOp::And, propagate, carry)?; + Ok((sum, self.builder.binary(GateOp::Or, generated, carried)?)) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/enumerate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/enumerate.rs new file mode 100644 index 000000000..e1301e5ed --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/enumerate.rs @@ -0,0 +1,408 @@ +use std::{ + collections::{BTreeSet, HashMap, HashSet}, + time::{Duration, Instant}, +}; + +use crate::{ + BinaryOp, Dataset, Expr, ExprSemantics, MdlSearchConfig, MdlSearchReport, MdlSearchResult, + OccamError, SearchTermination, SemanticKey, decode_lsb, evaluate_rows, + expression::report::CostSearchStats, +}; + +#[derive(Clone, Debug)] +struct ClassRecord { + representative: Expr, + description_cost: usize, + equal_cost_expression_count: usize, + alternatives: Vec, +} + +#[derive(Default)] +struct SearchProgress { + costs: Vec, + generated_expressions: usize, + evaluated_expressions: usize, + retained_semantic_classes: usize, +} + +pub fn search_mdl( + dataset: &Dataset, + config: &MdlSearchConfig, +) -> Result { + validate_config(config)?; + let semantics = validate_dataset(dataset)?; + let expected = expected_key(dataset)?; + let started = Instant::now(); + let timeout = Duration::from_millis(config.timeout_millis); + let mut progress = SearchProgress::default(); + let mut buckets = vec![Vec::::new(); config.max_description_cost + 1]; + let mut classes = HashMap::::new(); + + for cost in 1..=config.max_description_cost { + if timed_out(started, timeout) { + return Ok(finish( + None, + SearchTermination::Timeout, + config, + progress, + None, + )); + } + let generated_before = progress.generated_expressions; + let evaluated_before = progress.evaluated_expressions; + let retained_before = progress.retained_semantic_classes; + let mut candidates = BTreeSet::new(); + let generation = generate_cost_bucket( + cost, + &buckets, + config, + started, + timeout, + &mut progress, + &mut candidates, + ); + if let Err(termination) = generation { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish(None, termination, config, progress, None)); + } + + for expression in candidates { + if expression.description_cost() != cost { + continue; + } + if timed_out(started, timeout) { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish( + None, + SearchTermination::Timeout, + config, + progress, + None, + )); + } + progress.evaluated_expressions = + checked_increment(progress.evaluated_expressions, "evaluated expressions")?; + let key = evaluate_rows(&expression, dataset, semantics)?; + if let Some(record) = classes.get_mut(&key) { + if record.description_cost == cost { + record.equal_cost_expression_count = checked_increment( + record.equal_cost_expression_count, + "equal-cost expressions", + )?; + if record.alternatives.len() < config.max_alternatives_per_class { + record.alternatives.push(expression.to_string()); + record.alternatives.sort(); + record.alternatives.dedup(); + } + } + continue; + } + if classes.len() >= config.max_semantic_classes { + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + return Ok(finish( + None, + SearchTermination::SemanticClassLimit, + config, + progress, + None, + )); + } + let display = expression.to_string(); + classes.insert( + key, + ClassRecord { + representative: expression.clone(), + description_cost: cost, + equal_cost_expression_count: 1, + alternatives: vec![display], + }, + ); + buckets[cost].push(expression); + progress.retained_semantic_classes = checked_increment( + progress.retained_semantic_classes, + "retained semantic classes", + )?; + } + buckets[cost].sort(); + push_cost_stats( + cost, + generated_before, + evaluated_before, + retained_before, + &mut progress, + ); + + if let Some(record) = classes.get(&expected) + && record.description_cost == cost + { + return Ok(finish( + Some(record.representative.clone()), + SearchTermination::Found, + config, + progress, + Some(record), + )); + } + } + + Ok(finish( + None, + SearchTermination::CostExhausted, + config, + progress, + None, + )) +} + +fn validate_config(config: &MdlSearchConfig) -> Result<(), OccamError> { + for (name, value) in [ + ("maximum description cost", config.max_description_cost), + ( + "maximum generated expressions", + config.max_generated_expressions, + ), + ("maximum semantic classes", config.max_semantic_classes), + ( + "maximum alternatives per class", + config.max_alternatives_per_class, + ), + ] { + if value == 0 { + return Err(OccamError::Validation(format!("{name} must be positive"))); + } + } + if config + .shift_amounts + .iter() + .any(|amount| !(1..=3).contains(amount)) + { + return Err(OccamError::Validation( + "MDL shift amounts must be in 1..=3".into(), + )); + } + if config + .shift_amounts + .iter() + .copied() + .collect::>() + .len() + != config.shift_amounts.len() + { + return Err(OccamError::Validation( + "MDL shift amounts must be unique".into(), + )); + } + if config + .enabled_binary_ops + .iter() + .copied() + .collect::>() + .len() + != config.enabled_binary_ops.len() + { + return Err(OccamError::Validation( + "MDL binary operators must be unique".into(), + )); + } + Ok(()) +} + +fn validate_dataset(dataset: &Dataset) -> Result { + if dataset.input_width == 0 || !dataset.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "MDL dataset input width {} must be positive and even", + dataset.input_width + ))); + } + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "MDL dataset must contain at least one sample".into(), + )); + } + ExprSemantics::new(dataset.input_width / 2, dataset.output_width) +} + +fn expected_key(dataset: &Dataset) -> Result { + let mut expected = Vec::with_capacity(dataset.samples.len()); + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "MDL sample {} output width {} does not match dataset output width {}", + index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + expected.push(decode_lsb(&sample.expected)?); + } + Ok(SemanticKey(expected)) +} + +#[allow(clippy::too_many_arguments)] +fn generate_cost_bucket( + cost: usize, + buckets: &[Vec], + config: &MdlSearchConfig, + started: Instant, + timeout: Duration, + progress: &mut SearchProgress, + candidates: &mut BTreeSet, +) -> Result<(), SearchTermination> { + if cost == 1 { + for expression in [Expr::x(), Expr::y(), Expr::constant(0), Expr::constant(1)] { + record_generated(expression, config, started, timeout, progress, candidates)?; + } + return Ok(()); + } + + if config.enable_square { + for child in &buckets[cost - 1] { + record_generated( + Expr::square(child.clone()), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + for amount in &config.shift_amounts { + for child in &buckets[cost - 1] { + record_generated( + Expr::shift_left(child.clone(), *amount), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + for operation in &config.enabled_binary_ops { + let operator_cost = if *operation == BinaryOp::AbsDiff { + 2 + } else { + 1 + }; + let Some(children_cost) = cost.checked_sub(operator_cost) else { + continue; + }; + if children_cost < 2 { + continue; + } + for lhs_cost in 1..children_cost { + let rhs_cost = children_cost - lhs_cost; + for lhs in &buckets[lhs_cost] { + for rhs in &buckets[rhs_cost] { + record_generated( + Expr::binary(*operation, lhs.clone(), rhs.clone()), + config, + started, + timeout, + progress, + candidates, + )?; + } + } + } + } + Ok(()) +} + +fn record_generated( + expression: Expr, + config: &MdlSearchConfig, + started: Instant, + timeout: Duration, + progress: &mut SearchProgress, + candidates: &mut BTreeSet, +) -> Result<(), SearchTermination> { + if timed_out(started, timeout) { + return Err(SearchTermination::Timeout); + } + if progress.generated_expressions >= config.max_generated_expressions { + return Err(SearchTermination::ExpressionLimit); + } + progress.generated_expressions += 1; + let expression = expression + .canonicalize() + .map_err(|_| SearchTermination::ExpressionLimit)?; + if expression.description_cost() <= config.max_description_cost { + candidates.insert(expression); + } + Ok(()) +} + +fn push_cost_stats( + cost: usize, + generated_before: usize, + evaluated_before: usize, + retained_before: usize, + progress: &mut SearchProgress, +) { + progress.costs.push(CostSearchStats { + description_cost: cost, + generated_expressions: progress.generated_expressions - generated_before, + evaluated_expressions: progress.evaluated_expressions - evaluated_before, + retained_semantic_classes: progress.retained_semantic_classes - retained_before, + }); +} + +fn finish( + expression: Option, + termination: SearchTermination, + config: &MdlSearchConfig, + progress: SearchProgress, + record: Option<&ClassRecord>, +) -> MdlSearchResult { + let mut alternatives = record + .map(|record| record.alternatives.clone()) + .unwrap_or_default(); + alternatives.sort(); + alternatives.dedup(); + MdlSearchResult { + expression, + report: MdlSearchReport { + schema_version: 1, + config: config.clone(), + termination, + costs: progress.costs, + generated_expressions: progress.generated_expressions, + evaluated_expressions: progress.evaluated_expressions, + retained_semantic_classes: progress.retained_semantic_classes, + description_cost: record.map(|record| record.description_cost), + minimum_unique: record.map(|record| record.equal_cost_expression_count == 1), + equal_cost_expression_count: record.map(|record| record.equal_cost_expression_count), + alternatives, + }, + } +} + +fn timed_out(started: Instant, timeout: Duration) -> bool { + started.elapsed() >= timeout +} + +fn checked_increment(value: usize, context: &'static str) -> Result { + value + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { context }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/evaluate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/evaluate.rs new file mode 100644 index 000000000..ce38c8af8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/evaluate.rs @@ -0,0 +1,110 @@ +use serde::{Deserialize, Serialize}; + +use crate::{BinaryOp, Dataset, Expr, ExprSemantics, OccamError, learning::decode_lsb}; + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +pub struct SemanticKey(pub Vec); + +pub fn evaluate_rows( + expression: &Expr, + dataset: &Dataset, + semantics: ExprSemantics, +) -> Result { + let expected_input_width = + semantics + .operand_bits + .checked_mul(2) + .ok_or(OccamError::ArithmeticOverflow { + context: "expression input width", + })?; + if dataset.input_width != expected_input_width { + return Err(OccamError::Validation(format!( + "expression dataset input width {} does not match expected width {expected_input_width}", + dataset.input_width + ))); + } + if dataset.output_width != semantics.output_bits { + return Err(OccamError::Validation(format!( + "expression dataset output width {} does not match declared width {}", + dataset.output_width, semantics.output_bits + ))); + } + + let mut values = Vec::with_capacity(dataset.samples.len()); + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != expected_input_width { + return Err(OccamError::Validation(format!( + "expression sample {} input width {} does not match expected width {expected_input_width}", + index + 1, + sample.input.len() + ))); + } + let x = decode_lsb(&sample.input[..semantics.operand_bits])?; + let y = decode_lsb(&sample.input[semantics.operand_bits..])?; + values.push(expression.evaluate(x, y, semantics)?); + } + Ok(SemanticKey(values)) +} + +impl Expr { + pub fn evaluate(&self, x: u64, y: u64, semantics: ExprSemantics) -> Result { + if x > semantics.operand_mask() || y > semantics.operand_mask() { + return Err(OccamError::Validation(format!( + "expression operands {x} and {y} must fit in {} bits", + semantics.operand_bits + ))); + } + evaluate_inner(self, x, y, semantics) + } +} + +fn evaluate_inner( + expression: &Expr, + x: u64, + y: u64, + semantics: ExprSemantics, +) -> Result { + let mask = semantics.output_mask(); + let value = match expression { + Expr::X => x, + Expr::Y => y, + Expr::Constant(value) => { + if *value > mask { + return Err(OccamError::Validation(format!( + "expression constant {value} must fit in {} bits", + semantics.output_bits + ))); + } + *value + } + Expr::Square(value) => { + let value = evaluate_inner(value, x, y, semantics)?; + ((value as u128 * value as u128) & mask as u128) as u64 + } + Expr::ShiftLeft { value, amount } => { + if !(1..=3).contains(amount) { + return Err(OccamError::Validation(format!( + "expression shift amount must be in 1..=3, got {amount}" + ))); + } + let value = evaluate_inner(value, x, y, semantics)?; + ((value as u128) << amount) as u64 & mask + } + Expr::Binary { op, lhs, rhs } => { + let lhs = evaluate_inner(lhs, x, y, semantics)?; + let rhs = evaluate_inner(rhs, x, y, semantics)?; + match op { + BinaryOp::Add => ((lhs as u128 + rhs as u128) & mask as u128) as u64, + BinaryOp::Subtract => lhs.wrapping_sub(rhs) & mask, + BinaryOp::AbsDiff => lhs.abs_diff(rhs), + BinaryOp::Multiply => ((lhs as u128 * rhs as u128) & mask as u128) as u64, + BinaryOp::BitXor => lhs ^ rhs, + BinaryOp::BitAnd => lhs & rhs, + BinaryOp::BitOr => lhs | rhs, + BinaryOp::Min => lhs.min(rhs), + BinaryOp::Max => lhs.max(rhs), + } + } + }; + Ok(value & mask) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/mod.rs new file mode 100644 index 000000000..0b460993e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/mod.rs @@ -0,0 +1,16 @@ +mod ast; +mod canonical; +mod compile; +mod enumerate; +mod evaluate; +mod parse; +mod report; + +pub use ast::{BinaryOp, Expr, ExprSemantics}; +pub use compile::compile_expression; +pub use enumerate::search_mdl; +pub use evaluate::{SemanticKey, evaluate_rows}; +pub use parse::parse_expression; +pub use report::{ + CostSearchStats, MdlSearchConfig, MdlSearchReport, MdlSearchResult, SearchTermination, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/parse.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/parse.rs new file mode 100644 index 000000000..51c74cee0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/parse.rs @@ -0,0 +1,189 @@ +use crate::{BinaryOp, Expr, OccamError}; + +pub fn parse_expression(source: &str) -> Result { + if source.is_empty() || source.trim() != source { + return Err(invalid( + source, + "expression must use exact stable whitespace", + )); + } + parse_inner(source)?.canonicalize() +} + +fn parse_inner(source: &str) -> Result { + match source { + "x" => return Ok(Expr::x()), + "y" => return Ok(Expr::y()), + _ => {} + } + if source.bytes().all(|byte| byte.is_ascii_digit()) { + if source.len() > 1 && source.starts_with('0') { + return Err(invalid( + source, + "integer constants may not have leading zeroes", + )); + } + let value = source + .parse::() + .map_err(|_| invalid(source, "integer constant is outside u64"))?; + return Ok(Expr::constant(value)); + } + if let Some(arguments) = call_arguments(source, "square")? { + return Ok(Expr::square(parse_inner(arguments)?)); + } + if let Some(arguments) = call_arguments(source, "shift_left")? { + let (value, amount) = split_call_arguments(arguments)?; + let amount = amount + .parse::() + .map_err(|_| invalid(source, "shift amount must be an unsigned byte"))?; + return Ok(Expr::shift_left(parse_inner(value)?, amount)); + } + if let Some(arguments) = call_arguments(source, "abs")? { + let (lhs, rhs) = split_top_level_once(arguments, " - ")? + .ok_or_else(|| invalid(source, "abs requires exactly one top-level subtraction"))?; + return Ok(Expr::abs_diff(parse_inner(lhs)?, parse_inner(rhs)?)); + } + for (name, operation) in [("min", BinaryOp::Min), ("max", BinaryOp::Max)] { + if let Some(arguments) = call_arguments(source, name)? { + let (lhs, rhs) = split_call_arguments(arguments)?; + return Ok(Expr::binary( + operation, + parse_inner(lhs)?, + parse_inner(rhs)?, + )); + } + } + if source.starts_with('(') && source.ends_with(')') && encloses_complete_expression(source)? { + let inner = &source[1..source.len() - 1]; + let operators = [ + (" + ", BinaryOp::Add), + (" - ", BinaryOp::Subtract), + (" * ", BinaryOp::Multiply), + (" XOR ", BinaryOp::BitXor), + (" AND ", BinaryOp::BitAnd), + (" OR ", BinaryOp::BitOr), + ]; + let mut found = None; + for (separator, operation) in operators { + if let Some((lhs, rhs)) = split_top_level_once(inner, separator)? { + if found.is_some() { + return Err(invalid( + source, + "parenthesized expression has multiple top-level operators", + )); + } + found = Some((operation, lhs, rhs)); + } + } + if let Some((operation, lhs, rhs)) = found { + return Ok(Expr::binary( + operation, + parse_inner(lhs)?, + parse_inner(rhs)?, + )); + } + } + Err(invalid( + source, + "expression does not match the stable grammar", + )) +} + +fn call_arguments<'a>(source: &'a str, name: &str) -> Result, OccamError> { + let Some(remainder) = source.strip_prefix(name) else { + return Ok(None); + }; + if !remainder.starts_with('(') + || !remainder.ends_with(')') + || !encloses_complete_expression(remainder)? + { + return Err(invalid(source, "malformed function call")); + } + Ok(Some(&remainder[1..remainder.len() - 1])) +} + +fn split_call_arguments(source: &str) -> Result<(&str, &str), OccamError> { + split_top_level_once(source, ", ")? + .ok_or_else(|| invalid(source, "function requires exactly two arguments")) +} + +fn split_top_level_once<'a>( + source: &'a str, + separator: &str, +) -> Result, OccamError> { + let bytes = source.as_bytes(); + let separator_bytes = separator.as_bytes(); + let mut depth = 0usize; + let mut found = None; + let mut index = 0usize; + while index < bytes.len() { + match bytes[index] { + b'(' => { + depth = depth + .checked_add(1) + .ok_or_else(|| invalid(source, "nesting overflow"))? + } + b')' => { + depth = depth + .checked_sub(1) + .ok_or_else(|| invalid(source, "unmatched closing parenthesis"))?; + } + _ => {} + } + if depth == 0 && bytes[index..].starts_with(separator_bytes) { + if found.is_some() { + return Err(invalid(source, "multiple top-level separators")); + } + found = Some(index); + index += separator_bytes.len(); + continue; + } + index += 1; + } + if depth != 0 { + return Err(invalid(source, "unclosed parenthesis")); + } + let Some(index) = found else { + return Ok(None); + }; + let lhs = &source[..index]; + let rhs = &source[index + separator.len()..]; + if lhs.is_empty() || rhs.is_empty() { + return Err(invalid(source, "operator operands must be non-empty")); + } + Ok(Some((lhs, rhs))) +} + +fn encloses_complete_expression(source: &str) -> Result { + let bytes = source.as_bytes(); + if bytes.first() != Some(&b'(') || bytes.last() != Some(&b')') { + return Ok(false); + } + let mut depth = 0usize; + for (index, byte) in bytes.iter().enumerate() { + match byte { + b'(' => { + depth = depth + .checked_add(1) + .ok_or_else(|| invalid(source, "nesting overflow"))? + } + b')' => { + depth = depth + .checked_sub(1) + .ok_or_else(|| invalid(source, "unmatched closing parenthesis"))?; + if depth == 0 && index + 1 != bytes.len() { + return Ok(false); + } + } + _ => {} + } + } + if depth != 0 { + return Err(invalid(source, "unclosed parenthesis")); + } + Ok(true) +} + +fn invalid(source: &str, detail: &str) -> OccamError { + OccamError::Validation(format!("invalid expression {source:?}: {detail}")) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/report.rs new file mode 100644 index 000000000..0716af225 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/expression/report.rs @@ -0,0 +1,95 @@ +use serde::{Deserialize, Serialize}; + +use crate::{BinaryOp, Expr}; + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct MdlSearchConfig { + pub max_description_cost: usize, + pub max_generated_expressions: usize, + pub max_semantic_classes: usize, + pub max_alternatives_per_class: usize, + pub timeout_millis: u64, + pub shift_amounts: Vec, + pub enabled_binary_ops: Vec, + pub enable_square: bool, +} + +impl Default for MdlSearchConfig { + fn default() -> Self { + Self { + max_description_cost: 8, + max_generated_expressions: 2_000_000, + max_semantic_classes: 250_000, + max_alternatives_per_class: 8, + timeout_millis: 30_000, + shift_amounts: vec![1, 2, 3], + enabled_binary_ops: vec![ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, + ], + enable_square: true, + } + } +} + +impl MdlSearchConfig { + pub fn for_tests() -> Self { + Self { + max_description_cost: 6, + max_generated_expressions: 100_000, + max_semantic_classes: 20_000, + max_alternatives_per_class: 4, + timeout_millis: 5_000, + ..Self::default() + } + } +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum SearchTermination { + Found, + CostExhausted, + ExpressionLimit, + SemanticClassLimit, + Timeout, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct CostSearchStats { + pub description_cost: usize, + pub generated_expressions: usize, + pub evaluated_expressions: usize, + pub retained_semantic_classes: usize, +} + +#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct MdlSearchReport { + pub schema_version: u32, + pub config: MdlSearchConfig, + pub termination: SearchTermination, + pub costs: Vec, + pub generated_expressions: usize, + pub evaluated_expressions: usize, + pub retained_semantic_classes: usize, + pub description_cost: Option, + pub minimum_unique: Option, + pub equal_cost_expression_count: Option, + pub alternatives: Vec, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MdlSearchResult { + pub expression: Option, + pub report: MdlSearchReport, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/generate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/generate.rs new file mode 100644 index 000000000..445112a9e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/generate.rs @@ -0,0 +1,184 @@ +use crate::{ + DEFAULT_LIMITS, OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum ArithmeticOperation { + Add, + Multiply, +} + +pub fn generate_dataset( + operation: ArithmeticOperation, + bits: usize, + samples: usize, + seed: u64, +) -> Result { + generate_dataset_with_limits(operation, bits, samples, seed, &DEFAULT_LIMITS) +} + +pub fn generate_dataset_with_limits( + operation: ArithmeticOperation, + bits: usize, + samples: usize, + seed: u64, + limits: &ResourceLimits, +) -> Result { + if !(1..=32).contains(&bits) { + return Err(OccamError::Validation( + "dataset bit width must be in 1..=32".into(), + )); + } + if samples == 0 { + return Err(OccamError::Validation( + "sample count must be positive".into(), + )); + } + let input_width = checked_mul(bits, 2, "generated dataset input width")?; + let mut rng = SplitMix64(seed); + let operand_mask = (1u64 << bits) - 1; + let output_width = match operation { + ArithmeticOperation::Add => checked_add(bits, 1, "addition output width")?, + ArithmeticOperation::Multiply => checked_mul(bits, 2, "multiplication output width")?, + }; + limits.require("dataset input width", input_width, limits.max_input_width)?; + limits.require( + "dataset output width", + output_width, + limits.max_output_width, + )?; + limits.require("dataset samples", samples, limits.max_samples)?; + let row_bits = checked_add(input_width, output_width, "generated dataset row bits")?; + let dataset_bits = checked_mul(row_bits, samples, "generated dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + let row_bytes = checked_add(row_bits, 2, "generated dataset row bytes")?; + let rows_bytes = checked_mul(row_bytes, samples, "generated dataset rows bytes")?; + let total_bytes = checked_add( + "input,output\n".len(), + rows_bytes, + "generated dataset bytes", + )?; + limits.require("generated bytes", total_bytes, limits.max_generated_bytes)?; + limits.require("dataset source bytes", total_bytes, limits.max_source_bytes)?; + + let mut output = String::new(); + output.try_reserve_exact(total_bytes).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate generated dataset ({total_bytes} bytes): {error}" + )) + })?; + output.push_str("input,output\n"); + for _ in 0..samples { + let lhs = rng.next() & operand_mask; + let rhs = rng.next() & operand_mask; + let result = match operation { + ArithmeticOperation::Add => lhs + rhs, + ArithmeticOperation::Multiply => lhs * rhs, + }; + push_lsb_bits(&mut output, lhs, bits); + push_lsb_bits(&mut output, rhs, bits); + output.push(','); + push_lsb_bits(&mut output, result, output_width); + output.push('\n'); + } + Ok(output) +} + +fn push_lsb_bits(output: &mut String, value: u64, width: usize) { + for bit in 0..width { + output.push(if value & (1u64 << bit) == 0 { '0' } else { '1' }); + } +} + +struct SplitMix64(u64); + +impl SplitMix64 { + fn next(&mut self) -> u64 { + self.0 = self.0.wrapping_add(0x9e3779b97f4a7c15); + let mut value = self.0; + value = (value ^ (value >> 30)).wrapping_mul(0xbf58476d1ce4e5b9); + value = (value ^ (value >> 27)).wrapping_mul(0x94d049bb133111eb); + value ^ (value >> 31) + } +} + +#[cfg(test)] +mod tests { + use crate::parse_dataset; + + use super::*; + + fn decode(bits: &[bool]) -> u64 { + bits.iter().enumerate().fold( + 0, + |value, (bit, enabled)| { + if *enabled { value | (1 << bit) } else { value } + }, + ) + } + + #[test] + fn generation_is_deterministic_and_seeded() { + let first = generate_dataset(ArithmeticOperation::Add, 8, 10, 115).unwrap(); + assert_eq!( + first, + generate_dataset(ArithmeticOperation::Add, 8, 10, 115).unwrap() + ); + assert_ne!( + first, + generate_dataset(ArithmeticOperation::Add, 8, 10, 116).unwrap() + ); + } + + #[test] + fn generated_addition_rows_are_correct() { + let generated = generate_dataset(ArithmeticOperation::Add, 8, 100, 71).unwrap(); + let dataset = parse_dataset(&generated).unwrap(); + assert_eq!(dataset.input_width, 16); + assert_eq!(dataset.output_width, 9); + for sample in dataset.samples { + assert_eq!( + decode(&sample.expected), + decode(&sample.input[..8]) + decode(&sample.input[8..]) + ); + } + } + + #[test] + fn generated_multiplication_rows_are_correct() { + let generated = generate_dataset(ArithmeticOperation::Multiply, 4, 100, 71).unwrap(); + let dataset = parse_dataset(&generated).unwrap(); + assert_eq!(dataset.input_width, 8); + assert_eq!(dataset.output_width, 8); + for sample in dataset.samples { + assert_eq!( + decode(&sample.expected), + decode(&sample.input[..4]) * decode(&sample.input[4..]) + ); + } + } + + #[test] + fn generation_enforces_limits_before_allocation() { + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + generate_dataset_with_limits(ArithmeticOperation::Add, 4, 2, 71, &limits), + Err(OccamError::ResourceLimit { + resource: "dataset samples", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_generated_bytes = 1; + assert!(matches!( + generate_dataset_with_limits(ArithmeticOperation::Add, 4, 1, 71, &limits), + Err(OccamError::ResourceLimit { + resource: "generated bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/family.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/family.rs new file mode 100644 index 000000000..1e297bf79 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/family.rs @@ -0,0 +1,152 @@ +use std::fmt; + +use serde::{Deserialize, Serialize}; + +use crate::{Dataset, OccamError, learning::inputs::decode_lsb}; + +const MAX_OPERAND_BITS: usize = 31; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum ArithmeticFamily { + Add, + AbsDiff, + Multiply, + SumOfSquares, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct CandidateScore { + pub family: ArithmeticFamily, + pub evaluated_rows: usize, + pub exact_matches: usize, + pub mismatches: usize, + pub first_mismatch_row: Option, +} + +impl ArithmeticFamily { + pub const ALL: [Self; 4] = [Self::Add, Self::AbsDiff, Self::Multiply, Self::SumOfSquares]; + + pub fn output_width(self, operand_bits: usize) -> Result { + validate_operand_bits(operand_bits)?; + Ok(match self { + Self::Add => operand_bits + 1, + Self::AbsDiff => operand_bits, + Self::Multiply => operand_bits * 2, + Self::SumOfSquares => operand_bits * 2 + 1, + }) + } + + pub fn evaluate(self, x: u64, y: u64, operand_bits: usize) -> Result { + validate_operand_bits(operand_bits)?; + let upper_bound = (1u64 << operand_bits) - 1; + if x > upper_bound || y > upper_bound { + return Err(OccamError::Validation(format!( + "operands {x} and {y} must fit in {operand_bits} bits" + ))); + } + match self { + Self::Add => x.checked_add(y), + Self::AbsDiff => Some(x.abs_diff(y)), + Self::Multiply => x.checked_mul(y), + Self::SumOfSquares => x.checked_mul(x).and_then(|x_squared| { + y.checked_mul(y) + .and_then(|y_squared| x_squared.checked_add(y_squared)) + }), + } + .ok_or(OccamError::ArithmeticOverflow { + context: "arithmetic family evaluation", + }) + } +} + +impl fmt::Display for ArithmeticFamily { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter.write_str(match self { + Self::Add => "add", + Self::AbsDiff => "abs-diff", + Self::Multiply => "multiply", + Self::SumOfSquares => "sum-of-squares", + }) + } +} + +pub fn score_candidates(dataset: &Dataset) -> Result, OccamError> { + if dataset.input_width == 0 || !dataset.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "training input width {} must be positive and even", + dataset.input_width + ))); + } + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "training dataset has no samples".into(), + )); + } + let operand_bits = dataset.input_width / 2; + validate_operand_bits(operand_bits)?; + let compatible: Vec<_> = ArithmeticFamily::ALL + .into_iter() + .filter(|family| { + family + .output_width(operand_bits) + .is_ok_and(|width| width == dataset.output_width) + }) + .collect(); + if compatible.is_empty() { + return Err(OccamError::Validation(format!( + "no arithmetic candidate supports input width {} and output width {}", + dataset.input_width, dataset.output_width + ))); + } + + let mut scores = Vec::with_capacity(compatible.len()); + for family in compatible { + let mut exact_matches = 0usize; + let mut first_mismatch_row = None; + for (index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let x = decode_lsb(&sample.input[..operand_bits])?; + let y = decode_lsb(&sample.input[operand_bits..])?; + let predicted = family.evaluate(x, y, operand_bits)?; + let expected = decode_lsb(&sample.expected)?; + if predicted == expected { + exact_matches += 1; + } else if first_mismatch_row.is_none() { + first_mismatch_row = Some(index + 1); + } + } + scores.push(CandidateScore { + family, + evaluated_rows: dataset.samples.len(), + exact_matches, + mismatches: dataset.samples.len() - exact_matches, + first_mismatch_row, + }); + } + Ok(scores) +} + +fn validate_operand_bits(operand_bits: usize) -> Result<(), OccamError> { + if operand_bits == 0 || operand_bits > MAX_OPERAND_BITS { + return Err(OccamError::Validation(format!( + "operand width must be in 1..={MAX_OPERAND_BITS}, got {operand_bits}" + ))); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/inputs.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/inputs.rs new file mode 100644 index 000000000..41710dd31 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/inputs.rs @@ -0,0 +1,213 @@ +use std::collections::HashSet; + +use crate::{ + DEFAULT_LIMITS, OccamError, ResourceLimits, + limits::{checked_add, checked_mul}, +}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TestInputs { + pub input_width: usize, + pub rows: Vec>, +} + +pub fn decode_lsb(bits: &[bool]) -> Result { + if bits.len() > u64::BITS as usize { + return Err(OccamError::Validation(format!( + "cannot decode {} bits into u64", + bits.len() + ))); + } + Ok(bits + .iter() + .enumerate() + .fold(0u64, |value, (bit, set)| value | (u64::from(*set) << bit))) +} + +pub fn encode_lsb(value: u64, width: usize) -> Result, OccamError> { + if width == 0 || width > u64::BITS as usize { + return Err(OccamError::Validation(format!( + "encoded bit width must be in 1..=64, got {width}" + ))); + } + if width < u64::BITS as usize && value >= (1u64 << width) { + return Err(OccamError::Validation(format!( + "value {value} does not fit in {width} bits" + ))); + } + Ok((0..width).map(|bit| value & (1u64 << bit) != 0).collect()) +} + +pub fn parse_test_inputs(source: &str) -> Result { + parse_test_inputs_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_test_inputs_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + limits.require( + "test input source bytes", + source.len(), + limits.max_source_bytes, + )?; + if source.is_empty() { + return Err(OccamError::Validation("test input dataset is empty".into())); + } + + let mut lines = source.as_bytes().split(|byte| *byte == b'\n'); + let header = trim_ascii(lines.next().unwrap_or_default()); + if header != b"input" { + return Err(OccamError::parse( + "test inputs", + 1, + format!( + "expected header input; got {}", + String::from_utf8_lossy(header) + ), + )); + } + + let mut input_width = None; + let mut rows = Vec::new(); + let mut seen = HashSet::>::new(); + for (index, raw_line) in lines.enumerate() { + let line_number = index + 2; + let input = trim_ascii(raw_line); + if input.is_empty() { + continue; + } + if input.contains(&b',') { + return Err(OccamError::parse( + "test inputs", + line_number, + "expected exactly one CSV field", + )); + } + validate_bits(input, line_number)?; + if let Some(expected) = input_width { + if input.len() != expected { + return Err(OccamError::parse( + "test inputs", + line_number, + format!( + "inconsistent input width: expected {expected}, got {}", + input.len() + ), + )); + } + } else { + limits.require("test input width", input.len(), limits.max_input_width)?; + input_width = Some(input.len()); + } + if !seen.insert(input.to_vec()) { + return Err(OccamError::parse( + "test inputs", + line_number, + "duplicate input row", + )); + } + let next_rows = checked_add(rows.len(), 1, "test input row count")?; + limits.require("test input rows", next_rows, limits.max_samples)?; + let dataset_bits = checked_mul(input.len(), next_rows, "test input dataset bits")?; + limits.require("test input bits", dataset_bits, limits.max_dataset_bits)?; + rows.push(input.iter().map(|byte| *byte == b'1').collect()); + } + + let input_width = + input_width.ok_or_else(|| OccamError::Validation("test inputs have no rows".into()))?; + Ok(TestInputs { input_width, rows }) +} + +pub fn parse_commitment(source: &str) -> Result { + let fields: Vec<_> = source.split_ascii_whitespace().collect(); + if fields.len() != 2 || fields[1] != "test_outputs.csv" { + return Err(OccamError::Validation( + "commitment must contain ' test_outputs.csv'".into(), + )); + } + let digest = fields[0]; + if digest.len() != 64 + || !digest + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) + { + return Err(OccamError::Validation( + "commitment SHA-256 must be exactly 64 lowercase hexadecimal characters".into(), + )); + } + Ok(digest.to_owned()) +} + +fn trim_ascii(mut value: &[u8]) -> &[u8] { + while value.first().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[1..]; + } + while value.last().is_some_and(|byte| byte.is_ascii_whitespace()) { + value = &value[..value.len() - 1]; + } + value +} + +fn validate_bits(value: &[u8], line: usize) -> Result<(), OccamError> { + if value.is_empty() { + return Err(OccamError::parse( + "test inputs", + line, + "input bitstring must be non-empty", + )); + } + for byte in value { + if *byte != b'0' && *byte != b'1' { + let invalid = if byte.is_ascii() { + format!("character {:?}", char::from(*byte)) + } else { + format!("byte 0x{byte:02x}") + }; + return Err(OccamError::parse( + "test inputs", + line, + format!("input contains non-bit {invalid}"), + )); + } + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn enforces_test_input_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_input_width = 1; + assert!(matches!( + parse_test_inputs_with_limits("input\n00\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input width", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + parse_test_inputs_with_limits("input\n0\n1\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input rows", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_test_inputs_with_limits("input\n0\n", &limits), + Err(OccamError::ResourceLimit { + resource: "test input source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/learner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/learner.rs new file mode 100644 index 000000000..f8ea7f94f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/learner.rs @@ -0,0 +1,173 @@ +use crate::{ + ArithmeticFamily, CandidateScore, Dataset, OccamError, ResourceLimits, TestInputs, + VerificationMetrics, decode_lsb, evaluate_with_limits, parse_commitment, + parse_dataset_with_limits, parse_netlist_with_limits, parse_packed_dataset_with_limits, + parse_test_inputs_with_limits, prediction_csv_from_circuit, score_candidates, sha256_hex, + synthesize_family_with_limits, verify_prepacked_with_limits, verify_with_limits, +}; + +use super::report::LearningReport; + +#[derive(Clone, Copy, Debug)] +pub struct LearnRequest<'a> { + pub instance: &'a str, + pub training_source: &'a str, + pub test_inputs_source: &'a str, + pub commitment_source: Option<&'a str>, + pub limits: &'a ResourceLimits, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct LearnResult { + pub circuit: String, + pub prediction_csv: String, + pub test_inputs: TestInputs, + pub report: LearningReport, +} + +pub fn learn_instance(request: LearnRequest<'_>) -> Result { + if request.instance.is_empty() || request.instance.chars().any(char::is_control) { + return Err(OccamError::Validation( + "learning instance name must be non-empty and contain no control characters".into(), + )); + } + let training = parse_dataset_with_limits(request.training_source, request.limits)?; + let (family, candidate_scores) = infer_unique_family(&training)?; + let operand_bits = training.input_width / 2; + let synthesized = synthesize_family_with_limits(family, operand_bits, request.limits)?; + let circuit = parse_netlist_with_limits(&synthesized.netlist, request.limits)?; + let training_scalar = verify_with_limits(&circuit, &training, request.limits)?; + let packed = + parse_packed_dataset_with_limits(request.training_source.as_bytes(), request.limits)?; + let training_packed = verify_prepacked_with_limits(&circuit, &packed, request.limits)?; + require_perfect_training(&training_scalar, "scalar")?; + require_perfect_training(&training_packed, "packed")?; + if training_scalar != training_packed { + return Err(OccamError::Validation(format!( + "training backend mismatch: scalar {training_scalar:?}, packed {training_packed:?}" + ))); + } + let (exhaustive_cases, exhaustive_mismatches) = + exhaustively_compare(&circuit, family, operand_bits, request.limits)?; + if exhaustive_mismatches != 0 { + return Err(OccamError::Validation(format!( + "synthesized circuit has {exhaustive_mismatches} mismatches over {exhaustive_cases} exhaustive cases" + ))); + } + + let test_inputs = parse_test_inputs_with_limits(request.test_inputs_source, request.limits)?; + if test_inputs.input_width != training.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match training input width {}", + test_inputs.input_width, training.input_width + ))); + } + let prediction_csv = prediction_csv_from_circuit(&circuit, &test_inputs, request.limits)?; + let prediction_sha256 = sha256_hex(prediction_csv.as_bytes()); + let expected_commitment_sha256 = request + .commitment_source + .map(parse_commitment) + .transpose()?; + let commitment_matches = expected_commitment_sha256 + .as_ref() + .map(|expected| expected == &prediction_sha256); + if let Some(expected) = expected_commitment_sha256.as_ref() + && expected != &prediction_sha256 + { + return Err(OccamError::Validation(format!( + "prediction commitment mismatch: expected {expected}, got {prediction_sha256}" + ))); + } + + let report = LearningReport { + schema_version: 1, + instance: request.instance.to_owned(), + selected_family: family, + operand_bits, + input_width: training.input_width, + output_width: training.output_width, + candidate_scores, + gate_count: circuit.gates.len(), + circuit_sha256: sha256_hex(synthesized.netlist.as_bytes()), + training_scalar, + training_packed, + exhaustive_cases, + exhaustive_mismatches, + prediction_rows: test_inputs.rows.len(), + prediction_sha256, + expected_commitment_sha256, + commitment_matches, + }; + Ok(LearnResult { + circuit: synthesized.netlist, + prediction_csv, + test_inputs, + report, + }) +} + +pub fn infer_unique_family( + dataset: &Dataset, +) -> Result<(ArithmeticFamily, Vec), OccamError> { + let scores = score_candidates(dataset)?; + let perfect: Vec<_> = scores + .iter() + .filter(|score| score.mismatches == 0) + .map(|score| score.family) + .collect(); + match perfect.as_slice() { + [family] => Ok((*family, scores)), + [] => Err(OccamError::Validation(format!( + "no zero-error arithmetic family matches the training data: {scores:?}" + ))), + _ => Err(OccamError::Validation(format!( + "ambiguous training data: zero-error arithmetic families {perfect:?}" + ))), + } +} + +fn require_perfect_training( + metrics: &VerificationMetrics, + backend: &str, +) -> Result<(), OccamError> { + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "{backend} training verification matched only {}/{} rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn exhaustively_compare( + circuit: &crate::Circuit, + family: ArithmeticFamily, + operand_bits: usize, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + let shift = u32::try_from(circuit.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "exhaustive domain shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "exhaustive domain size", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + let operand_mask = (1u64 << operand_bits) - 1; + let mut mismatches = 0usize; + let mut input = vec![false; circuit.input_count]; + for packed_input in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed_input & (1usize << bit) != 0; + } + let actual = decode_lsb(&evaluate_with_limits(circuit, &input, limits)?)?; + let packed_input = packed_input as u64; + let x = packed_input & operand_mask; + let y = (packed_input >> operand_bits) & operand_mask; + if actual != family.evaluate(x, y, operand_bits)? { + mismatches += 1; + } + } + Ok((cases, mismatches)) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mdl.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mdl.rs new file mode 100644 index 000000000..d52d751aa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mdl.rs @@ -0,0 +1,183 @@ +use crate::{ + Circuit, Expr, ExprSemantics, MdlSearchConfig, OccamError, ResourceLimits, SearchTermination, + TestInputs, VerificationMetrics, compile_expression, decode_lsb, evaluate_with_limits, + parse_commitment, parse_dataset_with_limits, parse_netlist_with_limits, + parse_packed_dataset_with_limits, parse_test_inputs_with_limits, prediction_csv_from_circuit, + search_mdl, sha256_hex, verify_prepacked_with_limits, verify_with_limits, +}; + +use super::report::MdlLearningReport; + +#[derive(Clone, Copy, Debug)] +pub struct MdlLearnRequest<'a> { + pub training_source: &'a str, + pub test_inputs_source: &'a str, + pub commitment_source: Option<&'a str>, + pub config: &'a MdlSearchConfig, + pub limits: &'a ResourceLimits, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MdlLearnResult { + pub circuit: String, + pub prediction_csv: String, + pub test_inputs: TestInputs, + pub report: MdlLearningReport, +} + +pub fn learn_mdl(request: MdlLearnRequest<'_>) -> Result { + let training = parse_dataset_with_limits(request.training_source, request.limits)?; + if !training.input_width.is_multiple_of(2) { + return Err(OccamError::Validation(format!( + "MDL training input width {} must be even", + training.input_width + ))); + } + let semantics = ExprSemantics::new(training.input_width / 2, training.output_width)?; + let search_result = search_mdl(&training, request.config)?; + if search_result.report.termination != SearchTermination::Found { + return Err(OccamError::Validation(format!( + "MDL search did not find a consistent expression: {:?}", + search_result.report.termination + ))); + } + let expression = search_result.expression.ok_or_else(|| { + OccamError::Validation("MDL search reported success without an expression".into()) + })?; + let description_cost = search_result.report.description_cost.ok_or_else(|| { + OccamError::Validation("MDL search report omitted the selected description cost".into()) + })?; + let minimum_unique = search_result.report.minimum_unique.ok_or_else(|| { + OccamError::Validation("MDL search report omitted minimum uniqueness".into()) + })?; + let equal_cost_expression_count = search_result + .report + .equal_cost_expression_count + .ok_or_else(|| { + OccamError::Validation( + "MDL search report omitted the equal-cost expression count".into(), + ) + })?; + + let synthesized = compile_expression(&expression, semantics, request.limits)?; + let circuit = parse_netlist_with_limits(&synthesized.netlist, request.limits)?; + let training_scalar = verify_with_limits(&circuit, &training, request.limits)?; + let packed = + parse_packed_dataset_with_limits(request.training_source.as_bytes(), request.limits)?; + let training_packed = verify_prepacked_with_limits(&circuit, &packed, request.limits)?; + require_perfect_training(&training_scalar, "scalar")?; + require_perfect_training(&training_packed, "packed")?; + if training_scalar != training_packed { + return Err(OccamError::Validation(format!( + "training backend mismatch: scalar {training_scalar:?}, packed {training_packed:?}" + ))); + } + + let (exhaustive_cases, exhaustive_mismatches) = + exhaustively_compare(&circuit, &expression, semantics, request.limits)?; + if exhaustive_mismatches != 0 { + return Err(OccamError::Validation(format!( + "compiled expression circuit has {exhaustive_mismatches} mismatches over \ + {exhaustive_cases} exhaustive cases" + ))); + } + + let test_inputs = parse_test_inputs_with_limits(request.test_inputs_source, request.limits)?; + if test_inputs.input_width != training.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match training input width {}", + test_inputs.input_width, training.input_width + ))); + } + let prediction_csv = prediction_csv_from_circuit(&circuit, &test_inputs, request.limits)?; + let prediction_sha256 = sha256_hex(prediction_csv.as_bytes()); + + let expected_commitment_sha256 = request + .commitment_source + .map(parse_commitment) + .transpose()?; + let commitment_matches = expected_commitment_sha256 + .as_ref() + .map(|expected| expected == &prediction_sha256); + if let Some(expected) = expected_commitment_sha256.as_ref() + && expected != &prediction_sha256 + { + return Err(OccamError::Validation(format!( + "prediction commitment mismatch: expected {expected}, got {prediction_sha256}" + ))); + } + + let report = MdlLearningReport { + schema_version: 2, + learner: "mdl-enumerator".into(), + expression: expression.to_string(), + description_cost, + minimum_unique, + equal_cost_expression_count, + search: search_result.report, + operand_bits: semantics.operand_bits, + input_width: training.input_width, + output_width: training.output_width, + gate_count: circuit.gates.len(), + circuit_sha256: sha256_hex(synthesized.netlist.as_bytes()), + training_scalar, + training_packed, + exhaustive_cases, + exhaustive_mismatches, + prediction_rows: test_inputs.rows.len(), + prediction_sha256, + expected_commitment_sha256, + commitment_matches, + }; + Ok(MdlLearnResult { + circuit: synthesized.netlist, + prediction_csv, + test_inputs, + report, + }) +} + +fn require_perfect_training( + metrics: &VerificationMetrics, + backend: &str, +) -> Result<(), OccamError> { + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "{backend} training verification matched only {}/{} rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn exhaustively_compare( + circuit: &Circuit, + expression: &Expr, + semantics: ExprSemantics, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + let shift = u32::try_from(circuit.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "MDL exhaustive domain shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "MDL exhaustive domain size", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + + let mut mismatches = 0usize; + let mut input = vec![false; circuit.input_count]; + for packed_input in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed_input & (1usize << bit) != 0; + } + let actual = decode_lsb(&evaluate_with_limits(circuit, &input, limits)?)?; + let x = decode_lsb(&input[..semantics.operand_bits])?; + let y = decode_lsb(&input[semantics.operand_bits..])?; + if actual != expression.evaluate(x, y, semantics)? { + mismatches += 1; + } + } + Ok((cases, mismatches)) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mod.rs new file mode 100644 index 000000000..5c48d1df1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/mod.rs @@ -0,0 +1,20 @@ +mod family; +mod inputs; +mod learner; +mod mdl; +mod prediction; +mod report; + +pub use family::{ArithmeticFamily, CandidateScore, score_candidates}; +pub use inputs::{ + TestInputs, decode_lsb, encode_lsb, parse_commitment, parse_test_inputs, + parse_test_inputs_with_limits, +}; +pub use learner::{LearnRequest, LearnResult, infer_unique_family, learn_instance}; +pub use mdl::{MdlLearnRequest, MdlLearnResult, learn_mdl}; +pub use prediction::{prediction_csv_from_circuit, sha256_hex}; +pub use report::{ + AnySolutionManifest, LearningReport, Manifest, ManifestInstance, MdlLearningReport, + ResearchSolutionManifest, WrittenInstance, load_written_instance, write_instance_artifacts, + write_manifest, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/prediction.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/prediction.rs new file mode 100644 index 000000000..c12c5c0bf --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/prediction.rs @@ -0,0 +1,88 @@ +use sha2::{Digest, Sha256}; + +use crate::{ + Circuit, OccamError, ResourceLimits, TestInputs, evaluate_with_limits, + limits::{checked_add, checked_mul}, +}; + +pub fn prediction_csv_from_circuit( + circuit: &Circuit, + inputs: &TestInputs, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != inputs.input_width { + return Err(OccamError::Validation(format!( + "test input width {} does not match circuit INPUTS {}", + inputs.input_width, circuit.input_count + ))); + } + limits.require( + "prediction output width", + circuit.outputs.len(), + limits.max_output_width, + )?; + let row_bytes = checked_add( + checked_add( + inputs.input_width, + circuit.outputs.len(), + "prediction row bit count", + )?, + 2, + "prediction row bytes", + )?; + let output_bytes = checked_add( + "input,output\n".len(), + checked_mul(row_bytes, inputs.rows.len(), "prediction CSV row bytes")?, + "prediction CSV bytes", + )?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + limits.require("prediction CSV bytes", output_bytes, max_bytes)?; + + let mut csv = String::new(); + csv.try_reserve_exact(output_bytes).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate prediction CSV ({output_bytes} bytes): {error}" + )) + })?; + csv.push_str("input,output\n"); + for row in &inputs.rows { + if row.len() != inputs.input_width { + return Err(OccamError::Validation(format!( + "test input row width {} does not match declared width {}", + row.len(), + inputs.input_width + ))); + } + push_bits(&mut csv, row); + csv.push(','); + push_bits(&mut csv, &evaluate_with_limits(circuit, row, limits)?); + csv.push('\n'); + } + debug_assert_eq!(csv.len(), output_bytes); + Ok(csv) +} + +pub fn sha256_hex(bytes: &[u8]) -> String { + format!("{:x}", Sha256::digest(bytes)) +} + +fn push_bits(output: &mut String, bits: &[bool]) { + output.extend(bits.iter().map(|bit| if *bit { '1' } else { '0' })); +} + +#[cfg(test)] +mod tests { + use crate::{DEFAULT_LIMITS, parse_netlist, parse_test_inputs}; + + use super::*; + + #[test] + fn renders_exact_canonical_bytes() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1\n").unwrap(); + let inputs = parse_test_inputs("input\n00\n10\n").unwrap(); + assert_eq!( + prediction_csv_from_circuit(&circuit, &inputs, &DEFAULT_LIMITS).unwrap(), + "input,output\n00,0\n10,1\n" + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/report.rs new file mode 100644 index 000000000..edc95b791 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/learning/report.rs @@ -0,0 +1,465 @@ +use std::{ + collections::HashSet, + fs::{self, File}, + io::Write, + path::{Path, PathBuf}, +}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + ArithmeticFamily, CandidateScore, MdlSearchReport, OccamError, ResourceLimits, + VerificationMetrics, + learning::{learner::LearnResult, prediction::sha256_hex}, +}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct LearningReport { + pub schema_version: u32, + pub instance: String, + pub selected_family: ArithmeticFamily, + pub operand_bits: usize, + pub input_width: usize, + pub output_width: usize, + pub candidate_scores: Vec, + pub gate_count: usize, + pub circuit_sha256: String, + pub training_scalar: VerificationMetrics, + pub training_packed: VerificationMetrics, + pub exhaustive_cases: usize, + pub exhaustive_mismatches: usize, + pub prediction_rows: usize, + pub prediction_sha256: String, + pub expected_commitment_sha256: Option, + pub commitment_matches: Option, +} + +impl LearningReport { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct MdlLearningReport { + pub schema_version: u32, + pub learner: String, + pub expression: String, + pub description_cost: usize, + pub minimum_unique: bool, + pub equal_cost_expression_count: usize, + pub search: MdlSearchReport, + pub operand_bits: usize, + pub input_width: usize, + pub output_width: usize, + pub gate_count: usize, + pub circuit_sha256: String, + pub training_scalar: VerificationMetrics, + pub training_packed: VerificationMetrics, + pub exhaustive_cases: usize, + pub exhaustive_mismatches: usize, + pub prediction_rows: usize, + pub prediction_sha256: String, + pub expected_commitment_sha256: Option, + pub commitment_matches: Option, +} + +impl MdlLearningReport { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct Manifest { + pub schema_version: u32, + pub solution: String, + pub instances: Vec, +} + +impl Manifest { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ResearchSolutionManifest { + pub schema_version: u32, + pub solution: String, + pub learner: String, + pub baseline_tag: String, + pub instances: Vec, + pub optimization_report_path: String, + pub optimization_report_sha256: String, + pub research_manifest_path: String, + pub research_manifest_sha256: String, +} + +impl ResearchSolutionManifest { + pub fn to_json_pretty(&self) -> Result { + pretty_json(self) + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(untagged)] +pub enum AnySolutionManifest { + V2(ResearchSolutionManifest), + V1(Manifest), +} + +impl AnySolutionManifest { + pub fn from_json(source: &str) -> Result { + let manifest: Self = serde_json::from_str(source).map_err(|error| { + OccamError::Validation(format!("invalid solution manifest JSON: {error}")) + })?; + match &manifest { + Self::V1(value) if value.schema_version == 1 => Ok(manifest), + Self::V2(value) if value.schema_version == 2 => Ok(manifest), + Self::V1(value) => Err(OccamError::Validation(format!( + "unsupported legacy solution manifest schema {}", + value.schema_version + ))), + Self::V2(value) => Err(OccamError::Validation(format!( + "unsupported research solution manifest schema {}", + value.schema_version + ))), + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ManifestInstance { + pub instance: String, + pub family: ArithmeticFamily, + pub gate_count: usize, + pub training_rows: usize, + pub prediction_rows: usize, + pub circuit_path: String, + pub circuit_sha256: String, + pub prediction_path: String, + pub prediction_sha256: String, + pub expected_commitment_sha256: String, + pub report_path: String, + pub report_sha256: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct WrittenInstance { + pub manifest_entry: ManifestInstance, + pub circuit_path: PathBuf, + pub prediction_path: PathBuf, + pub report_path: PathBuf, +} + +pub fn write_instance_artifacts( + output_root: &Path, + instance: &str, + result: &LearnResult, +) -> Result { + validate_instance_name(instance)?; + if result.report.instance != instance { + return Err(OccamError::Validation(format!( + "result instance {} does not match requested artifact name {instance}", + result.report.instance + ))); + } + let expected_commitment = result + .report + .expected_commitment_sha256 + .clone() + .ok_or_else(|| { + OccamError::Validation( + "submission artifacts require an expected commitment SHA-256".into(), + ) + })?; + if result.report.commitment_matches != Some(true) { + return Err(OccamError::Validation( + "submission artifacts require a successful commitment check".into(), + )); + } + let report_json = result.report.to_json_pretty()?; + let circuit_path = output_root.join("circuits").join(format!("{instance}.txt")); + let prediction_path = output_root + .join("predictions") + .join(instance) + .join("test_outputs.csv"); + let report_path = output_root.join("reports").join(format!("{instance}.json")); + for parent in [ + circuit_path.parent().unwrap(), + prediction_path.parent().unwrap(), + report_path.parent().unwrap(), + ] { + create_dir_all(parent)?; + } + + let writes = [ + (&circuit_path, result.circuit.as_bytes()), + (&prediction_path, result.prediction_csv.as_bytes()), + (&report_path, report_json.as_bytes()), + ]; + let temporary_paths: Vec<_> = writes + .iter() + .map(|(path, _)| temporary_path(path)) + .collect(); + let write_result = (|| { + for ((_, contents), temporary) in writes.iter().zip(&temporary_paths) { + write_synced(temporary, contents)?; + } + for ((final_path, _), temporary) in writes.iter().zip(&temporary_paths) { + fs::rename(temporary, final_path).map_err(|source| OccamError::WriteFile { + path: (*final_path).clone(), + source, + })?; + } + Ok(()) + })(); + if write_result.is_err() { + for temporary in &temporary_paths { + let _ = fs::remove_file(temporary); + } + } + write_result?; + + let manifest_entry = ManifestInstance { + instance: instance.to_owned(), + family: result.report.selected_family, + gate_count: result.report.gate_count, + training_rows: result.report.training_scalar.samples, + prediction_rows: result.report.prediction_rows, + circuit_path: format!("circuits/{instance}.txt"), + circuit_sha256: sha256_hex(result.circuit.as_bytes()), + prediction_path: format!("predictions/{instance}/test_outputs.csv"), + prediction_sha256: sha256_hex(result.prediction_csv.as_bytes()), + expected_commitment_sha256: expected_commitment, + report_path: format!("reports/{instance}.json"), + report_sha256: sha256_hex(report_json.as_bytes()), + }; + Ok(WrittenInstance { + manifest_entry, + circuit_path, + prediction_path, + report_path, + }) +} + +pub fn write_manifest( + output_root: &Path, + instances: &[WrittenInstance], +) -> Result { + if instances.is_empty() { + return Err(OccamError::Validation( + "cannot write an empty solution manifest".into(), + )); + } + let mut entries: Vec<_> = instances + .iter() + .map(|instance| instance.manifest_entry.clone()) + .collect(); + entries.sort_by(|lhs, rhs| lhs.instance.cmp(&rhs.instance)); + let mut names = HashSet::new(); + for entry in &entries { + if !names.insert(&entry.instance) { + return Err(OccamError::Validation(format!( + "duplicate manifest instance {}", + entry.instance + ))); + } + } + create_dir_all(output_root)?; + let path = output_root.join("manifest.json"); + let temporary = temporary_path(&path); + let optimization_path = output_root.join("optimization/report.json"); + let research_path = output_root.join("research-manifest.json"); + let encoded = if optimization_path.is_file() && research_path.is_file() { + ResearchSolutionManifest { + schema_version: 2, + solution: "rewrite-it-in-rust".into(), + learner: "mdl-enumerator".into(), + baseline_tag: "v0.2.0".into(), + instances: entries, + optimization_report_path: "optimization/report.json".into(), + optimization_report_sha256: sha256_hex(&fs::read(&optimization_path).map_err( + |source| OccamError::ReadFile { + path: optimization_path, + source, + }, + )?), + research_manifest_path: "research-manifest.json".into(), + research_manifest_sha256: sha256_hex(&fs::read(&research_path).map_err(|source| { + OccamError::ReadFile { + path: research_path, + source, + } + })?), + } + .to_json_pretty()? + } else { + Manifest { + schema_version: 1, + solution: "rewrite-it-in-rust".into(), + instances: entries, + } + .to_json_pretty()? + }; + let result = write_synced(&temporary, encoded.as_bytes()).and_then(|()| { + fs::rename(&temporary, &path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + }) + }); + if result.is_err() { + let _ = fs::remove_file(&temporary); + } + result?; + Ok(path) +} + +pub fn load_written_instance( + output_root: &Path, + instance: &str, + limits: &ResourceLimits, +) -> Result { + validate_instance_name(instance)?; + let circuit_path = output_root.join("circuits").join(format!("{instance}.txt")); + let prediction_path = output_root + .join("predictions") + .join(instance) + .join("test_outputs.csv"); + let report_path = output_root.join("reports").join(format!("{instance}.json")); + let circuit = read_bounded(&circuit_path, limits)?; + let prediction = read_bounded(&prediction_path, limits)?; + let report_bytes = read_bounded(&report_path, limits)?; + let report: LearningReport = serde_json::from_slice(&report_bytes).map_err(|error| { + OccamError::Validation(format!( + "failed to parse learning report {}: {error}", + report_path.display() + )) + })?; + if report.schema_version != 1 { + return Err(OccamError::Validation(format!( + "unsupported learning report schema {} for {instance}", + report.schema_version + ))); + } + if report.instance != instance { + return Err(OccamError::Validation(format!( + "report instance {} does not match {instance}", + report.instance + ))); + } + let circuit_sha256 = sha256_hex(&circuit); + if circuit_sha256 != report.circuit_sha256 { + return Err(OccamError::Validation(format!( + "{instance} circuit hash mismatch: report {}, actual {circuit_sha256}", + report.circuit_sha256 + ))); + } + let prediction_sha256 = sha256_hex(&prediction); + if prediction_sha256 != report.prediction_sha256 { + return Err(OccamError::Validation(format!( + "{instance} prediction hash mismatch: report {}, actual {prediction_sha256}", + report.prediction_sha256 + ))); + } + let expected_commitment_sha256 = + report.expected_commitment_sha256.clone().ok_or_else(|| { + OccamError::Validation(format!( + "{instance} report has no expected commitment SHA-256" + )) + })?; + if report.commitment_matches != Some(true) || prediction_sha256 != expected_commitment_sha256 { + return Err(OccamError::Validation(format!( + "{instance} report does not prove a matching prediction commitment" + ))); + } + let manifest_entry = ManifestInstance { + instance: instance.to_owned(), + family: report.selected_family, + gate_count: report.gate_count, + training_rows: report.training_scalar.samples, + prediction_rows: report.prediction_rows, + circuit_path: format!("circuits/{instance}.txt"), + circuit_sha256, + prediction_path: format!("predictions/{instance}/test_outputs.csv"), + prediction_sha256, + expected_commitment_sha256, + report_path: format!("reports/{instance}.json"), + report_sha256: sha256_hex(&report_bytes), + }; + Ok(WrittenInstance { + manifest_entry, + circuit_path, + prediction_path, + report_path, + }) +} + +fn validate_instance_name(instance: &str) -> Result<(), OccamError> { + let suffix = instance.strip_prefix("mystery-").ok_or_else(|| { + OccamError::Validation(format!( + "instance name {instance:?} must match mystery-[A-Z]" + )) + })?; + if suffix.len() != 1 || !suffix.as_bytes()[0].is_ascii_uppercase() { + return Err(OccamError::Validation(format!( + "instance name {instance:?} must match mystery-[A-Z]" + ))); + } + Ok(()) +} + +fn pretty_json(value: &impl Serialize) -> Result { + serde_json::to_string_pretty(value) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) +} + +fn temporary_path(path: &Path) -> PathBuf { + let file_name = path.file_name().and_then(|name| name.to_str()).unwrap(); + path.with_file_name(format!(".{file_name}.{}.tmp-occam71", std::process::id())) +} + +fn create_dir_all(path: &Path) -> Result<(), OccamError> { + fs::create_dir_all(path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +fn read_bounded(path: &Path, limits: &ResourceLimits) -> Result, OccamError> { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + if metadata.len() > limits.max_source_bytes as u64 { + return Err(OccamError::ResourceLimit { + resource: "solution artifact bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: limits.max_source_bytes, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn write_synced(path: &Path, contents: &[u8]) -> Result<(), OccamError> { + let mut file = File::create(path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + })?; + file.write_all(contents) + .and_then(|()| file.sync_all()) + .map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/lib.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/lib.rs new file mode 100644 index 000000000..1d8472ff5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/lib.rs @@ -0,0 +1,82 @@ +pub mod benchmark; +pub mod circuit; +pub mod compiled; +pub mod dataset; +mod dataset_scan; +pub mod error; +pub mod expression; +pub mod generate; +pub mod learning; +pub mod limits; +pub mod logic; +pub mod metrics; +pub mod netlist; +pub mod optimization; +pub mod optimize; +pub mod packed; +pub mod reference; +pub mod research; +pub mod scalar; +pub mod synthesis; + +pub use benchmark::{BenchmarkBackend, BenchmarkReport, TimingStatistics, run_benchmark}; +pub use circuit::{Circuit, Gate, GateOp, Operand, Source}; +pub use compiled::{ + CompiledCircuit, verify_compiled_prepacked, verify_compiled_prepacked_with_limits, +}; +pub use dataset::{Dataset, Sample, parse_dataset, parse_dataset_with_limits}; +pub use error::OccamError; +pub use expression::{ + BinaryOp, CostSearchStats, Expr, ExprSemantics, MdlSearchConfig, MdlSearchReport, + MdlSearchResult, SearchTermination, SemanticKey, compile_expression, evaluate_rows, + parse_expression, search_mdl, +}; +pub use generate::{ArithmeticOperation, generate_dataset, generate_dataset_with_limits}; +pub use learning::{ + AnySolutionManifest, ArithmeticFamily, CandidateScore, LearnRequest, LearnResult, + LearningReport, Manifest, ManifestInstance, MdlLearnRequest, MdlLearnResult, MdlLearningReport, + ResearchSolutionManifest, TestInputs, WrittenInstance, decode_lsb, encode_lsb, + infer_unique_family, learn_instance, learn_mdl, load_written_instance, parse_commitment, + parse_test_inputs, parse_test_inputs_with_limits, prediction_csv_from_circuit, + score_candidates, sha256_hex, write_instance_artifacts, write_manifest, +}; +pub use limits::{DEFAULT_LIMITS, ResourceLimits}; +pub use logic::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, MappedNetwork, circuit_to_blif, compare_circuits_exhaustively, + optimize_with_abc, parse_mapped_blif, +}; +pub use metrics::{VerificationMetrics, verify, verify_with_limits}; +pub use netlist::{parse_netlist, parse_netlist_with_limits}; +pub use optimization::{ + CircuitWindow, PeepholeAttemptReport, PeepholeBoundReport, PeepholeConfig, + PeepholeOptimizationReport, PeepholeOptimizationResult, WindowConfig, extract_windows, + optimize_peepholes, rewrite_with_candidate, +}; +pub use optimize::{CircuitBuilder, Signal, SynthesizedCircuit}; +pub use packed::{ + PackedDataset, pack_dataset, pack_dataset_with_limits, parse_packed_dataset, + parse_packed_dataset_with_limits, verify_packed, verify_prepacked, + verify_prepacked_interpreted, verify_prepacked_interpreted_with_limits, + verify_prepacked_reference, verify_prepacked_with_limits, +}; +pub use reference::{ + ripple_carry_adder, ripple_carry_adder_with_limits, shift_add_multiplier, + shift_add_multiplier_with_limits, synthesize_family, synthesize_family_with_limits, +}; +pub use research::{ + AbcDontCareLearner, BddOrder, BddResult, EvolutionConfig, EvolutionResult, EvolutionTraceEntry, + ExperimentConfig, GrammarEvolutionLearner, LearnedHypothesis, LearnerFailure, + MemorizationLearner, ObservedTask, OracleTask, ResearchLearner, ResearchMethod, ResearchTools, + RobddLearner, SEMANTIC_PROJECTION_EXCLUDED_FIELDS, SatCegisLearner, SemanticTrialRecord, Split, + TaskClass, TaskManifest, TrialBudget, TrialKey, TrialRecord, TrialStatus, build_robdd, + default_adapters, evolve, evolve_with_budget, expected_trial_keys, load_experiment_config, + official_and_synthetic_tasks, peak_rss_bytes, render_dataset, render_partial_pla, + render_semantic_jsonl, run_experiment, run_isolated_experiment, run_measured_trial, run_trial, + run_trial_with_tools, semantic_projection, split_task, write_semantic_jsonl, +}; +pub use scalar::{evaluate, evaluate_with_limits}; +pub use synthesis::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisLimits, SynthesisProblem, + SynthesisStatus, synthesize_minimal, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/limits.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/limits.rs new file mode 100644 index 000000000..c2ed5bded --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/limits.rs @@ -0,0 +1,88 @@ +use crate::OccamError; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct ResourceLimits { + pub max_source_bytes: usize, + pub max_inputs: usize, + pub max_gates: usize, + pub max_outputs: usize, + pub max_samples: usize, + pub max_input_width: usize, + pub max_output_width: usize, + pub max_dataset_bits: usize, + pub max_packed_words: usize, + pub max_generated_bytes: usize, +} + +pub const DEFAULT_LIMITS: ResourceLimits = ResourceLimits { + max_source_bytes: 256 * 1024 * 1024, + max_inputs: 4_096, + max_gates: 2_000_000, + max_outputs: 4_096, + max_samples: 10_000_000, + max_input_width: 4_096, + max_output_width: 4_096, + max_dataset_bits: 256 * 1024 * 1024, + max_packed_words: 32 * 1024 * 1024, + max_generated_bytes: 256 * 1024 * 1024, +}; + +impl ResourceLimits { + pub(crate) fn require( + &self, + resource: &'static str, + requested: usize, + limit: usize, + ) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) + } +} + +pub(crate) fn checked_add( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_add(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +pub(crate) fn checked_mul( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_mul(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +pub(crate) fn checked_sub( + lhs: usize, + rhs: usize, + context: &'static str, +) -> Result { + lhs.checked_sub(rhs) + .ok_or(OccamError::ArithmeticOverflow { context }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn checked_arithmetic_reports_context() { + let error = checked_add(usize::MAX, 1, "test addition").unwrap_err(); + assert!(error.to_string().contains("test addition")); + let error = checked_mul(usize::MAX, 2, "test multiplication").unwrap_err(); + assert!(error.to_string().contains("test multiplication")); + let error = checked_sub(0, 1, "test subtraction").unwrap_err(); + assert!(error.to_string().contains("test subtraction")); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/abc.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/abc.rs new file mode 100644 index 000000000..ba273e9d8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/abc.rs @@ -0,0 +1,576 @@ +use std::{ + fs::{self, File}, + path::{Path, PathBuf}, + process::{Command, Stdio}, + sync::atomic::{AtomicU64, Ordering}, + thread, + time::{Duration, Instant}, +}; + +use crate::{ + Circuit, OccamError, ResourceLimits, circuit_to_blif, evaluate_with_limits, parse_mapped_blif, + parse_netlist_with_limits, sha256_hex, +}; + +use super::report::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, +}; + +const FLOWS: &[(&str, &str)] = &[ + ( + "resyn", + "balance; rewrite; rewrite -z; balance; rewrite -z; balance", + ), + ( + "resyn2", + "balance; rewrite; refactor; balance; rewrite; rewrite -z; balance; refactor -z; rewrite -z; balance", + ), + ( + "resyn3", + "balance; resub; resub -K 6; balance; resub -z; resub -z -K 6; balance; resub -z -K 5; balance", + ), + ( + "compress", + "balance -l; rewrite -l; rewrite -z -l; balance -l; rewrite -z -l; balance -l", + ), + ( + "compress2", + "balance -l; rewrite -l; refactor -l; balance -l; rewrite -l; rewrite -z -l; balance -l; refactor -z -l; rewrite -z -l; balance -l", + ), + ( + "resyn2rs", + "balance; resub -K 6; rewrite; resub -K 6 -N 2; refactor; resub -K 8; balance; resub -K 8 -N 2; rewrite; resub -K 10; rewrite -z; resub -K 10 -N 2; balance", + ), + ("dc2", "dc2"), +]; + +pub(super) const FLOW_NAMES: &[&str] = &[ + "resyn", + "resyn2", + "resyn3", + "compress", + "compress2", + "resyn2rs", + "dc2", +]; + +static TEMPORARY_COUNTER: AtomicU64 = AtomicU64::new(0); + +pub fn optimize_with_abc( + original: &Circuit, + abc_binary: &Path, + config: &AbcOptimizationConfig, + limits: &ResourceLimits, +) -> Result { + validate_config(abc_binary, config)?; + let abc_binary = absolute_existing_path(abc_binary, "ABC executable")?; + let genlib_path = absolute_existing_path(&config.genlib_path, "ABC GENLIB")?; + let original_blif = circuit_to_blif(original, "original")?; + let mut flows = Vec::with_capacity(config.flow_names.len()); + let mut candidates = Vec::new(); + for name in &config.flow_names { + let commands = flow_commands(name).unwrap(); + match run_flow( + original, + &original_blif, + &abc_binary, + &genlib_path, + name, + commands, + config, + limits, + ) { + Ok((report, candidate)) => { + flows.push(report); + if let Some(candidate) = candidate { + candidates.push(candidate); + } + } + Err(error) => flows.push(failed_flow(name, error.to_string())), + } + } + candidates.sort_by(|lhs, rhs| { + (lhs.official_gate_count, &lhs.flow_name, &lhs.circuit_sha256).cmp(&( + rhs.official_gate_count, + &rhs.flow_name, + &rhs.circuit_sha256, + )) + }); + let selected = candidates.first(); + let report = AbcPortfolioReport { + schema_version: 1, + baseline_gate_count: original.gates.len(), + accepted_candidates: candidates.len(), + selected_flow: selected.map(|candidate| candidate.flow_name.clone()), + selected_gate_count: selected.map(|candidate| candidate.official_gate_count), + selected_circuit_sha256: selected.map(|candidate| candidate.circuit_sha256.clone()), + flows, + }; + Ok(AbcOptimizationResult { report, candidates }) +} + +pub(crate) fn synthesize_partial_with_abc( + pla: &str, + abc_binary: &Path, + genlib_path: &Path, + command_limits: &ExternalCommandLimits, + limits: &ResourceLimits, +) -> Result { + let abc_binary = absolute_existing_path(abc_binary, "ABC executable")?; + let genlib_path = absolute_existing_path(genlib_path, "ABC GENLIB")?; + limits.require( + "partial PLA source bytes", + pla.len(), + limits.max_source_bytes, + )?; + let temporary = TemporaryDirectory::new("occam71-partial-abc")?; + fs::write(temporary.path.join("observed.pla"), pla).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("observed.pla"), + source, + } + })?; + fs::copy(genlib_path, temporary.path.join("occam.genlib")).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("occam.genlib"), + source, + } + })?; + let script = "\ +read_pla observed.pla +espresso +strash +dc2 +read_library occam.genlib +map -a +write_blif hypothesis.blif +quit +"; + fs::write(temporary.path.join("flow.abc"), script).map_err(|source| OccamError::WriteFile { + path: temporary.path.join("flow.abc"), + source, + })?; + let process = run_bounded_command( + &abc_binary, + &["-f", "flow.abc"], + &temporary.path, + command_limits, + )?; + if !process.success { + let detail = format!( + "{}\n{}", + String::from_utf8_lossy(&process.stdout), + String::from_utf8_lossy(&process.stderr) + ); + return Err(OccamError::Validation(format!( + "partial ABC process failed: {}", + bounded_tail(&detail, 4_096) + ))); + } + let mapped_source = read_bounded( + &temporary.path.join("hypothesis.blif"), + limits.max_source_bytes, + )?; + let mapped_text = std::str::from_utf8(&mapped_source) + .map_err(|error| OccamError::Validation(format!("mapped BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(mapped_text)?; + let netlist = mapped.into_official_netlist()?; + parse_netlist_with_limits(&netlist, limits)?; + Ok(netlist) +} + +fn absolute_existing_path(path: &Path, label: &str) -> Result { + fs::canonicalize(path).map_err(|error| { + OccamError::Validation(format!( + "cannot resolve {label} {}: {error}", + path.display() + )) + }) +} + +pub fn compare_circuits_exhaustively( + lhs: &Circuit, + rhs: &Circuit, + max_inputs: usize, + limits: &ResourceLimits, +) -> Result<(usize, usize), OccamError> { + if lhs.input_count != rhs.input_count || lhs.outputs.len() != rhs.outputs.len() { + return Err(OccamError::Validation(format!( + "circuit shapes differ: lhs {} inputs/{} outputs, rhs {} inputs/{} outputs", + lhs.input_count, + lhs.outputs.len(), + rhs.input_count, + rhs.outputs.len() + ))); + } + if lhs.input_count > max_inputs { + return Err(OccamError::Validation(format!( + "exhaustive circuit comparison supports at most {max_inputs} inputs, got {}", + lhs.input_count + ))); + } + let shift = u32::try_from(lhs.input_count).map_err(|_| OccamError::ArithmeticOverflow { + context: "circuit equivalence shift", + })?; + let cases = 1usize + .checked_shl(shift) + .ok_or(OccamError::ArithmeticOverflow { + context: "circuit equivalence cases", + })?; + limits.require("exhaustive cases", cases, limits.max_samples)?; + let mut input = vec![false; lhs.input_count]; + let mut mismatches = 0usize; + for packed in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed & (1usize << bit) != 0; + } + if evaluate_with_limits(lhs, &input, limits)? != evaluate_with_limits(rhs, &input, limits)? + { + mismatches = mismatches + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "circuit equivalence mismatches", + })?; + } + } + Ok((cases, mismatches)) +} + +#[allow(clippy::too_many_arguments)] +fn run_flow( + original: &Circuit, + original_blif: &str, + abc_binary: &Path, + genlib_path: &Path, + name: &str, + commands: &str, + config: &AbcOptimizationConfig, + limits: &ResourceLimits, +) -> Result<(AbcFlowReport, Option), OccamError> { + let temporary = TemporaryDirectory::new("occam71-abc")?; + fs::write(temporary.path.join("original.blif"), original_blif).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("original.blif"), + source, + } + })?; + fs::copy(genlib_path, temporary.path.join("occam.genlib")).map_err(|source| { + OccamError::WriteFile { + path: temporary.path.join("occam.genlib"), + source, + } + })?; + let script = format!( + "\ +read_blif original.blif +strash +{commands} +read_library occam.genlib +map -a +write_blif candidate.blif +cec original.blif candidate.blif +quit +" + ); + fs::write(temporary.path.join("flow.abc"), script).map_err(|source| OccamError::WriteFile { + path: temporary.path.join("flow.abc"), + source, + })?; + let process = run_bounded_command( + abc_binary, + &["-f", "flow.abc"], + &temporary.path, + &config.command_limits, + )?; + let stdout = normalize_abc_output(&process.stdout); + let stderr = normalize_abc_output(&process.stderr); + let stdout_sha256 = sha256_hex(stdout.as_bytes()); + let stderr_sha256 = sha256_hex(stderr.as_bytes()); + let combined = format!("{stdout}\n{stderr}"); + let diagnostic_tail = bounded_tail(&combined, 4_096); + if !process.success { + return Ok(( + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "process-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }, + None, + )); + } + let abc_cec_equivalent = combined.contains("Networks are equivalent"); + if !abc_cec_equivalent { + return Ok(( + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "cec-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }, + None, + )); + } + let mapped_path = temporary.path.join("candidate.blif"); + let mapped_source = read_bounded(&mapped_path, limits.max_source_bytes)?; + let mapped_text = std::str::from_utf8(&mapped_source) + .map_err(|error| OccamError::Validation(format!("mapped BLIF is not UTF-8: {error}")))?; + let mapped = parse_mapped_blif(mapped_text)?; + let netlist = mapped.into_official_netlist()?; + let candidate_circuit = parse_netlist_with_limits(&netlist, limits)?; + let (cases, mismatches) = compare_circuits_exhaustively( + original, + &candidate_circuit, + config.max_exhaustive_inputs, + limits, + )?; + let circuit_sha256 = sha256_hex(netlist.as_bytes()); + let accepted = mismatches == 0; + let report = AbcFlowReport { + name: name.to_owned(), + accepted, + status: if accepted { + "accepted".into() + } else { + "rust-mismatch".into() + }, + abc_cec_equivalent, + rust_exhaustive_cases: Some(cases), + rust_exhaustive_mismatches: Some(mismatches), + official_gate_count: Some(candidate_circuit.gates.len()), + circuit_sha256: Some(circuit_sha256), + stdout_sha256, + stderr_sha256, + diagnostic_tail, + }; + let candidate = accepted.then(|| { + AbcCandidate::new( + name.to_owned(), + netlist, + candidate_circuit.gates.len(), + cases, + mismatches, + ) + }); + Ok((report, candidate)) +} + +fn normalize_abc_output(bytes: &[u8]) -> String { + let decoded = String::from_utf8_lossy(bytes); + let mut normalized = String::new(); + for line in decoded.lines() { + if let Some(time) = line.find("Time =") { + normalized.push_str(&line[..time]); + normalized.push_str("Time = "); + } else { + normalized.push_str(line); + } + normalized.push('\n'); + } + normalized +} + +fn validate_config(abc_binary: &Path, config: &AbcOptimizationConfig) -> Result<(), OccamError> { + if !abc_binary.is_file() { + return Err(OccamError::Validation(format!( + "ABC executable is absent: {}", + abc_binary.display() + ))); + } + if !config.genlib_path.is_file() { + return Err(OccamError::Validation(format!( + "ABC GENLIB is absent: {}", + config.genlib_path.display() + ))); + } + if config.flow_names.is_empty() { + return Err(OccamError::Validation( + "ABC flow selection must not be empty".into(), + )); + } + for name in &config.flow_names { + if flow_commands(name).is_none() { + return Err(OccamError::Validation(format!("unknown ABC flow {name:?}"))); + } + } + if config.max_exhaustive_inputs == 0 + || config.command_limits.timeout.is_zero() + || config.command_limits.max_stdout_bytes == 0 + || config.command_limits.max_stderr_bytes == 0 + { + return Err(OccamError::Validation( + "ABC process and equivalence limits must be positive".into(), + )); + } + Ok(()) +} + +fn flow_commands(name: &str) -> Option<&'static str> { + FLOWS + .iter() + .find_map(|(candidate, commands)| (*candidate == name).then_some(*commands)) +} + +fn failed_flow(name: &str, detail: String) -> AbcFlowReport { + AbcFlowReport { + name: name.to_owned(), + accepted: false, + status: "validation-failed".into(), + abc_cec_equivalent: false, + rust_exhaustive_cases: None, + rust_exhaustive_mismatches: None, + official_gate_count: None, + circuit_sha256: None, + stdout_sha256: sha256_hex(&[]), + stderr_sha256: sha256_hex(detail.as_bytes()), + diagnostic_tail: bounded_tail(&detail, 4_096), + } +} + +struct ProcessResult { + success: bool, + stdout: Vec, + stderr: Vec, +} + +fn run_bounded_command( + program: &Path, + arguments: &[&str], + current_dir: &Path, + limits: &ExternalCommandLimits, +) -> Result { + let stdout_path = current_dir.join("stdout.log"); + let stderr_path = current_dir.join("stderr.log"); + let stdout = File::create(&stdout_path).map_err(|source| OccamError::WriteFile { + path: stdout_path.clone(), + source, + })?; + let stderr = File::create(&stderr_path).map_err(|source| OccamError::WriteFile { + path: stderr_path.clone(), + source, + })?; + let mut child = Command::new(program) + .args(arguments) + .current_dir(current_dir) + .stdin(Stdio::null()) + .stdout(Stdio::from(stdout)) + .stderr(Stdio::from(stderr)) + .spawn() + .map_err(|error| { + OccamError::Validation(format!( + "failed to spawn bounded command {}: {error}", + program.display() + )) + })?; + let started = Instant::now(); + let status = loop { + if let Some(status) = child + .try_wait() + .map_err(|error| OccamError::Validation(format!("command wait failed: {error}")))? + { + break status; + } + let stdout_bytes = file_size(&stdout_path)?; + let stderr_bytes = file_size(&stderr_path)?; + if stdout_bytes > limits.max_stdout_bytes || stderr_bytes > limits.max_stderr_bytes { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::ResourceLimit { + resource: "external command output bytes", + requested: stdout_bytes.max(stderr_bytes), + limit: limits.max_stdout_bytes.max(limits.max_stderr_bytes), + }); + } + if started.elapsed() >= limits.timeout { + let _ = child.kill(); + let _ = child.wait(); + return Err(OccamError::Validation(format!( + "external command timed out after {} milliseconds", + limits.timeout.as_millis() + ))); + } + thread::sleep(Duration::from_millis(10)); + }; + let stdout = read_bounded(&stdout_path, limits.max_stdout_bytes)?; + let stderr = read_bounded(&stderr_path, limits.max_stderr_bytes)?; + Ok(ProcessResult { + success: status.success(), + stdout, + stderr, + }) +} + +fn file_size(path: &Path) -> Result { + let bytes = fs::metadata(path) + .map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })? + .len(); + usize::try_from(bytes).map_err(|_| OccamError::ArithmeticOverflow { + context: "external command output size", + }) +} + +fn read_bounded(path: &Path, max_bytes: usize) -> Result, OccamError> { + let bytes = file_size(path)?; + if bytes > max_bytes { + return Err(OccamError::ResourceLimit { + resource: "external command file bytes", + requested: bytes, + limit: max_bytes, + }); + } + fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + }) +} + +fn bounded_tail(value: &str, max_bytes: usize) -> String { + if value.len() <= max_bytes { + return value.to_owned(); + } + let mut start = value.len() - max_bytes; + while !value.is_char_boundary(start) { + start += 1; + } + value[start..].to_owned() +} + +struct TemporaryDirectory { + path: PathBuf, +} + +impl TemporaryDirectory { + fn new(prefix: &str) -> Result { + let counter = TEMPORARY_COUNTER.fetch_add(1, Ordering::Relaxed); + let path = std::env::temp_dir().join(format!("{prefix}-{}-{counter}", std::process::id())); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for TemporaryDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/blif.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/blif.rs new file mode 100644 index 000000000..299162d2a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/blif.rs @@ -0,0 +1,83 @@ +use crate::{Circuit, GateOp, OccamError, Operand, Source}; + +pub fn circuit_to_blif(circuit: &Circuit, model: &str) -> Result { + validate_model_name(model)?; + if circuit.input_count == 0 || circuit.outputs.is_empty() { + return Err(OccamError::Validation( + "BLIF export requires at least one input and output".into(), + )); + } + let mut output = String::new(); + output.push_str(&format!(".model {model}\n")); + output.push_str(".inputs"); + for input in 0..circuit.input_count { + output.push_str(&format!(" i{input}")); + } + output.push('\n'); + output.push_str(".outputs"); + for index in 0..circuit.outputs.len() { + output.push_str(&format!(" o{index}")); + } + output.push('\n'); + + for (index, gate) in circuit.gates.iter().enumerate() { + if gate.output != index { + return Err(OccamError::Validation(format!( + "BLIF export requires dense gate outputs, gate {index} has output {}", + gate.output + ))); + } + let lhs = export_operand(&mut output, gate.lhs, &format!("g{index}a")); + let rhs = export_operand(&mut output, gate.rhs, &format!("g{index}b")); + output.push_str(&format!(".names {lhs} {rhs} n{index}\n")); + output.push_str(truth_table(gate.op)); + } + for (index, operand) in circuit.outputs.iter().enumerate() { + let source = source_name(operand.source); + output.push_str(&format!(".names {source} o{index}\n")); + output.push_str(if operand.inverted { "0 1\n" } else { "1 1\n" }); + } + output.push_str(".end\n"); + Ok(output) +} + +fn export_operand(output: &mut String, operand: Operand, alias: &str) -> String { + let source = source_name(operand.source); + if operand.inverted { + output.push_str(&format!(".names {source} {alias}\n0 1\n")); + alias.to_owned() + } else { + source + } +} + +fn source_name(source: Source) -> String { + match source { + Source::Input(index) => format!("i{index}"), + Source::Wire(index) => format!("n{index}"), + } +} + +fn truth_table(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "11 1\n", + GateOp::Or => "1- 1\n-1 1\n", + GateOp::Xor => "10 1\n01 1\n", + GateOp::Nand => "0- 1\n-0 1\n", + GateOp::Nor => "00 1\n", + GateOp::Xnor => "00 1\n11 1\n", + } +} + +fn validate_model_name(model: &str) -> Result<(), OccamError> { + if model.is_empty() + || !model + .bytes() + .all(|byte| byte.is_ascii_alphanumeric() || byte == b'_') + { + return Err(OccamError::Validation(format!( + "BLIF model name {model:?} must contain only ASCII letters, digits, and underscores" + ))); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/library.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/library.rs new file mode 100644 index 000000000..d2ef87034 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/library.rs @@ -0,0 +1,23 @@ +use crate::GateOp; + +pub(super) enum Cell { + Constant(bool), + Alias { inverted: bool }, + Gate(GateOp), +} + +pub(super) fn cell_by_name(name: &str) -> Option { + match name { + "ZERO" => Some(Cell::Constant(false)), + "ONE" => Some(Cell::Constant(true)), + "INV" => Some(Cell::Alias { inverted: true }), + "BUF" => Some(Cell::Alias { inverted: false }), + "AND2" => Some(Cell::Gate(GateOp::And)), + "OR2" => Some(Cell::Gate(GateOp::Or)), + "NAND2" => Some(Cell::Gate(GateOp::Nand)), + "NOR2" => Some(Cell::Gate(GateOp::Nor)), + "XOR2" => Some(Cell::Gate(GateOp::Xor)), + "XNOR2" => Some(Cell::Gate(GateOp::Xnor)), + _ => None, + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mapped.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mapped.rs new file mode 100644 index 000000000..b61ffc237 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mapped.rs @@ -0,0 +1,522 @@ +use std::collections::{HashMap, HashSet}; + +use crate::{GateOp, OccamError, Operand, Source}; + +use super::library::{Cell, cell_by_name}; + +#[derive(Clone, Debug, Eq, PartialEq)] +enum Definition { + Constant(bool), + Alias { + source: String, + inverted: bool, + }, + Gate { + operation: GateOp, + lhs: String, + rhs: String, + }, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct MappedNetwork { + model: String, + inputs: Vec, + outputs: Vec, + definitions: HashMap, +} + +pub fn parse_mapped_blif(source: &str) -> Result { + let lines = logical_lines(source)?; + let mut model = None; + let mut inputs = None; + let mut outputs = None; + let mut definitions = HashMap::new(); + let mut ended = false; + let mut index = 0usize; + while index < lines.len() { + let line = &lines[index]; + let tokens = line.split_whitespace().collect::>(); + let directive = tokens.first().copied().unwrap_or_default(); + match directive { + ".model" => { + if model.is_some() || tokens.len() != 2 { + return Err(invalid(index + 1, "expected exactly one '.model NAME'")); + } + model = Some(tokens[1].to_owned()); + } + ".inputs" => { + if inputs.is_some() || tokens.len() < 2 { + return Err(invalid(index + 1, "invalid or duplicate .inputs")); + } + inputs = Some(unique_names(&tokens[1..], index + 1, "input")?); + } + ".outputs" => { + if outputs.is_some() || tokens.len() < 2 { + return Err(invalid(index + 1, "invalid or duplicate .outputs")); + } + outputs = Some(unique_names(&tokens[1..], index + 1, "output")?); + } + ".gate" => parse_gate(&tokens, index + 1, &mut definitions)?, + ".names" => { + if tokens.len() < 2 { + return Err(invalid(index + 1, ".names requires an output net")); + } + let header = &tokens[1..]; + let mut rows = Vec::new(); + while index + 1 < lines.len() && !lines[index + 1].starts_with('.') { + index += 1; + rows.push(lines[index].clone()); + } + parse_names(header, &rows, index + 1, &mut definitions)?; + } + ".end" => { + if tokens.len() != 1 || ended { + return Err(invalid(index + 1, "invalid or duplicate .end")); + } + ended = true; + if index + 1 != lines.len() { + return Err(invalid(index + 1, "content follows .end")); + } + } + ".latch" | ".subckt" => { + return Err(invalid( + index + 1, + "sequential logic and subcircuits are forbidden", + )); + } + _ => { + return Err(invalid( + index + 1, + &format!("unknown directive {directive}"), + )); + } + } + index += 1; + } + + let model = model.ok_or_else(|| invalid(0, "missing .model"))?; + let inputs = inputs.ok_or_else(|| invalid(0, "missing .inputs"))?; + let outputs = outputs.ok_or_else(|| invalid(0, "missing .outputs"))?; + if !ended { + return Err(invalid(0, "missing .end")); + } + let input_set = inputs.iter().cloned().collect::>(); + if input_set.len() != inputs.len() { + return Err(invalid(0, "duplicate input name")); + } + if definitions.keys().any(|name| input_set.contains(name)) { + return Err(invalid(0, "a mapped net redefines an input")); + } + let network = MappedNetwork { + model, + inputs, + outputs, + definitions, + }; + network.validate_dependencies()?; + Ok(network) +} + +impl MappedNetwork { + pub fn model(&self) -> &str { + &self.model + } + + pub fn official_gate_count(&self) -> usize { + self.definitions + .values() + .filter(|definition| matches!(definition, Definition::Gate { .. })) + .count() + } + + pub fn into_official_netlist(&self) -> Result { + let mut builder = OfficialBuilder::new(self); + let outputs = self + .outputs + .iter() + .map(|output| builder.resolve(output)) + .collect::, _>>()?; + if outputs.is_empty() { + return Err(OccamError::Validation( + "mapped network has no outputs".into(), + )); + } + let mut source = format!("INPUTS {}\n", self.inputs.len()); + source.push_str(&builder.lines.join("\n")); + if !builder.lines.is_empty() { + source.push('\n'); + } + source.push_str("OUTPUTS"); + for output in outputs { + source.push(' '); + source.push_str(&render_operand(output)); + } + source.push('\n'); + Ok(source) + } + + fn validate_dependencies(&self) -> Result<(), OccamError> { + let inputs = self.inputs.iter().cloned().collect::>(); + let mut state = HashMap::::new(); + for output in &self.outputs { + visit(output, &inputs, &self.definitions, &mut state)?; + } + Ok(()) + } +} + +struct OfficialBuilder<'a> { + network: &'a MappedNetwork, + input_indices: HashMap, + resolved: HashMap, + visiting: HashSet, + lines: Vec, + zero: Option, +} + +impl<'a> OfficialBuilder<'a> { + fn new(network: &'a MappedNetwork) -> Self { + Self { + network, + input_indices: network + .inputs + .iter() + .enumerate() + .map(|(index, name)| (name.clone(), index)) + .collect(), + resolved: HashMap::new(), + visiting: HashSet::new(), + lines: Vec::new(), + zero: None, + } + } + + fn resolve(&mut self, net: &str) -> Result { + if let Some(index) = self.input_indices.get(net) { + return Ok(Operand { + source: Source::Input(*index), + inverted: false, + }); + } + if let Some(operand) = self.resolved.get(net) { + return Ok(*operand); + } + if !self.visiting.insert(net.to_owned()) { + return Err(OccamError::Validation(format!( + "mapped BLIF contains a cycle through {net}" + ))); + } + let definition = self.network.definitions.get(net).ok_or_else(|| { + OccamError::Validation(format!("mapped BLIF references undefined net {net}")) + })?; + let operand = match definition { + Definition::Constant(value) => { + let zero = self.zero()?; + Operand { + inverted: *value, + ..zero + } + } + Definition::Alias { source, inverted } => { + let mut operand = self.resolve(source)?; + operand.inverted ^= *inverted; + operand + } + Definition::Gate { + operation, + lhs, + rhs, + } => { + let lhs = self.resolve(lhs)?; + let rhs = self.resolve(rhs)?; + let wire = self.lines.len(); + self.lines.push(format!( + "w{} = {} {} {}", + wire + 1, + operation_name(*operation), + render_operand(lhs), + render_operand(rhs) + )); + Operand { + source: Source::Wire(wire), + inverted: false, + } + } + }; + self.visiting.remove(net); + self.resolved.insert(net.to_owned(), operand); + Ok(operand) + } + + fn zero(&mut self) -> Result { + if let Some(zero) = self.zero { + return Ok(zero); + } + if self.network.inputs.is_empty() { + return Err(OccamError::Validation( + "cannot lower a constant network without an input".into(), + )); + } + let wire = self.lines.len(); + self.lines.push(format!("w{} = XOR x1 x1", wire + 1)); + let zero = Operand { + source: Source::Wire(wire), + inverted: false, + }; + self.zero = Some(zero); + Ok(zero) + } +} + +fn parse_gate( + tokens: &[&str], + line: usize, + definitions: &mut HashMap, +) -> Result<(), OccamError> { + if tokens.len() < 3 { + return Err(invalid(line, ".gate requires a cell and pin assignments")); + } + let cell = cell_by_name(tokens[1]) + .ok_or_else(|| invalid(line, &format!("unknown mapped cell {}", tokens[1])))?; + let mut pins = HashMap::new(); + for assignment in &tokens[2..] { + let (pin, net) = assignment + .split_once('=') + .ok_or_else(|| invalid(line, "gate pins must use PIN=net"))?; + if pin.is_empty() || net.is_empty() || pins.insert(pin, net).is_some() { + return Err(invalid(line, "invalid or duplicate gate pin")); + } + } + let output = take_pin(&mut pins, &["O", "Y"], line, "output")?; + let definition = match cell { + Cell::Constant(value) => Definition::Constant(value), + Cell::Alias { inverted } => Definition::Alias { + source: take_pin(&mut pins, &["a", "A", "i", "I"], line, "input")?.to_owned(), + inverted, + }, + Cell::Gate(operation) => Definition::Gate { + operation, + lhs: take_pin(&mut pins, &["a", "A"], line, "a")?.to_owned(), + rhs: take_pin(&mut pins, &["b", "B"], line, "b")?.to_owned(), + }, + }; + if !pins.is_empty() { + return Err(invalid(line, "mapped gate has unknown pins")); + } + insert_definition(definitions, output.to_owned(), definition, line) +} + +fn take_pin<'a>( + pins: &mut HashMap<&'a str, &'a str>, + choices: &[&str], + line: usize, + label: &str, +) -> Result<&'a str, OccamError> { + let matching = pins + .keys() + .copied() + .filter(|pin| choices.contains(pin)) + .collect::>(); + if matching.len() > 1 { + return Err(invalid(line, &format!("duplicate {label} pin aliases"))); + } + let key = matching + .first() + .ok_or_else(|| invalid(line, &format!("missing {label} pin")))?; + Ok(pins.remove(key).unwrap()) +} + +fn parse_names( + header: &[&str], + rows: &[String], + line: usize, + definitions: &mut HashMap, +) -> Result<(), OccamError> { + let output = header.last().unwrap().to_string(); + let inputs = &header[..header.len() - 1]; + if inputs.len() > 2 { + return Err(invalid(line, ".names supports at most two inputs")); + } + let truth = truth_vector(inputs.len(), rows, line)?; + let definition = match inputs.len() { + 0 => Definition::Constant(truth[0]), + 1 if truth == [false, true] => Definition::Alias { + source: inputs[0].to_owned(), + inverted: false, + }, + 1 if truth == [true, false] => Definition::Alias { + source: inputs[0].to_owned(), + inverted: true, + }, + 1 => { + return Err(invalid( + line, + "one-input .names must be buffer, inverter, or constant", + )); + } + 2 => Definition::Gate { + operation: operation_from_truth(&truth) + .ok_or_else(|| invalid(line, "two-input .names is outside official gate basis"))?, + lhs: inputs[0].to_owned(), + rhs: inputs[1].to_owned(), + }, + _ => unreachable!(), + }; + insert_definition(definitions, output, definition, line) +} + +fn truth_vector(arity: usize, rows: &[String], line: usize) -> Result, OccamError> { + let mut truth = vec![false; 1usize << arity]; + for row in rows { + let fields = row.split_whitespace().collect::>(); + let (cube, value) = if arity == 0 { + if fields.len() != 1 { + return Err(invalid(line, "constant .names rows contain only 0 or 1")); + } + ("", fields[0]) + } else { + if fields.len() != 2 { + return Err(invalid(line, ".names row must contain cube and output")); + } + (fields[0], fields[1]) + }; + if value != "1" || cube.len() != arity { + return Err(invalid(line, "only on-set .names cubes are accepted")); + } + for (assignment, result) in truth.iter_mut().enumerate() { + if cube.bytes().enumerate().all(|(bit, value)| match value { + b'0' => assignment & (1 << (arity - bit - 1)) == 0, + b'1' => assignment & (1 << (arity - bit - 1)) != 0, + b'-' => true, + _ => false, + }) { + *result = true; + } + } + } + Ok(truth) +} + +fn operation_from_truth(truth: &[bool]) -> Option { + match truth { + [false, false, false, true] => Some(GateOp::And), + [false, true, true, true] => Some(GateOp::Or), + [false, true, true, false] => Some(GateOp::Xor), + [true, true, true, false] => Some(GateOp::Nand), + [true, false, false, false] => Some(GateOp::Nor), + [true, false, false, true] => Some(GateOp::Xnor), + _ => None, + } +} + +fn insert_definition( + definitions: &mut HashMap, + output: String, + definition: Definition, + line: usize, +) -> Result<(), OccamError> { + if output.is_empty() || definitions.insert(output.clone(), definition).is_some() { + return Err(invalid(line, &format!("net {output:?} is defined twice"))); + } + Ok(()) +} + +fn visit( + net: &str, + inputs: &HashSet, + definitions: &HashMap, + state: &mut HashMap, +) -> Result<(), OccamError> { + if inputs.contains(net) { + return Ok(()); + } + match state.get(net) { + Some(2) => return Ok(()), + Some(1) => { + return Err(OccamError::Validation(format!( + "mapped BLIF contains a cycle through {net}" + ))); + } + _ => {} + } + state.insert(net.to_owned(), 1); + let definition = definitions.get(net).ok_or_else(|| { + OccamError::Validation(format!("mapped BLIF references undefined net {net}")) + })?; + match definition { + Definition::Constant(_) => {} + Definition::Alias { source, .. } => visit(source, inputs, definitions, state)?, + Definition::Gate { lhs, rhs, .. } => { + visit(lhs, inputs, definitions, state)?; + visit(rhs, inputs, definitions, state)?; + } + } + state.insert(net.to_owned(), 2); + Ok(()) +} + +fn logical_lines(source: &str) -> Result, OccamError> { + let mut lines = Vec::new(); + let mut pending = String::new(); + for raw in source.lines() { + let line = raw.split('#').next().unwrap_or_default().trim(); + if line.is_empty() { + continue; + } + let continued = line.ends_with('\\'); + let fragment = line.strip_suffix('\\').unwrap_or(line).trim_end(); + if !pending.is_empty() { + pending.push(' '); + } + pending.push_str(fragment); + if !continued { + lines.push(std::mem::take(&mut pending)); + } + } + if !pending.is_empty() { + return Err(OccamError::Validation( + "mapped BLIF ends with an unfinished continuation".into(), + )); + } + Ok(lines) +} + +fn unique_names(tokens: &[&str], line: usize, kind: &str) -> Result, OccamError> { + let names = tokens + .iter() + .map(|name| (*name).to_owned()) + .collect::>(); + let unique = names.iter().collect::>(); + if names.iter().any(String::is_empty) || unique.len() != names.len() { + return Err(invalid(line, &format!("duplicate or empty {kind} name"))); + } + Ok(names) +} + +fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +fn render_operand(operand: Operand) -> String { + let name = match operand.source { + Source::Input(index) => format!("x{}", index + 1), + Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} + +fn invalid(line: usize, detail: &str) -> OccamError { + OccamError::parse("mapped BLIF", line, detail) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mod.rs new file mode 100644 index 000000000..9500b4608 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/mod.rs @@ -0,0 +1,14 @@ +mod abc; +mod blif; +mod library; +mod mapped; +mod report; + +pub(crate) use abc::synthesize_partial_with_abc; +pub use abc::{compare_circuits_exhaustively, optimize_with_abc}; +pub use blif::circuit_to_blif; +pub use mapped::{MappedNetwork, parse_mapped_blif}; +pub use report::{ + AbcCandidate, AbcFlowReport, AbcOptimizationConfig, AbcOptimizationResult, AbcPortfolioReport, + ExternalCommandLimits, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/report.rs new file mode 100644 index 000000000..3c5e75c7c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/logic/report.rs @@ -0,0 +1,139 @@ +use std::{path::PathBuf, time::Duration}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, sha256_hex}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct ExternalCommandLimits { + pub timeout: Duration, + pub max_stdout_bytes: usize, + pub max_stderr_bytes: usize, +} + +impl Default for ExternalCommandLimits { + fn default() -> Self { + Self { + timeout: Duration::from_secs(60), + max_stdout_bytes: 4 * 1024 * 1024, + max_stderr_bytes: 4 * 1024 * 1024, + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcOptimizationConfig { + pub genlib_path: PathBuf, + pub flow_names: Vec, + pub command_limits: ExternalCommandLimits, + pub max_exhaustive_inputs: usize, +} + +impl Default for AbcOptimizationConfig { + fn default() -> Self { + Self { + genlib_path: PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("tools/abc/occam.genlib"), + flow_names: super::abc::FLOW_NAMES + .iter() + .map(|name| (*name).to_owned()) + .collect(), + command_limits: ExternalCommandLimits::default(), + max_exhaustive_inputs: 20, + } + } +} + +impl AbcOptimizationConfig { + pub fn for_tests() -> Self { + Self { + flow_names: vec!["resyn".into()], + command_limits: ExternalCommandLimits { + timeout: Duration::from_secs(20), + max_stdout_bytes: 1024 * 1024, + max_stderr_bytes: 1024 * 1024, + }, + ..Self::default() + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct AbcFlowReport { + pub name: String, + pub accepted: bool, + pub status: String, + pub abc_cec_equivalent: bool, + pub rust_exhaustive_cases: Option, + pub rust_exhaustive_mismatches: Option, + pub official_gate_count: Option, + pub circuit_sha256: Option, + pub stdout_sha256: String, + pub stderr_sha256: String, + pub diagnostic_tail: String, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct AbcPortfolioReport { + pub schema_version: u32, + pub baseline_gate_count: usize, + pub accepted_candidates: usize, + pub selected_flow: Option, + pub selected_gate_count: Option, + pub selected_circuit_sha256: Option, + pub flows: Vec, +} + +impl AbcPortfolioReport { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcCandidate { + pub flow_name: String, + pub netlist: String, + pub official_gate_count: usize, + pub circuit_sha256: String, + pub rust_exhaustive_cases: usize, + pub rust_exhaustive_mismatches: usize, +} + +impl AbcCandidate { + pub(super) fn new( + flow_name: String, + netlist: String, + official_gate_count: usize, + rust_exhaustive_cases: usize, + rust_exhaustive_mismatches: usize, + ) -> Self { + let circuit_sha256 = sha256_hex(netlist.as_bytes()); + Self { + flow_name, + netlist, + official_gate_count, + circuit_sha256, + rust_exhaustive_cases, + rust_exhaustive_mismatches, + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct AbcOptimizationResult { + pub report: AbcPortfolioReport, + pub candidates: Vec, +} + +impl AbcOptimizationResult { + pub fn best_candidate(&self) -> Option<&AbcCandidate> { + self.candidates.first() + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/main.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/main.rs new file mode 100644 index 000000000..7d5e90604 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/main.rs @@ -0,0 +1,865 @@ +use std::{ + fs::{self, File}, + io::Write, + path::{Path, PathBuf}, + time::{Duration, Instant}, +}; + +use clap::{Parser, Subcommand, ValueEnum}; +use occam71_rust::{ + AbcOptimizationConfig, AbcPortfolioReport, ArithmeticOperation, BenchmarkBackend, + DEFAULT_LIMITS, LearnRequest, MdlLearnRequest, MdlSearchConfig, OccamError, PeepholeConfig, + PeepholeOptimizationReport, SynthesisLimits, SynthesisProblem, SynthesisStatus, TrialKey, + WindowConfig, compare_circuits_exhaustively, generate_dataset, learn_instance, learn_mdl, + load_written_instance, optimize_peepholes, optimize_with_abc, pack_dataset, parse_dataset, + parse_netlist, parse_packed_dataset, render_semantic_jsonl, ripple_carry_adder, run_benchmark, + run_isolated_experiment, run_measured_trial, sha256_hex, shift_add_multiplier, + synthesize_minimal, verify, verify_prepacked, write_instance_artifacts, write_manifest, + write_semantic_jsonl, +}; +use serde::Serialize; + +#[derive(Debug, Parser)] +#[command( + name = "occam71-rust", + version, + about = "Rust verifier for #71 Occam's Circuit" +)] +struct Cli { + #[command(subcommand)] + command: Command, +} + +#[derive(Debug, Subcommand)] +enum Command { + /// Verify a circuit against an input/output dataset. + Verify { + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + circuit: PathBuf, + #[arg(long, value_enum, default_value_t = Backend::CrossCheck)] + backend: Backend, + }, + /// Generate a format-compatible ripple-carry adder. + GenerateAdder { + #[arg(long, value_parser = parse_positive_bits)] + bits: usize, + #[arg(long)] + output: Option, + }, + /// Generate a format-compatible shift-and-add multiplier. + GenerateMultiplier { + #[arg(long, value_parser = parse_positive_bits)] + bits: usize, + #[arg(long)] + output: Option, + }, + /// Generate a deterministic disclosed arithmetic dataset. + GenerateDataset { + #[arg(long, value_enum)] + operation: DatasetOperation, + #[arg(long, value_parser = parse_dataset_bits)] + bits: usize, + #[arg(long, value_parser = parse_positive_usize)] + samples: usize, + #[arg(long)] + seed: u64, + #[arg(long)] + output: Option, + }, + /// Benchmark one verification backend after parsing the input files. + Benchmark { + #[arg(long, value_enum)] + backend: BenchmarkBackendArgument, + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + circuit: PathBuf, + #[arg(long, default_value_t = 5)] + warmup: usize, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 30)] + iterations: usize, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 5)] + batches: usize, + #[arg(long)] + json: PathBuf, + }, + /// Exactly synthesize a smallest bounded circuit from a complete truth table. + Synthesize { + #[arg(long)] + dataset: PathBuf, + #[arg(long)] + max_gates: usize, + #[arg(long, default_value_t = 60)] + timeout_seconds: u64, + #[arg(long)] + output: PathBuf, + #[arg(long)] + certificate: PathBuf, + }, + /// Learn one hidden arithmetic family and write validated submission artifacts. + Learn { + #[arg(long)] + instance: String, + #[arg(long)] + train: PathBuf, + #[arg(long)] + test_inputs: PathBuf, + #[arg(long)] + commitment: PathBuf, + #[arg(long)] + output_dir: PathBuf, + }, + /// Learn a minimum-description expression and write its verified artifacts. + LearnMdl { + #[arg(long)] + train: PathBuf, + #[arg(long)] + test_inputs: PathBuf, + #[arg(long)] + commitment: Option, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 8)] + max_description_cost: usize, + #[arg(long, value_parser = parse_positive_u64, default_value_t = 30)] + timeout_seconds: u64, + #[arg(long)] + circuit: PathBuf, + #[arg(long)] + predictions: PathBuf, + #[arg(long)] + report: PathBuf, + }, + /// Optimize one official circuit with the pinned ABC portfolio. + OptimizeCircuit { + #[arg(long)] + circuit: PathBuf, + #[arg(long)] + abc: PathBuf, + #[arg(long)] + output: PathBuf, + #[arg(long)] + report: PathBuf, + #[arg(long, default_value_t = false)] + abc_only: bool, + }, + /// Run exactly one measured Occam research trial. + ExperimentTrial { + #[arg(long)] + config: PathBuf, + #[arg(long)] + tasks: PathBuf, + #[arg(long)] + key_json: String, + #[arg(long)] + output: PathBuf, + #[arg(long)] + abc: Option, + }, + /// Run the complete isolated Occam generalization matrix. + ExperimentRun { + #[arg(long)] + config: PathBuf, + #[arg(long)] + tasks: PathBuf, + #[arg(long = "raw-measured", alias = "raw")] + raw_measured: PathBuf, + #[arg(long)] + semantic: Option, + #[arg(long)] + abc: Option, + #[arg(long, value_parser = parse_positive_usize, default_value_t = 1)] + jobs: usize, + #[arg(long = "check-semantic", alias = "check", default_value_t = false)] + check_semantic: bool, + }, + /// Recompute and write the aggregate A-D solution manifest. + WriteManifest { + #[arg(long)] + output_dir: PathBuf, + }, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum Backend { + Scalar, + Packed, + PackedLegacy, + CrossCheck, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum DatasetOperation { + Add, + Multiply, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq, ValueEnum)] +enum BenchmarkBackendArgument { + Scalar, + Packed, + PackedReference, + PackedInterpreted, + Compiled, +} + +impl From for BenchmarkBackend { + fn from(value: BenchmarkBackendArgument) -> Self { + match value { + BenchmarkBackendArgument::Scalar => Self::Scalar, + BenchmarkBackendArgument::Packed => Self::Packed, + BenchmarkBackendArgument::PackedReference => Self::PackedReference, + BenchmarkBackendArgument::PackedInterpreted => Self::PackedInterpreted, + BenchmarkBackendArgument::Compiled => Self::Compiled, + } + } +} + +impl From for ArithmeticOperation { + fn from(value: DatasetOperation) -> Self { + match value { + DatasetOperation::Add => Self::Add, + DatasetOperation::Multiply => Self::Multiply, + } + } +} + +impl Backend { + fn label(self) -> &'static str { + match self { + Self::Scalar => "scalar", + Self::Packed => "packed", + Self::PackedLegacy => "packed-legacy", + Self::CrossCheck => "cross-check", + } + } +} + +fn parse_positive_bits(value: &str) -> Result { + parse_positive_usize(value) +} + +fn parse_dataset_bits(value: &str) -> Result { + let bits = parse_positive_usize(value)?; + if bits > 32 { + return Err("dataset bit width must not exceed 32".into()); + } + Ok(bits) +} + +fn parse_positive_usize(value: &str) -> Result { + let bits = value + .parse::() + .map_err(|_| format!("{value:?} is not a positive integer"))?; + if bits == 0 { + return Err("bit width must be at least 1".into()); + } + Ok(bits) +} + +fn parse_positive_u64(value: &str) -> Result { + let parsed = value + .parse::() + .map_err(|_| format!("{value:?} is not a positive integer"))?; + if parsed == 0 { + return Err("value must be at least 1".into()); + } + Ok(parsed) +} + +fn read(path: &PathBuf) -> Result { + let metadata = fs::metadata(path).map_err(|source| OccamError::ReadFile { + path: path.clone(), + source, + })?; + if metadata.len() > DEFAULT_LIMITS.max_source_bytes as u64 { + return Err(OccamError::ResourceLimit { + resource: "input file bytes", + requested: usize::try_from(metadata.len()).unwrap_or(usize::MAX), + limit: DEFAULT_LIMITS.max_source_bytes, + }); + } + fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.clone(), + source, + }) +} + +fn run() -> Result<(), OccamError> { + match Cli::parse().command { + Command::Verify { + dataset, + circuit, + backend, + } => { + let circuit = parse_netlist(&read(&circuit)?)?; + let dataset_source = read(&dataset)?; + let metrics = match backend { + Backend::Scalar => verify(&circuit, &parse_dataset(&dataset_source)?)?, + Backend::Packed => { + verify_prepacked(&circuit, &parse_packed_dataset(&dataset_source)?)? + } + Backend::PackedLegacy => { + let scalar_dataset = parse_dataset(&dataset_source)?; + verify_prepacked(&circuit, &pack_dataset(&scalar_dataset)?)? + } + Backend::CrossCheck => { + let scalar = verify(&circuit, &parse_dataset(&dataset_source)?)?; + let packed = + verify_prepacked(&circuit, &parse_packed_dataset(&dataset_source)?)?; + if scalar != packed { + return Err(OccamError::Validation(format!( + "backend mismatch: scalar {scalar:?}, packed {packed:?}" + ))); + } + scalar + } + }; + println!("backend: {}", backend.label()); + println!("gates: {}", metrics.gate_count); + println!("samples: {}", metrics.samples); + println!("exact matches: {}", metrics.exact_matches); + println!("exact-match acc: {:.6}", metrics.exact_match_accuracy()); + println!("correct bits: {}", metrics.correct_bits); + println!("total bits: {}", metrics.total_bits); + println!("bit accuracy: {:.6}", metrics.bit_accuracy()); + } + Command::GenerateAdder { bits, output } => { + write_generated(ripple_carry_adder(bits)?, output)?; + } + Command::GenerateMultiplier { bits, output } => { + write_generated(shift_add_multiplier(bits)?, output)?; + } + Command::GenerateDataset { + operation, + bits, + samples, + seed, + output, + } => { + write_generated( + generate_dataset(operation.into(), bits, samples, seed)?, + output, + )?; + } + Command::Benchmark { + backend, + dataset, + circuit, + warmup, + iterations, + batches, + json, + } => { + let parse_started = Instant::now(); + let parsed_circuit = parse_netlist(&read(&circuit)?)?; + let circuit_parse_duration = parse_started.elapsed(); + let dataset_source = read(&dataset)?; + let report = run_benchmark( + backend.into(), + &parsed_circuit, + &dataset_source, + warmup, + iterations, + batches, + circuit_parse_duration, + circuit.display().to_string(), + dataset.display().to_string(), + )?; + let encoded = serde_json::to_string_pretty(&report).map_err(|error| { + OccamError::Validation(format!("JSON encoding failed: {error}")) + })?; + fs::write(&json, format!("{encoded}\n")).map_err(|source| OccamError::WriteFile { + path: json.clone(), + source, + })?; + print_benchmark_summary(&report); + println!("json: {}", json.display()); + } + Command::Synthesize { + dataset, + max_gates, + timeout_seconds, + output, + certificate, + } => { + let parsed_dataset = parse_dataset(&read(&dataset)?)?; + let limits = SynthesisLimits { + max_gates, + timeout: Duration::from_secs(timeout_seconds), + ..SynthesisLimits::default() + }; + let problem = SynthesisProblem::from_dataset_with_limits(&parsed_dataset, &limits)?; + let result = synthesize_minimal(&problem, &limits)?; + write_text(&certificate, &result.to_json_pretty()?)?; + if let Some(netlist) = &result.netlist { + write_text(&output, netlist)?; + } + println!("status: {}", synthesis_status_name(result.status)); + println!("attempts: {}", result.attempts.len()); + if let Some(gates) = result.minimal_gate_count { + println!("minimal gates: {gates}"); + println!("netlist: {}", output.display()); + } else { + println!("detail: {}", result.status_detail); + } + println!("certificate: {}", certificate.display()); + } + Command::Learn { + instance, + train, + test_inputs, + commitment, + output_dir, + } => { + let training_source = read(&train)?; + let test_inputs_source = read(&test_inputs)?; + let commitment_source = read(&commitment)?; + let result = learn_instance(LearnRequest { + instance: &instance, + training_source: &training_source, + test_inputs_source: &test_inputs_source, + commitment_source: Some(&commitment_source), + limits: &DEFAULT_LIMITS, + })?; + let written = write_instance_artifacts(&output_dir, &instance, &result)?; + println!("instance: {instance}"); + println!("selected family: {}", result.report.selected_family); + println!("gates: {}", result.report.gate_count); + println!( + "training scalar: {}/{}", + result.report.training_scalar.exact_matches, result.report.training_scalar.samples + ); + println!( + "training packed: {}/{}", + result.report.training_packed.exact_matches, result.report.training_packed.samples + ); + println!( + "exhaustive: {}/{}", + result.report.exhaustive_cases - result.report.exhaustive_mismatches, + result.report.exhaustive_cases + ); + println!("prediction rows: {}", result.report.prediction_rows); + println!("prediction SHA: {}", result.report.prediction_sha256); + println!("commitment: match"); + println!("circuit: {}", written.circuit_path.display()); + println!("predictions: {}", written.prediction_path.display()); + println!("report: {}", written.report_path.display()); + } + Command::LearnMdl { + train, + test_inputs, + commitment, + max_description_cost, + timeout_seconds, + circuit, + predictions, + report, + } => { + let training_source = read(&train)?; + let test_inputs_source = read(&test_inputs)?; + let commitment_source = commitment.as_ref().map(read).transpose()?; + let timeout_millis = + timeout_seconds + .checked_mul(1_000) + .ok_or(OccamError::ArithmeticOverflow { + context: "MDL CLI timeout milliseconds", + })?; + let config = MdlSearchConfig { + max_description_cost, + timeout_millis, + ..MdlSearchConfig::default() + }; + let result = learn_mdl(MdlLearnRequest { + training_source: &training_source, + test_inputs_source: &test_inputs_source, + commitment_source: commitment_source.as_deref(), + config: &config, + limits: &DEFAULT_LIMITS, + })?; + let report_json = result.report.to_json_pretty()?; + write_atomic_bundle([ + (&circuit, result.circuit.as_str()), + (&predictions, result.prediction_csv.as_str()), + (&report, report_json.as_str()), + ])?; + println!("expression: {}", result.report.expression); + println!("description cost: {}", result.report.description_cost); + println!("gates: {}", result.report.gate_count); + println!( + "training scalar: {}/{}", + result.report.training_scalar.exact_matches, result.report.training_scalar.samples + ); + println!( + "training packed: {}/{}", + result.report.training_packed.exact_matches, result.report.training_packed.samples + ); + println!( + "exhaustive: {}/{}", + result.report.exhaustive_cases - result.report.exhaustive_mismatches, + result.report.exhaustive_cases + ); + println!("prediction rows: {}", result.report.prediction_rows); + println!("prediction SHA: {}", result.report.prediction_sha256); + println!( + "commitment: {}", + if result.report.commitment_matches == Some(true) { + "match" + } else { + "not supplied" + } + ); + println!("circuit: {}", circuit.display()); + println!("predictions: {}", predictions.display()); + println!("report: {}", report.display()); + } + Command::OptimizeCircuit { + circuit, + abc, + output, + report, + abc_only, + } => { + let parsed = parse_netlist(&read(&circuit)?)?; + let abc_result = optimize_with_abc( + &parsed, + &abc, + &AbcOptimizationConfig::default(), + &DEFAULT_LIMITS, + )?; + if abc_only { + write_text(&report, &abc_result.report.to_json_pretty()?)?; + let best = abc_result.best_candidate(); + let improved = best + .is_some_and(|candidate| candidate.official_gate_count < parsed.gates.len()); + let status = if improved { + let candidate = best.unwrap(); + write_text(&output, &candidate.netlist)?; + "improved" + } else if best.is_some() { + "unchanged" + } else { + "failed" + }; + print_optimization_summary( + status, + parsed.gates.len(), + best.map(|candidate| candidate.official_gate_count), + best.map(|candidate| candidate.flow_name.as_str()), + &report, + ); + return Ok(()); + } + + let peephole_config = PeepholeConfig { + window: WindowConfig { + min_gates: 3, + max_gates: 3, + max_inputs: 4, + max_outputs: 2, + }, + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(60), + max_attempts: 64, + max_exhaustive_inputs: 20, + }; + let original_peephole = optimize_peepholes(&parsed, &peephole_config, &DEFAULT_LIMITS)?; + let abc_circuit = abc_result + .best_candidate() + .map(|candidate| parse_netlist(&candidate.netlist)) + .transpose()? + .unwrap_or_else(|| parsed.clone()); + let abc_peephole = optimize_peepholes(&abc_circuit, &peephole_config, &DEFAULT_LIMITS)?; + + let original_source = read(&circuit)?; + let mut choices = vec![ + ( + "baseline", + parsed.gates.len(), + original_source, + parsed.clone(), + ), + ( + "peephole-baseline", + original_peephole.circuit.gates.len(), + original_peephole.netlist.clone(), + original_peephole.circuit.clone(), + ), + ( + "peephole-abc", + abc_peephole.circuit.gates.len(), + abc_peephole.netlist.clone(), + abc_peephole.circuit.clone(), + ), + ]; + if let Some(candidate) = abc_result.best_candidate() { + choices.push(( + "abc", + candidate.official_gate_count, + candidate.netlist.clone(), + abc_circuit, + )); + } + choices.sort_by(|lhs, rhs| (lhs.1, lhs.0).cmp(&(rhs.1, rhs.0))); + let (selected_source, selected_gates, selected_netlist, selected_circuit) = + choices.remove(0); + let (cases, mismatches) = + compare_circuits_exhaustively(&parsed, &selected_circuit, 20, &DEFAULT_LIMITS)?; + if selected_gates > parsed.gates.len() || mismatches != 0 { + return Err(OccamError::Validation(format!( + "combined optimization selected {selected_gates} gates with {mismatches} mismatches" + ))); + } + write_text(&output, &selected_netlist)?; + let combined = CombinedOptimizationReport { + schema_version: 1, + baseline_gate_count: parsed.gates.len(), + abc: abc_result.report, + peephole_baseline: original_peephole.report, + peephole_abc: abc_peephole.report, + selected_source: selected_source.into(), + selected_gate_count: selected_gates, + selected_circuit_sha256: sha256_hex(selected_netlist.as_bytes()), + exhaustive_cases: cases, + exhaustive_mismatches: mismatches, + }; + let report_json = serde_json::to_string_pretty(&combined) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| { + OccamError::Validation(format!("JSON encoding failed: {error}")) + })?; + write_text(&report, &report_json)?; + let status = if selected_gates < parsed.gates.len() { + "improved" + } else { + "unchanged" + }; + print_optimization_summary( + status, + parsed.gates.len(), + Some(selected_gates), + Some(selected_source), + &report, + ); + } + Command::ExperimentTrial { + config, + tasks, + key_json, + output, + abc, + } => { + let key: TrialKey = serde_json::from_str(&key_json).map_err(|error| { + OccamError::Validation(format!("invalid trial key JSON: {error}")) + })?; + let record = run_measured_trial(&config, &tasks, key, &output, abc)?; + println!("status: {:?}", record.status); + println!("runtime micros: {}", record.runtime_micros); + println!("peak RSS bytes: {}", record.peak_rss_bytes); + println!("record: {}", output.display()); + } + Command::ExperimentRun { + config, + tasks, + raw_measured, + semantic, + abc, + jobs, + check_semantic, + } => { + if check_semantic && semantic.is_none() { + return Err(OccamError::Validation( + "--check-semantic requires --semantic".into(), + )); + } + let executable = std::env::current_exe().map_err(|error| { + OccamError::Validation(format!("cannot resolve current executable: {error}")) + })?; + let records = run_isolated_experiment( + &executable, + &config, + &tasks, + &raw_measured, + abc.as_deref(), + jobs, + )?; + println!("trials: {}", records.len()); + println!("jobs requested: {jobs}"); + println!("raw measured: {}", raw_measured.display()); + if let Some(semantic) = semantic { + if check_semantic { + let expected = + fs::read_to_string(&semantic).map_err(|source| OccamError::ReadFile { + path: semantic.clone(), + source, + })?; + let actual = render_semantic_jsonl(&records)?; + if actual != expected { + return Err(OccamError::Validation( + "regenerated semantic JSONL differs".into(), + )); + } + println!("status: semantic projection reproducible"); + } else { + write_semantic_jsonl(&semantic, &records)?; + } + println!("semantic target: {}", semantic.display()); + } + } + Command::WriteManifest { output_dir } => { + let instances = ["mystery-A", "mystery-B", "mystery-C", "mystery-D"] + .into_iter() + .map(|instance| load_written_instance(&output_dir, instance, &DEFAULT_LIMITS)) + .collect::, _>>()?; + let path = write_manifest(&output_dir, &instances)?; + println!("instances: {}", instances.len()); + println!("manifest: {}", path.display()); + } + } + Ok(()) +} + +#[derive(Serialize)] +struct CombinedOptimizationReport { + schema_version: u32, + baseline_gate_count: usize, + abc: AbcPortfolioReport, + peephole_baseline: PeepholeOptimizationReport, + peephole_abc: PeepholeOptimizationReport, + selected_source: String, + selected_gate_count: usize, + selected_circuit_sha256: String, + exhaustive_cases: usize, + exhaustive_mismatches: usize, +} + +fn print_optimization_summary( + status: &str, + baseline_gates: usize, + candidate_gates: Option, + flow: Option<&str>, + report: &Path, +) { + println!("status: {status}"); + println!("baseline gates: {baseline_gates}"); + if let Some(candidate_gates) = candidate_gates { + println!("candidate gates: {candidate_gates}"); + } + if let Some(flow) = flow { + println!("flow: {flow}"); + } + println!("report: {}", report.display()); +} + +fn synthesis_status_name(status: SynthesisStatus) -> &'static str { + match status { + SynthesisStatus::Sat => "sat", + SynthesisStatus::NoCircuitWithinBound => "no-circuit-within-bound", + SynthesisStatus::Timeout => "timeout", + SynthesisStatus::ResourceLimit => "resource-limit", + } +} + +fn print_benchmark_summary(report: &occam71_rust::BenchmarkReport) { + println!("backend: {}", report.backend); + println!("samples: {}", report.samples); + println!("gates: {}", report.gates); + println!("parse: {:.3} ms", report.parse_ns as f64 / 1e6); + if let Some(packing_ns) = report.packing_ns { + println!("packing: {:.3} ms", packing_ns as f64 / 1e6); + } + println!( + "median evaluate: {:.3} ms", + report.evaluation.median_ns as f64 / 1e6 + ); + println!( + "one-shot: {:.3} ms", + report.one_shot_ns as f64 / 1e6 + ); + println!( + "samples/s: {:.3}", + report.samples_per_second_at_median + ); +} + +fn write_generated(netlist: String, output: Option) -> Result<(), OccamError> { + if let Some(path) = output { + fs::write(&path, netlist).map_err(|source| OccamError::WriteFile { path, source })?; + } else { + print!("{netlist}"); + } + Ok(()) +} + +fn write_text(path: &PathBuf, contents: &str) -> Result<(), OccamError> { + fs::write(path, contents).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + }) +} + +fn write_atomic_bundle(writes: [(&PathBuf, &str); 3]) -> Result<(), OccamError> { + for index in 0..writes.len() { + for other in index + 1..writes.len() { + if writes[index].0 == writes[other].0 { + return Err(OccamError::Validation(format!( + "MDL artifact paths must be distinct: {}", + writes[index].0.display() + ))); + } + } + } + for (path, _) in &writes { + let parent = path.parent().unwrap_or_else(|| Path::new(".")); + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary_paths = writes + .iter() + .map(|(path, _)| temporary_path(path)) + .collect::>(); + let result = (|| { + for ((_, contents), temporary) in writes.iter().zip(&temporary_paths) { + let mut file = File::create(temporary).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + file.write_all(contents.as_bytes()) + .and_then(|()| file.sync_all()) + .map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + } + for ((path, _), temporary) in writes.iter().zip(&temporary_paths) { + fs::rename(temporary, path).map_err(|source| OccamError::WriteFile { + path: (*path).clone(), + source, + })?; + } + Ok(()) + })(); + if result.is_err() { + for temporary in temporary_paths { + let _ = fs::remove_file(temporary); + } + } + result +} + +fn temporary_path(path: &Path) -> PathBuf { + let file_name = path.file_name().and_then(|name| name.to_str()).unwrap(); + path.with_file_name(format!( + ".{file_name}.{}.tmp-occam71-mdl", + std::process::id() + )) +} + +fn main() { + if let Err(error) = run() { + eprintln!("error: {error}"); + std::process::exit(1); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/metrics.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/metrics.rs new file mode 100644 index 000000000..05ec9e0ec --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/metrics.rs @@ -0,0 +1,150 @@ +use crate::{ + Circuit, DEFAULT_LIMITS, Dataset, OccamError, ResourceLimits, evaluate_with_limits, + limits::{checked_add, checked_mul}, +}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct VerificationMetrics { + pub samples: usize, + pub gate_count: usize, + pub exact_matches: usize, + pub correct_bits: usize, + pub total_bits: usize, +} + +impl VerificationMetrics { + pub fn exact_match_accuracy(&self) -> f64 { + self.exact_matches as f64 / self.samples as f64 + } + + pub fn bit_accuracy(&self) -> f64 { + self.correct_bits as f64 / self.total_bits as f64 + } +} + +pub fn verify(circuit: &Circuit, dataset: &Dataset) -> Result { + verify_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_with_limits( + circuit: &Circuit, + dataset: &Dataset, + limits: &ResourceLimits, +) -> Result { + if circuit.input_count != dataset.input_width { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match circuit INPUTS {}", + dataset.input_width, circuit.input_count + ))); + } + if circuit.outputs.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "circuit has {} outputs, dataset has {}", + circuit.outputs.len(), + dataset.output_width + ))); + } + limits.require( + "dataset input width", + dataset.input_width, + limits.max_input_width, + )?; + limits.require( + "dataset output width", + dataset.output_width, + limits.max_output_width, + )?; + limits.require("dataset samples", dataset.samples.len(), limits.max_samples)?; + let row_bits = checked_add( + dataset.input_width, + dataset.output_width, + "dataset bits per sample", + )?; + let dataset_bits = checked_mul(row_bits, dataset.samples.len(), "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + + let mut exact_matches = 0; + let mut correct_bits = 0; + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let predicted = evaluate_with_limits(circuit, &sample.input, limits)?; + if predicted == sample.expected { + exact_matches += 1; + } + correct_bits = checked_add( + correct_bits, + predicted + .iter() + .zip(&sample.expected) + .filter(|(predicted, expected)| predicted == expected) + .count(), + "scalar correct bit count", + )?; + } + + Ok(VerificationMetrics { + samples: dataset.samples.len(), + gate_count: circuit.gates.len(), + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.samples.len(), + dataset.output_width, + "verification bit count", + )?, + }) +} + +#[cfg(test)] +mod tests { + use crate::{parse_dataset, parse_netlist}; + + use super::*; + + #[test] + fn counts_exact_matches_and_correct_bits() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1").unwrap(); + let dataset = parse_dataset("input,output\n00,0\n01,1\n10,0\n11,0").unwrap(); + let metrics = verify(&circuit, &dataset).unwrap(); + assert_eq!(metrics.samples, 4); + assert_eq!(metrics.gate_count, 1); + assert_eq!(metrics.exact_matches, 3); + assert_eq!(metrics.correct_bits, 3); + assert_eq!(metrics.total_bits, 4); + assert_eq!(metrics.exact_match_accuracy(), 0.75); + assert_eq!(metrics.bit_accuracy(), 0.75); + } + + #[test] + fn rejects_input_and_output_width_mismatches() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + let bad_input = parse_dataset("input,output\n0,0").unwrap(); + let bad_output = parse_dataset("input,output\n00,00").unwrap(); + assert!(verify(&circuit, &bad_input).is_err()); + assert!(verify(&circuit, &bad_output).is_err()); + } + + #[test] + fn rejects_inconsistent_public_dataset_rows() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + let mut dataset = parse_dataset("input,output\n00,0").unwrap(); + dataset.samples[0].expected.clear(); + assert!(verify(&circuit, &dataset).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/netlist.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/netlist.rs new file mode 100644 index 000000000..9323e78a9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/netlist.rs @@ -0,0 +1,334 @@ +use std::collections::HashMap; + +use crate::{ + Circuit, DEFAULT_LIMITS, Gate, GateOp, OccamError, Operand, ResourceLimits, Source, + limits::checked_add, +}; + +pub fn parse_netlist(source: &str) -> Result { + parse_netlist_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_netlist_with_limits( + source: &str, + limits: &ResourceLimits, +) -> Result { + limits.require( + "netlist source bytes", + source.len(), + limits.max_source_bytes, + )?; + let mut input_count = None; + let mut outputs = None; + let mut gates = Vec::new(); + let mut wires = HashMap::::new(); + + for (line_index, raw_line) in source.lines().enumerate() { + let line_number = line_index + 1; + let line = raw_line.split('#').next().unwrap_or_default().trim(); + if line.is_empty() { + continue; + } + let tokens: Vec<_> = line.split_whitespace().collect(); + match tokens.first().copied() { + Some("INPUTS") => { + if input_count.is_some() { + return Err(OccamError::parse( + "netlist", + line_number, + "duplicate INPUTS declaration", + )); + } + if tokens.len() != 2 { + return Err(OccamError::parse( + "netlist", + line_number, + "INPUTS requires exactly one positive integer", + )); + } + let count = tokens[1].parse::().map_err(|_| { + OccamError::parse( + "netlist", + line_number, + format!("invalid input count {}", tokens[1]), + ) + })?; + if count == 0 { + return Err(OccamError::parse( + "netlist", + line_number, + "input count must be positive", + )); + } + limits.require("circuit inputs", count, limits.max_inputs)?; + input_count = Some(count); + } + Some("OUTPUTS") => { + if outputs.is_some() { + return Err(OccamError::parse( + "netlist", + line_number, + "duplicate OUTPUTS declaration", + )); + } + let count = input_count.ok_or_else(|| { + OccamError::parse("netlist", line_number, "INPUTS must appear before OUTPUTS") + })?; + if tokens.len() < 2 { + return Err(OccamError::parse( + "netlist", + line_number, + "OUTPUTS requires at least one operand", + )); + } + limits.require("circuit outputs", tokens.len() - 1, limits.max_outputs)?; + outputs = Some( + tokens[1..] + .iter() + .map(|token| parse_operand(token, count, &wires, line_number)) + .collect::, _>>()?, + ); + } + Some(_) => { + let count = input_count.ok_or_else(|| { + OccamError::parse( + "netlist", + line_number, + "INPUTS must appear before gate definitions", + ) + })?; + if tokens.len() != 5 || tokens[1] != "=" { + return Err(OccamError::parse( + "netlist", + line_number, + format!("bad gate line: {line}"), + )); + } + let wire_id = parse_wire_name(tokens[0], line_number)?; + if wires.contains_key(&wire_id) { + return Err(OccamError::parse( + "netlist", + line_number, + format!("wire w{wire_id} defined twice"), + )); + } + let op = parse_gate_op(tokens[2], line_number)?; + let lhs = parse_operand(tokens[3], count, &wires, line_number)?; + let rhs = parse_operand(tokens[4], count, &wires, line_number)?; + let dense_id = gates.len(); + let next_gate_count = checked_add(dense_id, 1, "circuit gate count")?; + limits.require("circuit gates", next_gate_count, limits.max_gates)?; + wires.insert(wire_id, dense_id); + gates.push(Gate { + output: dense_id, + op, + lhs, + rhs, + }); + } + None => unreachable!(), + } + } + + let input_count = + input_count.ok_or_else(|| OccamError::Validation("missing INPUTS line".into()))?; + let outputs = outputs.ok_or_else(|| OccamError::Validation("missing OUTPUTS line".into()))?; + Ok(Circuit { + input_count, + wire_count: gates.len(), + gates, + outputs, + }) +} + +fn parse_gate_op(token: &str, line: usize) -> Result { + match token { + "AND" => Ok(GateOp::And), + "OR" => Ok(GateOp::Or), + "XOR" => Ok(GateOp::Xor), + "NAND" => Ok(GateOp::Nand), + "NOR" => Ok(GateOp::Nor), + "XNOR" => Ok(GateOp::Xnor), + _ => Err(OccamError::parse( + "netlist", + line, + format!("unknown op {token}; allowed: AND OR XOR NAND NOR XNOR"), + )), + } +} + +fn parse_operand( + token: &str, + input_count: usize, + wires: &HashMap, + line: usize, +) -> Result { + let (inverted, name) = token + .strip_prefix('~') + .map_or((false, token), |name| (true, name)); + if name.is_empty() { + return Err(OccamError::parse("netlist", line, "empty inverted operand")); + } + let source = if let Some(number) = name.strip_prefix('x') { + let one_based = parse_positive_id(number, "input", line)?; + if one_based > input_count { + return Err(OccamError::parse( + "netlist", + line, + format!("input x{one_based} out of range 1..={input_count}"), + )); + } + Source::Input(one_based - 1) + } else if let Some(number) = name.strip_prefix('w') { + let external = parse_positive_id(number, "wire", line)?; + let dense = wires.get(&external).copied().ok_or_else(|| { + OccamError::parse( + "netlist", + line, + format!("wire w{external} used before definition"), + ) + })?; + Source::Wire(dense) + } else { + return Err(OccamError::parse( + "netlist", + line, + format!("bad operand {token}"), + )); + }; + Ok(Operand { source, inverted }) +} + +fn parse_wire_name(token: &str, line: usize) -> Result { + let number = token.strip_prefix('w').ok_or_else(|| { + OccamError::parse( + "netlist", + line, + format!("gate output must be a wire name, got {token}"), + ) + })?; + parse_positive_id(number, "wire", line) +} + +fn parse_positive_id(token: &str, kind: &str, line: usize) -> Result { + let id = token.parse::().map_err(|_| { + OccamError::parse( + "netlist", + line, + format!("invalid {kind} identifier {token}"), + ) + })?; + if id == 0 { + return Err(OccamError::parse( + "netlist", + line, + format!("{kind} identifiers are one-based"), + )); + } + Ok(id) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_all_gates_comments_and_inverted_output() { + let source = " + # all supported operations + INPUTS 2 + w1 = AND x1 x2 + w2 = OR w1 x1 + w3 = XOR w2 x2 + w4 = NAND w3 x1 + w5 = NOR w4 x2 + w6 = XNOR ~w5 x1 + OUTPUTS ~w6 x2 + "; + let circuit = parse_netlist(source).unwrap(); + assert_eq!(circuit.input_count, 2); + assert_eq!(circuit.gates.len(), 6); + assert_eq!(circuit.outputs.len(), 2); + assert!(circuit.outputs[0].inverted); + } + + #[test] + fn rejects_duplicate_wire() { + let error = + parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nw1 = OR x1 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("defined twice")); + } + + #[test] + fn rejects_undefined_wire() { + let error = parse_netlist("INPUTS 1\nw1 = XOR w2 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("used before definition")); + } + + #[test] + fn rejects_out_of_range_input() { + let error = parse_netlist("INPUTS 1\nw1 = XOR x2 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("out of range")); + } + + #[test] + fn rejects_unknown_gate() { + let error = parse_netlist("INPUTS 1\nw1 = IMP x1 x1\nOUTPUTS w1").unwrap_err(); + assert!(error.to_string().contains("unknown op")); + } + + #[test] + fn requires_declarations() { + assert!(parse_netlist("OUTPUTS x1").is_err()); + assert!(parse_netlist("INPUTS 1").is_err()); + } + + #[test] + fn rejects_malformed_gate_line() { + let error = parse_netlist("INPUTS 1\nw1 XOR x1 x1\nOUTPUTS x1").unwrap_err(); + assert!(error.to_string().contains("bad gate line")); + } + + #[test] + fn enforces_input_gate_output_and_source_limits() { + let mut limits = DEFAULT_LIMITS; + limits.max_inputs = 1; + assert!(matches!( + parse_netlist_with_limits("INPUTS 2\nOUTPUTS x1", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit inputs", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_gates = 0; + assert!(matches!( + parse_netlist_with_limits("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit gates", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_outputs = 1; + assert!(matches!( + parse_netlist_with_limits("INPUTS 2\nOUTPUTS x1 x2", &limits), + Err(OccamError::ResourceLimit { + resource: "circuit outputs", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_source_bytes = 3; + assert!(matches!( + parse_netlist_with_limits("INPUTS 1\nOUTPUTS x1", &limits), + Err(OccamError::ResourceLimit { + resource: "netlist source bytes", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/equivalence.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/equivalence.rs new file mode 100644 index 000000000..6a4f3d00d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/equivalence.rs @@ -0,0 +1,90 @@ +use std::collections::{HashMap, HashSet, VecDeque}; + +use crate::{Circuit, GateOp, OccamError, Operand, Source}; + +pub(super) fn window_is_convex(circuit: &Circuit, gate_indices: &[usize]) -> bool { + let internal = gate_indices.iter().copied().collect::>(); + if internal.len() != gate_indices.len() + || gate_indices + .iter() + .any(|index| *index >= circuit.gates.len()) + { + return false; + } + let mut fanouts = vec![Vec::new(); circuit.gates.len()]; + for (consumer, gate) in circuit.gates.iter().enumerate() { + for operand in [gate.lhs, gate.rhs] { + if let Source::Wire(producer) = operand.source { + fanouts[producer].push(consumer); + } + } + } + for start in gate_indices { + let mut queue = VecDeque::from([(*start, false)]); + let mut seen = HashSet::new(); + while let Some((current, left_window)) = queue.pop_front() { + if !seen.insert((current, left_window)) { + continue; + } + for next in &fanouts[current] { + let next_is_internal = internal.contains(next); + let left_window = left_window || !next_is_internal; + if next_is_internal && left_window { + return false; + } + queue.push_back((*next, left_window)); + } + } + } + true +} + +pub(super) fn evaluate_window( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + assignment: usize, +) -> Result, OccamError> { + let mut values = HashMap::new(); + for (bit, source) in boundary_inputs.iter().enumerate() { + values.insert(*source, assignment & (1usize << bit) != 0); + } + for index in gate_indices { + let gate = circuit.gates.get(*index).ok_or_else(|| { + OccamError::Validation(format!("window gate index {index} is out of range")) + })?; + let lhs = operand_value(gate.lhs, &values)?; + let rhs = operand_value(gate.rhs, &values)?; + values.insert(Source::Wire(*index), gate.op.apply(lhs, rhs)); + } + boundary_outputs + .iter() + .map(|source| { + values.get(source).copied().ok_or_else(|| { + OccamError::Validation(format!("window output {source:?} was not evaluated")) + }) + }) + .collect() +} + +fn operand_value(operand: Operand, values: &HashMap) -> Result { + let value = values.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!( + "window operand {:?} is absent from its boundary", + operand.source + )) + })?; + Ok(value ^ operand.inverted) +} + +pub(super) fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/mod.rs new file mode 100644 index 000000000..73b689e29 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/mod.rs @@ -0,0 +1,13 @@ +mod equivalence; +mod peephole; +mod report; +mod rewrite; +mod window; + +pub use peephole::{PeepholeConfig, optimize_peepholes}; +pub use report::{ + PeepholeAttemptReport, PeepholeBoundReport, PeepholeOptimizationReport, + PeepholeOptimizationResult, +}; +pub use rewrite::rewrite_with_candidate; +pub use window::{CircuitWindow, WindowConfig, extract_windows}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/peephole.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/peephole.rs new file mode 100644 index 000000000..60d48dcb6 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/peephole.rs @@ -0,0 +1,275 @@ +use std::time::{Duration, Instant}; + +use crate::{ + AttemptStatus, Circuit, OccamError, ResourceLimits, SynthesisLimits, SynthesisProblem, + SynthesisStatus, compare_circuits_exhaustively, parse_netlist_with_limits, sha256_hex, + synthesize_minimal, +}; + +use super::{ + CircuitWindow, PeepholeAttemptReport, PeepholeBoundReport, PeepholeOptimizationReport, + PeepholeOptimizationResult, WindowConfig, extract_windows, rewrite_with_candidate, +}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct PeepholeConfig { + pub window: WindowConfig, + pub per_window_timeout: Duration, + pub global_timeout: Duration, + pub max_attempts: usize, + pub max_exhaustive_inputs: usize, +} + +impl Default for PeepholeConfig { + fn default() -> Self { + Self { + window: WindowConfig::default(), + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(600), + max_attempts: 10_000, + max_exhaustive_inputs: 20, + } + } +} + +impl PeepholeConfig { + pub fn for_tests() -> Self { + Self { + window: WindowConfig { + min_gates: 3, + max_gates: 5, + max_inputs: 4, + max_outputs: 2, + }, + per_window_timeout: Duration::from_secs(5), + global_timeout: Duration::from_secs(30), + max_attempts: 100, + max_exhaustive_inputs: 12, + } + } +} + +pub fn optimize_peepholes( + original: &Circuit, + config: &PeepholeConfig, + limits: &ResourceLimits, +) -> Result { + validate_config(config)?; + let started = Instant::now(); + let mut current = original.clone(); + let mut current_netlist = render_existing(original); + let mut attempts = Vec::new(); + let mut accepted_replacements = 0usize; + let mut termination = "fixed-point".to_owned(); + + 'fixed_point: loop { + let windows = extract_windows(¤t, config.window)?; + for window in windows { + if attempts.len() >= config.max_attempts { + termination = "attempt-limit".into(); + break 'fixed_point; + } + if started.elapsed() >= config.global_timeout { + termination = "global-timeout".into(); + break 'fixed_point; + } + let remaining = config.global_timeout.saturating_sub(started.elapsed()); + let timeout = config.per_window_timeout.min(remaining); + let (attempt, replacement) = synthesize_window(&window, timeout, config, limits)?; + if let Some(replacement) = replacement { + match rewrite_with_candidate(¤t, &window, &replacement, limits) { + Ok((candidate, netlist)) => { + let (cases, mismatches) = compare_circuits_exhaustively( + ¤t, + &candidate, + config.max_exhaustive_inputs, + limits, + )?; + let improved = candidate.gates.len() < current.gates.len(); + let mut attempt = attempt; + attempt.candidate_whole_gates = Some(candidate.gates.len()); + attempt.whole_circuit_mismatches = Some(mismatches); + attempt.accepted = improved && mismatches == 0; + if attempt.accepted { + current = candidate; + current_netlist = netlist; + accepted_replacements = accepted_replacements.checked_add(1).ok_or( + OccamError::ArithmeticOverflow { + context: "accepted peephole replacements", + }, + )?; + attempts.push(attempt); + continue 'fixed_point; + } + debug_assert!(cases > 0); + attempts.push(attempt); + } + Err(error) => { + let mut attempt = attempt; + attempt.status = format!("splice-rejected: {error}"); + attempts.push(attempt); + } + } + } else { + attempts.push(attempt); + } + } + break; + } + let (whole_circuit_cases, whole_circuit_mismatches) = + compare_circuits_exhaustively(original, ¤t, config.max_exhaustive_inputs, limits)?; + if whole_circuit_mismatches != 0 { + return Err(OccamError::Validation(format!( + "peephole result has {whole_circuit_mismatches} whole-circuit mismatches" + ))); + } + let report = PeepholeOptimizationReport { + schema_version: 1, + window_config: config.window, + baseline_gate_count: original.gates.len(), + final_gate_count: current.gates.len(), + attempted_windows: attempts.len(), + accepted_replacements, + termination, + whole_circuit_cases, + whole_circuit_mismatches, + final_circuit_sha256: sha256_hex(current_netlist.as_bytes()), + attempts, + }; + Ok(PeepholeOptimizationResult { + circuit: current, + netlist: current_netlist, + report, + }) +} + +fn synthesize_window( + window: &CircuitWindow, + timeout: Duration, + config: &PeepholeConfig, + limits: &ResourceLimits, +) -> Result<(PeepholeAttemptReport, Option), OccamError> { + let maximum_gate_bound = + window + .gate_indices + .len() + .checked_sub(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "peephole synthesis gate bound", + })?; + let synthesis_limits = SynthesisLimits { + max_inputs: config.window.max_inputs, + max_outputs: config.window.max_outputs, + max_truth_rows: 1usize << config.window.max_inputs, + max_gates: maximum_gate_bound, + timeout, + ..SynthesisLimits::default() + }; + let problem = + SynthesisProblem::from_dataset_with_limits(&window.truth_table, &synthesis_limits)?; + let certificate = synthesize_minimal(&problem, &synthesis_limits)?; + let status = synthesis_status(certificate.status).to_owned(); + let candidate_window_gates = certificate.minimal_gate_count; + let bounds = certificate + .attempts + .iter() + .map(|attempt| PeepholeBoundReport { + gate_bound: attempt.gate_bound, + status: attempt_status(attempt.status).into(), + variables: attempt.variables, + clauses: attempt.clauses, + literals: attempt.literals, + }) + .collect(); + let attempt = PeepholeAttemptReport { + window_identity_sha256: window.identity_sha256.clone(), + original_window_gates: window.gate_indices.len(), + boundary_inputs: window.boundary_inputs.len(), + boundary_outputs: window.boundary_outputs.len(), + status, + candidate_window_gates, + candidate_whole_gates: None, + whole_circuit_mismatches: None, + accepted: false, + bounds, + }; + let replacement = certificate + .netlist + .as_deref() + .map(|netlist| parse_netlist_with_limits(netlist, limits)) + .transpose()?; + Ok((attempt, replacement)) +} + +fn validate_config(config: &PeepholeConfig) -> Result<(), OccamError> { + if config.global_timeout.is_zero() + || config.max_attempts == 0 + || config.max_exhaustive_inputs == 0 + { + return Err(OccamError::Validation( + "peephole global timeout and limits must be positive".into(), + )); + } + Ok(()) +} + +fn attempt_status(status: AttemptStatus) -> &'static str { + match status { + AttemptStatus::Sat => "sat", + AttemptStatus::Unsat => "unsat", + AttemptStatus::Timeout => "timeout", + AttemptStatus::ResourceLimit => "resource-limit", + } +} + +fn synthesis_status(status: SynthesisStatus) -> &'static str { + match status { + SynthesisStatus::Sat => "sat", + SynthesisStatus::NoCircuitWithinBound => "no-circuit-within-bound", + SynthesisStatus::Timeout => "timeout", + SynthesisStatus::ResourceLimit => "resource-limit", + } +} + +fn render_existing(circuit: &Circuit) -> String { + let mut source = format!("INPUTS {}\n", circuit.input_count); + for gate in &circuit.gates { + source.push_str(&format!( + "w{} = {} {} {}\n", + gate.output + 1, + gate_name(gate.op), + operand_name(gate.lhs), + operand_name(gate.rhs) + )); + } + source.push_str("OUTPUTS"); + for output in &circuit.outputs { + source.push(' '); + source.push_str(&operand_name(*output)); + } + source.push('\n'); + source +} + +fn gate_name(operation: crate::GateOp) -> &'static str { + match operation { + crate::GateOp::And => "AND", + crate::GateOp::Or => "OR", + crate::GateOp::Xor => "XOR", + crate::GateOp::Nand => "NAND", + crate::GateOp::Nor => "NOR", + crate::GateOp::Xnor => "XNOR", + } +} + +fn operand_name(operand: crate::Operand) -> String { + let name = match operand.source { + crate::Source::Input(index) => format!("x{}", index + 1), + crate::Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/report.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/report.rs new file mode 100644 index 000000000..cc68a8fb8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/report.rs @@ -0,0 +1,61 @@ +use serde::{Deserialize, Serialize}; + +use crate::{Circuit, OccamError}; + +use super::WindowConfig; + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeBoundReport { + pub gate_bound: usize, + pub status: String, + pub variables: usize, + pub clauses: usize, + pub literals: usize, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeAttemptReport { + pub window_identity_sha256: String, + pub original_window_gates: usize, + pub boundary_inputs: usize, + pub boundary_outputs: usize, + pub status: String, + pub candidate_window_gates: Option, + pub candidate_whole_gates: Option, + pub whole_circuit_mismatches: Option, + pub accepted: bool, + pub bounds: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct PeepholeOptimizationReport { + pub schema_version: u32, + pub window_config: WindowConfig, + pub baseline_gate_count: usize, + pub final_gate_count: usize, + pub attempted_windows: usize, + pub accepted_replacements: usize, + pub termination: String, + pub whole_circuit_cases: usize, + pub whole_circuit_mismatches: usize, + pub final_circuit_sha256: String, + pub attempts: Vec, +} + +impl PeepholeOptimizationReport { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|encoded| format!("{encoded}\n")) + .map_err(|error| OccamError::Validation(format!("JSON encoding failed: {error}"))) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PeepholeOptimizationResult { + pub circuit: Circuit, + pub netlist: String, + pub report: PeepholeOptimizationReport, +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/rewrite.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/rewrite.rs new file mode 100644 index 000000000..da1a216c3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/rewrite.rs @@ -0,0 +1,133 @@ +use std::collections::{HashMap, HashSet}; + +use crate::{ + Circuit, CircuitBuilder, CircuitWindow, OccamError, Operand, ResourceLimits, Signal, Source, + parse_netlist_with_limits, +}; + +pub fn rewrite_with_candidate( + original: &Circuit, + window: &CircuitWindow, + replacement: &Circuit, + limits: &ResourceLimits, +) -> Result<(Circuit, String), OccamError> { + if replacement.input_count != window.boundary_inputs.len() { + return Err(OccamError::Validation(format!( + "replacement input count {} does not match window boundary {}", + replacement.input_count, + window.boundary_inputs.len() + ))); + } + if replacement.outputs.len() != window.boundary_outputs.len() { + return Err(OccamError::Validation(format!( + "replacement output count {} does not match window boundary {}", + replacement.outputs.len(), + window.boundary_outputs.len() + ))); + } + let internal = window.gate_indices.iter().copied().collect::>(); + if internal.len() != window.gate_indices.len() || internal.is_empty() { + return Err(OccamError::Validation( + "replacement window gate set is empty or duplicated".into(), + )); + } + let insertion = *window.gate_indices.first().unwrap(); + if window + .boundary_inputs + .iter() + .any(|source| matches!(source, Source::Wire(index) if *index >= insertion)) + { + return Err(OccamError::Validation( + "replacement boundary input is unavailable at insertion point".into(), + )); + } + + let mut builder = CircuitBuilder::new(original.input_count, limits)?; + let mut mapping = (0..original.input_count) + .map(|index| (Source::Input(index), Signal::input(index))) + .collect::>(); + for index in 0..original.gates.len() { + if index == insertion { + let available = mapping.clone(); + splice_candidate(&mut builder, &available, &mut mapping, window, replacement)?; + } + if internal.contains(&index) { + continue; + } + let gate = &original.gates[index]; + let lhs = remap_operand(gate.lhs, &mapping)?; + let rhs = remap_operand(gate.rhs, &mapping)?; + let output = builder.binary(gate.op, lhs, rhs)?; + mapping.insert(Source::Wire(index), output); + } + let outputs = original + .outputs + .iter() + .map(|operand| remap_operand(*operand, &mapping)) + .collect::, _>>()?; + let synthesized = builder.finish(&outputs)?; + let reparsed = parse_netlist_with_limits(&synthesized.netlist, limits)?; + Ok((reparsed, synthesized.netlist)) +} + +fn splice_candidate( + builder: &mut CircuitBuilder<'_>, + original_mapping: &HashMap, + whole_mapping: &mut HashMap, + window: &CircuitWindow, + replacement: &Circuit, +) -> Result<(), OccamError> { + let mut local_mapping = window + .boundary_inputs + .iter() + .enumerate() + .map(|(index, original_source)| { + original_mapping + .get(original_source) + .copied() + .map(|signal| (Source::Input(index), signal)) + .ok_or_else(|| { + OccamError::Validation(format!( + "replacement boundary input {original_source:?} has no whole-circuit mapping" + )) + }) + }) + .collect::, _>>()?; + for (index, gate) in replacement.gates.iter().enumerate() { + if gate.output != index { + return Err(OccamError::Validation( + "replacement circuit wires must be dense".into(), + )); + } + let lhs = remap_operand(gate.lhs, &local_mapping)?; + let rhs = remap_operand(gate.rhs, &local_mapping)?; + let output = builder.binary(gate.op, lhs, rhs)?; + local_mapping.insert(Source::Wire(index), output); + } + for (original_output, replacement_output) in + window.boundary_outputs.iter().zip(&replacement.outputs) + { + whole_mapping.insert( + *original_output, + remap_operand(*replacement_output, &local_mapping)?, + ); + } + Ok(()) +} + +fn remap_operand( + operand: Operand, + mapping: &HashMap, +) -> Result { + let signal = mapping.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!( + "rewritten operand {:?} has no source mapping", + operand.source + )) + })?; + Ok(if operand.inverted { + signal.inverted() + } else { + signal + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/window.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/window.rs new file mode 100644 index 000000000..8134b03db --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimization/window.rs @@ -0,0 +1,333 @@ +use std::collections::{BTreeSet, HashMap, HashSet}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + Circuit, DEFAULT_LIMITS, Dataset, OccamError, Operand, Sample, Source, parse_netlist, + sha256_hex, verify, +}; + +use super::equivalence::{evaluate_window, operation_name, window_is_convex}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct WindowConfig { + pub min_gates: usize, + pub max_gates: usize, + pub max_inputs: usize, + pub max_outputs: usize, +} + +impl Default for WindowConfig { + fn default() -> Self { + Self { + min_gates: 4, + max_gates: 8, + max_inputs: 8, + max_outputs: 4, + } + } +} + +impl WindowConfig { + pub fn for_tests() -> Self { + Self { + min_gates: 2, + max_gates: 6, + max_inputs: 6, + max_outputs: 4, + } + } +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct CircuitWindow { + pub gate_indices: Vec, + pub boundary_inputs: Vec, + pub boundary_outputs: Vec, + pub truth_table: Dataset, + pub identity_sha256: String, +} + +impl CircuitWindow { + pub fn is_convex(&self, circuit: &Circuit) -> bool { + window_is_convex(circuit, &self.gate_indices) + } +} + +pub fn extract_windows( + circuit: &Circuit, + config: WindowConfig, +) -> Result, OccamError> { + validate_config(config)?; + let mut identities = BTreeSet::new(); + let mut windows = Vec::new(); + for sink in 0..circuit.gates.len() { + let mut internal = BTreeSet::from([sink]); + loop { + if internal.len() >= config.min_gates { + let indices = internal.iter().copied().collect::>(); + if identities.insert(indices.clone()) + && let Some(window) = build_window(circuit, indices, config)? + { + windows.push(window); + } + } + if internal.len() >= config.max_gates { + break; + } + let mut frontier = BTreeSet::new(); + for index in &internal { + let gate = &circuit.gates[*index]; + for operand in [gate.lhs, gate.rhs] { + if let Source::Wire(producer) = operand.source + && !internal.contains(&producer) + { + frontier.insert(producer); + } + } + } + let Some(next) = frontier.into_iter().next_back() else { + break; + }; + internal.insert(next); + } + } + windows.sort_by(|lhs, rhs| { + (&lhs.gate_indices, &lhs.identity_sha256).cmp(&(&rhs.gate_indices, &rhs.identity_sha256)) + }); + Ok(windows) +} + +fn validate_config(config: WindowConfig) -> Result<(), OccamError> { + if config.min_gates == 0 + || config.max_gates < config.min_gates + || config.max_inputs == 0 + || config.max_outputs == 0 + || config.max_inputs >= usize::BITS as usize + { + return Err(OccamError::Validation(format!( + "invalid window configuration {config:?}" + ))); + } + Ok(()) +} + +fn build_window( + circuit: &Circuit, + gate_indices: Vec, + config: WindowConfig, +) -> Result, OccamError> { + if !window_is_convex(circuit, &gate_indices) { + return Ok(None); + } + let internal = gate_indices.iter().copied().collect::>(); + let mut boundary_inputs = BTreeSet::new(); + for index in &gate_indices { + for operand in [circuit.gates[*index].lhs, circuit.gates[*index].rhs] { + if !matches!(operand.source, Source::Wire(wire) if internal.contains(&wire)) { + boundary_inputs.insert(operand.source); + } + } + } + let mut boundary_outputs = BTreeSet::new(); + for index in &gate_indices { + let source = Source::Wire(*index); + let external_gate_consumer = circuit.gates.iter().enumerate().any(|(consumer, gate)| { + !internal.contains(&consumer) + && [gate.lhs, gate.rhs] + .iter() + .any(|operand| operand.source == source) + }); + let final_output = circuit + .outputs + .iter() + .any(|operand| operand.source == source); + if external_gate_consumer || final_output { + boundary_outputs.insert(source); + } + } + if boundary_inputs.len() > config.max_inputs + || boundary_outputs.is_empty() + || boundary_outputs.len() > config.max_outputs + { + return Ok(None); + } + let boundary_inputs = boundary_inputs.into_iter().collect::>(); + let boundary_outputs = boundary_outputs.into_iter().collect::>(); + let cases = 1usize + .checked_shl(u32::try_from(boundary_inputs.len()).map_err(|_| { + OccamError::ArithmeticOverflow { + context: "window truth-table shift", + } + })?) + .ok_or(OccamError::ArithmeticOverflow { + context: "window truth-table cases", + })?; + DEFAULT_LIMITS.require( + "window truth-table cases", + cases, + DEFAULT_LIMITS.max_samples, + )?; + let mut samples = Vec::with_capacity(cases); + for assignment in 0..cases { + let input = (0..boundary_inputs.len()) + .map(|bit| assignment & (1usize << bit) != 0) + .collect(); + let expected = evaluate_window( + circuit, + &gate_indices, + &boundary_inputs, + &boundary_outputs, + assignment, + )?; + samples.push(Sample { input, expected }); + } + let truth_table = Dataset { + input_width: boundary_inputs.len(), + output_width: boundary_outputs.len(), + samples, + }; + verify_local_truth_table( + circuit, + &gate_indices, + &boundary_inputs, + &boundary_outputs, + &truth_table, + )?; + let identity_sha256 = window_identity( + &gate_indices, + &boundary_inputs, + &boundary_outputs, + &truth_table, + ); + Ok(Some(CircuitWindow { + gate_indices, + boundary_inputs, + boundary_outputs, + truth_table, + identity_sha256, + })) +} + +fn verify_local_truth_table( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + truth_table: &Dataset, +) -> Result<(), OccamError> { + let local = parse_netlist(&local_netlist( + circuit, + gate_indices, + boundary_inputs, + boundary_outputs, + )?)?; + let metrics = verify(&local, truth_table)?; + if metrics.exact_matches != metrics.samples { + return Err(OccamError::Validation(format!( + "extracted local circuit matched only {}/{} truth-table rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(()) +} + +fn local_netlist( + circuit: &Circuit, + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], +) -> Result { + let mut mapping = boundary_inputs + .iter() + .enumerate() + .map(|(index, source)| { + ( + *source, + Operand { + source: Source::Input(index), + inverted: false, + }, + ) + }) + .collect::>(); + let mut source = format!("INPUTS {}\n", boundary_inputs.len()); + for (local_index, original_index) in gate_indices.iter().enumerate() { + let gate = &circuit.gates[*original_index]; + let lhs = remap_operand(gate.lhs, &mapping)?; + let rhs = remap_operand(gate.rhs, &mapping)?; + source.push_str(&format!( + "w{} = {} {} {}\n", + local_index + 1, + operation_name(gate.op), + render_operand(lhs), + render_operand(rhs) + )); + mapping.insert( + Source::Wire(*original_index), + Operand { + source: Source::Wire(local_index), + inverted: false, + }, + ); + } + source.push_str("OUTPUTS"); + for output in boundary_outputs { + let operand = mapping.get(output).copied().ok_or_else(|| { + OccamError::Validation(format!("local output {output:?} has no mapping")) + })?; + source.push(' '); + source.push_str(&render_operand(operand)); + } + source.push('\n'); + Ok(source) +} + +fn remap_operand( + operand: Operand, + mapping: &HashMap, +) -> Result { + let mut remapped = mapping.get(&operand.source).copied().ok_or_else(|| { + OccamError::Validation(format!("local operand {:?} has no mapping", operand.source)) + })?; + remapped.inverted ^= operand.inverted; + Ok(remapped) +} + +fn render_operand(operand: Operand) -> String { + let name = match operand.source { + Source::Input(index) => format!("x{}", index + 1), + Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} + +fn window_identity( + gate_indices: &[usize], + boundary_inputs: &[Source], + boundary_outputs: &[Source], + truth_table: &Dataset, +) -> String { + let mut canonical = String::new(); + canonical.push_str("occam71-window-v1\n"); + canonical.push_str(&format!("gates={gate_indices:?}\n")); + canonical.push_str(&format!("inputs={boundary_inputs:?}\n")); + canonical.push_str(&format!("outputs={boundary_outputs:?}\n")); + for sample in &truth_table.samples { + for bit in &sample.input { + canonical.push(if *bit { '1' } else { '0' }); + } + canonical.push(','); + for bit in &sample.expected { + canonical.push(if *bit { '1' } else { '0' }); + } + canonical.push('\n'); + } + sha256_hex(canonical.as_bytes()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimize.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimize.rs new file mode 100644 index 000000000..fc52d30f0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/optimize.rs @@ -0,0 +1,334 @@ +use std::collections::HashMap; + +use crate::{GateOp, OccamError, ResourceLimits}; + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +enum Node { + Input(usize), + Gate(usize), + Zero, +} + +#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct Signal { + node: Node, + inverted: bool, +} + +impl Signal { + pub fn input(index: usize) -> Self { + Self { + node: Node::Input(index), + inverted: false, + } + } + + pub fn inverted(self) -> Self { + Self { + inverted: !self.inverted, + ..self + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct SynthesizedCircuit { + pub netlist: String, + pub gate_count: usize, +} + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +struct GateKey { + op: GateOp, + lhs: Signal, + rhs: Signal, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +struct CanonicalGate { + op: GateOp, + lhs: Signal, + rhs: Signal, +} + +pub struct CircuitBuilder<'a> { + input_count: usize, + limits: &'a ResourceLimits, + gates: Vec, + interned: HashMap, +} + +impl<'a> CircuitBuilder<'a> { + pub fn new(input_count: usize, limits: &'a ResourceLimits) -> Result { + if input_count == 0 { + return Err(OccamError::Validation( + "circuit builder input count must be positive".into(), + )); + } + limits.require("circuit inputs", input_count, limits.max_inputs)?; + Ok(Self { + input_count, + limits, + gates: Vec::new(), + interned: HashMap::new(), + }) + } + + pub fn zero(&self) -> Result { + Ok(Signal { + node: Node::Zero, + inverted: false, + }) + } + + pub fn one(&self) -> Result { + Ok(self.zero()?.inverted()) + } + + pub fn binary(&mut self, op: GateOp, lhs: Signal, rhs: Signal) -> Result { + self.validate_signal(lhs)?; + self.validate_signal(rhs)?; + match op { + GateOp::Nand => { + return Ok(self.binary(GateOp::And, lhs, rhs)?.inverted()); + } + GateOp::Nor => { + return Ok(self.binary(GateOp::Or, lhs, rhs)?.inverted()); + } + GateOp::Xnor => { + return Ok(self.binary(GateOp::Xor, lhs, rhs)?.inverted()); + } + GateOp::And | GateOp::Or | GateOp::Xor => {} + } + if let Some(result) = self.simplify(op, lhs, rhs)? { + return Ok(result); + } + let (lhs, rhs) = if lhs <= rhs { (lhs, rhs) } else { (rhs, lhs) }; + let key = GateKey { op, lhs, rhs }; + if let Some(signal) = self.interned.get(&key) { + return Ok(*signal); + } + let next_count = self + .gates + .len() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "optimized circuit gate count", + })?; + self.limits + .require("circuit gates", next_count, self.limits.max_gates)?; + let signal = Signal { + node: Node::Gate(self.gates.len()), + inverted: false, + }; + self.gates.push(CanonicalGate { op, lhs, rhs }); + self.interned.insert(key, signal); + Ok(signal) + } + + pub fn finish(self, outputs: &[Signal]) -> Result { + if outputs.is_empty() { + return Err(OccamError::Validation( + "optimized circuit must have at least one output".into(), + )); + } + self.limits + .require("circuit outputs", outputs.len(), self.limits.max_outputs)?; + for output in outputs { + self.validate_signal(*output)?; + } + + let mut reachable = vec![false; self.gates.len()]; + for output in outputs { + mark_reachable(*output, &self.gates, &mut reachable); + } + let constant_required = outputs + .iter() + .any(|signal| matches!(signal.node, Node::Zero)) + || self.gates.iter().zip(&reachable).any(|(gate, keep)| { + *keep + && (matches!(gate.lhs.node, Node::Zero) || matches!(gate.rhs.node, Node::Zero)) + }); + let reachable_count = reachable.iter().filter(|keep| **keep).count(); + let gate_count = reachable_count + .checked_add(usize::from(constant_required)) + .ok_or(OccamError::ArithmeticOverflow { + context: "serialized circuit gate count", + })?; + self.limits + .require("circuit gates", gate_count, self.limits.max_gates)?; + + let mut dense_wires = vec![None; self.gates.len()]; + let zero_wire = constant_required.then_some(1usize); + let mut next_wire = 1 + usize::from(constant_required); + for (index, keep) in reachable.iter().enumerate() { + if *keep { + dense_wires[index] = Some(next_wire); + next_wire += 1; + } + } + + let mut lines = Vec::with_capacity(gate_count + 2); + lines.push(format!("INPUTS {}", self.input_count)); + if let Some(wire) = zero_wire { + lines.push(format!("w{wire} = XOR x1 x1")); + } + for (index, gate) in self.gates.iter().enumerate() { + let Some(wire) = dense_wires[index] else { + continue; + }; + let lhs = render_signal(gate.lhs, &dense_wires, zero_wire)?; + let rhs = render_signal(gate.rhs, &dense_wires, zero_wire)?; + lines.push(format!("w{wire} = {} {lhs} {rhs}", operation_name(gate.op))); + } + let rendered_outputs = outputs + .iter() + .map(|signal| render_signal(*signal, &dense_wires, zero_wire)) + .collect::, _>>()?; + lines.push(format!("OUTPUTS {}", rendered_outputs.join(" "))); + let netlist = format!("{}\n", lines.join("\n")); + let max_bytes = self + .limits + .max_generated_bytes + .min(self.limits.max_source_bytes); + self.limits + .require("generated bytes", netlist.len(), max_bytes)?; + Ok(SynthesizedCircuit { + netlist, + gate_count, + }) + } + + fn simplify(&self, op: GateOp, lhs: Signal, rhs: Signal) -> Result, OccamError> { + debug_assert!(matches!(op, GateOp::And | GateOp::Or | GateOp::Xor)); + if lhs == rhs { + return Ok(Some(match op { + GateOp::And | GateOp::Or => lhs, + GateOp::Xor => self.zero()?, + _ => unreachable!(), + })); + } + if lhs == rhs.inverted() { + return Ok(Some(match op { + GateOp::And => self.zero()?, + GateOp::Or | GateOp::Xor => self.one()?, + _ => unreachable!(), + })); + } + match (constant_value(lhs), constant_value(rhs)) { + (Some(lhs), Some(rhs)) => { + let value = op.apply(lhs, rhs); + Ok(Some(if value { self.one()? } else { self.zero()? })) + } + (Some(constant), None) => Ok(Some(simplify_one_constant(op, constant, rhs, self)?)), + (None, Some(constant)) => Ok(Some(simplify_one_constant(op, constant, lhs, self)?)), + (None, None) => Ok(None), + } + } + + fn validate_signal(&self, signal: Signal) -> Result<(), OccamError> { + match signal.node { + Node::Input(index) if index < self.input_count => Ok(()), + Node::Input(index) => Err(OccamError::Validation(format!( + "builder input index {index} is out of range for {} inputs", + self.input_count + ))), + Node::Gate(index) if index < self.gates.len() => Ok(()), + Node::Gate(index) => Err(OccamError::Validation(format!( + "builder gate index {index} is unavailable" + ))), + Node::Zero => Ok(()), + } + } +} + +fn simplify_one_constant( + op: GateOp, + constant: bool, + signal: Signal, + builder: &CircuitBuilder<'_>, +) -> Result { + Ok(match (op, constant) { + (GateOp::And, false) => builder.zero()?, + (GateOp::And, true) | (GateOp::Or, false) | (GateOp::Xor, false) => signal, + (GateOp::Or, true) => builder.one()?, + (GateOp::Xor, true) => signal.inverted(), + _ => unreachable!(), + }) +} + +fn constant_value(signal: Signal) -> Option { + matches!(signal.node, Node::Zero).then_some(signal.inverted) +} + +fn mark_reachable(signal: Signal, gates: &[CanonicalGate], reachable: &mut [bool]) { + let Node::Gate(index) = signal.node else { + return; + }; + if reachable[index] { + return; + } + reachable[index] = true; + mark_reachable(gates[index].lhs, gates, reachable); + mark_reachable(gates[index].rhs, gates, reachable); +} + +fn render_signal( + signal: Signal, + dense_wires: &[Option], + zero_wire: Option, +) -> Result { + let name = match signal.node { + Node::Input(index) => format!("x{}", index + 1), + Node::Gate(index) => format!( + "w{}", + dense_wires + .get(index) + .and_then(|wire| *wire) + .ok_or_else(|| OccamError::Validation(format!( + "reachable gate {index} has no serialized wire" + )))? + ), + Node::Zero => format!( + "w{}", + zero_wire.ok_or_else(|| { + OccamError::Validation("constant output has no serialized zero wire".into()) + })? + ), + }; + Ok(if signal.inverted { + format!("~{name}") + } else { + name + }) +} + +fn operation_name(op: GateOp) -> &'static str { + match op { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +#[cfg(test)] +mod tests { + use crate::{DEFAULT_LIMITS, evaluate, parse_netlist}; + + use super::*; + + #[test] + fn serializes_constant_outputs_with_one_shared_gate() { + let builder = CircuitBuilder::new(1, &DEFAULT_LIMITS).unwrap(); + let zero = builder.zero().unwrap(); + let one = builder.one().unwrap(); + let synthesized = builder.finish(&[zero, one]).unwrap(); + assert_eq!(synthesized.gate_count, 1); + let circuit = parse_netlist(&synthesized.netlist).unwrap(); + assert_eq!(evaluate(&circuit, &[false]).unwrap(), vec![false, true]); + assert_eq!(evaluate(&circuit, &[true]).unwrap(), vec![false, true]); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/packed.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/packed.rs new file mode 100644 index 000000000..02cc587fe --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/packed.rs @@ -0,0 +1,530 @@ +use crate::{ + Circuit, CompiledCircuit, DEFAULT_LIMITS, Dataset, OccamError, Operand, ResourceLimits, Source, + VerificationMetrics, + dataset_scan::{DatasetShape, scan_dataset}, + limits::{checked_add, checked_mul}, + verify_compiled_prepacked_with_limits, +}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct PackedDataset { + sample_count: usize, + input_width: usize, + output_width: usize, + input_words: Vec, + expected_words: Vec, + block_count: usize, + tail_mask: u64, +} + +impl PackedDataset { + pub fn sample_count(&self) -> usize { + self.sample_count + } + + pub fn input_width(&self) -> usize { + self.input_width + } + + pub fn output_width(&self) -> usize { + self.output_width + } + + pub fn block_count(&self) -> usize { + self.block_count + } + + pub fn input_column(&self, index: usize) -> Option<&[u64]> { + column(&self.input_words, self.block_count, index) + } + + pub fn expected_column(&self, index: usize) -> Option<&[u64]> { + column(&self.expected_words, self.block_count, index) + } + + pub(crate) fn valid_mask(&self, block: usize) -> u64 { + if block == self.block_count - 1 { + self.tail_mask + } else { + u64::MAX + } + } +} + +fn column(words: &[u64], block_count: usize, index: usize) -> Option<&[u64]> { + let start = index.checked_mul(block_count)?; + let end = start.checked_add(block_count)?; + words.get(start..end) +} + +fn zeroed_words(count: usize, context: &str) -> Result, OccamError> { + let mut words = Vec::new(); + words.try_reserve_exact(count).map_err(|error| { + OccamError::Validation(format!( + "cannot allocate {context} ({count} words): {error}" + )) + })?; + words.resize(count, 0); + Ok(words) +} + +fn allocate_packed( + shape: DatasetShape, + limits: &ResourceLimits, +) -> Result { + let block_count = shape.sample_count.div_ceil(64); + let remainder = shape.sample_count % 64; + let tail_mask = if remainder == 0 { + u64::MAX + } else { + (1u64 << remainder) - 1 + }; + let input_word_count = checked_mul(shape.input_width, block_count, "packed input word count")?; + let expected_word_count = + checked_mul(shape.output_width, block_count, "packed output word count")?; + let total_words = checked_add( + input_word_count, + expected_word_count, + "packed dataset word count", + )?; + limits.require("packed dataset words", total_words, limits.max_packed_words)?; + Ok(PackedDataset { + sample_count: shape.sample_count, + input_width: shape.input_width, + output_width: shape.output_width, + input_words: zeroed_words(input_word_count, "packed inputs")?, + expected_words: zeroed_words(expected_word_count, "packed outputs")?, + block_count, + tail_mask, + }) +} + +pub fn pack_dataset(dataset: &Dataset) -> Result { + pack_dataset_with_limits(dataset, &DEFAULT_LIMITS) +} + +pub fn pack_dataset_with_limits( + dataset: &Dataset, + limits: &ResourceLimits, +) -> Result { + let sample_count = dataset.samples.len(); + if sample_count == 0 { + return Err(OccamError::Validation("dataset has no samples".into())); + } + limits.require("dataset samples", sample_count, limits.max_samples)?; + limits.require( + "dataset input width", + dataset.input_width, + limits.max_input_width, + )?; + limits.require( + "dataset output width", + dataset.output_width, + limits.max_output_width, + )?; + let row_bits = checked_add( + dataset.input_width, + dataset.output_width, + "dataset bits per sample", + )?; + let dataset_bits = checked_mul(row_bits, sample_count, "total dataset bits")?; + limits.require("dataset bits", dataset_bits, limits.max_dataset_bits)?; + let mut packed = allocate_packed( + DatasetShape { + input_width: dataset.input_width, + output_width: dataset.output_width, + sample_count, + }, + limits, + )?; + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let block = sample_index / 64; + let bit = sample_index % 64; + for (column_index, value) in sample.input.iter().enumerate() { + packed.input_words[column_index * packed.block_count + block] |= + u64::from(*value) << bit; + } + for (column_index, value) in sample.expected.iter().enumerate() { + packed.expected_words[column_index * packed.block_count + block] |= + u64::from(*value) << bit; + } + } + Ok(packed) +} + +pub fn parse_packed_dataset(source: impl AsRef<[u8]>) -> Result { + parse_packed_dataset_with_limits(source, &DEFAULT_LIMITS) +} + +pub fn parse_packed_dataset_with_limits( + source: impl AsRef<[u8]>, + limits: &ResourceLimits, +) -> Result { + let source = source.as_ref(); + let shape = scan_dataset(source, limits, |_line, _input, _expected| Ok(()))?; + let mut packed = allocate_packed(shape, limits)?; + let mut sample_index = 0usize; + let second_shape = scan_dataset(source, limits, |_line, input, expected| { + let block = sample_index / 64; + let bit = sample_index % 64; + for (column_index, value) in input.iter().enumerate() { + packed.input_words[column_index * packed.block_count + block] |= + u64::from(*value == b'1') << bit; + } + for (column_index, value) in expected.iter().enumerate() { + packed.expected_words[column_index * packed.block_count + block] |= + u64::from(*value == b'1') << bit; + } + sample_index += 1; + Ok(()) + })?; + debug_assert_eq!(shape, second_shape); + Ok(packed) +} + +pub fn verify_packed( + circuit: &Circuit, + dataset: &Dataset, +) -> Result { + verify_prepacked(circuit, &pack_dataset(dataset)?) +} + +pub fn verify_prepacked( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + verify_prepacked_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +pub fn verify_prepacked_with_limits( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + let compiled = CompiledCircuit::new_with_limits(circuit, limits)?; + verify_compiled_prepacked_with_limits(&compiled, dataset, limits) +} + +#[doc(hidden)] +pub fn verify_prepacked_interpreted( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + verify_prepacked_interpreted_with_limits(circuit, dataset, &DEFAULT_LIMITS) +} + +#[doc(hidden)] +pub fn verify_prepacked_interpreted_with_limits( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result { + validate_verification_dimensions(circuit, dataset, limits)?; + let wire_word_count = checked_mul( + circuit.wire_count, + dataset.block_count, + "packed wire word count", + )?; + limits.require( + "packed wire words", + wire_word_count, + limits.max_packed_words, + )?; + let mut wires = zeroed_words(wire_word_count, "packed wires")?; + for gate in &circuit.gates { + for block in 0..dataset.block_count { + let lhs = resolve_flat_word(gate.lhs, block, dataset, &wires)?; + let rhs = resolve_flat_word(gate.rhs, block, dataset, &wires)?; + let offset = gate + .output + .checked_mul(dataset.block_count) + .and_then(|base| base.checked_add(block)) + .ok_or(OccamError::ArithmeticOverflow { + context: "packed wire offset", + })?; + let output = wires.get_mut(offset).ok_or_else(|| { + OccamError::Validation(format!( + "wire column {}, block {block} is missing", + gate.output + )) + })?; + *output = gate.op.apply_word(lhs, rhs); + } + } + collect_metrics(circuit, dataset, |operand, block| { + resolve_flat_word(operand, block, dataset, &wires) + }) +} + +#[doc(hidden)] +pub fn verify_prepacked_reference( + circuit: &Circuit, + dataset: &PackedDataset, +) -> Result { + validate_verification_dimensions(circuit, dataset, &DEFAULT_LIMITS)?; + let wire_word_count = checked_mul( + circuit.wire_count, + dataset.block_count, + "reference packed wire word count", + )?; + DEFAULT_LIMITS.require( + "packed wire words", + wire_word_count, + DEFAULT_LIMITS.max_packed_words, + )?; + let mut wires = Vec::new(); + wires + .try_reserve_exact(circuit.wire_count) + .map_err(|error| { + OccamError::Validation(format!( + "cannot allocate reference packed wire columns: {error}" + )) + })?; + for _ in 0..circuit.wire_count { + wires.push(zeroed_words( + dataset.block_count, + "reference packed wire column", + )?); + } + for gate in &circuit.gates { + for block in 0..dataset.block_count { + let lhs = resolve_nested_word(gate.lhs, block, dataset, &wires)?; + let rhs = resolve_nested_word(gate.rhs, block, dataset, &wires)?; + let output = wires + .get_mut(gate.output) + .and_then(|wire| wire.get_mut(block)) + .ok_or_else(|| { + OccamError::Validation(format!( + "wire column {}, block {block} is missing", + gate.output + )) + })?; + *output = gate.op.apply_word(lhs, rhs); + } + } + collect_metrics(circuit, dataset, |operand, block| { + resolve_nested_word(operand, block, dataset, &wires) + }) +} + +fn validate_verification_dimensions( + circuit: &Circuit, + dataset: &PackedDataset, + limits: &ResourceLimits, +) -> Result<(), OccamError> { + if circuit.input_count != dataset.input_width() { + return Err(OccamError::Validation(format!( + "dataset input width {} does not match circuit INPUTS {}", + dataset.input_width(), + circuit.input_count + ))); + } + if circuit.outputs.len() != dataset.output_width() { + return Err(OccamError::Validation(format!( + "circuit has {} outputs, dataset has {}", + circuit.outputs.len(), + dataset.output_width() + ))); + } + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + limits.require("dataset samples", dataset.sample_count, limits.max_samples)?; + Ok(()) +} + +fn collect_metrics( + circuit: &Circuit, + dataset: &PackedDataset, + resolve: impl Fn(Operand, usize) -> Result, +) -> Result { + let mut mismatches = zeroed_words(dataset.block_count, "packed mismatch blocks")?; + let mut correct_bits = 0usize; + for (output_index, operand) in circuit.outputs.iter().enumerate() { + let expected = dataset.expected_column(output_index).ok_or_else(|| { + OccamError::Validation(format!("packed output column {output_index} is missing")) + })?; + for block in 0..dataset.block_count { + let mask = dataset.valid_mask(block); + let predicted = resolve(*operand, block)?; + let different = (predicted ^ expected[block]) & mask; + correct_bits = checked_add( + correct_bits, + ((!different) & mask).count_ones() as usize, + "correct verification bits", + )?; + mismatches[block] |= different; + } + } + let exact_matches = mismatches + .iter() + .enumerate() + .map(|(block, different)| { + let mask = dataset.valid_mask(block); + (mask.count_ones() - (different & mask).count_ones()) as usize + }) + .sum(); + + Ok(VerificationMetrics { + samples: dataset.sample_count, + gate_count: circuit.gates.len(), + exact_matches, + correct_bits, + total_bits: checked_mul( + dataset.sample_count, + dataset.output_width(), + "verification bit count", + )?, + }) +} + +fn resolve_flat_word( + operand: Operand, + block: usize, + dataset: &PackedDataset, + wires: &[u64], +) -> Result { + let value = match operand.source { + Source::Input(index) => dataset + .input_column(index) + .and_then(|column| column.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!( + "packed input column {index}, block {block} is missing" + )) + })?, + Source::Wire(index) => index + .checked_mul(dataset.block_count) + .and_then(|base| base.checked_add(block)) + .and_then(|offset| wires.get(offset)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!("wire column {index}, block {block} is missing")) + })?, + }; + Ok(if operand.inverted { !value } else { value }) +} + +fn resolve_nested_word( + operand: Operand, + block: usize, + dataset: &PackedDataset, + wires: &[Vec], +) -> Result { + let value = match operand.source { + Source::Input(index) => dataset + .input_column(index) + .and_then(|column| column.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!( + "packed input column {index}, block {block} is missing" + )) + })?, + Source::Wire(index) => wires + .get(index) + .and_then(|wire| wire.get(block)) + .copied() + .ok_or_else(|| { + OccamError::Validation(format!("wire column {index}, block {block} is missing")) + })?, + }; + Ok(if operand.inverted { !value } else { value }) +} + +#[cfg(test)] +mod tests { + use crate::{Sample, parse_netlist, verify}; + + use super::*; + + fn boundary_dataset(samples: usize) -> Dataset { + Dataset { + input_width: 2, + output_width: 3, + samples: (0..samples) + .map(|index| { + let lhs = index % 2 != 0; + let rhs = index % 3 == 0; + Sample { + input: vec![lhs, rhs], + expected: vec![lhs ^ rhs, !lhs, rhs], + } + }) + .collect(), + } + } + + #[test] + fn matches_scalar_at_word_boundaries() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1 ~x1 x2").unwrap(); + for samples in [1, 63, 64, 65, 127, 128, 129] { + let dataset = boundary_dataset(samples); + assert_eq!( + verify_packed(&circuit, &dataset).unwrap(), + verify(&circuit, &dataset).unwrap(), + "sample count {samples}" + ); + } + } + + #[test] + fn complement_gate_padding_never_counts_as_samples() { + let circuit = parse_netlist("INPUTS 2\nw1 = NAND x1 x2\nOUTPUTS ~w1").unwrap(); + for samples in [1, 63, 65, 129] { + let dataset = Dataset { + input_width: 2, + output_width: 1, + samples: (0..samples) + .map(|index| Sample { + input: vec![index % 2 == 0, index % 3 == 0], + expected: vec![index % 5 == 0], + }) + .collect(), + }; + assert_eq!( + verify_packed(&circuit, &dataset).unwrap(), + verify(&circuit, &dataset).unwrap() + ); + } + } + + #[test] + fn flat_wire_arena_obeys_word_limit() { + let circuit = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS w1 ~x1 x2").unwrap(); + let packed = pack_dataset(&boundary_dataset(65)).unwrap(); + let mut limits = DEFAULT_LIMITS; + limits.max_packed_words = 1; + assert!(matches!( + verify_prepacked_interpreted_with_limits(&circuit, &packed, &limits), + Err(OccamError::ResourceLimit { + resource: "packed wire words", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/reference.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/reference.rs new file mode 100644 index 000000000..e1386f2bd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/reference.rs @@ -0,0 +1,419 @@ +use crate::{ + ArithmeticFamily, CircuitBuilder, DEFAULT_LIMITS, GateOp, OccamError, ResourceLimits, Signal, + SynthesizedCircuit, + limits::{checked_add, checked_mul, checked_sub}, +}; + +struct Builder { + input_count: usize, + next_wire: usize, + lines: Vec, + joined_bytes: usize, + max_bytes: usize, +} + +pub fn synthesize_family( + family: ArithmeticFamily, + operand_bits: usize, +) -> Result { + synthesize_family_with_limits(family, operand_bits, &DEFAULT_LIMITS) +} + +pub fn synthesize_family_with_limits( + family: ArithmeticFamily, + operand_bits: usize, + limits: &ResourceLimits, +) -> Result { + let input_count = checked_mul(operand_bits, 2, "family synthesis input count")?; + let output_count = family.output_width(operand_bits)?; + limits.require("circuit inputs", input_count, limits.max_inputs)?; + limits.require("circuit outputs", output_count, limits.max_outputs)?; + let mut builder = CircuitBuilder::new(input_count, limits)?; + let lhs: Vec<_> = (0..operand_bits).map(Signal::input).collect(); + let rhs: Vec<_> = (operand_bits..input_count).map(Signal::input).collect(); + let outputs = match family { + ArithmeticFamily::Add => synthesize_add(&mut builder, &lhs, &rhs)?, + ArithmeticFamily::AbsDiff => synthesize_abs_diff(&mut builder, &lhs, &rhs)?, + ArithmeticFamily::Multiply => synthesize_product(&mut builder, &lhs, &rhs, output_count)?, + ArithmeticFamily::SumOfSquares => { + synthesize_sum_of_squares(&mut builder, &lhs, &rhs, output_count)? + } + }; + debug_assert_eq!(outputs.len(), output_count); + builder.finish(&outputs) +} + +fn synthesize_add( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut outputs = Vec::with_capacity(lhs.len() + 1); + let (sum, mut carry) = half_adder(builder, lhs[0], rhs[0])?; + outputs.push(sum); + for index in 1..lhs.len() { + let (sum, next_carry) = full_adder(builder, lhs[index], rhs[index], carry)?; + outputs.push(sum); + carry = next_carry; + } + outputs.push(carry); + Ok(outputs) +} + +fn synthesize_abs_diff( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut borrow = builder.zero()?; + let mut difference = Vec::with_capacity(lhs.len()); + for index in 0..lhs.len() { + let propagate = builder.binary(GateOp::Xor, lhs[index], rhs[index])?; + difference.push(builder.binary(GateOp::Xor, propagate, borrow)?); + let generated = builder.binary(GateOp::And, lhs[index].inverted(), rhs[index])?; + let propagated = builder.binary(GateOp::And, propagate.inverted(), borrow)?; + borrow = builder.binary(GateOp::Or, generated, propagated)?; + } + + let mut carry = borrow; + let mut outputs = Vec::with_capacity(lhs.len()); + for bit in difference { + let toggled = builder.binary(GateOp::Xor, bit, borrow)?; + outputs.push(builder.binary(GateOp::Xor, toggled, carry)?); + carry = builder.binary(GateOp::And, toggled, carry)?; + } + Ok(outputs) +} + +fn synthesize_product( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], + width: usize, +) -> Result, OccamError> { + let mut columns = vec![Vec::new(); width + 1]; + for (lhs_index, lhs_signal) in lhs.iter().enumerate() { + for (rhs_index, rhs_signal) in rhs.iter().enumerate() { + columns[lhs_index + rhs_index].push(builder.binary( + GateOp::And, + *lhs_signal, + *rhs_signal, + )?); + } + } + compress_columns(builder, columns, width) +} + +fn synthesize_sum_of_squares( + builder: &mut CircuitBuilder<'_>, + lhs: &[Signal], + rhs: &[Signal], + width: usize, +) -> Result, OccamError> { + let mut columns = vec![Vec::new(); width + 1]; + for operand in [lhs, rhs] { + for (first_index, first) in operand.iter().enumerate() { + for (second_index, second) in operand.iter().enumerate() { + columns[first_index + second_index].push(builder.binary( + GateOp::And, + *first, + *second, + )?); + } + } + } + compress_columns(builder, columns, width) +} + +fn compress_columns( + builder: &mut CircuitBuilder<'_>, + mut columns: Vec>, + width: usize, +) -> Result, OccamError> { + debug_assert!(columns.len() > width); + let mut outputs = Vec::with_capacity(width); + for column in 0..width { + while columns[column].len() > 2 { + let third = columns[column].pop().unwrap(); + let second = columns[column].pop().unwrap(); + let first = columns[column].pop().unwrap(); + let (sum, carry) = full_adder(builder, first, second, third)?; + columns[column].push(sum); + columns[column + 1].push(carry); + } + match columns[column].as_slice() { + [] => outputs.push(builder.zero()?), + [only] => outputs.push(*only), + [first, second] => { + let (sum, carry) = half_adder(builder, *first, *second)?; + outputs.push(sum); + columns[column + 1].push(carry); + } + _ => unreachable!(), + } + } + Ok(outputs) +} + +fn half_adder( + builder: &mut CircuitBuilder<'_>, + lhs: Signal, + rhs: Signal, +) -> Result<(Signal, Signal), OccamError> { + Ok(( + builder.binary(GateOp::Xor, lhs, rhs)?, + builder.binary(GateOp::And, lhs, rhs)?, + )) +} + +fn full_adder( + builder: &mut CircuitBuilder<'_>, + lhs: Signal, + rhs: Signal, + carry: Signal, +) -> Result<(Signal, Signal), OccamError> { + let propagate = builder.binary(GateOp::Xor, lhs, rhs)?; + let sum = builder.binary(GateOp::Xor, propagate, carry)?; + let generated = builder.binary(GateOp::And, lhs, rhs)?; + let carried = builder.binary(GateOp::And, propagate, carry)?; + Ok((sum, builder.binary(GateOp::Or, generated, carried)?)) +} + +impl Builder { + fn new(input_count: usize, max_bytes: usize) -> Result { + let header = format!("INPUTS {input_count}"); + let joined_bytes = header.len(); + if joined_bytes > max_bytes { + return Err(OccamError::ResourceLimit { + resource: "generated bytes", + requested: joined_bytes, + limit: max_bytes, + }); + } + Ok(Self { + input_count, + next_wire: 1, + lines: vec![header], + joined_bytes, + max_bytes, + }) + } + + fn gate(&mut self, op: &str, lhs: &str, rhs: &str) -> Result { + let output = format!("w{}", self.next_wire); + self.next_wire = checked_add(self.next_wire, 1, "generated wire identifier")?; + self.push_line(format!("{output} = {op} {lhs} {rhs}"))?; + Ok(output) + } + + fn finish(mut self, outputs: &[String]) -> Result { + debug_assert!(self.input_count > 0); + self.push_line(format!("OUTPUTS {}", outputs.join(" ")))?; + self.push_line(String::new())?; + Ok(self.lines.join("\n")) + } + + fn push_line(&mut self, line: String) -> Result<(), OccamError> { + let separator = usize::from(!self.lines.is_empty()); + let next_bytes = checked_add( + checked_add(self.joined_bytes, separator, "generated circuit bytes")?, + line.len(), + "generated circuit bytes", + )?; + if next_bytes > self.max_bytes { + return Err(OccamError::ResourceLimit { + resource: "generated bytes", + requested: next_bytes, + limit: self.max_bytes, + }); + } + self.lines.push(line); + self.joined_bytes = next_bytes; + Ok(()) + } +} + +pub fn ripple_carry_adder(bits: usize) -> Result { + ripple_carry_adder_with_limits(bits, &DEFAULT_LIMITS) +} + +pub fn ripple_carry_adder_with_limits( + bits: usize, + limits: &ResourceLimits, +) -> Result { + if bits == 0 { + return Err(OccamError::Validation( + "adder width must be positive".into(), + )); + } + let input_count = checked_mul(bits, 2, "adder input count")?; + let output_count = checked_add(bits, 1, "adder output count")?; + let gate_count = checked_sub( + checked_mul(bits, 5, "adder gate count")?, + 3, + "adder gate count", + )?; + check_circuit_limits(input_count, gate_count, output_count, limits)?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + let mut builder = Builder::new(input_count, max_bytes)?; + let mut outputs = Vec::with_capacity(output_count); + + let first_x = "x1".to_owned(); + let first_y = format!("x{}", bits + 1); + outputs.push(builder.gate("XOR", &first_x, &first_y)?); + let mut carry = builder.gate("AND", &first_x, &first_y)?; + + for bit in 1..bits { + let x = format!("x{}", bit + 1); + let y = format!("x{}", bits + bit + 1); + let propagate = builder.gate("XOR", &x, &y)?; + outputs.push(builder.gate("XOR", &propagate, &carry)?); + let generated = builder.gate("AND", &x, &y)?; + let propagated = builder.gate("AND", &propagate, &carry)?; + carry = builder.gate("OR", &generated, &propagated)?; + } + outputs.push(carry); + builder.finish(&outputs) +} + +pub fn shift_add_multiplier(bits: usize) -> Result { + shift_add_multiplier_with_limits(bits, &DEFAULT_LIMITS) +} + +pub fn shift_add_multiplier_with_limits( + bits: usize, + limits: &ResourceLimits, +) -> Result { + if bits == 0 { + return Err(OccamError::Validation( + "multiplier width must be positive".into(), + )); + } + let width = checked_mul(bits, 2, "multiplier width")?; + let bits_squared = checked_mul(bits, bits, "multiplier partial products")?; + let add_gate_count = checked_sub( + checked_mul(width, 5, "multiplier vector-adder gate count")?, + 3, + "multiplier vector-adder gate count", + )?; + let repeated_adders = checked_mul( + bits - 1, + add_gate_count, + "multiplier repeated-adder gate count", + )?; + let gate_count = checked_add( + checked_add(1, bits_squared, "multiplier gate count")?, + repeated_adders, + "multiplier gate count", + )?; + check_circuit_limits(width, gate_count, width, limits)?; + let max_bytes = limits.max_generated_bytes.min(limits.max_source_bytes); + let mut builder = Builder::new(width, max_bytes)?; + let zero = builder.gate("XOR", "x1", "x1")?; + let mut partials = vec![vec![String::new(); bits]; bits]; + for (x_bit, row) in partials.iter_mut().enumerate() { + for (y_bit, cell) in row.iter_mut().enumerate() { + *cell = builder.gate( + "AND", + &format!("x{}", x_bit + 1), + &format!("x{}", bits + y_bit + 1), + )?; + } + } + + let mut accumulated = vec![zero.clone(); width]; + accumulated[..bits].clone_from_slice(&partials[0]); + for (y_bit, partial_row) in partials.iter().enumerate().skip(1) { + let mut shifted = vec![zero.clone(); width]; + shifted[y_bit..(bits + y_bit)].clone_from_slice(partial_row); + accumulated = add_vectors(&mut builder, &accumulated, &shifted)?; + } + builder.finish(&accumulated) +} + +fn check_circuit_limits( + inputs: usize, + gates: usize, + outputs: usize, + limits: &ResourceLimits, +) -> Result<(), OccamError> { + limits.require("circuit inputs", inputs, limits.max_inputs)?; + limits.require("circuit gates", gates, limits.max_gates)?; + limits.require("circuit outputs", outputs, limits.max_outputs)?; + Ok(()) +} + +fn add_vectors( + builder: &mut Builder, + lhs: &[String], + rhs: &[String], +) -> Result, OccamError> { + debug_assert_eq!(lhs.len(), rhs.len()); + let mut result = Vec::with_capacity(lhs.len()); + result.push(builder.gate("XOR", &lhs[0], &rhs[0])?); + let mut carry = builder.gate("AND", &lhs[0], &rhs[0])?; + for index in 1..lhs.len() { + let propagate = builder.gate("XOR", &lhs[index], &rhs[index])?; + result.push(builder.gate("XOR", &propagate, &carry)?); + let generated = builder.gate("AND", &lhs[index], &rhs[index])?; + let propagated = builder.gate("AND", &propagate, &carry)?; + carry = builder.gate("OR", &generated, &propagated)?; + } + Ok(result) +} + +#[cfg(test)] +mod tests { + use crate::{evaluate, parse_netlist}; + + use super::*; + + fn lsb_bits(value: usize, width: usize) -> Vec { + (0..width).map(|bit| value & (1 << bit) != 0).collect() + } + + #[test] + fn generates_correct_four_bit_adder() { + let circuit = parse_netlist(&ripple_carry_adder(4).unwrap()).unwrap(); + assert_eq!(circuit.gates.len(), 17); + for x in 0..16 { + for y in 0..16 { + let mut input = lsb_bits(x, 4); + input.extend(lsb_bits(y, 4)); + assert_eq!(evaluate(&circuit, &input).unwrap(), lsb_bits(x + y, 5)); + } + } + } + + #[test] + fn generates_correct_four_bit_multiplier() { + let circuit = parse_netlist(&shift_add_multiplier(4).unwrap()).unwrap(); + assert_eq!(circuit.gates.len(), 128); + for x in 0..16 { + for y in 0..16 { + let mut input = lsb_bits(x, 4); + input.extend(lsb_bits(y, 4)); + assert_eq!(evaluate(&circuit, &input).unwrap(), lsb_bits(x * y, 8)); + } + } + } + + #[test] + fn reference_generators_enforce_limits_and_overflow() { + let mut limits = DEFAULT_LIMITS; + limits.max_gates = 1; + assert!(matches!( + ripple_carry_adder_with_limits(1, &limits), + Err(OccamError::ResourceLimit { + resource: "circuit gates", + .. + }) + )); + assert!(matches!( + shift_add_multiplier_with_limits(usize::MAX, &DEFAULT_LIMITS), + Err(OccamError::ArithmeticOverflow { .. }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/abc_dont_care.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/abc_dont_care.rs new file mode 100644 index 000000000..f7740ae37 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/abc_dont_care.rs @@ -0,0 +1,227 @@ +use std::path::PathBuf; + +use crate::{ + DEFAULT_LIMITS, ExternalCommandLimits, ResourceLimits, logic::synthesize_partial_with_abc, + parse_netlist, verify, +}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const MAX_OBSERVED_ROWS: usize = 512; + +pub struct AbcDontCareLearner { + abc_binary: Option, + genlib_path: PathBuf, +} + +impl AbcDontCareLearner { + pub fn new(abc_binary: Option) -> Self { + Self { + abc_binary, + genlib_path: PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .expect("crate must be inside the workspace") + .join("tools/abc/occam.genlib"), + } + } + + pub fn with_genlib(abc_binary: Option, genlib_path: PathBuf) -> Self { + Self { + abc_binary, + genlib_path, + } + } +} + +impl ResearchLearner for AbcDontCareLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::AbcDontCare + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let abc_binary = self.abc_binary.as_ref().ok_or_else(|| { + LearnerFailure::Unsupported( + "ABC don't-care learning requires the checksum-pinned ABC executable".into(), + ) + })?; + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "ABC don't-care learning has a zero timeout".into(), + )); + } + if observed.samples.len() > MAX_OBSERVED_ROWS { + return Err(LearnerFailure::ResourceLimit(format!( + "ABC partial-PLA baseline supports at most {MAX_OBSERVED_ROWS} observed rows, got {}", + observed.samples.len() + ))); + } + let pla = render_partial_pla(observed)?; + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let command_limits = ExternalCommandLimits { + timeout: budget.timeout, + ..ExternalCommandLimits::default() + }; + let netlist = synthesize_partial_with_abc( + &pla, + abc_binary, + &self.genlib_path, + &command_limits, + &limits, + ) + .map_err(classify_abc_failure)?; + let circuit = parse_netlist(&netlist).map_err(classify_abc_failure)?; + let metrics = verify(&circuit, &observed.dataset()).map_err(classify_abc_failure)?; + if metrics.exact_matches != metrics.samples { + return Err(LearnerFailure::ToolError(format!( + "ABC hypothesis fits only {}/{} observed rows", + metrics.exact_matches, metrics.samples + ))); + } + Ok(LearnedHypothesis::Circuit { + netlist, + description_length: Some(circuit.gates.len()), + minimum_unique: None, + detail: format!( + "checksum-pinned ABC partial-PLA flow over {} observed rows", + observed.samples.len() + ), + }) + } +} + +pub fn render_partial_pla(observed: &ObservedTask) -> Result { + let rows = normalized_rows(observed)?; + let mut output = format!( + ".i {}\n.o {}\n", + observed.input_width, observed.output_width + ); + output.push_str(".ilb"); + for input in 0..observed.input_width { + output.push_str(&format!(" i{input}")); + } + output.push('\n'); + output.push_str(".ob"); + for bit in 0..observed.output_width { + output.push_str(&format!(" o{bit}")); + } + output.push_str("\n.type fd\n"); + let mut prefix = String::with_capacity(observed.input_width); + emit_partitioned_cubes( + &rows, + 0, + observed.input_width, + observed.output_width, + &mut prefix, + &mut output, + ); + output.push_str(".e\n"); + Ok(output) +} + +type Row = (Vec, Vec); + +fn emit_partitioned_cubes( + rows: &[Row], + depth: usize, + input_width: usize, + output_width: usize, + prefix: &mut String, + output: &mut String, +) { + if rows.is_empty() { + output.push_str(prefix); + output.extend(std::iter::repeat_n('-', input_width - depth)); + output.push(' '); + output.extend(std::iter::repeat_n('-', output_width)); + output.push('\n'); + return; + } + if depth == input_width { + output.push_str(prefix); + output.push(' '); + output.extend(rows[0].1.iter().map(|bit| if *bit { '1' } else { '0' })); + output.push('\n'); + return; + } + let split = rows.partition_point(|row| !row.0[depth]); + prefix.push('0'); + emit_partitioned_cubes( + &rows[..split], + depth + 1, + input_width, + output_width, + prefix, + output, + ); + prefix.pop(); + prefix.push('1'); + emit_partitioned_cubes( + &rows[split..], + depth + 1, + input_width, + output_width, + prefix, + output, + ); + prefix.pop(); +} + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "ABC requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn classify_abc_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + error if error.to_string().contains("timed out") => { + LearnerFailure::Timeout(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/adapters.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/adapters.rs new file mode 100644 index 000000000..cf6de2d56 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/adapters.rs @@ -0,0 +1,130 @@ +use crate::{ + ArithmeticFamily, BinaryOp, Expr, MdlSearchConfig, OccamError, SearchTermination, + score_candidates, search_mdl, +}; + +use super::{ + AbcDontCareLearner, GrammarEvolutionLearner, LearnedHypothesis, LearnerFailure, + MemorizationLearner, ObservedTask, ResearchLearner, ResearchMethod, ResearchTools, + RobddLearner, SatCegisLearner, TrialBudget, +}; + +pub fn default_adapters(tools: ResearchTools) -> Vec> { + vec![ + Box::new(LegacyRegistryLearner), + Box::new(MdlEnumeratorLearner), + Box::new(AbcDontCareLearner::new(tools.abc)), + Box::new(RobddLearner), + Box::new(SatCegisLearner), + Box::new(GrammarEvolutionLearner::default()), + Box::new(MemorizationLearner), + ] +} + +struct LegacyRegistryLearner; + +impl ResearchLearner for LegacyRegistryLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::LegacyRegistry + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + _budget: &TrialBudget, + ) -> Result { + let scores = score_candidates(&observed.dataset()) + .map_err(|error| LearnerFailure::NoHypothesis(error.to_string()))?; + let perfect = scores + .iter() + .filter(|score| score.mismatches == 0) + .map(|score| score.family) + .collect::>(); + let [family] = perfect.as_slice() else { + return Err(LearnerFailure::NoHypothesis( + "legacy registry has no unique training-consistent family".into(), + )); + }; + Ok(LearnedHypothesis::Expression { + expression: family_expression(*family), + minimum_unique: Some(true), + detail: "legacy four-family registry baseline".into(), + }) + } +} + +struct MdlEnumeratorLearner; + +impl ResearchLearner for MdlEnumeratorLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::MdlEnumerator + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let timeout_millis = budget.timeout.as_millis().try_into().unwrap_or(u64::MAX); + let config = MdlSearchConfig { + max_description_cost: 8, + max_generated_expressions: 500_000, + max_semantic_classes: budget.max_nodes.min(100_000), + timeout_millis, + ..MdlSearchConfig::default() + }; + let result = search_mdl(&observed.dataset(), &config).map_err(classify_occam_failure)?; + let expression = match result.report.termination { + SearchTermination::Found => result.expression.ok_or_else(|| { + LearnerFailure::NoHypothesis( + "MDL search reported success without an expression".into(), + ) + })?, + SearchTermination::CostExhausted => { + return Err(LearnerFailure::NoHypothesis( + "MDL search exhausted its description-cost bound".into(), + )); + } + SearchTermination::ExpressionLimit | SearchTermination::SemanticClassLimit => { + return Err(LearnerFailure::ResourceLimit(format!( + "MDL search stopped at {:?}", + result.report.termination + ))); + } + SearchTermination::Timeout => { + return Err(LearnerFailure::Timeout( + "MDL search exceeded the trial timeout".into(), + )); + } + }; + Ok(LearnedHypothesis::Expression { + expression, + minimum_unique: result.report.minimum_unique, + detail: "cost-ordered generic MDL enumeration".into(), + }) + } +} + +fn classify_occam_failure(error: OccamError) -> LearnerFailure { + match error { + OccamError::ResourceLimit { .. } | OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} + +fn family_expression(family: ArithmeticFamily) -> Expr { + match family { + ArithmeticFamily::Add => Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()), + ArithmeticFamily::AbsDiff => Expr::abs_diff(Expr::x(), Expr::y()), + ArithmeticFamily::Multiply => Expr::binary(BinaryOp::Multiply, Expr::x(), Expr::y()), + ArithmeticFamily::SumOfSquares => Expr::binary( + BinaryOp::Add, + Expr::square(Expr::x()), + Expr::square(Expr::y()), + ), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/bdd.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/bdd.rs new file mode 100644 index 000000000..37b38b1fd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/bdd.rs @@ -0,0 +1,327 @@ +use std::{collections::HashMap, time::Instant}; + +use crate::{CircuitBuilder, DEFAULT_LIMITS, GateOp, ResourceLimits, Signal}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +type NodeId = usize; +type Row = (Vec, Vec); + +#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] +enum Node { + False, + True, + Branch { + variable: usize, + low: NodeId, + high: NodeId, + }, +} + +#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)] +pub enum BddOrder { + File, + Interleaved, + YThenX, + Reverse, +} + +impl BddOrder { + pub const ALL: [Self; 4] = [Self::File, Self::Interleaved, Self::YThenX, Self::Reverse]; + + fn name(self) -> &'static str { + match self { + Self::File => "file", + Self::Interleaved => "interleaved", + Self::YThenX => "y-then-x", + Self::Reverse => "reverse", + } + } + + fn variables(self, input_width: usize) -> Vec { + match self { + Self::File => (0..input_width).collect(), + Self::Reverse => (0..input_width).rev().collect(), + Self::YThenX => { + let midpoint = input_width / 2; + (midpoint..input_width).chain(0..midpoint).collect() + } + Self::Interleaved => { + let midpoint = input_width / 2; + let mut variables = Vec::with_capacity(input_width); + for offset in 0..midpoint { + variables.push(offset); + if midpoint + offset < input_width { + variables.push(midpoint + offset); + } + } + if !input_width.is_multiple_of(2) { + variables.push(input_width - 1); + } + variables + } + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct BddResult { + pub netlist: String, + pub node_count: usize, + pub gate_count: usize, + pub order: BddOrder, +} + +pub struct RobddLearner; + +impl ResearchLearner for RobddLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::Robdd + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let mut candidates = BddOrder::ALL + .into_iter() + .map(|order| build_robdd(observed, order, budget)) + .collect::, _>>()?; + candidates.sort_by_key(|result| (result.node_count, result.gate_count, result.order)); + let best = candidates + .into_iter() + .next() + .ok_or_else(|| LearnerFailure::NoHypothesis("ROBDD produced no ordering".into()))?; + Ok(LearnedHypothesis::Circuit { + netlist: best.netlist, + description_length: Some(best.node_count), + minimum_unique: None, + detail: format!( + "reduced ordered BDD using {} order ({} nonterminal nodes)", + best.order.name(), + best.node_count + ), + }) + } +} + +pub fn build_robdd( + observed: &ObservedTask, + order: BddOrder, + budget: &TrialBudget, +) -> Result { + let rows = normalized_rows(observed)?; + let variables = order.variables(observed.input_width); + let deadline = Instant::now() + budget.timeout; + let mut manager = BddManager::new(budget.max_nodes, deadline); + let row_refs = rows.iter().collect::>(); + let roots = (0..observed.output_width) + .map(|output| manager.build(&row_refs, &variables, 0, output)) + .collect::, _>>()?; + let node_count = manager.nodes.len().saturating_sub(2); + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let mut builder = + CircuitBuilder::new(observed.input_width, &limits).map_err(classify_builder_failure)?; + let mut compiled = HashMap::new(); + let outputs = roots + .iter() + .map(|root| compile_node(*root, &manager.nodes, &mut compiled, &mut builder)) + .collect::, _>>()?; + let circuit = builder.finish(&outputs).map_err(classify_builder_failure)?; + Ok(BddResult { + netlist: circuit.netlist, + node_count, + gate_count: circuit.gate_count, + order, + }) +} + +struct BddManager { + nodes: Vec, + unique: HashMap<(usize, NodeId, NodeId), NodeId>, + max_nodes: usize, + deadline: Instant, +} + +impl BddManager { + fn new(max_nodes: usize, deadline: Instant) -> Self { + Self { + nodes: vec![Node::False, Node::True], + unique: HashMap::new(), + max_nodes, + deadline, + } + } + + fn build( + &mut self, + rows: &[&Row], + variables: &[usize], + depth: usize, + output: usize, + ) -> Result { + self.check_deadline("ROBDD construction")?; + if rows.is_empty() { + return Ok(0); + } + let first = rows[0].1[output]; + if rows.iter().all(|row| row.1[output] == first) { + return Ok(usize::from(first)); + } + let Some(variable) = variables.get(depth).copied() else { + return Err(LearnerFailure::NoHypothesis( + "identical observed inputs have conflicting outputs".into(), + )); + }; + let mut low = Vec::new(); + let mut high = Vec::new(); + for row in rows { + if row.0[variable] { + high.push(*row); + } else { + low.push(*row); + } + } + + let low = (!low.is_empty()) + .then(|| self.build(&low, variables, depth + 1, output)) + .transpose()?; + let high = (!high.is_empty()) + .then(|| self.build(&high, variables, depth + 1, output)) + .transpose()?; + match (low, high) { + (Some(low), Some(high)) => self.branch(variable, low, high), + (Some(populated), None) | (None, Some(populated)) => Ok(populated), + (None, None) => Ok(0), + } + } + + fn branch( + &mut self, + variable: usize, + low: NodeId, + high: NodeId, + ) -> Result { + if low == high { + return Ok(low); + } + let key = (variable, low, high); + if let Some(node) = self.unique.get(&key) { + return Ok(*node); + } + let next_node_count = self.nodes.len().saturating_sub(1); + if next_node_count > self.max_nodes { + return Err(LearnerFailure::ResourceLimit(format!( + "ROBDD node limit {} exceeded", + self.max_nodes + ))); + } + let id = self.nodes.len(); + self.nodes.push(Node::Branch { + variable, + low, + high, + }); + self.unique.insert(key, id); + Ok(id) + } + + fn check_deadline(&self, label: &str) -> Result<(), LearnerFailure> { + if Instant::now() >= self.deadline { + Err(LearnerFailure::Timeout(format!( + "{label} exceeded the trial timeout" + ))) + } else { + Ok(()) + } + } +} + +fn compile_node( + id: NodeId, + nodes: &[Node], + compiled: &mut HashMap, + builder: &mut CircuitBuilder<'_>, +) -> Result { + if let Some(signal) = compiled.get(&id) { + return Ok(*signal); + } + let signal = match nodes[id] { + Node::False => builder.zero().map_err(classify_builder_failure)?, + Node::True => builder.one().map_err(classify_builder_failure)?, + Node::Branch { + variable, + low, + high, + } => { + let low = compile_node(low, nodes, compiled, builder)?; + let high = compile_node(high, nodes, compiled, builder)?; + let variable = Signal::input(variable); + let when_high = builder + .binary(GateOp::And, variable, high) + .map_err(classify_builder_failure)?; + let when_low = builder + .binary(GateOp::And, variable.inverted(), low) + .map_err(classify_builder_failure)?; + builder + .binary(GateOp::Or, when_high, when_low) + .map_err(classify_builder_failure)? + } + }; + compiled.insert(id, signal); + Ok(signal) +} + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "ROBDD requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn classify_builder_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/evolution.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/evolution.rs new file mode 100644 index 000000000..08563f568 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/evolution.rs @@ -0,0 +1,551 @@ +use std::{ + collections::{HashMap, HashSet}, + time::Instant, +}; + +use rand::{Rng, SeedableRng}; +use rand_chacha::ChaCha8Rng; + +use crate::{BinaryOp, Expr, ExprSemantics, decode_lsb}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const BINARY_OPERATORS: [BinaryOp; 9] = [ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, +]; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct EvolutionConfig { + pub population: usize, + pub generations: usize, + pub elite: usize, + pub tournament: usize, + pub mutation_probability_per_mille: u16, + pub max_description_cost: usize, +} + +impl Default for EvolutionConfig { + fn default() -> Self { + Self { + population: 128, + generations: 200, + elite: 8, + tournament: 4, + mutation_probability_per_mille: 700, + max_description_cost: 12, + } + } +} + +impl EvolutionConfig { + pub fn for_tests() -> Self { + Self { + population: 32, + generations: 20, + elite: 4, + tournament: 3, + mutation_probability_per_mille: 700, + max_description_cost: 8, + } + } + + fn validate(self) -> Result { + if self.population < 2 + || self.generations == 0 + || self.elite == 0 + || self.elite >= self.population + || self.tournament == 0 + || self.tournament > self.population + || self.mutation_probability_per_mille > 1_000 + || self.max_description_cost < 3 + { + return Err(LearnerFailure::ToolError( + "invalid grammar-evolution configuration".into(), + )); + } + Ok(self) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct EvolutionTraceEntry { + pub generation: usize, + pub row_mismatches: usize, + pub bit_mismatches: usize, + pub description_cost: usize, + pub estimated_gate_count: usize, + pub expression: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct EvolutionResult { + pub best_expression: Expr, + pub best_row_mismatches: usize, + pub best_bit_mismatches: usize, + pub evaluated_expressions: usize, + pub trace: Vec, +} + +pub struct GrammarEvolutionLearner { + config: EvolutionConfig, +} + +impl GrammarEvolutionLearner { + pub fn new(config: EvolutionConfig) -> Self { + Self { config } + } +} + +impl Default for GrammarEvolutionLearner { + fn default() -> Self { + Self::new(EvolutionConfig::default()) + } +} + +impl ResearchLearner for GrammarEvolutionLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::GrammarEvolution + } + + fn fit( + &self, + observed: &ObservedTask, + seed: u64, + budget: &TrialBudget, + ) -> Result { + let result = evolve_with_budget(observed, seed, self.config, budget)?; + Ok(LearnedHypothesis::Expression { + expression: result.best_expression, + minimum_unique: None, + detail: format!( + "seeded grammar evolution evaluated {} canonical expressions across {} generations; best training row errors={}", + result.evaluated_expressions, + result.trace.len(), + result.best_row_mismatches + ), + }) + } +} + +pub fn evolve( + observed: &ObservedTask, + seed: u64, + config: EvolutionConfig, +) -> Result { + evolve_with_budget(observed, seed, config, &TrialBudget::default()) +} + +pub fn evolve_with_budget( + observed: &ObservedTask, + seed: u64, + config: EvolutionConfig, + budget: &TrialBudget, +) -> Result { + let config = config.validate()?; + if observed.input_width == 0 || !observed.input_width.is_multiple_of(2) { + return Err(LearnerFailure::Unsupported( + "grammar evolution requires two equal-width operands".into(), + )); + } + if observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "grammar evolution requires at least one observed row".into(), + )); + } + let semantics = ExprSemantics::new(observed.input_width / 2, observed.output_width) + .map_err(|error| LearnerFailure::Unsupported(error.to_string()))?; + validate_rows(observed)?; + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "grammar evolution has a zero timeout".into(), + )); + } + + let deadline = Instant::now() + budget.timeout; + let mixed_seed = seed + ^ (observed.input_width as u64).rotate_left(17) + ^ (observed.output_width as u64).rotate_left(33) + ^ (observed.samples.len() as u64).rotate_left(49); + let mut rng = ChaCha8Rng::seed_from_u64(mixed_seed); + let mut population = initial_population(config, semantics, &mut rng); + let mut evaluator = FitnessEvaluator { + observed, + semantics, + deadline, + max_evaluated: budget.max_nodes, + cache: HashMap::new(), + }; + let mut trace = Vec::with_capacity(config.generations); + let mut stable_zero = None::; + let mut final_best = None::; + + for generation in 0..config.generations { + let mut ranked = evaluator.rank(population)?; + ranked.truncate(config.population); + let best = ranked[0].clone(); + trace.push(EvolutionTraceEntry { + generation, + row_mismatches: best.fitness.row_mismatches, + bit_mismatches: best.fitness.bit_mismatches, + description_cost: best.fitness.description_cost, + estimated_gate_count: best.fitness.estimated_gate_count, + expression: best.fitness.expression.clone(), + }); + + if best.fitness.row_mismatches == 0 { + if stable_zero.as_ref() == Some(&best.expression) { + final_best = Some(best); + break; + } + stable_zero = Some(best.expression.clone()); + } else { + stable_zero = None; + } + final_best = Some(best); + if generation + 1 == config.generations { + break; + } + + let mut next = ranked + .iter() + .take(config.elite) + .map(|candidate| candidate.expression.clone()) + .collect::>(); + while next.len() < config.population { + let parent = tournament_select(&ranked, config.tournament, &mut rng); + let child = + if rng.random_range(0..1_000) < u32::from(config.mutation_probability_per_mille) { + mutate( + &parent.expression, + config.max_description_cost, + semantics, + &mut rng, + ) + } else { + parent.expression.clone() + }; + next.push(child); + } + population = next; + } + + let best = final_best.ok_or_else(|| { + LearnerFailure::NoHypothesis("grammar evolution produced no candidate".into()) + })?; + Ok(EvolutionResult { + best_expression: best.expression, + best_row_mismatches: best.fitness.row_mismatches, + best_bit_mismatches: best.fitness.bit_mismatches, + evaluated_expressions: evaluator.cache.len(), + trace, + }) +} + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] +struct Fitness { + row_mismatches: usize, + bit_mismatches: usize, + description_cost: usize, + estimated_gate_count: usize, + expression: String, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +struct Ranked { + expression: Expr, + fitness: Fitness, +} + +struct FitnessEvaluator<'a> { + observed: &'a ObservedTask, + semantics: ExprSemantics, + deadline: Instant, + max_evaluated: usize, + cache: HashMap, +} + +impl FitnessEvaluator<'_> { + fn rank(&mut self, population: Vec) -> Result, LearnerFailure> { + let mut unique = HashSet::new(); + let mut ranked = Vec::new(); + for expression in population { + if !unique.insert(expression.clone()) { + continue; + } + let fitness = self.fitness(&expression)?; + ranked.push(Ranked { + expression, + fitness, + }); + } + if ranked.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "grammar evolution population became empty".into(), + )); + } + ranked.sort_by(|lhs, rhs| { + (&lhs.fitness, &lhs.expression).cmp(&(&rhs.fitness, &rhs.expression)) + }); + Ok(ranked) + } + + fn fitness(&mut self, expression: &Expr) -> Result { + if let Some(fitness) = self.cache.get(expression) { + return Ok(fitness.clone()); + } + if Instant::now() >= self.deadline { + return Err(LearnerFailure::Timeout( + "grammar evolution exceeded the trial timeout".into(), + )); + } + if self.cache.len() >= self.max_evaluated { + return Err(LearnerFailure::ResourceLimit(format!( + "grammar evolution expression limit {} exceeded", + self.max_evaluated + ))); + } + let mut row_mismatches = 0usize; + let mut bit_mismatches = 0usize; + for sample in &self.observed.samples { + let operand_bits = self.semantics.operand_bits; + let x = decode_lsb(&sample.input[..operand_bits]) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let y = decode_lsb(&sample.input[operand_bits..]) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let expected = decode_lsb(&sample.expected) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + let actual = expression + .evaluate(x, y, self.semantics) + .map_err(|error| LearnerFailure::ToolError(error.to_string()))?; + if actual != expected { + row_mismatches += 1; + bit_mismatches += (actual ^ expected).count_ones() as usize; + } + } + let fitness = Fitness { + row_mismatches, + bit_mismatches, + description_cost: expression.description_cost(), + estimated_gate_count: estimated_gate_count(expression), + expression: expression.to_string(), + }; + self.cache.insert(expression.clone(), fitness.clone()); + Ok(fitness) + } +} + +fn initial_population( + config: EvolutionConfig, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Vec { + let mut population = vec![ + Expr::x(), + Expr::y(), + Expr::constant(0), + Expr::constant(1), + Expr::square(Expr::x()), + Expr::square(Expr::y()), + ]; + for operator in BINARY_OPERATORS { + population.push(Expr::binary(operator, Expr::x(), Expr::y())); + population.push(Expr::binary(operator, Expr::y(), Expr::x())); + } + while population.len() < config.population { + population.push(random_expression( + config.max_description_cost, + semantics, + rng, + )); + } + canonical_unique(population, config.max_description_cost) +} + +fn tournament_select<'a>( + ranked: &'a [Ranked], + tournament: usize, + rng: &mut ChaCha8Rng, +) -> &'a Ranked { + let mut selected = rng.random_range(0..ranked.len()); + for _ in 1..tournament { + selected = selected.min(rng.random_range(0..ranked.len())); + } + &ranked[selected] +} + +fn mutate( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + let candidate = match rng.random_range(0..5) { + 0 => random_expression(max_cost, semantics, rng), + 1 => replace_operator(expression, rng), + 2 => { + if rng.random_bool(0.5) { + Expr::square(expression.clone()) + } else { + Expr::shift_left(expression.clone(), rng.random_range(1..=3)) + } + } + 3 => replace_child(expression, max_cost, semantics, rng), + _ => replace_subtree(expression, max_cost, semantics, rng), + }; + bounded_canonical(candidate, max_cost).unwrap_or_else(|| expression.clone()) +} + +fn replace_operator(expression: &Expr, rng: &mut ChaCha8Rng) -> Expr { + match expression { + Expr::Binary { lhs, rhs, .. } => Expr::binary( + BINARY_OPERATORS[rng.random_range(0..BINARY_OPERATORS.len())], + (**lhs).clone(), + (**rhs).clone(), + ), + Expr::Square(value) | Expr::ShiftLeft { value, .. } => { + if rng.random_bool(0.5) { + Expr::square((**value).clone()) + } else { + Expr::shift_left((**value).clone(), rng.random_range(1..=3)) + } + } + _ => expression.clone(), + } +} + +fn replace_child( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + let child = random_expression(max_cost.saturating_sub(2).max(1), semantics, rng); + match expression { + Expr::Binary { op, lhs, rhs } if rng.random_bool(0.5) => { + Expr::binary(*op, child, (**rhs).clone()) + } + Expr::Binary { op, lhs, .. } => Expr::binary(*op, (**lhs).clone(), child), + Expr::Square(_) => Expr::square(child), + Expr::ShiftLeft { amount, .. } => Expr::shift_left(child, *amount), + _ => child, + } +} + +fn replace_subtree( + expression: &Expr, + max_cost: usize, + semantics: ExprSemantics, + rng: &mut ChaCha8Rng, +) -> Expr { + if rng.random_bool(0.35) { + return random_expression(max_cost, semantics, rng); + } + match expression { + Expr::Binary { op, lhs, rhs } if rng.random_bool(0.5) => Expr::binary( + *op, + replace_subtree(lhs, max_cost.saturating_sub(2).max(1), semantics, rng), + (**rhs).clone(), + ), + Expr::Binary { op, lhs, rhs } => Expr::binary( + *op, + (**lhs).clone(), + replace_subtree(rhs, max_cost.saturating_sub(2).max(1), semantics, rng), + ), + Expr::Square(value) => Expr::square(replace_subtree( + value, + max_cost.saturating_sub(1).max(1), + semantics, + rng, + )), + Expr::ShiftLeft { value, amount } => Expr::shift_left( + replace_subtree(value, max_cost.saturating_sub(1).max(1), semantics, rng), + *amount, + ), + _ => random_expression(max_cost, semantics, rng), + } +} + +fn random_expression(max_cost: usize, semantics: ExprSemantics, rng: &mut ChaCha8Rng) -> Expr { + if max_cost < 2 || rng.random_bool(0.3) { + return random_terminal(semantics, rng); + } + let candidate = if max_cost < 3 || rng.random_bool(0.3) { + let child = random_expression(max_cost - 1, semantics, rng); + if rng.random_bool(0.5) { + Expr::square(child) + } else { + Expr::shift_left(child, rng.random_range(1..=3)) + } + } else { + let remaining = max_cost - 1; + let lhs_cost = rng.random_range(1..remaining); + let rhs_cost = remaining - lhs_cost; + Expr::binary( + BINARY_OPERATORS[rng.random_range(0..BINARY_OPERATORS.len())], + random_expression(lhs_cost, semantics, rng), + random_expression(rhs_cost, semantics, rng), + ) + }; + bounded_canonical(candidate, max_cost).unwrap_or_else(|| random_terminal(semantics, rng)) +} + +fn random_terminal(semantics: ExprSemantics, rng: &mut ChaCha8Rng) -> Expr { + match rng.random_range(0..4) { + 0 => Expr::x(), + 1 => Expr::y(), + _ => Expr::constant(rng.random_range(0..=semantics.output_mask().min(3))), + } +} + +fn bounded_canonical(expression: Expr, max_cost: usize) -> Option { + let expression = expression.canonicalize().ok()?; + (expression.description_cost() <= max_cost).then_some(expression) +} + +fn canonical_unique(population: Vec, max_cost: usize) -> Vec { + let mut seen = HashSet::new(); + population + .into_iter() + .filter_map(|expression| bounded_canonical(expression, max_cost)) + .filter(|expression| seen.insert(expression.clone())) + .collect() +} + +fn estimated_gate_count(expression: &Expr) -> usize { + match expression { + Expr::X | Expr::Y | Expr::Constant(_) => 0, + Expr::Square(value) => estimated_gate_count(value).saturating_add(3), + Expr::ShiftLeft { value, .. } => estimated_gate_count(value).saturating_add(1), + Expr::Binary { op, lhs, rhs } => estimated_gate_count(lhs) + .saturating_add(estimated_gate_count(rhs)) + .saturating_add(match op { + BinaryOp::Multiply => 4, + BinaryOp::Add | BinaryOp::Subtract | BinaryOp::AbsDiff => 3, + BinaryOp::Min | BinaryOp::Max => 2, + BinaryOp::BitXor | BinaryOp::BitAnd | BinaryOp::BitOr => 1, + }), + } +} + +fn validate_rows(observed: &ObservedTask) -> Result<(), LearnerFailure> { + for sample in &observed.samples { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/learner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/learner.rs new file mode 100644 index 000000000..0d3e57e7d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/learner.rs @@ -0,0 +1,83 @@ +use std::{path::PathBuf, time::Duration}; + +use thiserror::Error; + +use crate::Expr; + +use super::{ObservedTask, ResearchMethod, TrialStatus}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TrialBudget { + pub timeout: Duration, + pub max_gates: usize, + pub max_nodes: usize, +} + +impl Default for TrialBudget { + fn default() -> Self { + Self { + timeout: Duration::from_secs(30), + max_gates: crate::DEFAULT_LIMITS.max_gates, + max_nodes: 250_000, + } + } +} + +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct ResearchTools { + pub abc: Option, + pub espresso: Option, + pub yosys: Option, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum LearnedHypothesis { + Expression { + expression: Expr, + minimum_unique: Option, + detail: String, + }, + Circuit { + netlist: String, + description_length: Option, + minimum_unique: Option, + detail: String, + }, +} + +#[derive(Clone, Debug, Eq, Error, PartialEq)] +pub enum LearnerFailure { + #[error("{0}")] + NoHypothesis(String), + #[error("{0}")] + Unsupported(String), + #[error("{0}")] + Timeout(String), + #[error("{0}")] + ResourceLimit(String), + #[error("{0}")] + ToolError(String), +} + +impl LearnerFailure { + pub fn status(&self) -> TrialStatus { + match self { + Self::NoHypothesis(_) => TrialStatus::NoHypothesis, + Self::Unsupported(_) => TrialStatus::Unsupported, + Self::Timeout(_) => TrialStatus::Timeout, + Self::ResourceLimit(_) => TrialStatus::ResourceLimit, + Self::ToolError(_) => TrialStatus::Error, + } + } +} + +pub trait ResearchLearner: Send + Sync { + fn method(&self) -> ResearchMethod; + + fn fit( + &self, + observed: &ObservedTask, + seed: u64, + budget: &TrialBudget, + ) -> Result; +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/memory.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/memory.rs new file mode 100644 index 000000000..e9cedeee1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/memory.rs @@ -0,0 +1,156 @@ +use std::time::Instant; + +use crate::{CircuitBuilder, DEFAULT_LIMITS, GateOp, ResourceLimits, Signal}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +pub struct MemorizationLearner; + +impl ResearchLearner for MemorizationLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::Memorization + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + let rows = normalized_rows(observed)?; + let limits = ResourceLimits { + max_gates: budget.max_gates, + ..DEFAULT_LIMITS + }; + let mut builder = + CircuitBuilder::new(observed.input_width, &limits).map_err(classify_builder_failure)?; + let deadline = Instant::now() + budget.timeout; + let outputs = (0..observed.output_width) + .map(|output| { + compile_trie( + &mut builder, + &rows, + 0, + observed.input_width, + output, + deadline, + ) + }) + .collect::, _>>()?; + let circuit = builder.finish(&outputs).map_err(classify_builder_failure)?; + Ok(LearnedHypothesis::Circuit { + netlist: circuit.netlist, + description_length: Some(circuit.gate_count), + minimum_unique: None, + detail: format!( + "explicit zero-default decision trie over {} distinct observed rows", + rows.len() + ), + }) + } +} + +type Row = (Vec, Vec); + +fn normalized_rows(observed: &ObservedTask) -> Result, LearnerFailure> { + if observed.input_width == 0 || observed.output_width == 0 || observed.samples.is_empty() { + return Err(LearnerFailure::NoHypothesis( + "memorization requires non-empty, positive-width observations".into(), + )); + } + let mut rows = observed + .samples + .iter() + .map(|sample| { + if sample.input.len() != observed.input_width + || sample.expected.len() != observed.output_width + { + return Err(LearnerFailure::ToolError( + "observed row width does not match the task".into(), + )); + } + Ok((sample.input.clone(), sample.expected.clone())) + }) + .collect::, _>>()?; + rows.sort(); + let mut unique = Vec::::with_capacity(rows.len()); + for row in rows { + if let Some(previous) = unique.last() + && previous.0 == row.0 + { + if previous.1 != row.1 { + return Err(LearnerFailure::NoHypothesis( + "duplicate observed input has conflicting outputs".into(), + )); + } + continue; + } + unique.push(row); + } + Ok(unique) +} + +fn compile_trie( + builder: &mut CircuitBuilder<'_>, + rows: &[Row], + depth: usize, + input_width: usize, + output: usize, + deadline: Instant, +) -> Result { + if Instant::now() >= deadline { + return Err(LearnerFailure::Timeout( + "memorization trie construction exceeded the trial timeout".into(), + )); + } + if rows.is_empty() || rows.iter().all(|row| !row.1[output]) { + return builder.zero().map_err(classify_builder_failure); + } + if depth == input_width { + return if rows[0].1[output] { + builder.one() + } else { + builder.zero() + } + .map_err(classify_builder_failure); + } + + let split = rows.partition_point(|row| !row.0[depth]); + let low = compile_trie( + builder, + &rows[..split], + depth + 1, + input_width, + output, + deadline, + )?; + let high = compile_trie( + builder, + &rows[split..], + depth + 1, + input_width, + output, + deadline, + )?; + let variable = Signal::input(depth); + let when_high = builder + .binary(GateOp::And, variable, high) + .map_err(classify_builder_failure)?; + let when_low = builder + .binary(GateOp::And, variable.inverted(), low) + .map_err(classify_builder_failure)?; + builder + .binary(GateOp::Or, when_high, when_low) + .map_err(classify_builder_failure) +} + +fn classify_builder_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/mod.rs new file mode 100644 index 000000000..14894c30c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/mod.rs @@ -0,0 +1,40 @@ +mod abc_dont_care; +mod adapters; +mod bdd; +mod evolution; +mod learner; +mod memory; +mod process; +mod projection; +mod rss; +mod runner; +mod sampling; +mod sat_cegis; +mod tasks; +mod trial; + +pub use abc_dont_care::{AbcDontCareLearner, render_partial_pla}; +pub use adapters::default_adapters; +pub use bdd::{BddOrder, BddResult, RobddLearner, build_robdd}; +pub use evolution::{ + EvolutionConfig, EvolutionResult, EvolutionTraceEntry, GrammarEvolutionLearner, evolve, + evolve_with_budget, +}; +pub use learner::{LearnedHypothesis, LearnerFailure, ResearchLearner, ResearchTools, TrialBudget}; +pub use memory::MemorizationLearner; +pub use process::{run_isolated_experiment, run_measured_trial}; +pub use projection::{ + SEMANTIC_PROJECTION_EXCLUDED_FIELDS, SemanticTrialRecord, render_semantic_jsonl, + semantic_projection, write_semantic_jsonl, +}; +pub use rss::peak_rss_bytes; +pub use runner::{run_experiment, run_trial, run_trial_with_tools}; +pub use sampling::{Split, split_task}; +pub use sat_cegis::SatCegisLearner; +pub use tasks::{ + ObservedTask, OracleTask, TaskClass, TaskManifest, official_and_synthetic_tasks, render_dataset, +}; +pub use trial::{ + ExperimentConfig, ResearchMethod, TrialKey, TrialRecord, TrialStatus, expected_trial_keys, + load_experiment_config, +}; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/process.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/process.rs new file mode 100644 index 000000000..274a39671 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/process.rs @@ -0,0 +1,443 @@ +use std::{ + collections::{BTreeMap, HashMap, HashSet, VecDeque}, + fs, + path::{Path, PathBuf}, + process::{Child, Command, Stdio}, + thread, + time::{Duration, Instant, SystemTime, UNIX_EPOCH}, +}; + +use crate::{OccamError, sha256_hex}; + +use super::{ + ExperimentConfig, OracleTask, ResearchTools, TrialBudget, TrialKey, TrialRecord, TrialStatus, + expected_trial_keys, load_experiment_config, official_and_synthetic_tasks, peak_rss_bytes, + runner::{failure_record, run_trial_with_tools}, + split_task, +}; + +pub fn run_measured_trial( + config_path: &Path, + tasks_path: &Path, + key: TrialKey, + output_path: &Path, + abc_binary: Option, +) -> Result { + validate_task_manifest(tasks_path)?; + let (config, config_sha256) = load_config_and_hash(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config)?; + if expected.binary_search(&key).is_err() { + return Err(OccamError::Validation(format!( + "trial key is outside the fixed experiment protocol: {key:?}" + ))); + } + let task = tasks + .iter() + .find(|task| task.id == key.task) + .ok_or_else(|| OccamError::Validation(format!("unknown trial task {}", key.task)))?; + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + let started_unix_micros = unix_micros()?; + let started = Instant::now(); + let budget = TrialBudget { + timeout: Duration::from_millis(config.trial_timeout_millis), + ..TrialBudget::default() + }; + let tools = ResearchTools { + abc: abc_binary, + ..ResearchTools::default() + }; + let mut record = run_trial_with_tools(task, &split, key, &config_sha256, tools, budget)?; + record.runtime_micros = elapsed_micros(started); + record.peak_rss_bytes = peak_rss_bytes()?; + record.host_identifier = environment_identifier(); + record.process_id = std::process::id(); + record.started_unix_micros = started_unix_micros; + write_record_atomic(output_path, &record)?; + Ok(record) +} + +pub fn run_isolated_experiment( + executable: &Path, + config_path: &Path, + tasks_path: &Path, + raw_measured_path: &Path, + abc_binary: Option<&Path>, + jobs: usize, +) -> Result, OccamError> { + if jobs == 0 { + return Err(OccamError::Validation( + "experiment jobs must be positive".into(), + )); + } + validate_task_manifest(tasks_path)?; + let (config, config_sha256) = load_config_and_hash(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config)?; + let expected_set = expected.iter().cloned().collect::>(); + let mut records = load_existing_records(raw_measured_path, &expected_set, &config_sha256)?; + let mut missing = expected + .into_iter() + .filter(|key| !records.contains_key(key)) + .collect::>(); + let task_map = tasks + .iter() + .map(|task| (task.id.as_str(), task)) + .collect::>(); + let temporary = ExperimentDirectory::new()?; + let mut active = Vec::::new(); + let timeout = + Duration::from_millis(config.trial_timeout_millis).saturating_add(Duration::from_secs(2)); + + while !missing.is_empty() || !active.is_empty() { + while active.len() < jobs { + let Some(key) = missing.pop_front() else { + break; + }; + let task = task_map.get(key.task.as_str()).ok_or_else(|| { + OccamError::Validation(format!("unknown trial task {}", key.task)) + })?; + let (observed_rows, held_out_rows) = split_counts(task, &key, &config)?; + let key_json = serde_json::to_string(&key).map_err(|error| { + OccamError::Validation(format!("trial key JSON encoding failed: {error}")) + })?; + let key_hash = sha256_hex(key_json.as_bytes()); + let output = temporary.path.join(format!("{key_hash}.json")); + let mut command = Command::new(executable); + command + .arg("experiment-trial") + .arg("--config") + .arg(config_path) + .arg("--tasks") + .arg(tasks_path) + .arg("--key-json") + .arg(key_json) + .arg("--output") + .arg(&output) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()); + if let Some(abc) = abc_binary { + command.arg("--abc").arg(abc); + } + let child = command.spawn().map_err(|error| { + OccamError::Validation(format!("failed to spawn isolated trial process: {error}")) + })?; + active.push(ActiveTrial { + key, + child, + output, + started: Instant::now(), + started_unix_micros: unix_micros()?, + observed_rows, + held_out_rows, + }); + } + + let mut completed_any = false; + let mut index = 0usize; + while index < active.len() { + let status = active[index].child.try_wait().map_err(|error| { + OccamError::Validation(format!("isolated trial wait failed: {error}")) + })?; + let expired = active[index].started.elapsed() >= timeout; + if status.is_none() && !expired { + index += 1; + continue; + } + + completed_any = true; + let mut state = active.swap_remove(index); + let record = if expired && status.is_none() { + let child_id = state.child.id(); + let _ = state.child.kill(); + let _ = state.child.wait(); + measured_parent_failure( + state, + &config_sha256, + TrialStatus::Timeout, + format!( + "parent terminated isolated trial after {} milliseconds", + timeout.as_millis() + ), + child_id, + )? + } else if status.is_some_and(|status| status.success()) { + load_child_record(&state.output, &state.key, &config_sha256)? + } else { + let child_id = state.child.id(); + measured_parent_failure( + state, + &config_sha256, + TrialStatus::Error, + format!("isolated trial process exited with status {status:?}"), + child_id, + )? + }; + records.insert(record.key.clone(), record); + write_records_atomic(raw_measured_path, records.values())?; + } + if !completed_any && !active.is_empty() { + thread::sleep(Duration::from_millis(10)); + } + } + + if records.len() != expected_set.len() { + return Err(OccamError::Validation(format!( + "isolated experiment produced {} rows, expected {}", + records.len(), + expected_set.len() + ))); + } + Ok(records.into_values().collect()) +} + +struct ActiveTrial { + key: TrialKey, + child: Child, + output: PathBuf, + started: Instant, + started_unix_micros: u64, + observed_rows: usize, + held_out_rows: usize, +} + +fn measured_parent_failure( + state: ActiveTrial, + config_sha256: &str, + status: TrialStatus, + detail: String, + child_id: u32, +) -> Result { + let mut record = failure_record( + state.key, + config_sha256, + state.observed_rows, + state.held_out_rows, + status, + detail, + ); + record.runtime_micros = elapsed_micros(state.started); + record.peak_rss_bytes = peak_rss_bytes()?; + record.host_identifier = environment_identifier(); + record.process_id = child_id; + record.started_unix_micros = state.started_unix_micros; + Ok(record) +} + +fn load_child_record( + path: &Path, + expected_key: &TrialKey, + config_sha256: &str, +) -> Result { + let source = fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let record: TrialRecord = serde_json::from_slice(&source) + .map_err(|error| OccamError::Validation(format!("invalid child trial JSON: {error}")))?; + validate_measured_record(&record, expected_key, config_sha256)?; + Ok(record) +} + +fn load_existing_records( + path: &Path, + expected: &HashSet, + config_sha256: &str, +) -> Result, OccamError> { + if !path.exists() { + return Ok(BTreeMap::new()); + } + let source = fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let mut records = BTreeMap::new(); + for (line_index, line) in source.lines().enumerate() { + if line.trim().is_empty() { + continue; + } + let record: TrialRecord = serde_json::from_str(line).map_err(|error| { + OccamError::Validation(format!( + "invalid measured trial JSON at line {}: {error}", + line_index + 1 + )) + })?; + if !expected.contains(&record.key) { + return Err(OccamError::Validation(format!( + "measured trial file contains unknown key {:?}", + record.key + ))); + } + validate_measured_record(&record, &record.key, config_sha256)?; + let key = record.key.clone(); + if records.insert(key.clone(), record).is_some() { + return Err(OccamError::Validation(format!( + "measured trial file contains duplicate key {key:?}" + ))); + } + } + Ok(records) +} + +fn validate_measured_record( + record: &TrialRecord, + expected_key: &TrialKey, + config_sha256: &str, +) -> Result<(), OccamError> { + if record.schema_version != 1 + || &record.key != expected_key + || record.config_sha256 != config_sha256 + || record.runtime_micros == 0 + || record.peak_rss_bytes == 0 + || record.host_identifier.is_empty() + || record.process_id == 0 + || record.started_unix_micros == 0 + { + return Err(OccamError::Validation(format!( + "invalid measured trial record for {expected_key:?}" + ))); + } + Ok(()) +} + +fn split_counts( + task: &OracleTask, + key: &TrialKey, + config: &ExperimentConfig, +) -> Result<(usize, usize), OccamError> { + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + Ok((split.observed_indices.len(), split.held_out_indices.len())) +} + +fn load_config_and_hash(path: &Path) -> Result<(ExperimentConfig, String), OccamError> { + let source = fs::read(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let hash = sha256_hex(&source); + Ok((load_experiment_config(path)?, hash)) +} + +fn validate_task_manifest(path: &Path) -> Result<(), OccamError> { + let source = fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let supplied: serde_json::Value = serde_json::from_str(&source) + .map_err(|error| OccamError::Validation(format!("invalid task manifest JSON: {error}")))?; + let compiled: serde_json::Value = serde_json::from_str(include_str!( + "../../../experiments/occam-generalization/tasks.json" + )) + .expect("compiled task manifest must be valid JSON"); + if supplied != compiled { + return Err(OccamError::Validation( + "task manifest differs from the compiled evaluator-only definitions".into(), + )); + } + Ok(()) +} + +fn write_record_atomic(path: &Path, record: &TrialRecord) -> Result<(), OccamError> { + let mut encoded = serde_json::to_string(record) + .map_err(|error| OccamError::Validation(format!("trial JSON encoding failed: {error}")))?; + encoded.push('\n'); + write_atomic(path, encoded.as_bytes()) +} + +fn write_records_atomic<'a>( + path: &Path, + records: impl Iterator, +) -> Result<(), OccamError> { + let mut output = String::new(); + for record in records { + output.push_str(&serde_json::to_string(record).map_err(|error| { + OccamError::Validation(format!("trial JSON encoding failed: {error}")) + })?); + output.push('\n'); + } + write_atomic(path, output.as_bytes()) +} + +fn write_atomic(path: &Path, bytes: &[u8]) -> Result<(), OccamError> { + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, bytes).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} + +fn elapsed_micros(started: Instant) -> u64 { + u64::try_from(started.elapsed().as_micros()) + .unwrap_or(u64::MAX) + .max(1) +} + +fn unix_micros() -> Result { + let duration = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map_err(|error| { + OccamError::Validation(format!("system clock is before epoch: {error}")) + })?; + u64::try_from(duration.as_micros()).map_err(|_| OccamError::ArithmeticOverflow { + context: "trial start timestamp", + }) +} + +fn environment_identifier() -> String { + let host = std::env::var("HOSTNAME") + .or_else(|_| std::env::var("COMPUTERNAME")) + .unwrap_or_else(|_| "unknown-host".into()); + let material = format!( + "{}|{}|{}", + std::env::consts::OS, + std::env::consts::ARCH, + host + ); + let hash = sha256_hex(material.as_bytes()); + format!( + "{}-{}-{}", + std::env::consts::OS, + std::env::consts::ARCH, + &hash[..16] + ) +} + +struct ExperimentDirectory { + path: PathBuf, +} + +impl ExperimentDirectory { + fn new() -> Result { + let path = std::env::temp_dir().join(format!( + "occam71-isolated-{}-{}", + std::process::id(), + unix_micros()? + )); + fs::create_dir(&path).map_err(|source| OccamError::WriteFile { + path: path.clone(), + source, + })?; + Ok(Self { path }) + } +} + +impl Drop for ExperimentDirectory { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/projection.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/projection.rs new file mode 100644 index 000000000..1baff5de7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/projection.rs @@ -0,0 +1,106 @@ +use std::{collections::HashSet, fs, path::Path}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, VerificationMetrics}; + +use super::{ResearchMethod, TrialKey, TrialRecord, TrialStatus}; + +pub const SEMANTIC_PROJECTION_EXCLUDED_FIELDS: [&str; 5] = [ + "runtime_micros", + "peak_rss_bytes", + "host_identifier", + "process_id", + "started_unix_micros", +]; + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct SemanticTrialRecord { + pub schema_version: u32, + pub measured_schema_version: u32, + pub key: TrialKey, + pub config_sha256: String, + pub status: TrialStatus, + pub observed_rows: usize, + pub held_out_rows: usize, + pub training: Option, + pub held_out: Option, + pub full_domain: Option, + pub semantic_recovery: bool, + pub expression: Option, + pub description_length: Option, + pub gate_count: Option, + pub minimum_unique: Option, + pub hypothesis_sha256: Option, + pub detail: String, +} + +impl SemanticTrialRecord { + pub fn method(&self) -> ResearchMethod { + self.key.method + } +} + +pub fn semantic_projection(record: &TrialRecord) -> SemanticTrialRecord { + SemanticTrialRecord { + schema_version: 2, + measured_schema_version: record.schema_version, + key: record.key.clone(), + config_sha256: record.config_sha256.clone(), + status: record.status, + observed_rows: record.observed_rows, + held_out_rows: record.held_out_rows, + training: record.training.clone(), + held_out: record.held_out.clone(), + full_domain: record.full_domain.clone(), + semantic_recovery: record.semantic_recovery, + expression: record.expression.clone(), + description_length: record.description_length, + gate_count: record.gate_count, + minimum_unique: record.minimum_unique, + hypothesis_sha256: record.hypothesis_sha256.clone(), + detail: record.detail.clone(), + } +} + +pub fn render_semantic_jsonl(records: &[TrialRecord]) -> Result { + let mut projected = records.iter().map(semantic_projection).collect::>(); + projected.sort_by(|lhs, rhs| lhs.key.cmp(&rhs.key)); + let unique = projected + .iter() + .map(|record| &record.key) + .collect::>(); + if unique.len() != projected.len() { + return Err(OccamError::Validation( + "semantic projection contains duplicate trial keys".into(), + )); + } + let mut output = String::new(); + for record in projected { + output.push_str(&serde_json::to_string(&record).map_err(|error| { + OccamError::Validation(format!("semantic JSON encoding failed: {error}")) + })?); + output.push('\n'); + } + Ok(output) +} + +pub fn write_semantic_jsonl(path: &Path, records: &[TrialRecord]) -> Result<(), OccamError> { + let output = render_semantic_jsonl(records)?; + if let Some(parent) = path.parent() { + fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = path.with_extension(format!("{}.tmp", std::process::id())); + fs::write(&temporary, output).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + fs::rename(&temporary, path).map_err(|source| OccamError::WriteFile { + path: path.to_owned(), + source, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/rss.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/rss.rs new file mode 100644 index 000000000..dca13f86b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/rss.rs @@ -0,0 +1,31 @@ +use std::mem::MaybeUninit; + +use crate::OccamError; + +pub fn peak_rss_bytes() -> Result { + let mut usage = MaybeUninit::::zeroed(); + // SAFETY: `usage.as_mut_ptr()` points to writable storage for exactly one + // `libc::rusage`. `getrusage` initializes that value synchronously and does + // not retain the pointer. We check its return code before assuming init. + let status = unsafe { libc::getrusage(libc::RUSAGE_SELF, usage.as_mut_ptr()) }; + if status != 0 { + return Err(OccamError::Validation(format!( + "getrusage(RUSAGE_SELF) failed: {}", + std::io::Error::last_os_error() + ))); + } + // SAFETY: the successful `getrusage` call above initialized the value. + let usage = unsafe { usage.assume_init() }; + let raw = u64::try_from(usage.ru_maxrss) + .map_err(|_| OccamError::Validation("getrusage returned negative peak RSS".into()))?; + #[cfg(target_os = "linux")] + { + raw.checked_mul(1024).ok_or(OccamError::ArithmeticOverflow { + context: "Linux peak RSS byte normalization", + }) + } + #[cfg(not(target_os = "linux"))] + { + Ok(raw) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/runner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/runner.rs new file mode 100644 index 000000000..b5b66b882 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/runner.rs @@ -0,0 +1,285 @@ +use std::{collections::HashMap, path::Path}; + +use crate::{ + Dataset, OccamError, Sample, VerificationMetrics, compile_expression, pack_dataset, + parse_netlist, sha256_hex, verify_prepacked, +}; + +use super::{ + LearnedHypothesis, OracleTask, ResearchMethod, ResearchTools, Split, TrialBudget, TrialKey, + TrialRecord, TrialStatus, default_adapters, expected_trial_keys, load_experiment_config, + official_and_synthetic_tasks, split_task, +}; + +pub fn run_experiment(config_path: &Path, raw_path: &Path) -> Result<(), OccamError> { + let config_source = std::fs::read(config_path).map_err(|source| OccamError::ReadFile { + path: config_path.to_owned(), + source, + })?; + let config_sha256 = sha256_hex(&config_source); + let config = load_experiment_config(config_path)?; + let tasks = official_and_synthetic_tasks()?; + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let keys = expected_trial_keys(&task_ids, &config)?; + let task_map = tasks + .iter() + .map(|task| (task.id.as_str(), task)) + .collect::>(); + let mut output = String::new(); + for key in keys { + let task = task_map.get(key.task.as_str()).unwrap(); + let fraction = f64::from(key.fraction_basis_points) / 100_000.0; + let split = split_task(task, fraction, key.seed, config.experiment_seed)?; + let record = run_trial(task, &split, key, &config_sha256)?; + let encoded = serde_json::to_string(&record).map_err(|error| { + OccamError::Validation(format!("trial JSON encoding failed: {error}")) + })?; + output.push_str(&encoded); + output.push('\n'); + } + if let Some(parent) = raw_path.parent() { + std::fs::create_dir_all(parent).map_err(|source| OccamError::WriteFile { + path: parent.to_owned(), + source, + })?; + } + let temporary = raw_path.with_extension(format!("jsonl.{}.tmp", std::process::id())); + std::fs::write(&temporary, output).map_err(|source| OccamError::WriteFile { + path: temporary.clone(), + source, + })?; + std::fs::rename(&temporary, raw_path).map_err(|source| OccamError::WriteFile { + path: raw_path.to_owned(), + source, + }) +} + +pub fn run_trial( + task: &OracleTask, + split: &Split, + key: TrialKey, + config_sha256: &str, +) -> Result { + run_trial_with_tools( + task, + split, + key, + config_sha256, + ResearchTools::default(), + TrialBudget::default(), + ) +} + +pub fn run_trial_with_tools( + task: &OracleTask, + split: &Split, + key: TrialKey, + config_sha256: &str, + tools: ResearchTools, + budget: TrialBudget, +) -> Result { + let observed = task.observe(&split.observed_indices)?; + let observed_rows = split.observed_indices.len(); + let held_out_rows = split.held_out_indices.len(); + let hypothesis = if key.method == ResearchMethod::OracleExpression { + Ok(LearnedHypothesis::Expression { + expression: task.oracle.clone(), + minimum_unique: Some(true), + detail: "evaluator-only oracle lower bound".into(), + }) + } else { + let adapters = default_adapters(tools); + let adapter = adapters + .iter() + .find(|adapter| adapter.method() == key.method) + .ok_or_else(|| { + OccamError::Validation(format!( + "research method {:?} has no automatic adapter", + key.method + )) + })?; + adapter.fit(&observed, key.seed, &budget) + }; + let hypothesis = match hypothesis { + Ok(hypothesis) => hypothesis, + Err(failure) => { + return Ok(failure_record( + key, + config_sha256, + observed_rows, + held_out_rows, + failure.status(), + failure.to_string(), + )); + } + }; + let evaluated = evaluate_hypothesis(task, split, &hypothesis); + let ( + training, + held_out, + full_domain, + expression, + description_length, + gate_count, + unique, + hash, + detail, + ) = match evaluated { + Ok(evaluated) => evaluated, + Err(error) => { + let status = match &error { + OccamError::ResourceLimit { .. } | OccamError::ArithmeticOverflow { .. } => { + TrialStatus::ResourceLimit + } + _ => TrialStatus::Error, + }; + return Ok(failure_record( + key, + config_sha256, + observed_rows, + held_out_rows, + status, + format!("hypothesis evaluation failed: {error}"), + )); + } + }; + let semantic_recovery = full_domain.exact_matches == full_domain.samples; + Ok(TrialRecord { + schema_version: 1, + key, + config_sha256: config_sha256.to_owned(), + status: TrialStatus::Success, + observed_rows, + held_out_rows, + training: Some(training), + held_out: Some(held_out), + full_domain: Some(full_domain), + semantic_recovery, + expression, + description_length, + gate_count, + minimum_unique: unique, + runtime_micros: 0, + peak_rss_bytes: 0, + host_identifier: String::new(), + process_id: 0, + started_unix_micros: 0, + hypothesis_sha256: Some(hash), + detail, + }) +} + +pub(crate) fn failure_record( + key: TrialKey, + config_sha256: &str, + observed_rows: usize, + held_out_rows: usize, + status: TrialStatus, + detail: String, +) -> TrialRecord { + TrialRecord { + schema_version: 1, + key, + config_sha256: config_sha256.to_owned(), + status, + observed_rows, + held_out_rows, + training: None, + held_out: None, + full_domain: None, + semantic_recovery: false, + expression: None, + description_length: None, + gate_count: None, + minimum_unique: None, + runtime_micros: 0, + peak_rss_bytes: 0, + host_identifier: String::new(), + process_id: 0, + started_unix_micros: 0, + hypothesis_sha256: None, + detail, + } +} + +#[allow(clippy::type_complexity)] +fn evaluate_hypothesis( + task: &OracleTask, + split: &Split, + hypothesis: &LearnedHypothesis, +) -> Result< + ( + VerificationMetrics, + VerificationMetrics, + VerificationMetrics, + Option, + Option, + Option, + Option, + String, + String, + ), + OccamError, +> { + match hypothesis { + LearnedHypothesis::Expression { + expression, + minimum_unique, + detail, + } => { + let compiled = compile_expression(expression, task.semantics, &crate::DEFAULT_LIMITS)?; + let circuit = parse_netlist(&compiled.netlist)?; + let training_dataset = subset(task.full_domain(), &split.observed_indices); + let held_out_dataset = subset(task.full_domain(), &split.held_out_indices); + let training = verify_prepacked(&circuit, &pack_dataset(&training_dataset)?)?; + let held_out = verify_prepacked(&circuit, &pack_dataset(&held_out_dataset)?)?; + let full_domain = verify_prepacked(&circuit, &pack_dataset(task.full_domain())?)?; + Ok(( + training, + held_out, + full_domain, + Some(expression.to_string()), + Some(expression.description_cost()), + Some(circuit.gates.len()), + *minimum_unique, + sha256_hex(compiled.netlist.as_bytes()), + detail.clone(), + )) + } + LearnedHypothesis::Circuit { + netlist, + description_length, + minimum_unique, + detail, + } => { + let circuit = parse_netlist(netlist)?; + let training_dataset = subset(task.full_domain(), &split.observed_indices); + let held_out_dataset = subset(task.full_domain(), &split.held_out_indices); + let training = verify_prepacked(&circuit, &pack_dataset(&training_dataset)?)?; + let held_out = verify_prepacked(&circuit, &pack_dataset(&held_out_dataset)?)?; + let full_domain = verify_prepacked(&circuit, &pack_dataset(task.full_domain())?)?; + Ok(( + training, + held_out, + full_domain, + None, + *description_length, + Some(circuit.gates.len()), + *minimum_unique, + sha256_hex(netlist.as_bytes()), + detail.clone(), + )) + } + } +} + +fn subset(dataset: &Dataset, indices: &[usize]) -> Dataset { + Dataset { + input_width: dataset.input_width, + output_width: dataset.output_width, + samples: indices + .iter() + .map(|index| dataset.samples[*index].clone()) + .collect::>(), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sampling.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sampling.rs new file mode 100644 index 000000000..661ce3977 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sampling.rs @@ -0,0 +1,44 @@ +use rand::{SeedableRng, seq::SliceRandom}; +use rand_chacha::ChaCha8Rng; +use sha2::{Digest, Sha256}; + +use crate::{OccamError, research::OracleTask}; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct Split { + pub observed_indices: Vec, + pub held_out_indices: Vec, +} + +pub fn split_task( + task: &OracleTask, + fraction: f64, + seed: u64, + experiment_seed: u64, +) -> Result { + if !fraction.is_finite() || fraction <= 0.0 || fraction >= 1.0 { + return Err(OccamError::Validation(format!( + "research fraction must be in (0,1), got {fraction}" + ))); + } + let rows = task.full_domain().samples.len(); + let observed = ((rows as f64 * fraction).round() as usize).max(1); + let basis_points = (fraction * 100_000.0).round() as u64; + let mut hasher = Sha256::new(); + hasher.update(experiment_seed.to_le_bytes()); + hasher.update(task.id.as_bytes()); + hasher.update(basis_points.to_le_bytes()); + hasher.update(seed.to_le_bytes()); + let digest: [u8; 32] = hasher.finalize().into(); + let mut rng = ChaCha8Rng::from_seed(digest); + let mut indices = (0..rows).collect::>(); + indices.shuffle(&mut rng); + let mut observed_indices = indices[..observed].to_vec(); + let mut held_out_indices = indices[observed..].to_vec(); + observed_indices.sort_unstable(); + held_out_indices.sort_unstable(); + Ok(Split { + observed_indices, + held_out_indices, + }) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sat_cegis.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sat_cegis.rs new file mode 100644 index 000000000..938590ec3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/sat_cegis.rs @@ -0,0 +1,149 @@ +use std::time::Instant; + +use crate::{ + Dataset, SynthesisLimits, SynthesisProblem, SynthesisStatus, evaluate, parse_netlist, + synthesize_minimal, +}; + +use super::{ + LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, ResearchMethod, TrialBudget, +}; + +const MAX_CNF_VARIABLES: usize = 50_000; +const MAX_CNF_CLAUSES: usize = 500_000; +const MAX_CNF_LITERALS: usize = 2_000_000; +const MAX_EIGHT_INPUT_GATES: usize = 3; + +pub struct SatCegisLearner; + +impl ResearchLearner for SatCegisLearner { + fn method(&self) -> ResearchMethod { + ResearchMethod::SatCegis + } + + fn fit( + &self, + observed: &ObservedTask, + _seed: u64, + budget: &TrialBudget, + ) -> Result { + if observed.input_width > 8 { + return Err(LearnerFailure::Unsupported( + "SAT/CEGIS requires at most eight learner-visible input bits".into(), + )); + } + if budget.timeout.is_zero() { + return Err(LearnerFailure::Timeout( + "SAT/CEGIS has a zero timeout".into(), + )); + } + let normalized = normalize_dataset(observed)?; + let started = Instant::now(); + let mut constraints = vec![normalized.samples[0].clone()]; + let mut iterations = 0usize; + loop { + iterations += 1; + let remaining = budget.timeout.saturating_sub(started.elapsed()); + if remaining.is_zero() { + return Err(LearnerFailure::Timeout( + "SAT/CEGIS exceeded the trial timeout".into(), + )); + } + let limits = SynthesisLimits { + max_gates: budget.max_gates.min(if observed.input_width == 8 { + MAX_EIGHT_INPUT_GATES + } else { + 12 + }), + max_cnf_variables: budget.max_nodes.min(MAX_CNF_VARIABLES), + max_cnf_clauses: budget.max_nodes.saturating_mul(10).min(MAX_CNF_CLAUSES), + max_cnf_literals: budget.max_nodes.saturating_mul(50).min(MAX_CNF_LITERALS), + timeout: remaining, + ..SynthesisLimits::default() + }; + let constraint_dataset = Dataset { + input_width: normalized.input_width, + output_width: normalized.output_width, + samples: constraints.clone(), + }; + let problem = + SynthesisProblem::from_partial_dataset_with_limits(&constraint_dataset, &limits) + .map_err(classify_synthesis_failure)?; + let certificate = + synthesize_minimal(&problem, &limits).map_err(classify_synthesis_failure)?; + match certificate.status { + SynthesisStatus::Sat => { + let netlist = certificate.netlist.ok_or_else(|| { + LearnerFailure::ToolError( + "SAT certificate reported success without a netlist".into(), + ) + })?; + let circuit = parse_netlist(&netlist).map_err(classify_synthesis_failure)?; + let counterexample = normalized.samples.iter().find(|sample| { + evaluate(&circuit, &sample.input) + .map(|actual| actual != sample.expected) + .unwrap_or(true) + }); + if let Some(counterexample) = counterexample { + if constraints + .iter() + .any(|sample| sample.input == counterexample.input) + { + return Err(LearnerFailure::ToolError( + "SAT candidate violates an existing CEGIS constraint".into(), + )); + } + constraints.push(counterexample.clone()); + constraints.sort_by(|lhs, rhs| lhs.input.cmp(&rhs.input)); + continue; + } + return Ok(LearnedHypothesis::Circuit { + netlist, + description_length: certificate.minimal_gate_count, + minimum_unique: Some(true), + detail: format!( + "bounded SAT/CEGIS converged in {iterations} iterations with {} constraints", + constraints.len() + ), + }); + } + SynthesisStatus::NoCircuitWithinBound => { + return Err(LearnerFailure::NoHypothesis(certificate.status_detail)); + } + SynthesisStatus::Timeout => { + return Err(LearnerFailure::Timeout(certificate.status_detail)); + } + SynthesisStatus::ResourceLimit => { + return Err(LearnerFailure::ResourceLimit(certificate.status_detail)); + } + } + } + } +} + +fn normalize_dataset(observed: &ObservedTask) -> Result { + let limits = SynthesisLimits::default(); + let problem = SynthesisProblem::from_partial_dataset_with_limits(&observed.dataset(), &limits) + .map_err(classify_synthesis_failure)?; + Ok(Dataset { + input_width: problem.input_width, + output_width: problem.output_width, + samples: problem + .rows + .into_iter() + .map(|row| crate::Sample { + input: row.input, + expected: row.expected, + }) + .collect(), + }) +} + +fn classify_synthesis_failure(error: crate::OccamError) -> LearnerFailure { + match error { + crate::OccamError::ResourceLimit { .. } | crate::OccamError::ArithmeticOverflow { .. } => { + LearnerFailure::ResourceLimit(error.to_string()) + } + _ => LearnerFailure::ToolError(error.to_string()), + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/tasks.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/tasks.rs new file mode 100644 index 000000000..37425484c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/tasks.rs @@ -0,0 +1,208 @@ +use std::collections::HashSet; + +use serde::{Deserialize, Serialize}; + +use crate::{Dataset, Expr, ExprSemantics, OccamError, Sample, parse_expression, sha256_hex}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum TaskClass { + Official, + Synthetic, +} + +#[derive(Clone, Debug)] +pub struct OracleTask { + pub id: String, + pub class: TaskClass, + pub semantics: ExprSemantics, + pub oracle: Expr, + full_domain: Dataset, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ObservedTask { + pub id: String, + pub input_width: usize, + pub output_width: usize, + pub samples: Vec, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TaskManifest { + pub id: String, + pub class: TaskClass, + pub operand_bits: usize, + pub output_bits: usize, + pub oracle: String, + pub domain_rows: usize, + pub domain_sha256: String, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct TaskFile { + schema_version: u32, + tasks: Vec, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct TaskDefinition { + id: String, + class: TaskClass, + operand_bits: usize, + output_bits: usize, + oracle: String, +} + +pub fn official_and_synthetic_tasks() -> Result, OccamError> { + let file: TaskFile = serde_json::from_str(include_str!( + "../../../experiments/occam-generalization/tasks.json" + )) + .map_err(|error| { + OccamError::Validation(format!("research task manifest is invalid: {error}")) + })?; + if file.schema_version != 1 || file.tasks.len() != 16 { + return Err(OccamError::Validation( + "research task manifest must contain schema 1 and sixteen tasks".into(), + )); + } + let mut ids = HashSet::new(); + file.tasks + .into_iter() + .map(|definition| { + if !ids.insert(definition.id.clone()) { + return Err(OccamError::Validation(format!( + "duplicate research task {}", + definition.id + ))); + } + let semantics = ExprSemantics::new(definition.operand_bits, definition.output_bits)?; + let oracle = parse_expression(&definition.oracle)?; + let full_domain = complete_domain(&oracle, semantics)?; + Ok(OracleTask { + id: definition.id, + class: definition.class, + semantics, + oracle, + full_domain, + }) + }) + .collect() +} + +impl OracleTask { + pub fn observe(&self, indices: &[usize]) -> Result { + let mut seen = HashSet::new(); + let samples = indices + .iter() + .map(|index| { + if !seen.insert(*index) { + return Err(OccamError::Validation(format!( + "duplicate observed index {index}" + ))); + } + self.full_domain + .samples + .get(*index) + .cloned() + .ok_or_else(|| { + OccamError::Validation(format!( + "observed index {index} is outside task {}", + self.id + )) + }) + }) + .collect::, _>>()?; + Ok(ObservedTask { + id: self.id.clone(), + input_width: self.full_domain.input_width, + output_width: self.full_domain.output_width, + samples, + }) + } + + pub fn full_domain(&self) -> &Dataset { + &self.full_domain + } + + pub fn manifest(&self) -> TaskManifest { + let bytes = render_dataset(&self.full_domain); + TaskManifest { + id: self.id.clone(), + class: self.class, + operand_bits: self.semantics.operand_bits, + output_bits: self.semantics.output_bits, + oracle: self.oracle.to_string(), + domain_rows: self.full_domain.samples.len(), + domain_sha256: sha256_hex(bytes.as_bytes()), + } + } +} + +impl ObservedTask { + pub fn dataset(&self) -> Dataset { + Dataset { + input_width: self.input_width, + output_width: self.output_width, + samples: self.samples.clone(), + } + } +} + +fn complete_domain(expression: &Expr, semantics: ExprSemantics) -> Result { + let input_width = + semantics + .operand_bits + .checked_mul(2) + .ok_or(OccamError::ArithmeticOverflow { + context: "research task input width", + })?; + let cases = 1usize + .checked_shl( + u32::try_from(input_width).map_err(|_| OccamError::ArithmeticOverflow { + context: "research task domain shift", + })?, + ) + .ok_or(OccamError::ArithmeticOverflow { + context: "research task domain rows", + })?; + let mut samples = Vec::with_capacity(cases); + for packed in 0..cases { + let input = (0..input_width) + .map(|bit| packed & (1usize << bit) != 0) + .collect::>(); + let mask = (1usize << semantics.operand_bits) - 1; + let x = (packed & mask) as u64; + let y = (packed >> semantics.operand_bits) as u64; + let value = expression.evaluate(x, y, semantics)?; + let expected = (0..semantics.output_bits) + .map(|bit| value & (1u64 << bit) != 0) + .collect(); + samples.push(Sample { input, expected }); + } + Ok(Dataset { + input_width, + output_width: semantics.output_bits, + samples, + }) +} + +pub fn render_dataset(dataset: &Dataset) -> String { + let mut output = String::from("input,output\n"); + for sample in &dataset.samples { + output.extend(sample.input.iter().map(|bit| if *bit { '1' } else { '0' })); + output.push(','); + output.extend( + sample + .expected + .iter() + .map(|bit| if *bit { '1' } else { '0' }), + ); + output.push('\n'); + } + output +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/trial.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/trial.rs new file mode 100644 index 000000000..b3b2cc7d1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/research/trial.rs @@ -0,0 +1,158 @@ +use std::{collections::HashSet, path::Path}; + +use serde::{Deserialize, Serialize}; + +use crate::{OccamError, VerificationMetrics}; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum ResearchMethod { + LegacyRegistry, + MdlEnumerator, + AbcDontCare, + Robdd, + SatCegis, + GrammarEvolution, + Memorization, + OracleExpression, +} + +impl ResearchMethod { + pub const AUTOMATIC: [Self; 7] = [ + Self::LegacyRegistry, + Self::MdlEnumerator, + Self::AbcDontCare, + Self::Robdd, + Self::SatCegis, + Self::GrammarEvolution, + Self::Memorization, + ]; +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct ExperimentConfig { + pub schema_version: u32, + pub fractions: Vec, + pub seeds: Vec, + pub methods: Vec, + pub trial_timeout_millis: u64, + pub experiment_seed: u64, +} + +#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TrialKey { + pub task: String, + pub fraction_basis_points: u32, + pub seed: u64, + pub method: ResearchMethod, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "kebab-case")] +pub enum TrialStatus { + Success, + NoHypothesis, + Unsupported, + Timeout, + ResourceLimit, + Error, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +#[serde(deny_unknown_fields)] +pub struct TrialRecord { + pub schema_version: u32, + pub key: TrialKey, + pub config_sha256: String, + pub status: TrialStatus, + pub observed_rows: usize, + pub held_out_rows: usize, + pub training: Option, + pub held_out: Option, + pub full_domain: Option, + pub semantic_recovery: bool, + pub expression: Option, + pub description_length: Option, + pub gate_count: Option, + pub minimum_unique: Option, + pub runtime_micros: u64, + pub peak_rss_bytes: u64, + #[serde(default)] + pub host_identifier: String, + #[serde(default)] + pub process_id: u32, + #[serde(default)] + pub started_unix_micros: u64, + pub hypothesis_sha256: Option, + pub detail: String, +} + +pub fn load_experiment_config(path: &Path) -> Result { + let source = std::fs::read_to_string(path).map_err(|source| OccamError::ReadFile { + path: path.to_owned(), + source, + })?; + let config: ExperimentConfig = serde_json::from_str(&source) + .map_err(|error| OccamError::Validation(format!("invalid experiment config: {error}")))?; + validate_config(&config)?; + Ok(config) +} + +pub fn expected_trial_keys( + task_ids: &[String], + config: &ExperimentConfig, +) -> Result, OccamError> { + validate_config(config)?; + let mut keys = Vec::new(); + for task in task_ids { + for fraction in &config.fractions { + let fraction_basis_points = (fraction * 100_000.0).round() as u32; + for seed in &config.seeds { + for method in &config.methods { + keys.push(TrialKey { + task: task.clone(), + fraction_basis_points, + seed: *seed, + method: *method, + }); + } + } + } + } + keys.sort(); + let unique = keys.iter().collect::>(); + if unique.len() != keys.len() { + return Err(OccamError::Validation( + "experiment trial keys are not unique".into(), + )); + } + Ok(keys) +} + +fn validate_config(config: &ExperimentConfig) -> Result<(), OccamError> { + let dimensions_are_supported = (config.fractions.len() == 8 && config.seeds.len() == 20) + || (config.fractions.len() == 1 && config.seeds.len() == 1); + if config.schema_version != 1 + || !dimensions_are_supported + || config.methods.len() != 8 + || config.trial_timeout_millis == 0 + { + return Err(OccamError::Validation( + "experiment config does not match the full or smoke protocol".into(), + )); + } + if config + .fractions + .iter() + .any(|fraction| !fraction.is_finite() || *fraction <= 0.0 || *fraction >= 1.0) + || config.seeds.iter().collect::>().len() != config.seeds.len() + || config.methods.iter().collect::>().len() != config.methods.len() + { + return Err(OccamError::Validation( + "experiment config contains invalid or duplicate values".into(), + )); + } + Ok(()) +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/scalar.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/scalar.rs new file mode 100644 index 000000000..8af703e9a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/scalar.rs @@ -0,0 +1,127 @@ +use crate::{Circuit, DEFAULT_LIMITS, OccamError, Operand, ResourceLimits, Source}; + +pub fn evaluate(circuit: &Circuit, input: &[bool]) -> Result, OccamError> { + evaluate_with_limits(circuit, input, &DEFAULT_LIMITS) +} + +pub fn evaluate_with_limits( + circuit: &Circuit, + input: &[bool], + limits: &ResourceLimits, +) -> Result, OccamError> { + if input.len() != circuit.input_count { + return Err(OccamError::Validation(format!( + "input width {} does not match circuit INPUTS {}", + input.len(), + circuit.input_count + ))); + } + if circuit.wire_count != circuit.gates.len() { + return Err(OccamError::Validation(format!( + "circuit wire count {} does not match gate count {}", + circuit.wire_count, + circuit.gates.len() + ))); + } + limits.require("circuit inputs", circuit.input_count, limits.max_inputs)?; + limits.require("circuit gates", circuit.gates.len(), limits.max_gates)?; + limits.require("circuit outputs", circuit.outputs.len(), limits.max_outputs)?; + let mut wires = Vec::new(); + wires + .try_reserve_exact(circuit.wire_count) + .map_err(|error| { + OccamError::Validation(format!("cannot allocate scalar wires: {error}")) + })?; + wires.resize(circuit.wire_count, false); + for (gate_index, gate) in circuit.gates.iter().enumerate() { + if gate.output != gate_index { + return Err(OccamError::Validation(format!( + "gate {gate_index} writes non-dense wire {}", + gate.output + ))); + } + let lhs = resolve(gate.lhs, input, &wires, gate_index)?; + let rhs = resolve(gate.rhs, input, &wires, gate_index)?; + wires[gate.output] = gate.op.apply(lhs, rhs); + } + circuit + .outputs + .iter() + .map(|operand| resolve(*operand, input, &wires, circuit.wire_count)) + .collect() +} + +fn resolve( + operand: Operand, + inputs: &[bool], + wires: &[bool], + available_wires: usize, +) -> Result { + let value = match operand.source { + Source::Input(index) => inputs.get(index).copied().ok_or_else(|| { + OccamError::Validation(format!("input column {index} is out of range")) + })?, + Source::Wire(index) if index < available_wires => { + wires.get(index).copied().ok_or_else(|| { + OccamError::Validation(format!("wire column {index} is out of range")) + })? + } + Source::Wire(index) => { + return Err(OccamError::Validation(format!( + "wire column {index} is unavailable with {available_wires} prior wires" + ))); + } + }; + Ok(value ^ operand.inverted) +} + +#[cfg(test)] +mod tests { + use crate::parse_netlist; + + use super::*; + + #[test] + fn evaluates_all_gate_truth_tables() { + for (name, expected) in [ + ("AND", [false, false, false, true]), + ("OR", [false, true, true, true]), + ("XOR", [false, true, true, false]), + ("NAND", [true, true, true, false]), + ("NOR", [true, false, false, false]), + ("XNOR", [true, false, false, true]), + ] { + let circuit = + parse_netlist(&format!("INPUTS 2\nw1 = {name} x1 x2\nOUTPUTS w1")).unwrap(); + let actual = [[false, false], [false, true], [true, false], [true, true]] + .map(|input| evaluate(&circuit, &input).unwrap()[0]); + assert_eq!(actual, expected, "{name}"); + } + } + + #[test] + fn applies_free_inversion_and_preserves_output_order() { + let circuit = parse_netlist("INPUTS 2\nw1 = AND ~x1 x2\nOUTPUTS x2 ~w1 x1").unwrap(); + assert_eq!( + evaluate(&circuit, &[false, true]).unwrap(), + [true, false, false] + ); + } + + #[test] + fn rejects_input_width_mismatch() { + let circuit = parse_netlist("INPUTS 2\nOUTPUTS x1").unwrap(); + assert!(evaluate(&circuit, &[true]).is_err()); + } + + #[test] + fn rejects_invalid_public_circuit_without_panicking() { + let mut circuit = parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1").unwrap(); + circuit.gates[0].lhs.source = Source::Input(usize::MAX); + assert!(evaluate(&circuit, &[false]).is_err()); + + let mut circuit = parse_netlist("INPUTS 1\nw1 = XOR x1 x1\nOUTPUTS w1").unwrap(); + circuit.gates[0].rhs.source = Source::Wire(usize::MAX); + assert!(evaluate(&circuit, &[false]).is_err()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/certificate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/certificate.rs new file mode 100644 index 000000000..5d72e0b6a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/certificate.rs @@ -0,0 +1,72 @@ +use serde::{Deserialize, Serialize}; + +use crate::OccamError; + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum AttemptStatus { + Sat, + Unsat, + Timeout, + ResourceLimit, +} + +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum SynthesisStatus { + Sat, + NoCircuitWithinBound, + Timeout, + ResourceLimit, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct SynthesisAttempt { + pub gate_bound: usize, + pub status: AttemptStatus, + pub variables: usize, + pub clauses: usize, + pub literals: usize, + pub elapsed_ms: u64, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct VerificationEvidence { + pub reparsed_netlist: bool, + pub scalar_exact_matches: usize, + pub scalar_correct_bits: usize, + pub packed_exact_matches: usize, + pub packed_correct_bits: usize, +} + +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct SynthesisCertificate { + pub schema_version: u32, + pub solver: String, + pub encoding: String, + pub status: SynthesisStatus, + pub status_detail: String, + pub problem_sha256: String, + pub input_width: usize, + pub output_width: usize, + pub truth_table_rows: usize, + pub maximum_gate_bound: usize, + pub timeout_ms: u64, + pub attempts: Vec, + pub minimal_gate_count: Option, + pub netlist_sha256: Option, + pub netlist: Option, + pub verification: Option, +} + +impl SynthesisCertificate { + pub fn to_json_pretty(&self) -> Result { + serde_json::to_string_pretty(self) + .map(|json| format!("{json}\n")) + .map_err(|error| { + OccamError::Validation(format!( + "synthesis certificate JSON encoding failed: {error}" + )) + }) + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/cnf.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/cnf.rs new file mode 100644 index 000000000..154578a51 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/cnf.rs @@ -0,0 +1,372 @@ +use crate::{GateOp, OccamError, Source}; +use varisat::{CnfFormula, ExtendFormula, Lit}; + +use super::{SynthesisLimits, SynthesisProblem}; + +pub(crate) const GATE_OPERATIONS: [GateOp; 6] = [ + GateOp::And, + GateOp::Or, + GateOp::Xor, + GateOp::Nand, + GateOp::Nor, + GateOp::Xnor, +]; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub(crate) struct LiteralCandidate { + pub source: Source, + pub inverted: bool, +} + +pub(crate) struct GateEncoding { + pub operations: Vec, + pub lhs_selectors: Vec, + pub rhs_selectors: Vec, + pub candidates: Vec, + pub values: Vec, +} + +pub(crate) struct OutputEncoding { + pub selectors: Vec, + pub candidates: Vec, +} + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct EncodingStatistics { + pub variables: usize, + pub clauses: usize, + pub literals: usize, +} + +pub(crate) struct EncodedSynthesis { + pub formula: CnfFormula, + pub gates: Vec, + pub outputs: Vec, + pub statistics: EncodingStatistics, +} + +struct FormulaBuilder<'a> { + formula: CnfFormula, + limits: &'a SynthesisLimits, + literal_count: usize, +} + +impl<'a> FormulaBuilder<'a> { + fn new(limits: &'a SynthesisLimits) -> Self { + Self { + formula: CnfFormula::new(), + limits, + literal_count: 0, + } + } + + fn new_lit(&mut self) -> Result { + let requested = + self.formula + .var_count() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF variable count", + })?; + require( + "synthesis CNF variables", + requested, + self.limits.max_cnf_variables, + )?; + Ok(self.formula.new_lit()) + } + + fn new_lits(&mut self, count: usize) -> Result, OccamError> { + (0..count).map(|_| self.new_lit()).collect() + } + + fn add_clause(&mut self, clause: &[Lit]) -> Result<(), OccamError> { + let clause_count = + self.formula + .len() + .checked_add(1) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF clause count", + })?; + require( + "synthesis CNF clauses", + clause_count, + self.limits.max_cnf_clauses, + )?; + self.literal_count = + self.literal_count + .checked_add(clause.len()) + .ok_or(OccamError::ArithmeticOverflow { + context: "synthesis CNF literal count", + })?; + require( + "synthesis CNF literals", + self.literal_count, + self.limits.max_cnf_literals, + )?; + self.formula.add_clause(clause); + Ok(()) + } + + fn exactly_one(&mut self, selectors: &[Lit]) -> Result<(), OccamError> { + self.add_clause(selectors)?; + for left in 0..selectors.len() { + for right in (left + 1)..selectors.len() { + self.add_clause(&[!selectors[left], !selectors[right]])?; + } + } + Ok(()) + } + + fn statistics(&self) -> EncodingStatistics { + EncodingStatistics { + variables: self.formula.var_count(), + clauses: self.formula.len(), + literals: self.literal_count, + } + } +} + +pub(crate) fn encode( + problem: &SynthesisProblem, + gate_bound: usize, + limits: &SynthesisLimits, +) -> Result { + require("synthesis gates", gate_bound, limits.max_gates)?; + let mut builder = FormulaBuilder::new(limits); + let mut gates = Vec::with_capacity(gate_bound); + + for gate_index in 0..gate_bound { + let candidates = literal_candidates(problem.input_width, gate_index); + let operations = builder.new_lits(GATE_OPERATIONS.len())?; + let lhs_selectors = builder.new_lits(candidates.len())?; + let rhs_selectors = builder.new_lits(candidates.len())?; + let lhs_values = builder.new_lits(problem.rows.len())?; + let rhs_values = builder.new_lits(problem.rows.len())?; + let values = builder.new_lits(problem.rows.len())?; + builder.exactly_one(&operations)?; + builder.exactly_one(&lhs_selectors)?; + builder.exactly_one(&rhs_selectors)?; + + for (row_index, row) in problem.rows.iter().enumerate() { + for (selector, candidate) in lhs_selectors.iter().zip(&candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_equality(&mut builder, *selector, lhs_values[row_index], source)?; + } + for (selector, candidate) in rhs_selectors.iter().zip(&candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_equality(&mut builder, *selector, rhs_values[row_index], source)?; + } + for (operation_index, operation) in GATE_OPERATIONS.iter().enumerate() { + encode_operation( + &mut builder, + operations[operation_index], + lhs_values[row_index], + rhs_values[row_index], + values[row_index], + *operation, + )?; + } + } + + gates.push(GateEncoding { + operations, + lhs_selectors, + rhs_selectors, + candidates, + values, + }); + } + + let output_candidates = literal_candidates(problem.input_width, gate_bound); + let mut outputs = Vec::with_capacity(problem.output_width); + for output_index in 0..problem.output_width { + let selectors = builder.new_lits(output_candidates.len())?; + builder.exactly_one(&selectors)?; + for (row_index, row) in problem.rows.iter().enumerate() { + for (selector, candidate) in selectors.iter().zip(&output_candidates) { + let source = source_value(*candidate, row_index, row, &gates)?; + imply_expected(&mut builder, *selector, source, row.expected[output_index])?; + } + } + outputs.push(OutputEncoding { + selectors, + candidates: output_candidates.clone(), + }); + } + + let statistics = builder.statistics(); + Ok(EncodedSynthesis { + formula: builder.formula, + gates, + outputs, + statistics, + }) +} + +fn literal_candidates(input_width: usize, wire_count: usize) -> Vec { + let sources = (0..input_width) + .map(Source::Input) + .chain((0..wire_count).map(Source::Wire)); + sources + .flat_map(|source| { + [ + LiteralCandidate { + source, + inverted: false, + }, + LiteralCandidate { + source, + inverted: true, + }, + ] + }) + .collect() +} + +#[derive(Clone, Copy)] +enum SemanticValue { + Constant(bool), + Literal(Lit), +} + +fn source_value( + candidate: LiteralCandidate, + row_index: usize, + row: &super::TruthRow, + gates: &[GateEncoding], +) -> Result { + match candidate.source { + Source::Input(index) => row + .input + .get(index) + .copied() + .map(|value| SemanticValue::Constant(value ^ candidate.inverted)) + .ok_or_else(|| { + OccamError::Validation(format!("synthesis input source {index} is out of range")) + }), + Source::Wire(index) => gates + .get(index) + .and_then(|gate| gate.values.get(row_index)) + .copied() + .map(|value| SemanticValue::Literal(if candidate.inverted { !value } else { value })) + .ok_or_else(|| { + OccamError::Validation(format!("synthesis wire source {index} is unavailable")) + }), + } +} + +fn imply_equality( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + value: Lit, + source: SemanticValue, +) -> Result<(), OccamError> { + match source { + SemanticValue::Constant(true) => builder.add_clause(&[!selector, value]), + SemanticValue::Constant(false) => builder.add_clause(&[!selector, !value]), + SemanticValue::Literal(source) => { + builder.add_clause(&[!selector, !value, source])?; + builder.add_clause(&[!selector, value, !source]) + } + } +} + +fn imply_expected( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + source: SemanticValue, + expected: bool, +) -> Result<(), OccamError> { + match source { + SemanticValue::Constant(actual) if actual == expected => Ok(()), + SemanticValue::Constant(_) => builder.add_clause(&[!selector]), + SemanticValue::Literal(value) => { + builder.add_clause(&[!selector, if expected { value } else { !value }]) + } + } +} + +fn encode_operation( + builder: &mut FormulaBuilder<'_>, + selector: Lit, + lhs: Lit, + rhs: Lit, + output: Lit, + operation: GateOp, +) -> Result<(), OccamError> { + for lhs_value in [false, true] { + for rhs_value in [false, true] { + let expected = operation.apply(lhs_value, rhs_value); + builder.add_clause(&[ + !selector, + if lhs_value { !lhs } else { lhs }, + if rhs_value { !rhs } else { rhs }, + if expected { output } else { !output }, + ])?; + } + } + Ok(()) +} + +fn require(resource: &'static str, requested: usize, limit: usize) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use varisat::Solver; + + use super::*; + + fn solve(formula: &CnfFormula) -> bool { + let mut solver = Solver::new(); + solver.add_formula(formula); + solver.solve().unwrap() + } + + #[test] + fn exactly_one_handles_zero_one_and_multiple_selectors() { + let limits = SynthesisLimits::default(); + + let mut zero = FormulaBuilder::new(&limits); + zero.exactly_one(&[]).unwrap(); + assert!(!solve(&zero.formula)); + + let mut one = FormulaBuilder::new(&limits); + let selector = one.new_lit().unwrap(); + one.exactly_one(&[selector]).unwrap(); + assert!(solve(&one.formula)); + + let mut multiple = FormulaBuilder::new(&limits); + let left = multiple.new_lit().unwrap(); + let right = multiple.new_lit().unwrap(); + multiple.exactly_one(&[left, right]).unwrap(); + multiple.add_clause(&[left]).unwrap(); + multiple.add_clause(&[right]).unwrap(); + assert!(!solve(&multiple.formula)); + } + + #[test] + fn respects_cnf_resource_limits() { + let limits = SynthesisLimits { + max_cnf_variables: 0, + ..SynthesisLimits::default() + }; + let mut builder = FormulaBuilder::new(&limits); + assert!(matches!( + builder.new_lit(), + Err(OccamError::ResourceLimit { + resource: "synthesis CNF variables", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/mod.rs new file mode 100644 index 000000000..58094d59a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/mod.rs @@ -0,0 +1,10 @@ +mod certificate; +mod cnf; +mod problem; +mod solver; + +pub use certificate::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisStatus, VerificationEvidence, +}; +pub use problem::{SynthesisLimits, SynthesisProblem, TruthRow}; +pub use solver::synthesize_minimal; diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/problem.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/problem.rs new file mode 100644 index 000000000..97ed2e292 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/problem.rs @@ -0,0 +1,297 @@ +use std::time::Duration; + +use crate::{Dataset, OccamError}; + +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct SynthesisLimits { + pub max_inputs: usize, + pub max_outputs: usize, + pub max_truth_rows: usize, + pub max_gates: usize, + pub max_cnf_variables: usize, + pub max_cnf_clauses: usize, + pub max_cnf_literals: usize, + pub timeout: Duration, +} + +impl Default for SynthesisLimits { + fn default() -> Self { + Self { + max_inputs: 8, + max_outputs: 8, + max_truth_rows: 256, + max_gates: 16, + max_cnf_variables: 2_000_000, + max_cnf_clauses: 10_000_000, + max_cnf_literals: 50_000_000, + timeout: Duration::from_secs(60), + } + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TruthRow { + pub input: Vec, + pub expected: Vec, +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct SynthesisProblem { + pub input_width: usize, + pub output_width: usize, + pub rows: Vec, +} + +impl SynthesisProblem { + pub fn from_dataset(dataset: &Dataset) -> Result { + Self::from_dataset_with_limits(dataset, &SynthesisLimits::default()) + } + + pub fn from_dataset_with_limits( + dataset: &Dataset, + limits: &SynthesisLimits, + ) -> Result { + let problem = Self::from_partial_dataset_with_limits(dataset, limits)?; + let row_count = 1usize + .checked_shl(dataset.input_width.try_into().map_err(|_| { + OccamError::ArithmeticOverflow { + context: "complete truth-table row count", + } + })?) + .ok_or(OccamError::ArithmeticOverflow { + context: "complete truth-table row count", + })?; + require( + "synthesis truth-table rows", + row_count, + limits.max_truth_rows, + )?; + if problem.rows.len() != row_count { + return Err(OccamError::Validation(format!( + "synthesis requires a complete truth table with {row_count} rows, found {}", + problem.rows.len() + ))); + } + Ok(problem) + } + + pub fn from_partial_dataset_with_limits( + dataset: &Dataset, + limits: &SynthesisLimits, + ) -> Result { + require("synthesis inputs", dataset.input_width, limits.max_inputs)?; + require( + "synthesis outputs", + dataset.output_width, + limits.max_outputs, + )?; + if dataset.input_width == 0 { + return Err(OccamError::Validation( + "synthesis requires at least one input".into(), + )); + } + if dataset.output_width == 0 { + return Err(OccamError::Validation( + "synthesis requires at least one output".into(), + )); + } + require( + "synthesis constraint rows", + dataset.samples.len(), + limits.max_truth_rows, + )?; + if dataset.samples.is_empty() { + return Err(OccamError::Validation( + "synthesis requires at least one constraint row".into(), + )); + } + + let mut rows = Vec::with_capacity(dataset.samples.len()); + for (sample_index, sample) in dataset.samples.iter().enumerate() { + if sample.input.len() != dataset.input_width { + return Err(OccamError::Validation(format!( + "sample {} input width {} does not match dataset input width {}", + sample_index + 1, + sample.input.len(), + dataset.input_width + ))); + } + if sample.expected.len() != dataset.output_width { + return Err(OccamError::Validation(format!( + "sample {} output width {} does not match dataset output width {}", + sample_index + 1, + sample.expected.len(), + dataset.output_width + ))); + } + let assignment = sample + .input + .iter() + .fold(0usize, |index, bit| (index << 1) | usize::from(*bit)); + rows.push((assignment, sample.input.clone(), sample.expected.clone())); + } + rows.sort_by_key(|row| row.0); + for pair in rows.windows(2) { + if pair[0].0 == pair[1].0 { + let kind = if pair[0].2 == pair[1].2 { + "duplicate" + } else { + "conflicting duplicate" + }; + return Err(OccamError::Validation(format!( + "{kind} synthesis input assignment {}", + pair[0].0 + ))); + } + } + let rows = rows + .into_iter() + .map(|(_, input, expected)| TruthRow { input, expected }) + .collect(); + + Ok(Self { + input_width: dataset.input_width, + output_width: dataset.output_width, + rows, + }) + } + + pub(crate) fn canonical_bytes(&self) -> Vec { + let mut bytes = format!( + "occam71-synthesis-v1\ninputs={}\noutputs={}\n", + self.input_width, self.output_width + ) + .into_bytes(); + for row in &self.rows { + for bit in &row.input { + bytes.push(if *bit { b'1' } else { b'0' }); + } + bytes.push(b','); + for bit in &row.expected { + bytes.push(if *bit { b'1' } else { b'0' }); + } + bytes.push(b'\n'); + } + bytes + } +} + +fn require(resource: &'static str, requested: usize, limit: usize) -> Result<(), OccamError> { + if requested > limit { + return Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use crate::{Dataset, Sample, parse_dataset}; + + use super::*; + + #[test] + fn canonicalizes_complete_half_adder() { + let dataset = parse_dataset("input,output\n11,01\n00,00\n10,10\n01,10\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + assert_eq!(problem.rows[0].input, [false, false]); + assert_eq!(problem.rows[0].expected, [false, false]); + assert_eq!(problem.rows[3].input, [true, true]); + assert_eq!(problem.rows[3].expected, [false, true]); + } + + #[test] + fn accepts_complete_two_bit_adder() { + let mut samples = Vec::new(); + for assignment in 0..16usize { + let a = ((assignment >> 3) & 1) * 2 + ((assignment >> 2) & 1); + let b = ((assignment >> 1) & 1) * 2 + (assignment & 1); + let sum = a + b; + samples.push(Sample { + input: (0..4) + .map(|column| (assignment >> (3 - column)) & 1 == 1) + .collect(), + expected: (0..3) + .map(|column| (sum >> (2 - column)) & 1 == 1) + .collect(), + }); + } + let dataset = Dataset { + input_width: 4, + output_width: 3, + samples, + }; + assert_eq!( + SynthesisProblem::from_dataset(&dataset).unwrap().rows.len(), + 16 + ); + } + + #[test] + fn rejects_partial_duplicate_conflicting_and_malformed_tables() { + let partial = parse_dataset("input,output\n00,0\n01,1\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&partial) + .unwrap_err() + .to_string() + .contains("complete") + ); + + let duplicate = parse_dataset("input,output\n00,0\n00,0\n10,1\n11,0\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&duplicate) + .unwrap_err() + .to_string() + .contains("duplicate") + ); + + let conflicting = parse_dataset("input,output\n00,0\n00,1\n10,1\n11,0\n").unwrap(); + assert!( + SynthesisProblem::from_dataset(&conflicting) + .unwrap_err() + .to_string() + .contains("conflicting") + ); + + let mut malformed = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + malformed.samples[1].expected.clear(); + assert!( + SynthesisProblem::from_dataset(&malformed) + .unwrap_err() + .to_string() + .contains("output width") + ); + } + + #[test] + fn canonicalizes_partial_constraint_tables_for_cegis() { + let dataset = parse_dataset("input,output\n11,0\n01,1\n").unwrap(); + let problem = SynthesisProblem::from_partial_dataset_with_limits( + &dataset, + &SynthesisLimits::default(), + ) + .unwrap(); + assert_eq!(problem.rows.len(), 2); + assert_eq!(problem.rows[0].input, [false, true]); + assert_eq!(problem.rows[1].input, [true, true]); + } + + #[test] + fn rejects_oversized_problem() { + let dataset = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + let limits = SynthesisLimits { + max_inputs: 0, + ..SynthesisLimits::default() + }; + assert!(matches!( + SynthesisProblem::from_dataset_with_limits(&dataset, &limits), + Err(OccamError::ResourceLimit { + resource: "synthesis inputs", + .. + }) + )); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/solver.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/solver.rs new file mode 100644 index 000000000..e8b2802de --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/src/synthesis/solver.rs @@ -0,0 +1,578 @@ +use std::{ + sync::mpsc, + thread, + time::{Duration, Instant}, +}; + +use sha2::{Digest, Sha256}; +use varisat::{Lit, Solver}; + +use crate::{ + Circuit, Dataset, Gate, GateOp, OccamError, Operand, Sample, Source, pack_dataset, + parse_netlist, verify, verify_prepacked, +}; + +use super::{ + AttemptStatus, SynthesisAttempt, SynthesisCertificate, SynthesisLimits, SynthesisProblem, + SynthesisStatus, VerificationEvidence, + cnf::{EncodedSynthesis, GATE_OPERATIONS, GateEncoding, OutputEncoding, encode}, +}; + +pub fn synthesize_minimal( + problem: &SynthesisProblem, + limits: &SynthesisLimits, +) -> Result { + validate_problem(problem, limits)?; + let started = Instant::now(); + let mut attempts = Vec::new(); + + for gate_bound in 0..=limits.max_gates { + if timed_out(started.elapsed(), limits.timeout) { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Timeout, + variables: 0, + clauses: 0, + literals: 0, + elapsed_ms: 0, + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::Timeout, + format!( + "timeout reached before solving gate bound {gate_bound}; no larger bound was attempted" + ), + attempts, + )); + } + + let attempt_started = Instant::now(); + let encoded = match encode(problem, gate_bound, limits) { + Ok(encoded) => encoded, + Err(OccamError::ResourceLimit { + resource, + requested, + limit, + }) => { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::ResourceLimit, + variables: 0, + clauses: 0, + literals: 0, + elapsed_ms: elapsed_ms(attempt_started.elapsed()), + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::ResourceLimit, + format!( + "{resource} resource limit exceeded at gate bound {gate_bound}: requested {requested}, limit {limit}" + ), + attempts, + )); + } + Err(error) => return Err(error), + }; + let statistics = encoded.statistics; + let remaining = limits.timeout.saturating_sub(started.elapsed()); + let solved = solve_with_timeout(encoded, remaining)?; + let elapsed = attempt_started.elapsed(); + if matches!(solved, TimedSolve::Timeout) { + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Timeout, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }); + return Ok(base_certificate( + problem, + limits, + SynthesisStatus::Timeout, + format!( + "wall-clock timeout reached while solving gate bound {gate_bound}; no larger bound was attempted" + ), + attempts, + )); + } + + match solved { + TimedSolve::Timeout => unreachable!("timeout returned above"), + TimedSolve::Completed(CanonicalSolve::Unsat) => attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Unsat, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }), + TimedSolve::Completed(CanonicalSolve::Sat { circuit }) => { + let (netlist, verification) = independently_verify(problem, circuit, gate_bound)?; + attempts.push(SynthesisAttempt { + gate_bound, + status: AttemptStatus::Sat, + variables: statistics.variables, + clauses: statistics.clauses, + literals: statistics.literals, + elapsed_ms: elapsed_ms(elapsed), + }); + let detail = if gate_bound == 0 { + "gate bound 0 was SAT".to_owned() + } else { + format!( + "bounds 0 through {} were UNSAT and bound {gate_bound} was SAT", + gate_bound - 1 + ) + }; + let mut certificate = + base_certificate(problem, limits, SynthesisStatus::Sat, detail, attempts); + certificate.minimal_gate_count = Some(gate_bound); + certificate.netlist_sha256 = Some(sha256_hex(netlist.as_bytes())); + certificate.netlist = Some(netlist); + certificate.verification = Some(verification); + return Ok(certificate); + } + } + } + + Ok(base_certificate( + problem, + limits, + SynthesisStatus::NoCircuitWithinBound, + format!( + "all gate bounds from 0 through {} were UNSAT; this is not a proof for larger circuits", + limits.max_gates + ), + attempts, + )) +} + +enum CanonicalSolve { + Sat { circuit: Circuit }, + Unsat, +} + +enum TimedSolve { + Completed(CanonicalSolve), + Timeout, +} + +fn solve_with_timeout( + encoded: EncodedSynthesis, + timeout: Duration, +) -> Result { + let (sender, receiver) = mpsc::sync_channel(1); + thread::Builder::new() + .name("occam71-sat".into()) + .spawn(move || { + let _ = sender.send(solve_canonical(encoded)); + }) + .map_err(|error| { + OccamError::Validation(format!("failed to start SAT solver worker: {error}")) + })?; + match receiver.recv_timeout(timeout) { + Ok(Ok(result)) => Ok(TimedSolve::Completed(result)), + Ok(Err(error)) => Err(error), + Err(mpsc::RecvTimeoutError::Timeout) => Ok(TimedSolve::Timeout), + Err(mpsc::RecvTimeoutError::Disconnected) => Err(OccamError::Validation( + "SAT solver worker terminated without a result".into(), + )), + } +} + +fn solve_canonical(encoded: EncodedSynthesis) -> Result { + let EncodedSynthesis { + formula, + gates, + outputs, + .. + } = encoded; + let mut solver = Solver::new(); + solver.add_formula(&formula); + let satisfiable = solver + .solve() + .map_err(|error| OccamError::Validation(format!("SAT solver failed: {error}")))?; + if !satisfiable { + return Ok(CanonicalSolve::Unsat); + } + + let mut assumptions = Vec::new(); + for selectors in selector_groups(&gates, &outputs) { + let mut selected = None; + for selector in selectors { + let mut trial = assumptions.clone(); + trial.push(selector); + solver.assume(&trial); + let satisfiable = solver.solve().map_err(|error| { + OccamError::Validation(format!("SAT canonicalization failed: {error}")) + })?; + if satisfiable { + selected = Some(selector); + assumptions.push(selector); + break; + } + } + if selected.is_none() { + return Err(OccamError::Validation( + "SAT model lost an exactly-one selector during canonicalization".into(), + )); + } + } + solver.assume(&assumptions); + if !solver + .solve() + .map_err(|error| OccamError::Validation(format!("SAT model extraction failed: {error}")))? + { + return Err(OccamError::Validation( + "canonical SAT assumptions unexpectedly became UNSAT".into(), + )); + } + let model = solver + .model() + .ok_or_else(|| OccamError::Validation("SAT solver returned SAT without a model".into()))?; + let circuit = extract_circuit(&gates, &outputs, &model)?; + Ok(CanonicalSolve::Sat { circuit }) +} + +fn selector_groups(gates: &[GateEncoding], outputs: &[OutputEncoding]) -> Vec> { + let mut groups = Vec::with_capacity(gates.len() * 3 + outputs.len()); + for gate in gates { + groups.push(gate.operations.clone()); + groups.push(gate.lhs_selectors.clone()); + groups.push(gate.rhs_selectors.clone()); + } + groups.extend(outputs.iter().map(|output| output.selectors.clone())); + groups +} + +fn extract_circuit( + gates: &[GateEncoding], + outputs: &[OutputEncoding], + model: &[Lit], +) -> Result { + let mut extracted_gates = Vec::with_capacity(gates.len()); + for (gate_index, gate) in gates.iter().enumerate() { + let operation_index = selected_index(&gate.operations, model, "gate operation")?; + let lhs_index = selected_index(&gate.lhs_selectors, model, "gate lhs")?; + let rhs_index = selected_index(&gate.rhs_selectors, model, "gate rhs")?; + extracted_gates.push(Gate { + output: gate_index, + op: GATE_OPERATIONS[operation_index], + lhs: candidate_operand(gate.candidates[lhs_index]), + rhs: candidate_operand(gate.candidates[rhs_index]), + }); + } + let extracted_outputs = outputs + .iter() + .map(|output| { + let index = selected_index(&output.selectors, model, "circuit output")?; + Ok(candidate_operand(output.candidates[index])) + }) + .collect::, OccamError>>()?; + let input_count = gates + .first() + .and_then(|gate| { + gate.candidates + .iter() + .filter_map(|candidate| match candidate.source { + Source::Input(index) => Some(index + 1), + Source::Wire(_) => None, + }) + .max() + }) + .or_else(|| { + outputs.first().and_then(|output| { + output + .candidates + .iter() + .filter_map(|candidate| match candidate.source { + Source::Input(index) => Some(index + 1), + Source::Wire(_) => None, + }) + .max() + }) + }) + .ok_or_else(|| OccamError::Validation("synthesis circuit has no inputs".into()))?; + Ok(Circuit { + input_count, + wire_count: extracted_gates.len(), + gates: extracted_gates, + outputs: extracted_outputs, + }) +} + +fn selected_index(selectors: &[Lit], model: &[Lit], context: &str) -> Result { + let selected = selectors + .iter() + .enumerate() + .filter(|(_, selector)| model_value(model, **selector)) + .map(|(index, _)| index) + .collect::>(); + match selected.as_slice() { + [index] => Ok(*index), + _ => Err(OccamError::Validation(format!( + "SAT model selected {} values for {context}, expected exactly one", + selected.len() + ))), + } +} + +fn model_value(model: &[Lit], variable: Lit) -> bool { + model + .iter() + .find(|literal| literal.index() == variable.index()) + .is_some_and(|literal| literal.is_positive()) +} + +fn candidate_operand(candidate: super::cnf::LiteralCandidate) -> Operand { + Operand { + source: candidate.source, + inverted: candidate.inverted, + } +} + +fn independently_verify( + problem: &SynthesisProblem, + circuit: Circuit, + gate_bound: usize, +) -> Result<(String, VerificationEvidence), OccamError> { + if circuit.gates.len() != gate_bound { + return Err(OccamError::Validation(format!( + "extracted circuit has {} gates, expected bound {gate_bound}", + circuit.gates.len() + ))); + } + let netlist = render_netlist(&circuit); + let reparsed = parse_netlist(&netlist)?; + if reparsed != circuit { + return Err(OccamError::Validation( + "reparsed synthesized netlist differs from extracted circuit".into(), + )); + } + let dataset = problem_dataset(problem); + let scalar = verify(&reparsed, &dataset)?; + let packed = verify_prepacked(&reparsed, &pack_dataset(&dataset)?)?; + let expected_bits = problem.rows.len().checked_mul(problem.output_width).ok_or( + OccamError::ArithmeticOverflow { + context: "synthesis verification bit count", + }, + )?; + if scalar.exact_matches != problem.rows.len() + || scalar.correct_bits != expected_bits + || packed != scalar + { + return Err(OccamError::Validation(format!( + "independent verification rejected synthesized circuit: scalar {scalar:?}, packed {packed:?}" + ))); + } + Ok(( + netlist, + VerificationEvidence { + reparsed_netlist: true, + scalar_exact_matches: scalar.exact_matches, + scalar_correct_bits: scalar.correct_bits, + packed_exact_matches: packed.exact_matches, + packed_correct_bits: packed.correct_bits, + }, + )) +} + +fn problem_dataset(problem: &SynthesisProblem) -> Dataset { + Dataset { + input_width: problem.input_width, + output_width: problem.output_width, + samples: problem + .rows + .iter() + .map(|row| Sample { + input: row.input.clone(), + expected: row.expected.clone(), + }) + .collect(), + } +} + +fn validate_problem( + problem: &SynthesisProblem, + limits: &SynthesisLimits, +) -> Result<(), OccamError> { + let dataset = problem_dataset(problem); + let canonical = SynthesisProblem::from_partial_dataset_with_limits(&dataset, limits)?; + if &canonical != problem { + return Err(OccamError::Validation( + "SynthesisProblem rows are not in canonical input order".into(), + )); + } + Ok(()) +} + +fn render_netlist(circuit: &Circuit) -> String { + let mut netlist = format!("INPUTS {}\n", circuit.input_count); + for gate in &circuit.gates { + netlist.push_str(&format!( + "w{} = {} {} {}\n", + gate.output + 1, + operation_name(gate.op), + operand_name(gate.lhs), + operand_name(gate.rhs) + )); + } + netlist.push_str("OUTPUTS"); + for output in &circuit.outputs { + netlist.push(' '); + netlist.push_str(&operand_name(*output)); + } + netlist.push('\n'); + netlist +} + +fn operation_name(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +fn operand_name(operand: Operand) -> String { + let prefix = if operand.inverted { "~" } else { "" }; + match operand.source { + Source::Input(index) => format!("{prefix}x{}", index + 1), + Source::Wire(index) => format!("{prefix}w{}", index + 1), + } +} + +fn base_certificate( + problem: &SynthesisProblem, + limits: &SynthesisLimits, + status: SynthesisStatus, + status_detail: String, + attempts: Vec, +) -> SynthesisCertificate { + SynthesisCertificate { + schema_version: 1, + solver: "varisat 0.2.2".into(), + encoding: "universal-dag-cnf-v1".into(), + status, + status_detail, + problem_sha256: sha256_hex(&problem.canonical_bytes()), + input_width: problem.input_width, + output_width: problem.output_width, + truth_table_rows: problem.rows.len(), + maximum_gate_bound: limits.max_gates, + timeout_ms: elapsed_ms(limits.timeout), + attempts, + minimal_gate_count: None, + netlist_sha256: None, + netlist: None, + verification: None, + } +} + +fn sha256_hex(bytes: &[u8]) -> String { + let digest = Sha256::digest(bytes); + digest.iter().map(|byte| format!("{byte:02x}")).collect() +} + +fn timed_out(elapsed: Duration, timeout: Duration) -> bool { + elapsed >= timeout +} + +fn elapsed_ms(duration: Duration) -> u64 { + u64::try_from(duration.as_millis()).unwrap_or(u64::MAX) +} + +#[cfg(test)] +mod tests { + use crate::parse_dataset; + + use super::*; + + #[test] + fn proves_half_adder_minimal_at_two_gates() { + let dataset = parse_dataset("input,output\n00,00\n01,10\n10,10\n11,01\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let limits = SynthesisLimits { + max_gates: 2, + ..SynthesisLimits::default() + }; + let certificate = synthesize_minimal(&problem, &limits).unwrap(); + assert_eq!(certificate.status, SynthesisStatus::Sat); + assert_eq!( + certificate + .attempts + .iter() + .map(|attempt| attempt.status) + .collect::>(), + [ + AttemptStatus::Unsat, + AttemptStatus::Unsat, + AttemptStatus::Sat + ] + ); + assert_eq!(certificate.minimal_gate_count, Some(2)); + assert!(certificate.verification.is_some()); + } + + #[test] + fn distinguishes_bound_exhaustion_timeout_and_resource_limit() { + let dataset = parse_dataset("input,output\n00,00\n01,10\n10,10\n11,01\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + + let bounded = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 1, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(bounded.status, SynthesisStatus::NoCircuitWithinBound); + + let timeout = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 2, + timeout: Duration::ZERO, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(timeout.status, SynthesisStatus::Timeout); + + let limited = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 2, + max_cnf_variables: 0, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(limited.status, SynthesisStatus::ResourceLimit); + } + + #[test] + fn certificate_json_is_stably_ordered() { + let dataset = parse_dataset("input,output\n0,0\n1,1\n").unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let certificate = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 0, + ..SynthesisLimits::default() + }, + ) + .unwrap(); + let first = certificate.to_json_pretty().unwrap(); + let second = certificate.to_json_pretty().unwrap(); + assert_eq!(first, second); + assert!(first.find("\"schema_version\"").unwrap() < first.find("\"status\"").unwrap()); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_lock.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_lock.rs new file mode 100644 index 000000000..b2fac27fe --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_lock.rs @@ -0,0 +1,99 @@ +use std::{fs, path::PathBuf}; + +use serde::Deserialize; +use sha2::{Digest, Sha256}; + +#[derive(Clone, Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct AbcLock { + schema_version: u32, + repository: String, + commit: String, + archive_url: String, + archive_sha256: String, + archive_bytes: usize, + build: Vec, +} + +fn lock_path() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("tools/abc/LOCK.json") +} + +fn validate_lock(lock: &AbcLock) -> Result<(), String> { + if lock.schema_version != 1 { + return Err("unsupported schema".into()); + } + if !lock.repository.starts_with("https://") || !lock.archive_url.starts_with("https://") { + return Err("ABC URLs must use HTTPS".into()); + } + if lock.commit.len() != 40 + || !lock + .commit + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) + { + return Err("ABC commit must be 40 lowercase hexadecimal characters".into()); + } + if lock.archive_sha256.len() != 64 + || !lock + .archive_sha256 + .bytes() + .all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) + { + return Err("ABC archive SHA-256 must be lowercase hexadecimal".into()); + } + if lock.archive_bytes == 0 { + return Err("ABC archive byte count must be positive".into()); + } + if lock.build != ["make", "-j2", "ABC_USE_NO_READLINE=1"] { + return Err("ABC build command is not pinned".into()); + } + Ok(()) +} + +fn validate_archive(lock: &AbcLock, bytes: &[u8]) -> Result<(), String> { + validate_lock(lock)?; + if bytes.len() != lock.archive_bytes { + return Err("archive byte count mismatch".into()); + } + let actual = format!("{:x}", Sha256::digest(bytes)); + if actual != lock.archive_sha256 { + return Err("archive checksum mismatch".into()); + } + Ok(()) +} + +#[test] +fn abc_lock_is_exact_and_well_formed() { + let source = fs::read_to_string(lock_path()).unwrap(); + let lock: AbcLock = serde_json::from_str(&source).unwrap(); + validate_lock(&lock).unwrap(); + assert_eq!(lock.commit, "e76768b9d34f9dc67cb6608efecd55db271ff849"); + assert_eq!( + lock.archive_sha256, + "158a4bf861be010cf899c5cb20c159d1b2e68ae1b461bce7d2c10be348a8e159" + ); + assert_eq!(lock.archive_bytes, 7_709_448); +} + +#[test] +fn tampered_lock_is_rejected_before_archive_use() { + let bytes = b"archive"; + let mut lock: AbcLock = + serde_json::from_str(&fs::read_to_string(lock_path()).unwrap()).unwrap(); + lock.archive_bytes = bytes.len(); + lock.archive_sha256 = format!("{:x}", Sha256::digest(bytes)); + validate_archive(&lock, bytes).unwrap(); + + lock.archive_sha256.replace_range(0..1, "0"); + if lock.archive_sha256 == format!("{:x}", Sha256::digest(bytes)) { + lock.archive_sha256.replace_range(0..1, "1"); + } + assert_eq!( + validate_archive(&lock, bytes).unwrap_err(), + "archive checksum mismatch" + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_optimization.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_optimization.rs new file mode 100644 index 000000000..057b5c8f6 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/abc_optimization.rs @@ -0,0 +1,110 @@ +use std::{fs, path::PathBuf, process::Command}; + +use occam71_rust::{AbcOptimizationConfig, DEFAULT_LIMITS, optimize_with_abc, parse_netlist}; + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +fn abc_binary_or_skip() -> Option { + let commit = "e76768b9d34f9dc67cb6608efecd55db271ff849"; + let path = workspace_root().join(format!("target/tools/abc/{commit}/abc")); + path.is_file().then_some(path) +} + +#[test] +fn abc_portfolio_returns_only_equivalent_official_candidates() { + let Some(abc) = abc_binary_or_skip() else { + eprintln!("pinned ABC absent; run ./scripts/fetch-abc.sh"); + return; + }; + let original = parse_netlist(include_str!("fixtures/add-n2.txt")).unwrap(); + let result = optimize_with_abc( + &original, + &abc, + &AbcOptimizationConfig::for_tests(), + &DEFAULT_LIMITS, + ) + .unwrap(); + + assert!(!result.report.flows.is_empty()); + assert!(result.report.flows.iter().any(|flow| flow.accepted)); + for flow in result.report.flows.iter().filter(|flow| flow.accepted) { + assert!(flow.abc_cec_equivalent); + assert_eq!(flow.rust_exhaustive_mismatches, Some(0)); + assert!(flow.official_gate_count.is_some()); + } + for candidate in &result.candidates { + let reparsed = parse_netlist(&candidate.netlist).unwrap(); + assert_eq!(reparsed.gates.len(), candidate.official_gate_count); + assert_eq!(candidate.rust_exhaustive_mismatches, 0); + } +} + +#[test] +fn abc_portfolio_reports_are_stable_for_a_fixed_flow() { + let Some(abc) = abc_binary_or_skip() else { + return; + }; + let original = parse_netlist(include_str!("fixtures/add-n2.txt")).unwrap(); + let config = AbcOptimizationConfig::for_tests(); + let first = optimize_with_abc(&original, &abc, &config, &DEFAULT_LIMITS).unwrap(); + let second = optimize_with_abc(&original, &abc, &config, &DEFAULT_LIMITS).unwrap(); + + assert_eq!( + first.report.to_json_pretty().unwrap(), + second.report.to_json_pretty().unwrap() + ); +} + +#[test] +fn abc_only_cli_writes_a_report_and_never_worsens_the_input() { + let Some(abc) = abc_binary_or_skip() else { + return; + }; + let temporary = std::env::temp_dir().join(format!("occam71-abc-cli-{}", std::process::id())); + if temporary.exists() { + fs::remove_dir_all(&temporary).unwrap(); + } + fs::create_dir_all(&temporary).unwrap(); + let circuit = temporary.join("input.txt"); + let output = temporary.join("output.txt"); + let report = temporary.join("report.json"); + fs::write(&circuit, include_str!("fixtures/add-n2.txt")).unwrap(); + let result = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "optimize-circuit", + "--circuit", + circuit.to_str().unwrap(), + "--abc", + abc.to_str().unwrap(), + "--output", + output.to_str().unwrap(), + "--report", + report.to_str().unwrap(), + "--abc-only", + ]) + .output() + .unwrap(); + assert!( + result.status.success(), + "{}", + String::from_utf8_lossy(&result.stderr) + ); + assert!(report.is_file()); + let stdout = String::from_utf8(result.stdout).unwrap(); + assert!(stdout.contains("status:"), "{stdout}"); + assert!(stdout.contains("baseline gates:"), "{stdout}"); + assert!(stdout.contains("candidate gates:"), "{stdout}"); + assert!(stdout.contains("flow:"), "{stdout}"); + assert!(stdout.contains("report:"), "{stdout}"); + if output.is_file() { + let original = parse_netlist(include_str!("fixtures/add-n2.txt")).unwrap(); + let candidate = parse_netlist(&fs::read_to_string(output).unwrap()).unwrap(); + assert!(candidate.gates.len() < original.gates.len()); + } + fs::remove_dir_all(temporary).unwrap(); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/benchmark_cli.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/benchmark_cli.rs new file mode 100644 index 000000000..43312a54d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/benchmark_cli.rs @@ -0,0 +1,74 @@ +use std::{fs, path::PathBuf, process::Command}; + +fn fixture(name: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures") + .join(name) +} + +#[test] +fn writes_complete_benchmark_json() { + for backend in ["scalar", "packed", "compiled"] { + let json = std::env::temp_dir().join(format!( + "occam71-benchmark-{}-{backend}.json", + std::process::id() + )); + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "benchmark", + "--backend", + backend, + "--circuit", + fixture("add-n2.txt").to_str().unwrap(), + "--dataset", + fixture("add-n2.csv").to_str().unwrap(), + "--warmup", + "2", + "--iterations", + "5", + "--json", + json.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let report: serde_json::Value = + serde_json::from_str(&fs::read_to_string(&json).unwrap()).unwrap(); + assert_eq!(report["backend"], backend); + assert_eq!(report["samples"], 16); + assert_eq!(report["gates"], 7); + assert_eq!(report["schema_version"], 3); + assert_eq!(report["measured_iterations"], 5); + assert_eq!(report["batch_count"], 5); + assert_eq!(report["raw_iterations_ns"].as_array().unwrap().len(), 25); + assert_eq!(report["batch_medians_ns"].as_array().unwrap().len(), 5); + assert!(report["evaluation"]["median_ns"].as_u64().unwrap() > 0); + assert!(report["circuit_parse_ns"].as_u64().is_some()); + assert!(report["scalar_dataset_parse_ns"].as_u64().unwrap() > 0); + assert!(report["legacy_pack_ns"].as_u64().unwrap() > 0); + assert!(report["direct_packed_parse_ns"].as_u64().unwrap() > 0); + assert!(report["compilation_ns"].as_u64().unwrap() > 0); + assert!(report["one_shot_ns"].as_u64().unwrap() > 0); + for field in [ + "scalar_dataset_parse_iterations_ns", + "legacy_pack_iterations_ns", + "direct_packed_parse_iterations_ns", + "compilation_iterations_ns", + ] { + assert_eq!(report[field].as_array().unwrap().len(), 5); + } + assert!(report["direct_packed_parse"]["median_ns"].as_u64().unwrap() > 0); + assert!( + report["evaluation"]["standard_deviation_ns"] + .as_f64() + .unwrap() + >= 0.0 + ); + assert!(report["samples_per_second_at_median"].as_f64().unwrap() > 0.0); + fs::remove_file(json).unwrap(); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/blif_roundtrip.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/blif_roundtrip.rs new file mode 100644 index 000000000..e6404fb32 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/blif_roundtrip.rs @@ -0,0 +1,159 @@ +use std::{fs, path::PathBuf, process::Command}; + +use occam71_rust::{ + Circuit, DEFAULT_LIMITS, circuit_to_blif, evaluate_with_limits, parse_mapped_blif, + parse_netlist, +}; + +fn assert_circuits_equivalent(lhs: &Circuit, rhs: &Circuit) { + assert_eq!(lhs.input_count, rhs.input_count); + assert_eq!(lhs.outputs.len(), rhs.outputs.len()); + let cases = 1usize << lhs.input_count; + let mut input = vec![false; lhs.input_count]; + for packed in 0..cases { + for (bit, value) in input.iter_mut().enumerate() { + *value = packed & (1 << bit) != 0; + } + assert_eq!( + evaluate_with_limits(lhs, &input, &DEFAULT_LIMITS).unwrap(), + evaluate_with_limits(rhs, &input, &DEFAULT_LIMITS).unwrap(), + "input {packed}" + ); + } +} + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +#[test] +fn blif_round_trip_preserves_free_inversion_and_gate_count() { + let source = "\ +INPUTS 2 +w1 = XOR x1 x2 +w2 = NAND w1 ~x1 +OUTPUTS ~w2 +"; + let circuit = parse_netlist(source).unwrap(); + let blif = circuit_to_blif(&circuit, "roundtrip").unwrap(); + let mapped = parse_mapped_blif(&blif).unwrap(); + let imported = parse_netlist(&mapped.into_official_netlist().unwrap()).unwrap(); + + assert_eq!(mapped.model(), "roundtrip"); + assert_eq!(mapped.official_gate_count(), 2); + assert_eq!(imported.gates.len(), 2); + assert_circuits_equivalent(&circuit, &imported); +} + +#[test] +fn every_official_operation_round_trips_through_names_tables() { + let source = "\ +INPUTS 3 +w1 = AND x1 ~x2 +w2 = OR ~w1 x3 +w3 = XOR w1 w2 +w4 = NAND ~w2 x1 +w5 = NOR w3 ~w4 +w6 = XNOR ~w5 w1 +OUTPUTS w1 ~w2 w3 ~w4 w5 ~w6 +"; + let circuit = parse_netlist(source).unwrap(); + let mapped = parse_mapped_blif(&circuit_to_blif(&circuit, "basis").unwrap()).unwrap(); + let imported = parse_netlist(&mapped.into_official_netlist().unwrap()).unwrap(); + + assert_eq!(imported.gates.len(), circuit.gates.len()); + assert_circuits_equivalent(&circuit, &imported); +} + +#[test] +fn mapped_gate_import_topologically_sorts_and_folds_aliases() { + let mapped = parse_mapped_blif( + "\ +.model mapped +.inputs i0 i1 +.outputs o0 +.gate INV a=n1 O=o0 +.gate XOR2 a=i0 b=i1 O=n1 +.end +", + ) + .unwrap(); + let imported = parse_netlist(&mapped.into_official_netlist().unwrap()).unwrap(); + assert_eq!(imported.gates.len(), 1); + assert!(imported.outputs[0].inverted); + + let expected = parse_netlist("INPUTS 2\nw1 = XOR x1 x2\nOUTPUTS ~w1\n").unwrap(); + assert_circuits_equivalent(&expected, &imported); +} + +#[test] +fn mapped_import_rejects_unsafe_or_unknown_constructs() { + for source in [ + ".model x\n.inputs a\n.outputs o\n.latch a o\n.end\n", + ".model x\n.inputs a\n.outputs o\n.subckt child a=a o=o\n.end\n", + ".model x\n.inputs a b\n.outputs o\n.gate MUX a=a b=b O=o\n.end\n", + ".model x\n.inputs a\n.outputs o\n.gate INV a=n O=o\n.gate INV a=o O=n\n.end\n", + ".model x\n.inputs a\n.outputs missing\n.end\n", + ] { + assert!(parse_mapped_blif(source).is_err(), "{source}"); + } +} + +#[test] +fn pinned_abc_accepts_the_library_and_emits_importable_mapping() { + let root = workspace_root(); + let commit = "e76768b9d34f9dc67cb6608efecd55db271ff849"; + let abc = root.join(format!("target/tools/abc/{commit}/abc")); + if !abc.is_file() { + eprintln!("pinned ABC absent; run ./scripts/fetch-abc.sh"); + return; + } + let temporary = std::env::temp_dir().join(format!("occam71-blif-{}", std::process::id())); + if temporary.exists() { + fs::remove_dir_all(&temporary).unwrap(); + } + fs::create_dir_all(&temporary).unwrap(); + let circuit = + parse_netlist("INPUTS 3\nw1 = XOR x1 x2\nw2 = NAND w1 ~x3\nOUTPUTS ~w2 w1\n").unwrap(); + fs::write( + temporary.join("original.blif"), + circuit_to_blif(&circuit, "abc_roundtrip").unwrap(), + ) + .unwrap(); + fs::copy( + root.join("tools/abc/occam.genlib"), + temporary.join("occam.genlib"), + ) + .unwrap(); + fs::write( + temporary.join("flow.abc"), + "\ +read_blif original.blif +strash +read_library occam.genlib +map -a +write_blif mapped.blif +quit +", + ) + .unwrap(); + let output = Command::new(&abc) + .args(["-f", "flow.abc"]) + .current_dir(&temporary) + .output() + .unwrap(); + assert!( + output.status.success(), + "stdout:\n{}\nstderr:\n{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + let mapped = + parse_mapped_blif(&fs::read_to_string(temporary.join("mapped.blif")).unwrap()).unwrap(); + let imported = parse_netlist(&mapped.into_official_netlist().unwrap()).unwrap(); + assert_circuits_equivalent(&circuit, &imported); + fs::remove_dir_all(temporary).unwrap(); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/cli.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/cli.rs new file mode 100644 index 000000000..b0cb11ec0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/cli.rs @@ -0,0 +1,108 @@ +use std::{fs, path::PathBuf, process::Command}; + +fn fixture(name: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures") + .join(name) +} + +#[test] +fn verifies_two_bit_adder_fixture() { + for backend in ["scalar", "packed", "cross-check"] { + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "verify", + "--backend", + backend, + "--circuit", + fixture("add-n2.txt").to_str().unwrap(), + "--dataset", + fixture("add-n2.csv").to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(output.status.success()); + let stdout = String::from_utf8(output.stdout).unwrap(); + assert!(stdout.contains(&format!("backend: {backend}"))); + assert!(stdout.contains("gates: 7")); + assert!(stdout.contains("samples: 16")); + assert!(stdout.contains("exact-match acc: 1.000000")); + assert!(stdout.contains("bit accuracy: 1.000000")); + } +} + +#[test] +fn reports_missing_file_with_context() { + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "verify", + "--circuit", + "does-not-exist.txt", + "--dataset", + fixture("add-n2.csv").to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(!output.status.success()); + let stderr = String::from_utf8(output.stderr).unwrap(); + assert!(stderr.contains("does-not-exist.txt")); +} + +#[test] +fn rejects_zero_width_generator_request() { + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args(["generate-adder", "--bits", "0"]) + .output() + .unwrap(); + assert!(!output.status.success()); + let stderr = String::from_utf8(output.stderr).unwrap(); + assert!(stderr.contains("--bits")); +} + +#[test] +fn generates_dataset_accepted_by_both_backends() { + let temporary = std::env::temp_dir().join(format!( + "occam71-generated-{}-{}.csv", + std::process::id(), + std::thread::current().name().unwrap_or("cli") + )); + let generated = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "generate-dataset", + "--operation", + "add", + "--bits", + "2", + "--samples", + "65", + "--seed", + "115", + "--output", + temporary.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(generated.status.success()); + + for backend in ["scalar", "packed"] { + let verified = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "verify", + "--backend", + backend, + "--circuit", + fixture("add-n2.txt").to_str().unwrap(), + "--dataset", + temporary.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(verified.status.success(), "{backend}"); + assert!( + String::from_utf8(verified.stdout) + .unwrap() + .contains("exact-match acc: 1.000000") + ); + } + fs::remove_file(temporary).unwrap(); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/common/mod.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/common/mod.rs new file mode 100644 index 000000000..5cff8cb24 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/common/mod.rs @@ -0,0 +1,102 @@ +#![allow(dead_code)] + +use std::{ + collections::HashSet, + fs, + path::{Path, PathBuf}, +}; + +use serde::Deserialize; + +pub const OFFICIAL_ARCHIVE_SHA256: &str = + "c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b"; + +#[derive(Debug, Deserialize)] +pub struct OracleManifest { + pub schema_version: u32, + pub archive: OracleArchive, + pub cases: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct OracleArchive { + pub url: String, + pub sha256: String, +} + +#[derive(Debug, Deserialize)] +pub struct OracleCase { + pub name: String, + pub circuit: CircuitSource, + pub dataset: String, + pub gates: usize, + pub samples: usize, + pub exact_matches: usize, + pub correct_bits: usize, + pub total_bits: usize, +} + +#[derive(Debug, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +pub enum CircuitSource { + OfficialFile { path: String }, + GeneratedAdder { bits: usize }, + GeneratedMultiplier { bits: usize }, +} + +pub fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .expect("crate is a workspace member") + .to_owned() +} + +pub fn vendor_root() -> PathBuf { + workspace_root().join("vendor/occam-circuit") +} + +pub fn manifest_path() -> PathBuf { + workspace_root().join("tests/oracles/occam-v1.json") +} + +pub fn load_manifest() -> OracleManifest { + let source = fs::read_to_string(manifest_path()).expect("read oracle manifest"); + let manifest: OracleManifest = serde_json::from_str(&source).expect("parse oracle manifest"); + validate_manifest(&manifest); + manifest +} + +pub fn validate_manifest(manifest: &OracleManifest) { + assert_eq!(manifest.schema_version, 1, "unsupported manifest schema"); + assert_eq!(manifest.archive.sha256, OFFICIAL_ARCHIVE_SHA256); + assert!(manifest.archive.url.starts_with("https://github.com/")); + assert!(!manifest.cases.is_empty()); + let mut names = HashSet::new(); + for case in &manifest.cases { + assert!(names.insert(&case.name), "duplicate case {}", case.name); + assert!(!case.dataset.is_empty()); + assert!(case.samples > 0); + assert!(case.exact_matches <= case.samples); + assert!(case.correct_bits <= case.total_bits); + assert!(case.total_bits > 0); + match &case.circuit { + CircuitSource::OfficialFile { path } => assert!(!path.is_empty()), + CircuitSource::GeneratedAdder { bits } + | CircuitSource::GeneratedMultiplier { bits } => assert!(*bits > 0), + } + } +} + +pub fn materialize_circuit(case: &OracleCase, vendor: &Path) -> String { + match &case.circuit { + CircuitSource::OfficialFile { path } => { + fs::read_to_string(vendor.join(path)).expect("read official circuit") + } + CircuitSource::GeneratedAdder { bits } => { + occam71_rust::ripple_carry_adder(*bits).expect("generate adder") + } + CircuitSource::GeneratedMultiplier { bits } => { + occam71_rust::shift_add_multiplier(*bits).expect("generate multiplier") + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/compiled_differential.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/compiled_differential.rs new file mode 100644 index 000000000..d350a7483 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/compiled_differential.rs @@ -0,0 +1,35 @@ +use occam71_rust::{ + ArithmeticOperation, CompiledCircuit, generate_dataset, parse_dataset, parse_netlist, + parse_packed_dataset, ripple_carry_adder, shift_add_multiplier, verify, + verify_compiled_prepacked, verify_prepacked, verify_prepacked_interpreted, +}; + +#[test] +fn compiled_matches_interpreted_and_scalar_across_boundaries() { + for samples in [1, 63, 64, 65, 127, 128, 129, 1_000] { + for (operation, bits, netlist) in [ + (ArithmeticOperation::Add, 8, ripple_carry_adder(8).unwrap()), + ( + ArithmeticOperation::Multiply, + 4, + shift_add_multiplier(4).unwrap(), + ), + ] { + let source = generate_dataset(operation, bits, samples, 115 + samples as u64).unwrap(); + let circuit = parse_netlist(&netlist).unwrap(); + let scalar = parse_dataset(&source).unwrap(); + let packed = parse_packed_dataset(&source).unwrap(); + let compiled = CompiledCircuit::new(&circuit).unwrap(); + let scalar_metrics = verify(&circuit, &scalar).unwrap(); + assert_eq!( + verify_prepacked_interpreted(&circuit, &packed).unwrap(), + scalar_metrics + ); + assert_eq!( + verify_compiled_prepacked(&compiled, &packed).unwrap(), + scalar_metrics + ); + assert_eq!(verify_prepacked(&circuit, &packed).unwrap(), scalar_metrics); + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/direct_packed_parse.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/direct_packed_parse.rs new file mode 100644 index 000000000..8c36bafaa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/direct_packed_parse.rs @@ -0,0 +1,142 @@ +use std::fs; + +use occam71_rust::{ + ArithmeticOperation, DEFAULT_LIMITS, OccamError, generate_dataset, pack_dataset, parse_dataset, + parse_packed_dataset, parse_packed_dataset_with_limits, +}; + +fn assert_matches_legacy(source: &str) { + let scalar = parse_dataset(source).unwrap(); + let legacy = pack_dataset(&scalar).unwrap(); + let direct_string = parse_packed_dataset(source).unwrap(); + let direct_bytes = parse_packed_dataset(source.as_bytes()).unwrap(); + assert_eq!(direct_string, legacy); + assert_eq!(direct_bytes, legacy); +} + +#[test] +fn direct_parser_matches_legacy_on_fixed_and_generated_inputs() { + assert_matches_legacy(include_str!("fixtures/add-n2.csv")); + for samples in [1, 63, 64, 65, 127, 128, 129, 1_000] { + for seed in [0, 71, 115, u64::MAX] { + let add = generate_dataset(ArithmeticOperation::Add, 8, samples, seed).unwrap(); + assert_matches_legacy(&add); + let multiply = + generate_dataset(ArithmeticOperation::Multiply, 4, samples, seed).unwrap(); + assert_matches_legacy(&multiply); + } + } +} + +#[test] +fn direct_and_scalar_parsers_reject_invalid_corpus_identically() { + let invalid = [ + "", + "x,y\n0,1", + "input,output\n", + "input,output\n0", + "input,output\n0,1,0", + "input,output\n,1", + "input,output\n1,", + "input,output\n0x,1", + "input,output\n0,2", + "input,output\n00,1\n0,1", + "input,output\n0,1\n0,11", + ]; + for source in invalid { + let expected_error = parse_dataset(source).unwrap_err().to_string(); + assert_eq!( + parse_packed_dataset(source).unwrap_err().to_string(), + expected_error, + "string source {source:?}" + ); + assert_eq!( + parse_packed_dataset(source.as_bytes()) + .unwrap_err() + .to_string(), + expected_error, + "byte source {source:?}" + ); + } +} + +#[test] +fn direct_parser_accepts_raw_crlf_and_rejects_non_utf8() { + let crlf = b"input,output\r\n\r\n 01,10 \r\n\r\n11,00\r\n"; + let direct = parse_packed_dataset(crlf).unwrap(); + let scalar = parse_dataset(std::str::from_utf8(crlf).unwrap()).unwrap(); + assert_eq!(direct, pack_dataset(&scalar).unwrap()); + + let error = parse_packed_dataset(b"input,output\n0,\xff\n") + .unwrap_err() + .to_string(); + assert!( + error.contains("non-bit"), + "unexpected non-UTF-8 error: {error}" + ); +} + +#[test] +fn byte_and_string_limit_errors_are_identical() { + let source = "input,output\n0,1\n1,0\n"; + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert_eq!( + parse_packed_dataset_with_limits(source, &limits) + .unwrap_err() + .to_string(), + parse_packed_dataset_with_limits(source.as_bytes(), &limits) + .unwrap_err() + .to_string(), + "source {source:?}" + ); +} + +#[test] +fn direct_parser_obeys_limits_before_packed_allocation() { + let source = "input,output\n0,1\n1,0\n"; + let mut limits = DEFAULT_LIMITS; + limits.max_samples = 1; + assert!(matches!( + parse_packed_dataset_with_limits(source, &limits), + Err(OccamError::ResourceLimit { + resource: "dataset samples", + .. + }) + )); + + let mut limits = DEFAULT_LIMITS; + limits.max_packed_words = 1; + assert!(matches!( + parse_packed_dataset_with_limits(source, &limits), + Err(OccamError::ResourceLimit { + resource: "packed dataset words", + .. + }) + )); +} + +#[test] +fn direct_parser_matches_official_dataset_when_available() { + let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../vendor/occam-circuit/datasets/mystery-A/train.csv"); + if path.exists() { + let source = fs::read(path).unwrap(); + let text = std::str::from_utf8(&source).unwrap(); + assert_matches_legacy(text); + assert_eq!( + parse_packed_dataset(&source).unwrap(), + pack_dataset(&parse_dataset(text).unwrap()).unwrap() + ); + } +} + +#[test] +#[ignore = "explicit 1M-row ingestion regression"] +fn parses_one_million_rows_without_scalar_materialization() { + let source = generate_dataset(ArithmeticOperation::Add, 8, 1_000_000, 115).unwrap(); + let packed = parse_packed_dataset(&source).unwrap(); + assert_eq!(packed.sample_count(), 1_000_000); + assert_eq!(packed.input_width(), 16); + assert_eq!(packed.output_width(), 9); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/expression_compiler.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/expression_compiler.rs new file mode 100644 index 000000000..c46305729 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/expression_compiler.rs @@ -0,0 +1,124 @@ +use occam71_rust::{ + BinaryOp, DEFAULT_LIMITS, Expr, ExprSemantics, compile_expression, decode_lsb, evaluate, + parse_netlist, +}; + +fn bits(value: u64, width: usize) -> Vec { + (0..width).map(|bit| value & (1u64 << bit) != 0).collect() +} + +fn operator_fixture_expressions() -> Vec { + let mut expressions = vec![ + Expr::x(), + Expr::y(), + Expr::constant(0), + Expr::constant(1), + Expr::square(Expr::x()), + Expr::shift_left(Expr::x(), 1), + Expr::shift_left(Expr::x(), 2), + Expr::shift_left(Expr::x(), 3), + ]; + for operation in [ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, + ] { + expressions.push(Expr::binary(operation, Expr::x(), Expr::y())); + } + expressions.push(Expr::binary( + BinaryOp::Add, + Expr::square(Expr::x()), + Expr::square(Expr::y()), + )); + expressions +} + +fn assert_expression_circuit_equivalent(expression: &Expr, semantics: ExprSemantics) { + let synthesized = compile_expression(expression, semantics, &DEFAULT_LIMITS).unwrap(); + let circuit = parse_netlist(&synthesized.netlist).unwrap(); + assert_eq!(circuit.input_count, semantics.operand_bits * 2); + assert_eq!(circuit.outputs.len(), semantics.output_bits); + assert_eq!(circuit.gates.len(), synthesized.gate_count); + + let bound = 1u64 << semantics.operand_bits; + for x in 0..bound { + for y in 0..bound { + let mut input = bits(x, semantics.operand_bits); + input.extend(bits(y, semantics.operand_bits)); + let actual = decode_lsb(&evaluate(&circuit, &input).unwrap()).unwrap(); + let expected = expression.evaluate(x, y, semantics).unwrap(); + assert_eq!( + actual, expected, + "{expression} width={semantics:?} x={x} y={y}" + ); + } + } +} + +#[test] +fn every_operator_compiles_to_equivalent_official_circuit() { + for expression in operator_fixture_expressions() { + for operand_bits in 1..=3 { + let semantics = ExprSemantics::new(operand_bits, operand_bits * 2 + 1).unwrap(); + assert_expression_circuit_equivalent(&expression, semantics); + } + } +} + +#[test] +fn repeated_subexpressions_are_structurally_shared() { + let x = Expr::x(); + let repeated = Expr::binary(BinaryOp::BitXor, Expr::square(x.clone()), Expr::square(x)); + let semantics = ExprSemantics::new(4, 8).unwrap(); + let synthesized = compile_expression(&repeated, semantics, &DEFAULT_LIMITS).unwrap(); + let circuit = parse_netlist(&synthesized.netlist).unwrap(); + + assert_eq!(circuit.gates.len(), 1); + assert_expression_circuit_equivalent(&repeated, semantics); +} + +#[test] +fn official_expression_gate_counts_have_stable_upper_bounds() { + let fixtures = [ + ( + Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()), + ExprSemantics::new(8, 9).unwrap(), + 60, + ), + ( + Expr::abs_diff(Expr::x(), Expr::y()), + ExprSemantics::new(7, 7).unwrap(), + 90, + ), + ( + Expr::binary(BinaryOp::Multiply, Expr::x(), Expr::y()), + ExprSemantics::new(6, 12).unwrap(), + 240, + ), + ( + Expr::binary( + BinaryOp::Add, + Expr::square(Expr::x()), + Expr::square(Expr::y()), + ), + ExprSemantics::new(5, 11).unwrap(), + 260, + ), + ]; + + for (expression, semantics, maximum) in fixtures { + let synthesized = compile_expression(&expression, semantics, &DEFAULT_LIMITS).unwrap(); + assert!( + synthesized.gate_count <= maximum, + "{expression}: {} > {maximum}", + synthesized.gate_count + ); + assert_expression_circuit_equivalent(&expression, semantics); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.csv new file mode 100644 index 000000000..4396898ed --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.csv @@ -0,0 +1,17 @@ +input,output +0000,000 +1000,100 +0100,010 +1100,110 +0010,100 +1010,010 +0110,110 +1110,001 +0001,010 +1001,110 +0101,001 +1101,101 +0011,110 +1011,001 +0111,101 +1111,011 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.txt new file mode 100644 index 000000000..5e9f53fae --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/add-n2.txt @@ -0,0 +1,10 @@ +# 2-bit ripple-carry adder +INPUTS 4 +w1 = XOR x1 x3 +w2 = AND x1 x3 +w3 = XOR x2 x4 +w4 = XOR w3 w2 +w5 = AND x2 x4 +w6 = AND w3 w2 +w7 = OR w5 w6 +OUTPUTS w1 w4 w7 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/half-adder.csv b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/half-adder.csv new file mode 100644 index 000000000..5627bc3d5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/half-adder.csv @@ -0,0 +1,5 @@ +input,output +00,00 +01,10 +10,10 +11,01 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/mdl-tasks.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/mdl-tasks.json new file mode 100644 index 000000000..77d125df0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/mdl-tasks.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "operand_bits": 4, + "tasks": [ + {"id":"xor","output_bits":4,"oracle":"(x XOR y)"}, + {"id":"and","output_bits":4,"oracle":"(x AND y)"}, + {"id":"or","output_bits":4,"oracle":"(x OR y)"}, + {"id":"min","output_bits":4,"oracle":"min(x, y)"}, + {"id":"max","output_bits":4,"oracle":"max(x, y)"}, + {"id":"square-plus-y","output_bits":8,"oracle":"(square(x) + y)"}, + {"id":"add-xor-x","output_bits":5,"oracle":"((x + y) XOR x)"}, + {"id":"abs-plus-one","output_bits":5,"oracle":"(abs(x - y) + 1)"}, + {"id":"add-one","output_bits":5,"oracle":"((x + y) + 1)"}, + {"id":"multiply-plus-x","output_bits":8,"oracle":"((x * y) + x)"}, + {"id":"shift-plus-y","output_bits":5,"oracle":"(shift_left(x, 1) + y)"}, + {"id":"range","output_bits":4,"oracle":"(max(x, y) - min(x, y))"} + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/redundant-xor.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/redundant-xor.txt new file mode 100644 index 000000000..f2aadcd38 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/redundant-xor.txt @@ -0,0 +1,7 @@ +INPUTS 2 +w1 = OR x1 x2 +w2 = NAND x1 x2 +w3 = AND w1 w2 +w4 = XOR w3 x1 +w5 = XOR w4 x1 +OUTPUTS w5 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/window-shared.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/window-shared.txt new file mode 100644 index 000000000..ec1bbfe07 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/fixtures/window-shared.txt @@ -0,0 +1,11 @@ +INPUTS 4 +w1 = XOR x1 x2 +w2 = AND x1 x2 +w3 = XOR x3 x4 +w4 = AND x3 x4 +w5 = XOR w1 w3 +w6 = AND w1 w3 +w7 = OR w2 w6 +w8 = XOR w5 w7 +w9 = OR w4 w7 +OUTPUTS w8 w9 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning.rs new file mode 100644 index 000000000..9249630ee --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning.rs @@ -0,0 +1,402 @@ +use std::{fs, path::PathBuf}; + +use occam71_rust::{ + ArithmeticFamily, CircuitBuilder, DEFAULT_LIMITS, Dataset, GateOp, LearnRequest, Sample, + Signal, decode_lsb, encode_lsb, evaluate, infer_unique_family, learn_instance, + parse_commitment, parse_dataset, parse_netlist, parse_test_inputs, prediction_csv_from_circuit, + score_candidates, sha256_hex, synthesize_family, write_instance_artifacts, write_manifest, +}; + +fn bits(value: u64, width: usize) -> Vec { + (0..width).map(|bit| value & (1u64 << bit) != 0).collect() +} + +fn sample(family: ArithmeticFamily, operand_bits: usize, x: u64, y: u64) -> Sample { + let mut input = bits(x, operand_bits); + input.extend(bits(y, operand_bits)); + Sample { + input, + expected: bits( + family.evaluate(x, y, operand_bits).unwrap(), + family.output_width(operand_bits).unwrap(), + ), + } +} + +#[test] +fn parses_lsb_first_test_inputs_and_commitment() { + let inputs = parse_test_inputs("input\n1001\n0110\n").unwrap(); + assert_eq!(inputs.input_width, 4); + assert_eq!(inputs.rows.len(), 2); + assert_eq!(inputs.rows[0], vec![true, false, false, true]); + + let hash = "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7"; + assert_eq!( + parse_commitment(&format!("{hash} test_outputs.csv\n")).unwrap(), + hash + ); +} + +#[test] +fn lsb_conversion_round_trips() { + for width in 1..=16 { + for value in [0, 1, (1u64 << width) - 1, (1u64 << width) / 3] { + assert_eq!( + decode_lsb(&encode_lsb(value, width).unwrap()).unwrap(), + value + ); + } + } + assert!(encode_lsb(8, 3).is_err()); + assert!(decode_lsb(&[true; 65]).is_err()); +} + +#[test] +fn family_widths_and_boundary_values_are_checked() { + assert_eq!(ArithmeticFamily::Add.output_width(8).unwrap(), 9); + assert_eq!(ArithmeticFamily::AbsDiff.output_width(8).unwrap(), 8); + assert_eq!(ArithmeticFamily::Multiply.output_width(8).unwrap(), 16); + assert_eq!(ArithmeticFamily::SumOfSquares.output_width(5).unwrap(), 11); + assert_eq!(ArithmeticFamily::AbsDiff.evaluate(0, 255, 8).unwrap(), 255); + assert_eq!( + ArithmeticFamily::Multiply.evaluate(255, 255, 8).unwrap(), + 65_025 + ); + assert_eq!( + ArithmeticFamily::SumOfSquares.evaluate(31, 31, 5).unwrap(), + 1_922 + ); + assert!(ArithmeticFamily::Add.output_width(0).is_err()); + assert!(ArithmeticFamily::Add.output_width(32).is_err()); +} + +#[test] +fn training_rows_identify_each_supported_family() { + for family in ArithmeticFamily::ALL { + let operand_bits = 4; + let output_width = family.output_width(operand_bits).unwrap(); + let samples = [(0, 0), (1, 3), (7, 2), (15, 15), (9, 4)] + .into_iter() + .map(|(x, y)| sample(family, operand_bits, x, y)) + .collect(); + let scores = score_candidates(&Dataset { + input_width: operand_bits * 2, + output_width, + samples, + }) + .unwrap(); + let perfect: Vec<_> = scores + .iter() + .filter(|score| score.mismatches == 0) + .collect(); + assert_eq!(perfect.len(), 1, "{family:?}: {scores:?}"); + assert_eq!(perfect[0].family, family); + } +} + +#[test] +fn candidate_scores_record_first_one_based_mismatch() { + let mut wrong = sample(ArithmeticFamily::Add, 3, 1, 2); + wrong.expected[0] ^= true; + let dataset = Dataset { + input_width: 6, + output_width: 4, + samples: vec![sample(ArithmeticFamily::Add, 3, 0, 0), wrong], + }; + let scores = score_candidates(&dataset).unwrap(); + let add = scores + .iter() + .find(|score| score.family == ArithmeticFamily::Add) + .unwrap(); + assert_eq!(add.evaluated_rows, 2); + assert_eq!(add.exact_matches, 1); + assert_eq!(add.mismatches, 1); + assert_eq!(add.first_mismatch_row, Some(2)); +} + +#[test] +fn strict_input_and_family_validation_rejects_bad_data() { + for source in [ + "input\n", + "inputs\n0\n", + "input\n\n", + "input\n01\n0\n", + "input\n01\n01\n", + "input\n0x\n", + "input\n0,1\n", + ] { + assert!(parse_test_inputs(source).is_err(), "{source:?}"); + } + + for commitment in [ + "", + "ABCDEF test_outputs.csv", + "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7 other.csv", + "51E3F026DEF41778ECD0D7DCAEE9F970B9937488E6716891932B73824C16D4C7 test_outputs.csv", + ] { + assert!(parse_commitment(commitment).is_err(), "{commitment:?}"); + } + + assert!( + score_candidates(&Dataset { + input_width: 3, + output_width: 1, + samples: vec![Sample { + input: vec![false; 3], + expected: vec![false], + }], + }) + .is_err() + ); +} + +#[test] +fn canonical_builder_simplifies_and_hash_cons_gates() { + let mut builder = CircuitBuilder::new(2, &DEFAULT_LIMITS).unwrap(); + let a = Signal::input(0); + let b = Signal::input(1); + assert_eq!(builder.binary(GateOp::And, a, a).unwrap(), a); + assert_eq!( + builder.binary(GateOp::Xor, a, a).unwrap(), + builder.zero().unwrap() + ); + assert_eq!( + builder.binary(GateOp::Or, a, a.inverted()).unwrap(), + builder.one().unwrap() + ); + let first = builder.binary(GateOp::Xor, a, b).unwrap(); + let second = builder.binary(GateOp::Xor, b, a).unwrap(); + assert_eq!(first, second); + let synthesized = builder.finish(&[first]).unwrap(); + assert_eq!(synthesized.gate_count, 1); + assert_eq!(parse_netlist(&synthesized.netlist).unwrap().gates.len(), 1); +} + +#[test] +fn family_circuits_are_exhaustively_correct_at_small_widths() { + for family in ArithmeticFamily::ALL { + for operand_bits in 1..=4 { + let first = synthesize_family(family, operand_bits).unwrap(); + let second = synthesize_family(family, operand_bits).unwrap(); + assert_eq!(first, second); + let circuit = parse_netlist(&first.netlist).unwrap(); + let bound = 1u64 << operand_bits; + for x in 0..bound { + for y in 0..bound { + let mut input = bits(x, operand_bits); + input.extend(bits(y, operand_bits)); + let actual = decode_lsb(&evaluate(&circuit, &input).unwrap()).unwrap(); + assert_eq!( + actual, + family.evaluate(x, y, operand_bits).unwrap(), + "{family:?} width={operand_bits} x={x} y={y}" + ); + } + } + } + } +} + +#[test] +fn optimized_multiplier_is_smaller_than_shift_add_reference() { + let optimized = synthesize_family(ArithmeticFamily::Multiply, 4).unwrap(); + let legacy = occam71_rust::shift_add_multiplier(4).unwrap(); + assert!( + optimized.gate_count < parse_netlist(&legacy).unwrap().gates.len(), + "optimized={} legacy={}", + optimized.gate_count, + parse_netlist(&legacy).unwrap().gates.len() + ); +} + +fn dataset_source(family: ArithmeticFamily, operand_bits: usize) -> String { + let output_width = family.output_width(operand_bits).unwrap(); + let bound = 1u64 << operand_bits; + let mut source = String::from("input,output\n"); + for x in 0..bound { + for y in 0..bound { + let input: String = bits(x, operand_bits) + .into_iter() + .chain(bits(y, operand_bits)) + .map(|value| if value { '1' } else { '0' }) + .collect(); + let output: String = bits(family.evaluate(x, y, operand_bits).unwrap(), output_width) + .into_iter() + .map(|value| if value { '1' } else { '0' }) + .collect(); + source.push_str(&format!("{input},{output}\n")); + } + } + source +} + +#[test] +fn learner_requires_one_unique_zero_error_family() { + let ambiguous = parse_dataset("input,output\n00,00\n").unwrap(); + let error = infer_unique_family(&ambiguous).unwrap_err().to_string(); + assert!(error.contains("ambiguous"), "{error}"); +} + +#[test] +fn predictions_come_from_reparsed_circuit() { + let training = dataset_source(ArithmeticFamily::Add, 3); + let test_inputs = "input\n100010\n111111\n"; + let result = learn_instance(LearnRequest { + instance: "synthetic-add", + training_source: &training, + test_inputs_source: test_inputs, + commitment_source: None, + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + let circuit = parse_netlist(&result.circuit).unwrap(); + let expected = + prediction_csv_from_circuit(&circuit, &result.test_inputs, &DEFAULT_LIMITS).unwrap(); + assert_eq!(result.prediction_csv, expected); + assert_eq!(result.report.selected_family, ArithmeticFamily::Add); + assert_eq!(result.report.training_scalar, result.report.training_packed); + assert_eq!(result.report.training_scalar.exact_matches, 64); + assert_eq!(result.report.exhaustive_cases, 64); + assert_eq!(result.report.exhaustive_mismatches, 0); + assert_eq!( + result.report.prediction_sha256, + sha256_hex(result.prediction_csv.as_bytes()) + ); + let second = learn_instance(LearnRequest { + instance: "synthetic-add", + training_source: &training, + test_inputs_source: test_inputs, + commitment_source: None, + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + assert_eq!( + result.report.to_json_pretty().unwrap(), + second.report.to_json_pretty().unwrap() + ); +} + +#[test] +fn learner_rejects_a_wrong_commitment() { + let training = dataset_source(ArithmeticFamily::AbsDiff, 2); + let wrong = + "0000000000000000000000000000000000000000000000000000000000000000 test_outputs.csv\n"; + let error = learn_instance(LearnRequest { + instance: "synthetic-difference", + training_source: &training, + test_inputs_source: "input\n0000\n1010\n", + commitment_source: Some(wrong), + limits: &DEFAULT_LIMITS, + }) + .unwrap_err() + .to_string(); + assert!(error.contains("commitment mismatch"), "{error}"); +} + +#[test] +fn validated_artifacts_and_manifest_are_stable() { + let training = dataset_source(ArithmeticFamily::Add, 2); + let test_inputs = "input\n1000\n0111\n"; + let unsigned = learn_instance(LearnRequest { + instance: "mystery-Z", + training_source: &training, + test_inputs_source: test_inputs, + commitment_source: None, + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + let commitment = format!("{} test_outputs.csv\n", unsigned.report.prediction_sha256); + let result = learn_instance(LearnRequest { + instance: "mystery-Z", + training_source: &training, + test_inputs_source: test_inputs, + commitment_source: Some(&commitment), + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + + let root = + std::env::temp_dir().join(format!("occam71-learning-artifacts-{}", std::process::id())); + if root.exists() { + fs::remove_dir_all(&root).unwrap(); + } + let written = write_instance_artifacts(&root, "mystery-Z", &result).unwrap(); + let manifest = write_manifest(&root, std::slice::from_ref(&written)).unwrap(); + assert_eq!( + fs::read_to_string(&written.circuit_path).unwrap(), + result.circuit + ); + assert_eq!( + fs::read_to_string(&written.prediction_path).unwrap(), + result.prediction_csv + ); + assert_eq!( + fs::read_to_string(&written.report_path).unwrap(), + result.report.to_json_pretty().unwrap() + ); + let first_manifest = fs::read_to_string(&manifest).unwrap(); + write_manifest(&root, &[written]).unwrap(); + assert_eq!(fs::read_to_string(&manifest).unwrap(), first_manifest); + fs::remove_dir_all(root).unwrap(); +} + +#[test] +fn official_instances_recover_expected_families_and_commitments() { + let vendor = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("vendor/occam-circuit/datasets"); + if !vendor.is_dir() { + eprintln!("official data absent; run ./scripts/fetch-occam-data.sh"); + return; + } + for (name, family, expected_hash) in [ + ( + "mystery-A", + ArithmeticFamily::Add, + "51e3f026def41778ecd0d7dcaee9f970b9937488e6716891932b73824c16d4c7", + ), + ( + "mystery-B", + ArithmeticFamily::AbsDiff, + "e2c9d0e23ee36bfc0f12d7f39fdfe2ca5a8abe8eb194fec56500733694b75c28", + ), + ( + "mystery-C", + ArithmeticFamily::Multiply, + "c7b37413844bf0b10ebad0010046469f500354a22cc2ba95cbe42709f8e8337d", + ), + ( + "mystery-D", + ArithmeticFamily::SumOfSquares, + "b445a717483303fa3c5d8a1f7abe81888b267b7c472121c9c464fa9766808580", + ), + ] { + let root = vendor.join(name); + let training = fs::read_to_string(root.join("train.csv")).unwrap(); + let inputs = fs::read_to_string(root.join("test_inputs.csv")).unwrap(); + let commitment = fs::read_to_string(root.join("commitment.sha256")).unwrap(); + let result = learn_instance(LearnRequest { + instance: name, + training_source: &training, + test_inputs_source: &inputs, + commitment_source: Some(&commitment), + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + assert_eq!(result.report.selected_family, family, "{name}"); + assert_eq!( + result.report.training_scalar.exact_matches, result.report.training_scalar.samples, + "{name}" + ); + assert_eq!(result.report.training_scalar, result.report.training_packed); + assert_eq!(result.report.exhaustive_mismatches, 0, "{name}"); + assert_eq!(result.report.prediction_sha256, expected_hash, "{name}"); + assert_eq!(result.report.commitment_matches, Some(true), "{name}"); + eprintln!( + "{name}: family={family:?} gates={} exhaustive={}", + result.report.gate_count, result.report.exhaustive_cases + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning_cli.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning_cli.rs new file mode 100644 index 000000000..d88d51c86 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/learning_cli.rs @@ -0,0 +1,151 @@ +use std::{ + fs, + path::{Path, PathBuf}, + process::{Command, Output}, +}; + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +fn official_case(name: &str) -> PathBuf { + workspace_root() + .join("vendor/occam-circuit/datasets") + .join(name) +} + +fn temporary_root(case: &str) -> PathBuf { + std::env::temp_dir().join(format!( + "occam71-learning-cli-{}-{case}", + std::process::id() + )) +} + +fn clean(path: &Path) { + if path.exists() { + fs::remove_dir_all(path).unwrap(); + } +} + +fn run_learn(instance: &str, case_root: &Path, commitment: &Path, output_root: &Path) -> Output { + Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "learn", + "--instance", + instance, + "--train", + case_root.join("train.csv").to_str().unwrap(), + "--test-inputs", + case_root.join("test_inputs.csv").to_str().unwrap(), + "--commitment", + commitment.to_str().unwrap(), + "--output-dir", + output_root.to_str().unwrap(), + ]) + .output() + .unwrap() +} + +#[test] +fn learn_help_lists_required_paths() { + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args(["learn", "--help"]) + .output() + .unwrap(); + assert!(output.status.success()); + let stdout = String::from_utf8(output.stdout).unwrap(); + for flag in [ + "--instance", + "--train", + "--test-inputs", + "--commitment", + "--output-dir", + ] { + assert!(stdout.contains(flag), "missing {flag}"); + } +} + +#[test] +fn learn_writes_a_reparseable_official_solution() { + let case_root = official_case("mystery-A"); + if !case_root.is_dir() { + eprintln!("official data absent; run ./scripts/fetch-occam-data.sh"); + return; + } + let output_root = temporary_root("success"); + clean(&output_root); + let output = run_learn( + "mystery-A", + &case_root, + &case_root.join("commitment.sha256"), + &output_root, + ); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let stdout = String::from_utf8(output.stdout).unwrap(); + assert!(stdout.contains("selected family: add")); + assert!(stdout.contains("commitment: match")); + let circuit = output_root.join("circuits/mystery-A.txt"); + let prediction = output_root.join("predictions/mystery-A/test_outputs.csv"); + let report = output_root.join("reports/mystery-A.json"); + assert!(circuit.is_file()); + assert!(prediction.is_file()); + assert!(report.is_file()); + occam71_rust::parse_netlist(&fs::read_to_string(circuit).unwrap()).unwrap(); + occam71_rust::parse_dataset(&fs::read_to_string(prediction).unwrap()).unwrap(); + clean(&output_root); +} + +#[test] +fn learn_rejects_wrong_commitment_without_final_artifacts() { + let case_root = official_case("mystery-B"); + if !case_root.is_dir() { + eprintln!("official data absent; run ./scripts/fetch-occam-data.sh"); + return; + } + let output_root = temporary_root("wrong"); + clean(&output_root); + fs::create_dir_all(&output_root).unwrap(); + let wrong = output_root.join("wrong.sha256"); + fs::write( + &wrong, + "0000000000000000000000000000000000000000000000000000000000000000 test_outputs.csv\n", + ) + .unwrap(); + let output = run_learn("mystery-B", &case_root, &wrong, &output_root); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("commitment mismatch")); + assert!(!output_root.join("circuits/mystery-B.txt").exists()); + assert!( + !output_root + .join("predictions/mystery-B/test_outputs.csv") + .exists() + ); + assert!(!output_root.join("reports/mystery-B.json").exists()); + clean(&output_root); +} + +#[test] +fn write_manifest_requires_all_four_validated_instances() { + let output_root = temporary_root("manifest-incomplete"); + clean(&output_root); + fs::create_dir_all(&output_root).unwrap(); + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "write-manifest", + "--output-dir", + output_root.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("mystery-A")); + assert!(!output_root.join("manifest.json").exists()); + clean(&output_root); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_cli.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_cli.rs new file mode 100644 index 000000000..e308b6035 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_cli.rs @@ -0,0 +1,150 @@ +use std::{ + fs, + path::{Path, PathBuf}, + process::Command, +}; + +fn command() -> Command { + Command::new(env!("CARGO_BIN_EXE_occam71_rust")) +} + +fn temporary_root(case: &str) -> PathBuf { + std::env::temp_dir().join(format!("occam71-mdl-cli-{}-{case}", std::process::id())) +} + +fn bits(value: u64, width: usize) -> String { + (0..width) + .map(|bit| if value & (1u64 << bit) == 0 { '0' } else { '1' }) + .collect() +} + +fn write_addition_fixture(root: &Path) { + fs::create_dir_all(root).unwrap(); + let mut training = String::from("input,output\n"); + for x in 0..4 { + for y in 0..4 { + training.push_str(&bits(x, 2)); + training.push_str(&bits(y, 2)); + training.push(','); + training.push_str(&bits(x + y, 3)); + training.push('\n'); + } + } + fs::write(root.join("train.csv"), training).unwrap(); + fs::write(root.join("test_inputs.csv"), "input\n0000\n1010\n1111\n").unwrap(); +} + +#[test] +fn learn_mdl_help_exposes_search_limits_and_outputs() { + let output = command().args(["learn-mdl", "--help"]).output().unwrap(); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let stdout = String::from_utf8(output.stdout).unwrap(); + for required in [ + "--train", + "--test-inputs", + "--commitment", + "--max-description-cost", + "--timeout-seconds", + "--circuit", + "--predictions", + "--report", + ] { + assert!(stdout.contains(required), "{required}: {stdout}"); + } +} + +#[test] +fn learn_mdl_writes_reparseable_verified_artifacts() { + let root = temporary_root("success"); + if root.exists() { + fs::remove_dir_all(&root).unwrap(); + } + write_addition_fixture(&root); + let circuit = root.join("out/circuit.txt"); + let predictions = root.join("out/test_outputs.csv"); + let report = root.join("out/report.json"); + let output = command() + .args([ + "learn-mdl", + "--train", + root.join("train.csv").to_str().unwrap(), + "--test-inputs", + root.join("test_inputs.csv").to_str().unwrap(), + "--max-description-cost", + "4", + "--timeout-seconds", + "5", + "--circuit", + circuit.to_str().unwrap(), + "--predictions", + predictions.to_str().unwrap(), + "--report", + report.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let stdout = String::from_utf8(output.stdout).unwrap(); + assert!(stdout.contains("expression: (x + y)"), "{stdout}"); + assert!( + stdout.contains("commitment: not supplied"), + "{stdout}" + ); + occam71_rust::parse_netlist(&fs::read_to_string(&circuit).unwrap()).unwrap(); + occam71_rust::parse_dataset(&fs::read_to_string(&predictions).unwrap()).unwrap(); + let report_value: serde_json::Value = + serde_json::from_str(&fs::read_to_string(&report).unwrap()).unwrap(); + assert_eq!(report_value["schema_version"], 2); + assert_eq!(report_value["expression"], "(x + y)"); + assert_eq!(report_value["exhaustive_mismatches"], 0); + fs::remove_dir_all(root).unwrap(); +} + +#[test] +fn learn_mdl_rejects_commitment_before_writing_final_artifacts() { + let root = temporary_root("commitment"); + if root.exists() { + fs::remove_dir_all(&root).unwrap(); + } + write_addition_fixture(&root); + fs::write( + root.join("wrong.sha256"), + "0000000000000000000000000000000000000000000000000000000000000000 test_outputs.csv\n", + ) + .unwrap(); + let circuit = root.join("out/circuit.txt"); + let predictions = root.join("out/test_outputs.csv"); + let report = root.join("out/report.json"); + let output = command() + .args([ + "learn-mdl", + "--train", + root.join("train.csv").to_str().unwrap(), + "--test-inputs", + root.join("test_inputs.csv").to_str().unwrap(), + "--commitment", + root.join("wrong.sha256").to_str().unwrap(), + "--circuit", + circuit.to_str().unwrap(), + "--predictions", + predictions.to_str().unwrap(), + "--report", + report.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("commitment mismatch")); + assert!(!circuit.exists()); + assert!(!predictions.exists()); + assert!(!report.exists()); + fs::remove_dir_all(root).unwrap(); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_enumerator.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_enumerator.rs new file mode 100644 index 000000000..e33c3fc36 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_enumerator.rs @@ -0,0 +1,136 @@ +use occam71_rust::{ + BinaryOp, Dataset, Expr, MdlSearchConfig, Sample, SearchTermination, search_mdl, +}; + +fn bits(value: u64, width: usize) -> Vec { + (0..width).map(|bit| value & (1u64 << bit) != 0).collect() +} + +fn dataset_from_fn( + operand_bits: usize, + output_bits: usize, + function: impl Fn(u64, u64) -> u64, +) -> Dataset { + let bound = 1u64 << operand_bits; + let mut samples = Vec::new(); + for x in 0..bound { + for y in 0..bound { + let mut input = bits(x, operand_bits); + input.extend(bits(y, operand_bits)); + samples.push(Sample { + input, + expected: bits(function(x, y), output_bits), + }); + } + } + Dataset { + input_width: operand_bits * 2, + output_width: output_bits, + samples, + } +} + +#[test] +fn mdl_search_compares_candidates_without_natural_width_filtering() { + let dataset = dataset_from_fn(3, 4, |x, y| x + y); + let result = search_mdl(&dataset, &MdlSearchConfig::for_tests()).unwrap(); + + assert_eq!(result.expression.unwrap().to_string(), "(x + y)"); + assert_eq!(result.report.termination, SearchTermination::Found); + assert_eq!(result.report.description_cost, Some(3)); + assert!(result.report.evaluated_expressions > 4); + assert!(result.report.retained_semantic_classes > 1); +} + +#[test] +fn mdl_search_recovers_multiplication_at_the_same_declared_width() { + let dataset = dataset_from_fn(2, 5, |x, y| x * y); + let result = search_mdl(&dataset, &MdlSearchConfig::for_tests()).unwrap(); + + assert_eq!(result.expression.unwrap().to_string(), "(x * y)"); + assert_eq!(result.report.description_cost, Some(3)); +} + +#[test] +fn mdl_search_reports_equal_cost_observational_ambiguity() { + let dataset = Dataset { + input_width: 4, + output_width: 3, + samples: vec![Sample { + input: vec![false; 4], + expected: vec![false; 3], + }], + }; + let result = search_mdl(&dataset, &MdlSearchConfig::for_tests()).unwrap(); + + assert_eq!(result.report.description_cost, Some(1)); + assert_eq!(result.report.minimum_unique, Some(false)); + assert!(result.report.equal_cost_expression_count.unwrap() >= 3); + assert_eq!(result.report.alternatives, vec!["0", "x", "y"]); +} + +#[test] +fn search_termination_is_typed_and_never_falls_back() { + let dataset = dataset_from_fn(2, 5, |x, y| x * y); + + let mut cost_limited = MdlSearchConfig::for_tests(); + cost_limited.max_description_cost = 2; + let result = search_mdl(&dataset, &cost_limited).unwrap(); + assert!(result.expression.is_none()); + assert_eq!(result.report.termination, SearchTermination::CostExhausted); + + let mut expression_limited = MdlSearchConfig::for_tests(); + expression_limited.max_generated_expressions = 2; + let result = search_mdl(&dataset, &expression_limited).unwrap(); + assert!(result.expression.is_none()); + assert_eq!( + result.report.termination, + SearchTermination::ExpressionLimit + ); + + let mut semantic_limited = MdlSearchConfig::for_tests(); + semantic_limited.max_semantic_classes = 1; + let result = search_mdl(&dataset, &semantic_limited).unwrap(); + assert!(result.expression.is_none()); + assert_eq!( + result.report.termination, + SearchTermination::SemanticClassLimit + ); + + let mut timed_out = MdlSearchConfig::for_tests(); + timed_out.timeout_millis = 0; + let result = search_mdl(&dataset, &timed_out).unwrap(); + assert!(result.expression.is_none()); + assert_eq!(result.report.termination, SearchTermination::Timeout); +} + +#[test] +fn search_reports_are_byte_stable() { + let dataset = dataset_from_fn(2, 3, |x, y| x.abs_diff(y)); + let config = MdlSearchConfig::for_tests(); + let first = search_mdl(&dataset, &config).unwrap(); + let second = search_mdl(&dataset, &config).unwrap(); + + assert_eq!(first, second); + assert_eq!( + serde_json::to_string_pretty(&first.report).unwrap(), + serde_json::to_string_pretty(&second.report).unwrap() + ); + assert_eq!( + first.expression.unwrap(), + Expr::abs_diff(Expr::x(), Expr::y()).canonicalize().unwrap() + ); +} + +#[test] +fn custom_operator_sets_are_respected() { + let dataset = dataset_from_fn(2, 3, |x, y| x ^ y); + let mut config = MdlSearchConfig::for_tests(); + config.enabled_binary_ops = vec![BinaryOp::Add]; + config.enable_square = false; + config.shift_amounts.clear(); + let result = search_mdl(&dataset, &config).unwrap(); + + assert!(result.expression.is_none()); + assert_eq!(result.report.termination, SearchTermination::CostExhausted); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_expression.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_expression.rs new file mode 100644 index 000000000..771eecf37 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_expression.rs @@ -0,0 +1,247 @@ +use occam71_rust::{ + BinaryOp, Dataset, Expr, ExprSemantics, Sample, SemanticKey, evaluate_rows, parse_expression, +}; + +#[test] +fn expression_semantics_are_fixed_width_not_natural_width_filtered() { + let semantics = ExprSemantics::new(3, 4).unwrap(); + let add = Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()); + let multiply = Expr::binary(BinaryOp::Multiply, Expr::x(), Expr::y()); + + assert_eq!(add.evaluate(7, 7, semantics).unwrap(), 14); + assert_eq!(multiply.evaluate(7, 7, semantics).unwrap(), 1); +} + +#[test] +fn official_expressions_have_declared_description_costs() { + let x = Expr::x(); + let y = Expr::y(); + + assert_eq!( + Expr::binary(BinaryOp::Add, x.clone(), y.clone()).description_cost(), + 3 + ); + assert_eq!(Expr::abs_diff(x.clone(), y.clone()).description_cost(), 4); + assert_eq!( + Expr::binary(BinaryOp::Multiply, x.clone(), y.clone()).description_cost(), + 3 + ); + assert_eq!( + Expr::binary(BinaryOp::Add, Expr::square(x), Expr::square(y)).description_cost(), + 5 + ); +} + +#[test] +fn expression_validation_rejects_invalid_widths_constants_and_shifts() { + assert!(ExprSemantics::new(0, 1).is_err()); + assert!(ExprSemantics::new(32, 1).is_err()); + assert!(ExprSemantics::new(1, 0).is_err()); + assert!(ExprSemantics::new(1, 64).is_err()); + + let semantics = ExprSemantics::new(3, 4).unwrap(); + assert!(Expr::constant(16).evaluate(0, 0, semantics).is_err()); + assert!( + Expr::shift_left(Expr::x(), 0) + .evaluate(1, 0, semantics) + .is_err() + ); + assert!( + Expr::shift_left(Expr::x(), 4) + .evaluate(1, 0, semantics) + .is_err() + ); + assert!(Expr::x().evaluate(8, 0, semantics).is_err()); + assert!(Expr::y().evaluate(0, 8, semantics).is_err()); +} + +#[test] +fn every_binary_operator_matches_the_independent_reference() { + let semantics = ExprSemantics::new(3, 5).unwrap(); + let mask = (1u64 << semantics.output_bits) - 1; + let operations = [ + BinaryOp::Add, + BinaryOp::Subtract, + BinaryOp::AbsDiff, + BinaryOp::Multiply, + BinaryOp::BitXor, + BinaryOp::BitAnd, + BinaryOp::BitOr, + BinaryOp::Min, + BinaryOp::Max, + ]; + + for operation in operations { + let expression = Expr::binary(operation, Expr::x(), Expr::y()); + for x in 0u64..8 { + for y in 0u64..8 { + let expected = match operation { + BinaryOp::Add => ((x as u128 + y as u128) & mask as u128) as u64, + BinaryOp::Subtract => x.wrapping_sub(y) & mask, + BinaryOp::AbsDiff => x.abs_diff(y), + BinaryOp::Multiply => ((x as u128 * y as u128) & mask as u128) as u64, + BinaryOp::BitXor => x ^ y, + BinaryOp::BitAnd => x & y, + BinaryOp::BitOr => x | y, + BinaryOp::Min => x.min(y), + BinaryOp::Max => x.max(y), + }; + assert_eq!( + expression.evaluate(x, y, semantics).unwrap(), + expected, + "{operation:?} x={x} y={y}" + ); + } + } + } +} + +#[test] +fn unary_operators_wrap_to_the_declared_output_width() { + let semantics = ExprSemantics::new(3, 4).unwrap(); + + assert_eq!( + Expr::square(Expr::x()).evaluate(7, 0, semantics).unwrap(), + 1 + ); + assert_eq!( + Expr::shift_left(Expr::x(), 2) + .evaluate(7, 0, semantics) + .unwrap(), + 12 + ); +} + +#[test] +fn canonicalization_removes_structural_duplicates() { + let x = Expr::x(); + let y = Expr::y(); + let xy = Expr::binary(BinaryOp::Add, x.clone(), y.clone()) + .canonicalize() + .unwrap(); + let yx = Expr::binary(BinaryOp::Add, y, x).canonicalize().unwrap(); + + assert_eq!(xy, yx); + assert_eq!(xy.to_string(), "(x + y)"); + assert_eq!( + Expr::binary(BinaryOp::BitXor, Expr::x(), Expr::x()) + .canonicalize() + .unwrap(), + Expr::constant(0) + ); + assert_eq!( + Expr::binary(BinaryOp::Multiply, Expr::x(), Expr::x()) + .canonicalize() + .unwrap(), + Expr::square(Expr::x()) + ); +} + +#[test] +fn canonicalization_applies_safe_identities() { + let x = Expr::x(); + + for expression in [ + Expr::binary(BinaryOp::Add, x.clone(), Expr::constant(0)), + Expr::binary(BinaryOp::Subtract, x.clone(), Expr::constant(0)), + Expr::binary(BinaryOp::BitXor, x.clone(), Expr::constant(0)), + Expr::binary(BinaryOp::BitAnd, x.clone(), x.clone()), + Expr::binary(BinaryOp::BitOr, x.clone(), Expr::constant(0)), + Expr::binary(BinaryOp::Min, x.clone(), x.clone()), + Expr::binary(BinaryOp::Max, x.clone(), x.clone()), + Expr::binary(BinaryOp::Multiply, x.clone(), Expr::constant(1)), + ] { + assert_eq!(expression.canonicalize().unwrap(), x); + } + + for expression in [ + Expr::binary(BinaryOp::BitAnd, x.clone(), Expr::constant(0)), + Expr::binary(BinaryOp::Multiply, x.clone(), Expr::constant(0)), + Expr::abs_diff(x.clone(), x.clone()), + Expr::shift_left(Expr::constant(0), 1), + ] { + assert_eq!(expression.canonicalize().unwrap(), Expr::constant(0)); + } +} + +#[test] +fn semantic_keys_depend_only_on_observed_input_behavior() { + let dataset = Dataset { + input_width: 4, + output_width: 3, + samples: vec![ + Sample { + input: vec![false, false, false, false], + expected: vec![false; 3], + }, + Sample { + input: vec![true, false, false, true], + expected: vec![false; 3], + }, + ], + }; + let semantics = ExprSemantics::new(2, 3).unwrap(); + + assert_eq!( + evaluate_rows( + &Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()), + &dataset, + semantics + ) + .unwrap(), + SemanticKey(vec![0, 3]) + ); + assert!( + evaluate_rows( + &Expr::x(), + &Dataset { + input_width: 3, + ..dataset.clone() + }, + semantics + ) + .is_err() + ); +} + +#[test] +fn stable_display_is_unambiguous() { + let expression = Expr::binary( + BinaryOp::BitXor, + Expr::binary(BinaryOp::Add, Expr::x(), Expr::y()), + Expr::shift_left(Expr::square(Expr::x()), 2), + ); + assert_eq!( + expression.to_string(), + "((x + y) XOR shift_left(square(x), 2))" + ); + assert_eq!( + Expr::abs_diff(Expr::x(), Expr::y()).to_string(), + "abs(x - y)" + ); +} + +#[test] +fn stable_expression_syntax_parses_without_task_specific_cases() { + for source in [ + "x", + "1", + "(x + y)", + "abs(x - y)", + "(x * y)", + "(square(x) + square(y))", + "((x + y) XOR x)", + "(shift_left(x, 1) + y)", + "(max(x, y) - min(x, y))", + ] { + let parsed = parse_expression(source).unwrap(); + assert_eq!( + parse_expression(&parsed.to_string()).unwrap(), + parsed, + "{source}" + ); + } + for invalid in [" x", "(x+y)", "shift_left(x, 0)", "(x + y"] { + assert!(parse_expression(invalid).is_err(), "{invalid}"); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_learning.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_learning.rs new file mode 100644 index 000000000..9f46a8c7d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_learning.rs @@ -0,0 +1,147 @@ +use std::{fs, path::PathBuf}; + +use occam71_rust::{ + DEFAULT_LIMITS, MdlLearnRequest, MdlSearchConfig, SearchTermination, decode_lsb, learn_mdl, + parse_netlist, prediction_csv_from_circuit, sha256_hex, +}; + +fn bits(value: u64, width: usize) -> String { + (0..width) + .map(|bit| if value & (1u64 << bit) == 0 { '0' } else { '1' }) + .collect() +} + +fn dataset_source( + operand_bits: usize, + output_bits: usize, + function: impl Fn(u64, u64) -> u64, +) -> String { + let mut source = String::from("input,output\n"); + let bound = 1u64 << operand_bits; + for x in 0..bound { + for y in 0..bound { + source.push_str(&bits(x, operand_bits)); + source.push_str(&bits(y, operand_bits)); + source.push(','); + source.push_str(&bits(function(x, y), output_bits)); + source.push('\n'); + } + } + source +} + +#[test] +fn mdl_learner_recovers_addition_without_legacy_family_api() { + let training = dataset_source(3, 4, |x, y| x + y); + let config = MdlSearchConfig::for_tests(); + let result = learn_mdl(MdlLearnRequest { + training_source: &training, + test_inputs_source: "input\n100010\n111111\n", + commitment_source: None, + config: &config, + limits: &DEFAULT_LIMITS, + }) + .unwrap(); + + assert_eq!(result.report.learner, "mdl-enumerator"); + assert_eq!(result.report.expression, "(x + y)"); + assert_eq!(result.report.description_cost, 3); + assert_eq!(result.report.search.termination, SearchTermination::Found); + assert_eq!(result.report.training_scalar.exact_matches, 64); + assert_eq!(result.report.training_scalar, result.report.training_packed); + assert_eq!(result.report.exhaustive_cases, 64); + assert_eq!(result.report.exhaustive_mismatches, 0); + + let circuit = parse_netlist(&result.circuit).unwrap(); + assert_eq!( + result.prediction_csv, + prediction_csv_from_circuit(&circuit, &result.test_inputs, &DEFAULT_LIMITS).unwrap() + ); + assert_eq!( + result.report.prediction_sha256, + sha256_hex(result.prediction_csv.as_bytes()) + ); +} + +#[test] +fn mdl_learning_reports_are_byte_stable() { + let training = dataset_source(2, 3, |x, y| x.abs_diff(y)); + let config = MdlSearchConfig::for_tests(); + let request = || MdlLearnRequest { + training_source: &training, + test_inputs_source: "input\n0000\n1010\n", + commitment_source: None, + config: &config, + limits: &DEFAULT_LIMITS, + }; + let first = learn_mdl(request()).unwrap(); + let second = learn_mdl(request()).unwrap(); + + assert_eq!(first, second); + assert_eq!( + first.report.to_json_pretty().unwrap(), + second.report.to_json_pretty().unwrap() + ); + let output = first + .prediction_csv + .lines() + .nth(1) + .unwrap() + .split(',') + .nth(1) + .unwrap() + .chars() + .map(|bit| bit == '1') + .collect::>(); + assert_eq!(decode_lsb(&output).unwrap(), 0); +} + +#[test] +fn commitment_remains_a_post_hoc_integrity_check() { + let training = dataset_source(2, 3, |x, y| x + y); + let config = MdlSearchConfig::for_tests(); + let wrong = + "0000000000000000000000000000000000000000000000000000000000000000 test_outputs.csv\n"; + let error = learn_mdl(MdlLearnRequest { + training_source: &training, + test_inputs_source: "input\n0000\n1010\n", + commitment_source: Some(wrong), + config: &config, + limits: &DEFAULT_LIMITS, + }) + .unwrap_err() + .to_string(); + + assert!(error.contains("commitment mismatch"), "{error}"); +} + +#[test] +fn mdl_sources_do_not_import_fixed_official_families() { + let crate_root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + let mut files = vec![crate_root.join("src/learning/mdl.rs")]; + for entry in fs::read_dir(crate_root.join("src/expression")).unwrap() { + let path = entry.unwrap().path(); + if path.extension().is_some_and(|extension| extension == "rs") { + files.push(path); + } + } + + for path in files { + let source = fs::read_to_string(&path).unwrap(); + for forbidden in [ + "use crate::ArithmeticFamily", + "ArithmeticFamily::", + "synthesize_family", + "mystery-A", + "mystery-B", + "mystery-C", + "mystery-D", + ] { + assert!( + !source.contains(forbidden), + "{} contains {forbidden:?}", + path.display() + ); + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_official.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_official.rs new file mode 100644 index 000000000..bc170ed93 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_official.rs @@ -0,0 +1,69 @@ +use std::{collections::BTreeMap, fs, path::PathBuf}; + +use occam71_rust::{ + ArithmeticFamily, DEFAULT_LIMITS, MdlLearnRequest, MdlSearchConfig, learn_mdl, parse_dataset, + score_candidates, +}; + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +#[test] +fn generic_mdl_recovers_official_semantics_independently_of_labels() { + let data_root = workspace_root().join("vendor/occam-circuit/datasets"); + if !data_root.is_dir() { + eprintln!("official data absent; run ./scripts/fetch-occam-data.sh"); + return; + } + let expected = [ + ("mystery-A", "(x + y)", ArithmeticFamily::Add), + ("mystery-B", "abs(x - y)", ArithmeticFamily::AbsDiff), + ("mystery-C", "(x * y)", ArithmeticFamily::Multiply), + ( + "mystery-D", + "(square(x) + square(y))", + ArithmeticFamily::SumOfSquares, + ), + ]; + let labels = ["alpha", "beta", "gamma", "delta"]; + let config = MdlSearchConfig::default(); + let mut reports = BTreeMap::new(); + + for ((instance, expression, omitted_family), label) in expected.into_iter().zip(labels) { + let root = data_root.join(instance); + let training_source = fs::read_to_string(root.join("train.csv")).unwrap(); + let test_inputs_source = fs::read_to_string(root.join("test_inputs.csv")).unwrap(); + let commitment_source = fs::read_to_string(root.join("commitment.sha256")).unwrap(); + let request = || MdlLearnRequest { + training_source: &training_source, + test_inputs_source: &test_inputs_source, + commitment_source: Some(&commitment_source), + config: &config, + limits: &DEFAULT_LIMITS, + }; + let official = learn_mdl(request()).unwrap(); + let renamed = learn_mdl(request()).unwrap(); + assert_eq!(official, renamed, "renamed label {label}"); + assert_eq!(official.report.expression, expression); + assert_eq!(official.report.exhaustive_mismatches, 0); + assert_eq!(official.report.commitment_matches, Some(true)); + reports.insert(instance, official.report); + + let training = parse_dataset(&training_source).unwrap(); + let remaining_zero_error = score_candidates(&training) + .unwrap() + .into_iter() + .filter(|score| score.family != omitted_family && score.mismatches == 0) + .count(); + assert_eq!( + remaining_zero_error, 0, + "legacy registry should fail after omitting {omitted_family}" + ); + } + + assert_eq!(reports.len(), 4); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_synthetic.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_synthetic.rs new file mode 100644 index 000000000..60124e73b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/mdl_synthetic.rs @@ -0,0 +1,202 @@ +use std::{collections::HashSet, fs, path::PathBuf}; + +use occam71_rust::{ + DEFAULT_LIMITS, Expr, ExprSemantics, MdlSearchConfig, SearchTermination, compile_expression, + decode_lsb, evaluate_with_limits, parse_dataset, parse_expression, parse_netlist, search_mdl, +}; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Fixture { + schema_version: u32, + operand_bits: usize, + tasks: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Task { + id: String, + output_bits: usize, + oracle: String, +} + +fn load_fixture() -> Fixture { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/mdl-tasks.json"); + serde_json::from_str(&fs::read_to_string(path).unwrap()).unwrap() +} + +fn bits(value: u64, width: usize) -> String { + (0..width) + .map(|bit| if value & (1u64 << bit) == 0 { '0' } else { '1' }) + .collect() +} + +fn deterministic_training( + expression: &Expr, + semantics: ExprSemantics, + numerator: usize, + denominator: usize, +) -> String { + let mut source = String::from("input,output\n"); + let bound = 1u64 << semantics.operand_bits; + for x in 0..bound { + for y in 0..bound { + let packed = (x as usize) | ((y as usize) << semantics.operand_bits); + let rank = (packed * 73 + 19) % (bound as usize * bound as usize); + if rank * denominator >= numerator * bound as usize * bound as usize { + continue; + } + source.push_str(&bits(x, semantics.operand_bits)); + source.push_str(&bits(y, semantics.operand_bits)); + source.push(','); + source.push_str(&bits( + expression.evaluate(x, y, semantics).unwrap(), + semantics.output_bits, + )); + source.push('\n'); + } + } + source +} + +fn equivalent_over_domain(lhs: &Expr, rhs: &Expr, semantics: ExprSemantics) -> bool { + let bound = 1u64 << semantics.operand_bits; + (0..bound).all(|x| { + (0..bound).all(|y| { + lhs.evaluate(x, y, semantics).unwrap() == rhs.evaluate(x, y, semantics).unwrap() + }) + }) +} + +fn circuit_matches_expression(expression: &Expr, oracle: &Expr, semantics: ExprSemantics) -> bool { + let compiled = compile_expression(expression, semantics, &DEFAULT_LIMITS).unwrap(); + let circuit = parse_netlist(&compiled.netlist).unwrap(); + let bound = 1u64 << semantics.operand_bits; + let mut input = vec![false; semantics.operand_bits * 2]; + for x in 0..bound { + for y in 0..bound { + for bit in 0..semantics.operand_bits { + input[bit] = x & (1u64 << bit) != 0; + input[semantics.operand_bits + bit] = y & (1u64 << bit) != 0; + } + let actual = + decode_lsb(&evaluate_with_limits(&circuit, &input, &DEFAULT_LIMITS).unwrap()) + .unwrap(); + if actual != oracle.evaluate(x, y, semantics).unwrap() { + return false; + } + } + } + true +} + +#[test] +fn generic_mdl_recovers_twelve_unseen_synthetic_functions() { + let fixture = load_fixture(); + assert_eq!(fixture.schema_version, 1); + assert_eq!(fixture.tasks.len(), 12); + assert_eq!( + fixture + .tasks + .iter() + .map(|task| task.id.as_str()) + .collect::>() + .len(), + fixture.tasks.len() + ); + + let mut default_recovered = 0usize; + let mut outcomes = Vec::new(); + for task in &fixture.tasks { + let semantics = ExprSemantics::new(fixture.operand_bits, task.output_bits).unwrap(); + let oracle = parse_expression(&task.oracle).unwrap(); + let training_source = deterministic_training(&oracle, semantics, 3, 4); + let training = parse_dataset(&training_source).unwrap(); + assert_eq!(training.samples.len(), 192); + + let first = search_mdl(&training, &MdlSearchConfig::default()).unwrap(); + let recovered = first.expression.as_ref().is_some_and(|expression| { + equivalent_over_domain(expression, &oracle, semantics) + && circuit_matches_expression(expression, &oracle, semantics) + }); + if recovered { + default_recovered += 1; + outcomes.push((task.id.clone(), first.report.termination, true)); + continue; + } + + let extended = MdlSearchConfig { + max_description_cost: 9, + timeout_millis: 60_000, + ..MdlSearchConfig::default() + }; + let second = search_mdl(&training, &extended).unwrap(); + let recovered = second.expression.as_ref().is_some_and(|expression| { + equivalent_over_domain(expression, &oracle, semantics) + && circuit_matches_expression(expression, &oracle, semantics) + }); + outcomes.push((task.id.clone(), second.report.termination, recovered)); + } + + assert!( + default_recovered >= 10, + "only {default_recovered}/12 recovered at default bounds: {outcomes:?}" + ); + assert!( + outcomes.iter().all(|(_, _, recovered)| *recovered), + "extended-bound failures: {outcomes:?}" + ); +} + +#[test] +fn random_and_permuted_labels_do_not_create_false_recovery_claims() { + let random_source = { + let mut source = String::from("input,output\n"); + for packed in 0..64u64 { + let x = packed & 7; + let y = packed >> 3; + let label = (packed * 11 + (packed >> 2) * 7 + 5) & 15; + source.push_str(&bits(x, 3)); + source.push_str(&bits(y, 3)); + source.push(','); + source.push_str(&bits(label, 4)); + source.push('\n'); + } + source + }; + let config = MdlSearchConfig { + max_description_cost: 4, + timeout_millis: 5_000, + ..MdlSearchConfig::for_tests() + }; + let random = search_mdl(&parse_dataset(&random_source).unwrap(), &config).unwrap(); + assert_ne!(random.report.termination, SearchTermination::Found); + + let add = parse_expression("(x + y)").unwrap(); + let semantics = ExprSemantics::new(3, 4).unwrap(); + let mut permuted_source = String::from("input,output\n"); + for packed in 0..64u64 { + let x = packed & 7; + let y = packed >> 3; + let permuted = (packed * 29 + 7) & 63; + let permuted_x = permuted & 7; + let permuted_y = permuted >> 3; + permuted_source.push_str(&bits(x, 3)); + permuted_source.push_str(&bits(y, 3)); + permuted_source.push(','); + permuted_source.push_str(&bits( + add.evaluate(permuted_x, permuted_y, semantics).unwrap(), + 4, + )); + permuted_source.push('\n'); + } + let permuted = search_mdl(&parse_dataset(&permuted_source).unwrap(), &config).unwrap(); + assert!( + permuted + .expression + .as_ref() + .is_none_or(|expression| !equivalent_over_domain(expression, &add, semantics)) + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/official_compat.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/official_compat.rs new file mode 100644 index 000000000..3710b8eab --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/official_compat.rs @@ -0,0 +1,39 @@ +mod common; + +use std::fs; + +use occam71_rust::{ + VerificationMetrics, parse_dataset, parse_netlist, parse_packed_dataset, verify, + verify_prepacked, +}; + +#[test] +fn all_manifest_cases_match_scalar_and_packed_oracles() { + let vendor = common::vendor_root(); + if !vendor.join("verify.jl").exists() { + eprintln!("official data is missing; run ./scripts/fetch-occam-data.sh"); + return; + } + for case in common::load_manifest().cases { + let source = common::materialize_circuit(&case, &vendor); + let circuit = parse_netlist(&source).unwrap(); + let dataset_source = fs::read_to_string(vendor.join(&case.dataset)).unwrap(); + let dataset = parse_dataset(&dataset_source).unwrap(); + let scalar = verify(&circuit, &dataset).unwrap(); + let packed = + verify_prepacked(&circuit, &parse_packed_dataset(&dataset_source).unwrap()).unwrap(); + assert_eq!(packed, scalar, "backend mismatch for {}", case.name); + assert_eq!( + scalar, + VerificationMetrics { + samples: case.samples, + gate_count: case.gates, + exact_matches: case.exact_matches, + correct_bits: case.correct_bits, + total_bits: case.total_bits, + }, + "oracle mismatch for {}", + case.name + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/optimized_artifacts.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/optimized_artifacts.rs new file mode 100644 index 000000000..1c53c6e98 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/optimized_artifacts.rs @@ -0,0 +1,106 @@ +use std::{collections::BTreeMap, fs, path::PathBuf}; + +use occam71_rust::{parse_netlist, sha256_hex}; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Baseline { + schema_version: u32, + source_tag: String, + source_commit: String, + gate_counts: BTreeMap, + circuit_sha256: BTreeMap, +} + +#[derive(Debug, Deserialize)] +struct Aggregate { + schema_version: u32, + baseline: String, + abc_commit: String, + processing_order: Vec, + instances: BTreeMap, +} + +fn solution_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("solutions/rewrite-it-in-rust") +} + +#[test] +fn committed_optimization_strictly_improves_the_frozen_baseline() { + let root = solution_root(); + let optimization = root.join("optimization"); + let baseline: Baseline = + serde_json::from_str(&fs::read_to_string(optimization.join("baseline.json")).unwrap()) + .unwrap(); + let aggregate: Aggregate = + serde_json::from_str(&fs::read_to_string(optimization.join("report.json")).unwrap()) + .unwrap(); + assert_eq!(baseline.schema_version, 1); + assert_eq!(baseline.source_tag, "v0.2.0"); + assert_eq!( + baseline.source_commit, + "fc58c3a013c480ecbd12469b76266376d406fc99" + ); + assert_eq!(baseline.circuit_sha256.len(), 4); + assert_eq!(aggregate.schema_version, 1); + assert_eq!(aggregate.baseline, "baseline.json"); + assert_eq!( + aggregate.abc_commit, + "e76768b9d34f9dc67cb6608efecd55db271ff849" + ); + assert_eq!( + aggregate.processing_order, + ["mystery-B", "mystery-D", "mystery-C", "mystery-A"] + ); + + let mut strict_improvement = false; + for instance in ["mystery-A", "mystery-B", "mystery-C", "mystery-D"] { + let baseline_gates = baseline.gate_counts[instance]; + let circuit_bytes = fs::read(root.join(format!("circuits/{instance}.txt"))).unwrap(); + let circuit = parse_netlist(std::str::from_utf8(&circuit_bytes).unwrap()).unwrap(); + assert!(circuit.gates.len() <= baseline_gates); + strict_improvement |= circuit.gates.len() < baseline_gates; + + let report = &aggregate.instances[instance]; + assert_eq!(report["baseline_gate_count"], baseline_gates); + assert_eq!(report["selected_gate_count"], circuit.gates.len()); + assert_eq!(report["exhaustive_mismatches"], 0); + assert_eq!( + report["selected_circuit_sha256"], + sha256_hex(&circuit_bytes) + ); + assert!( + report["abc"]["flows"] + .as_array() + .is_some_and(|flows| !flows.is_empty()) + ); + assert!( + report["peephole_baseline"]["attempted_windows"] + .as_u64() + .is_some() + ); + assert!( + report["peephole_abc"]["attempted_windows"] + .as_u64() + .is_some() + ); + + let prediction = + fs::read(root.join(format!("predictions/{instance}/test_outputs.csv"))).unwrap(); + let expected = fs::read_to_string( + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join(format!( + "vendor/occam-circuit/datasets/{instance}/commitment.sha256" + )), + ) + .unwrap(); + assert_eq!( + sha256_hex(&prediction), + expected.split_whitespace().next().unwrap() + ); + } + assert!(strict_improvement); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/oracle_manifest.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/oracle_manifest.rs new file mode 100644 index 000000000..838f0a791 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/oracle_manifest.rs @@ -0,0 +1,27 @@ +mod common; + +use common::{CircuitSource, load_manifest}; + +#[test] +fn manifest_is_versioned_unique_and_internally_consistent() { + let manifest = load_manifest(); + assert_eq!(manifest.cases.len(), 3); + assert!( + manifest + .cases + .iter() + .any(|case| { matches!(case.circuit, CircuitSource::OfficialFile { .. }) }) + ); + assert!( + manifest + .cases + .iter() + .any(|case| { matches!(case.circuit, CircuitSource::GeneratedAdder { .. }) }) + ); + assert!( + manifest + .cases + .iter() + .any(|case| { matches!(case.circuit, CircuitSource::GeneratedMultiplier { .. }) }) + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_differential.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_differential.rs new file mode 100644 index 000000000..2857695eb --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_differential.rs @@ -0,0 +1,102 @@ +use occam71_rust::{ + Dataset, Sample, evaluate, pack_dataset, parse_netlist, verify, verify_packed, + verify_prepacked_interpreted, verify_prepacked_reference, +}; + +struct SplitMix64(u64); + +impl SplitMix64 { + fn next(&mut self) -> u64 { + self.0 = self.0.wrapping_add(0x9e3779b97f4a7c15); + let mut value = self.0; + value = (value ^ (value >> 30)).wrapping_mul(0xbf58476d1ce4e5b9); + value = (value ^ (value >> 27)).wrapping_mul(0x94d049bb133111eb); + value ^ (value >> 31) + } + + fn index(&mut self, limit: usize) -> usize { + (self.next() as usize) % limit + } + + fn bit(&mut self) -> bool { + self.next() & 1 != 0 + } +} + +fn random_operand(rng: &mut SplitMix64, inputs: usize, wires: usize) -> String { + let source = rng.index(inputs + wires); + let name = if source < inputs { + format!("x{}", source + 1) + } else { + format!("w{}", source - inputs + 1) + }; + if rng.bit() { format!("~{name}") } else { name } +} + +fn random_netlist(rng: &mut SplitMix64, inputs: usize, gates: usize, outputs: usize) -> String { + const OPS: [&str; 6] = ["AND", "OR", "XOR", "NAND", "NOR", "XNOR"]; + let mut source = format!("INPUTS {inputs}\n"); + for wire in 0..gates { + let lhs = random_operand(rng, inputs, wire); + let rhs = random_operand(rng, inputs, wire); + let op = OPS[rng.index(OPS.len())]; + source.push_str(&format!("w{} = {op} {lhs} {rhs}\n", wire + 1)); + } + let output_names: Vec<_> = (0..outputs) + .map(|_| random_operand(rng, inputs, gates)) + .collect(); + source.push_str(&format!("OUTPUTS {}\n", output_names.join(" "))); + source +} + +fn random_dataset( + rng: &mut SplitMix64, + circuit: &occam71_rust::Circuit, + samples: usize, +) -> Dataset { + let rows = (0..samples) + .map(|sample_index| { + let input: Vec<_> = (0..circuit.input_count).map(|_| rng.bit()).collect(); + let mut expected = evaluate(circuit, &input).unwrap(); + if sample_index % 7 == 0 { + let bit = rng.index(expected.len()); + expected[bit] = !expected[bit]; + } + Sample { input, expected } + }) + .collect(); + Dataset { + input_width: circuit.input_count, + output_width: circuit.outputs.len(), + samples: rows, + } +} + +#[test] +fn randomized_metrics_match_at_every_word_boundary() { + let mut rng = SplitMix64(0x1150_0710_cafe_babe); + for samples in [1, 63, 64, 65, 127, 128, 129] { + for _case in 0..20 { + let circuit = parse_netlist(&random_netlist(&mut rng, 4, 20, 3)).unwrap(); + let dataset = random_dataset(&mut rng, &circuit, samples); + let packed = pack_dataset(&dataset).unwrap(); + let reference = verify_prepacked_reference(&circuit, &packed).unwrap(); + let flat = verify_prepacked_interpreted(&circuit, &packed).unwrap(); + assert_eq!( + verify_packed(&circuit, &dataset).unwrap(), + verify(&circuit, &dataset).unwrap(), + "sample count {samples}" + ); + assert_eq!( + reference, + verify(&circuit, &dataset).unwrap(), + "reference sample count {samples}" + ); + assert_eq!( + flat, + verify(&circuit, &dataset).unwrap(), + "flat interpreted sample count {samples}" + ); + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_layout.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_layout.rs new file mode 100644 index 000000000..9330deeae --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/packed_layout.rs @@ -0,0 +1,74 @@ +use occam71_rust::{Dataset, Sample, pack_dataset}; + +fn dataset(samples: usize) -> Dataset { + Dataset { + input_width: 3, + output_width: 2, + samples: (0..samples) + .map(|index| Sample { + input: vec![index % 2 == 0, index % 3 == 0, index % 5 == 0], + expected: vec![index % 7 == 0, index % 11 == 0], + }) + .collect(), + } +} + +fn reference_column(dataset: &Dataset, input: bool, column: usize) -> Vec { + let mut words = vec![0; dataset.samples.len().div_ceil(64)]; + for (sample_index, sample) in dataset.samples.iter().enumerate() { + let value = if input { + sample.input[column] + } else { + sample.expected[column] + }; + words[sample_index / 64] |= u64::from(value) << (sample_index % 64); + } + words +} + +#[test] +fn flat_columns_match_reference_at_word_boundaries() { + for sample_count in [1, 63, 64, 65, 129] { + let scalar = dataset(sample_count); + let packed = pack_dataset(&scalar).unwrap(); + assert_eq!(packed.sample_count(), sample_count); + assert_eq!(packed.input_width(), scalar.input_width); + assert_eq!(packed.output_width(), scalar.output_width); + assert_eq!(packed.block_count(), sample_count.div_ceil(64)); + for column in 0..scalar.input_width { + assert_eq!( + packed.input_column(column).unwrap(), + reference_column(&scalar, true, column) + ); + } + for column in 0..scalar.output_width { + assert_eq!( + packed.expected_column(column).unwrap(), + reference_column(&scalar, false, column) + ); + } + assert!(packed.input_column(scalar.input_width).is_none()); + assert!(packed.expected_column(scalar.output_width).is_none()); + } +} + +#[test] +fn rejects_structurally_inconsistent_scalar_rows() { + let mut scalar = dataset(1); + scalar.samples[0].input.pop(); + assert!( + pack_dataset(&scalar) + .unwrap_err() + .to_string() + .contains("input width") + ); + + let mut scalar = dataset(1); + scalar.samples[0].expected.push(false); + assert!( + pack_dataset(&scalar) + .unwrap_err() + .to_string() + .contains("output width") + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/peephole_optimization.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/peephole_optimization.rs new file mode 100644 index 000000000..24efe0865 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/peephole_optimization.rs @@ -0,0 +1,86 @@ +use std::time::Duration; + +use occam71_rust::{ + DEFAULT_LIMITS, PeepholeConfig, WindowConfig, compare_circuits_exhaustively, extract_windows, + optimize_peepholes, parse_netlist, rewrite_with_candidate, +}; + +#[test] +fn peephole_replaces_a_known_redundant_window() { + let original = parse_netlist(include_str!("fixtures/redundant-xor.txt")).unwrap(); + let result = + optimize_peepholes(&original, &PeepholeConfig::for_tests(), &DEFAULT_LIMITS).unwrap(); + + assert!(result.circuit.gates.len() < original.gates.len()); + assert_eq!(result.report.whole_circuit_mismatches, 0); + assert!(result.report.accepted_replacements >= 1); + assert_eq!( + compare_circuits_exhaustively(&original, &result.circuit, 20, &DEFAULT_LIMITS) + .unwrap() + .1, + 0 + ); +} + +#[test] +fn peephole_timeout_is_typed_and_report_bytes_are_stable() { + let original = parse_netlist(include_str!("fixtures/redundant-xor.txt")).unwrap(); + let config = PeepholeConfig { + per_window_timeout: Duration::ZERO, + global_timeout: Duration::from_secs(1), + ..PeepholeConfig::for_tests() + }; + let first = optimize_peepholes(&original, &config, &DEFAULT_LIMITS).unwrap(); + let second = optimize_peepholes(&original, &config, &DEFAULT_LIMITS).unwrap(); + + assert_eq!(first.circuit, original); + assert_eq!(first, second); + assert!( + first + .report + .attempts + .iter() + .all(|attempt| !attempt.accepted) + ); + assert_eq!( + first.report.to_json_pretty().unwrap(), + second.report.to_json_pretty().unwrap() + ); +} + +#[test] +fn rewrite_rejects_bad_shapes_and_equivalence_check_catches_bad_logic() { + let original = parse_netlist(include_str!("fixtures/redundant-xor.txt")).unwrap(); + let window = extract_windows( + &original, + WindowConfig { + min_gates: 5, + max_gates: 5, + max_inputs: 4, + max_outputs: 2, + }, + ) + .unwrap() + .into_iter() + .find(|window| window.gate_indices.len() == 5) + .unwrap(); + + let wrong_inputs = parse_netlist("INPUTS 1\nOUTPUTS x1\n").unwrap(); + assert!(rewrite_with_candidate(&original, &window, &wrong_inputs, &DEFAULT_LIMITS).is_err()); + let extra_output = parse_netlist("INPUTS 2\nOUTPUTS x1 x2\n").unwrap(); + assert!(rewrite_with_candidate(&original, &window, &extra_output, &DEFAULT_LIMITS).is_err()); + + let inequivalent = parse_netlist("INPUTS 2\nw1 = AND x1 x2\nOUTPUTS w1\n").unwrap(); + let (rewritten, _) = + rewrite_with_candidate(&original, &window, &inequivalent, &DEFAULT_LIMITS).unwrap(); + assert!( + compare_circuits_exhaustively(&original, &rewritten, 20, &DEFAULT_LIMITS) + .unwrap() + .1 + > 0 + ); + + let (non_improving, _) = + rewrite_with_candidate(&original, &window, &original, &DEFAULT_LIMITS).unwrap(); + assert!(non_improving.gates.len() >= original.gates.len()); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/properties.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/properties.rs new file mode 100644 index 000000000..2812ee4da --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/properties.rs @@ -0,0 +1,210 @@ +use occam71_rust::{ + Circuit, CompiledCircuit, Dataset, GateOp, Operand, Sample, Source, evaluate, pack_dataset, + parse_dataset, parse_netlist, parse_packed_dataset, verify, verify_compiled_prepacked, + verify_prepacked, verify_prepacked_interpreted, +}; +use proptest::{ + collection::vec, + prelude::*, + test_runner::{FileFailurePersistence, RngSeed}, +}; + +type GateSpec = (u8, u16, bool, u16, bool); +type OutputSpec = (u16, bool); +type CaseSpec = (usize, Vec, Vec, usize, u64); + +fn sample_count_strategy() -> impl Strategy { + prop_oneof![ + 3 => Just(1), + 3 => Just(63), + 3 => Just(64), + 3 => Just(65), + 3 => Just(127), + 3 => Just(128), + 3 => Just(129), + 2 => 1usize..130, + ] +} + +fn case_strategy() -> impl Strategy { + ( + 1usize..=8, + vec( + ( + 0u8..6, + any::(), + any::(), + any::(), + any::(), + ), + 0..=40, + ), + vec((any::(), any::()), 1..=6), + sample_count_strategy(), + any::(), + ) +} + +fn operand_name(raw: u16, inverted: bool, inputs: usize, wires: usize) -> String { + let index = usize::from(raw) % (inputs + wires); + let name = if index < inputs { + format!("x{}", index + 1) + } else { + format!("w{}", index - inputs + 1) + }; + if inverted { format!("~{name}") } else { name } +} + +fn netlist_from_spec(inputs: usize, gates: &[GateSpec], outputs: &[OutputSpec]) -> String { + const OPS: [&str; 6] = ["AND", "OR", "XOR", "NAND", "NOR", "XNOR"]; + let mut source = format!("INPUTS {inputs}\n"); + for (gate_index, (operation, lhs, lhs_inverted, rhs, rhs_inverted)) in gates.iter().enumerate() + { + source.push_str(&format!( + "w{} = {} {} {}\n", + gate_index + 1, + OPS[usize::from(*operation)], + operand_name(*lhs, *lhs_inverted, inputs, gate_index), + operand_name(*rhs, *rhs_inverted, inputs, gate_index), + )); + } + let outputs = outputs + .iter() + .map(|(raw, inverted)| operand_name(*raw, *inverted, inputs, gates.len())) + .collect::>() + .join(" "); + source.push_str(&format!("OUTPUTS {outputs}\n")); + source +} + +fn operand_text(operand: Operand) -> String { + let name = match operand.source { + Source::Input(index) => format!("x{}", index + 1), + Source::Wire(index) => format!("w{}", index + 1), + }; + if operand.inverted { + format!("~{name}") + } else { + name + } +} + +fn operation_text(operation: GateOp) -> &'static str { + match operation { + GateOp::And => "AND", + GateOp::Or => "OR", + GateOp::Xor => "XOR", + GateOp::Nand => "NAND", + GateOp::Nor => "NOR", + GateOp::Xnor => "XNOR", + } +} + +fn format_circuit(circuit: &Circuit) -> String { + let mut source = format!("INPUTS {}\n", circuit.input_count); + for gate in &circuit.gates { + source.push_str(&format!( + "w{} = {} {} {}\n", + gate.output + 1, + operation_text(gate.op), + operand_text(gate.lhs), + operand_text(gate.rhs) + )); + } + source.push_str(&format!( + "OUTPUTS {}\n", + circuit + .outputs + .iter() + .copied() + .map(operand_text) + .collect::>() + .join(" ") + )); + source +} + +fn splitmix64(state: &mut u64) -> u64 { + *state = state.wrapping_add(0x9e3779b97f4a7c15); + let mut value = *state; + value = (value ^ (value >> 30)).wrapping_mul(0xbf58476d1ce4e5b9); + value = (value ^ (value >> 27)).wrapping_mul(0x94d049bb133111eb); + value ^ (value >> 31) +} + +fn dataset_for(circuit: &Circuit, samples: usize, mut seed: u64) -> Dataset { + let samples = (0..samples) + .map(|sample_index| { + let input = (0..circuit.input_count) + .map(|_| splitmix64(&mut seed) & 1 != 0) + .collect::>(); + let mut expected = evaluate(circuit, &input).unwrap(); + if (sample_index as u64).wrapping_add(seed).is_multiple_of(11) { + let bit = (splitmix64(&mut seed) as usize) % expected.len(); + expected[bit] = !expected[bit]; + } + Sample { input, expected } + }) + .collect(); + Dataset { + input_width: circuit.input_count, + output_width: circuit.outputs.len(), + samples, + } +} + +fn format_dataset(dataset: &Dataset) -> String { + let mut source = String::from("input,output\n"); + for sample in &dataset.samples { + for value in &sample.input { + source.push(if *value { '1' } else { '0' }); + } + source.push(','); + for value in &sample.expected { + source.push(if *value { '1' } else { '0' }); + } + source.push('\n'); + } + source +} + +proptest! { + #![proptest_config(ProptestConfig { + cases: 1_000, + failure_persistence: Some(Box::new( + FileFailurePersistence::Direct( + "challenge-71-occam/proptest-regressions/properties.txt" + ) + )), + rng_seed: RngSeed::Fixed(0x1150_0710_cafe_babe), + ..ProptestConfig::default() + })] + + #[test] + fn all_backends_and_round_trips_agree( + (inputs, gate_specs, output_specs, samples, seed) in case_strategy() + ) { + let source = netlist_from_spec(inputs, &gate_specs, &output_specs); + let circuit = parse_netlist(&source).unwrap(); + let reparsed = parse_netlist(&format_circuit(&circuit)).unwrap(); + prop_assert_eq!(&reparsed, &circuit); + + let dataset = dataset_for(&circuit, samples, seed); + let dataset_source = format_dataset(&dataset); + let reparsed_dataset = parse_dataset(&dataset_source).unwrap(); + prop_assert_eq!(&reparsed_dataset, &dataset); + + let legacy_packed = pack_dataset(&dataset).unwrap(); + let direct_packed = parse_packed_dataset(&dataset_source).unwrap(); + prop_assert_eq!(&direct_packed, &legacy_packed); + + let scalar = verify(&circuit, &dataset).unwrap(); + let interpreted = verify_prepacked_interpreted(&circuit, &direct_packed).unwrap(); + let compiled = CompiledCircuit::new(&circuit).unwrap(); + let compiled_metrics = verify_compiled_prepacked(&compiled, &direct_packed).unwrap(); + let default_packed = verify_prepacked(&circuit, &direct_packed).unwrap(); + prop_assert_eq!(&interpreted, &scalar); + prop_assert_eq!(&compiled_metrics, &scalar); + prop_assert_eq!(&default_packed, &scalar); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/release_version.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/release_version.rs new file mode 100644 index 000000000..20a0c02db --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/release_version.rs @@ -0,0 +1,36 @@ +use std::{fs, path::PathBuf, process::Command}; + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .expect("crate is a workspace member") + .to_owned() +} + +#[test] +fn package_cli_locks_and_snapshot_are_v050() { + assert_eq!(env!("CARGO_PKG_VERSION"), "0.5.0"); + let output = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .arg("--version") + .output() + .expect("run occam71_rust --version"); + assert!(output.status.success()); + assert_eq!( + String::from_utf8(output.stdout).unwrap().trim(), + "occam71-rust 0.5.0" + ); + + let root = workspace_root(); + for relative in [ + "Cargo.lock", + "fuzz/Cargo.lock", + "challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml", + "challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock", + ] { + let source = fs::read_to_string(root.join(relative)).unwrap(); + assert!( + source.contains("version = \"0.5.0\""), + "{relative} does not contain 0.5.0" + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/report_consistency.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/report_consistency.rs new file mode 100644 index 000000000..2cdfa181d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/report_consistency.rs @@ -0,0 +1,49 @@ +use std::{path::PathBuf, process::Command}; + +#[test] +fn generated_evidence_reports_are_current() { + let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .expect("crate is a workspace member") + .to_owned(); + for (script, arguments) in [ + ("render-oracle-report", vec!["--check"]), + ( + "render-benchmark-report", + vec!["--check", "--profile", "apple-m4"], + ), + ( + "render-ingestion-report", + vec![ + "--check", + "--results", + "benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4", + "--output", + "benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4/report.md", + ], + ), + ( + "render-occam-research", + vec![ + "--raw", + "experiments/occam-generalization/raw.jsonl", + "--output", + "experiments/occam-generalization", + "--check", + ], + ), + ("root-occam-research-evidence", vec!["--check"]), + ] { + let output = Command::new(root.join("scripts").join(script)) + .args(arguments) + .current_dir(&root) + .output() + .unwrap(); + assert!( + output.status.success(), + "{script} failed:\n{}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_artifacts.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_artifacts.rs new file mode 100644 index 000000000..afb692ca5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_artifacts.rs @@ -0,0 +1,210 @@ +use std::{ + collections::{BTreeMap, HashSet}, + fs, + path::{Component, Path, PathBuf}, +}; + +use occam71_rust::{ + TrialRecord, TrialStatus, expected_trial_keys, load_experiment_config, + official_and_synthetic_tasks, sha256_hex, +}; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct ResearchManifest { + schema_version: u32, + source_commit: String, + trial_rows: usize, + files: BTreeMap, + external: BTreeMap, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Aggregate { + schema_version: u32, + trial_rows: usize, + group_rows: usize, + correlations: Correlations, + groups: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Correlations { + gate_count_vs_held_out_exact_spearman: f64, + description_length_vs_gate_count_spearman: f64, + paired_trials: usize, +} + +#[derive(Debug, Deserialize)] +struct Group { + expected_trials: usize, + missing_trials: usize, + statuses: BTreeMap, + wilson95_low: f64, + wilson95_high: f64, +} + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +fn research_root() -> PathBuf { + workspace_root().join("experiments/occam-generalization") +} + +fn checked_relative(root: &Path, relative: &str) -> PathBuf { + let path = Path::new(relative); + assert!(!path.is_absolute(), "{relative}"); + assert!( + path.components() + .all(|component| matches!(component, Component::Normal(_))), + "{relative}" + ); + root.join(path) +} + +#[test] +fn committed_research_matrix_is_complete_and_hash_locked() { + let root = research_root(); + let config = load_experiment_config(&root.join("config.json")).unwrap(); + let tasks = official_and_synthetic_tasks().unwrap(); + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config) + .unwrap() + .into_iter() + .collect::>(); + assert_eq!(expected.len(), 20_480); + + let raw = fs::read_to_string(root.join("raw.jsonl")).unwrap(); + let records = raw + .lines() + .map(|line| serde_json::from_str::(line).unwrap()) + .collect::>(); + assert_eq!(records.len(), 20_480); + let actual = records + .iter() + .map(|record| record.key.clone()) + .collect::>(); + assert_eq!(actual, expected); + + let config_hash = sha256_hex(&fs::read(root.join("config.json")).unwrap()); + for record in &records { + assert_eq!(record.schema_version, 1); + assert_eq!(record.config_sha256, config_hash); + assert_eq!( + record.observed_rows + record.held_out_rows, + tasks + .iter() + .find(|task| task.id == record.key.task) + .unwrap() + .full_domain() + .samples + .len() + ); + assert_eq!(record.runtime_micros, 0); + assert_eq!(record.peak_rss_bytes, 0); + match record.status { + TrialStatus::Success => { + let training = record.training.as_ref().unwrap(); + let held_out = record.held_out.as_ref().unwrap(); + let full_domain = record.full_domain.as_ref().unwrap(); + assert_eq!(training.samples, record.observed_rows); + assert_eq!(training.exact_matches, training.samples); + assert_eq!(held_out.samples, record.held_out_rows); + assert_eq!( + full_domain.samples, + record.observed_rows + record.held_out_rows + ); + assert_eq!( + record.semantic_recovery, + full_domain.exact_matches == full_domain.samples + ); + assert!(record.hypothesis_sha256.is_some()); + } + _ => { + assert!(record.training.is_none()); + assert!(record.held_out.is_none()); + assert!(record.full_domain.is_none()); + assert!(!record.semantic_recovery); + } + } + } + + let aggregate: Aggregate = + serde_json::from_str(&fs::read_to_string(root.join("aggregate.json")).unwrap()).unwrap(); + assert_eq!(aggregate.schema_version, 1); + assert_eq!(aggregate.trial_rows, records.len()); + assert_eq!(aggregate.group_rows, 1_024); + assert_eq!(aggregate.groups.len(), aggregate.group_rows); + assert_eq!(aggregate.correlations.paired_trials, 8_380); + assert!( + aggregate + .correlations + .gate_count_vs_held_out_exact_spearman + .is_finite() + ); + assert!( + aggregate + .correlations + .description_length_vs_gate_count_spearman + .is_finite() + ); + for group in &aggregate.groups { + assert_eq!(group.expected_trials, 20); + assert_eq!(group.missing_trials, 0); + assert_eq!(group.statuses.values().sum::(), 20); + assert!((0.0..=1.0).contains(&group.wilson95_low)); + assert!((0.0..=1.0).contains(&group.wilson95_high)); + assert!(group.wilson95_low <= group.wilson95_high); + } + + let report = fs::read_to_string(root.join("report.md")).unwrap(); + assert!(report.contains("20,480 trial records")); + assert!(report.contains("conservative zero completion")); + assert!(report.contains("must not be interpreted as performance measurements")); + assert!(report.contains("not a universal learning law")); + + for figure in [ + "figures/gates-vs-accuracy.svg", + "figures/fraction-vs-recovery.svg", + "figures/description-vs-gates.svg", + ] { + let source = fs::read_to_string(root.join(figure)).unwrap(); + assert!(source.starts_with(" 1_000, "{figure}"); + } + + let manifest: ResearchManifest = + serde_json::from_str(&fs::read_to_string(root.join("manifest.json")).unwrap()).unwrap(); + assert_eq!(manifest.schema_version, 1); + assert_eq!(manifest.source_commit.len(), 40); + assert_eq!(manifest.trial_rows, records.len()); + assert_eq!(manifest.files.len(), 10); + for (relative, expected_hash) in &manifest.files { + assert_eq!( + sha256_hex(&fs::read(checked_relative(&root, relative)).unwrap()), + *expected_hash, + "{relative}" + ); + } + assert_eq!( + manifest.external["abc_lock_sha256"], + sha256_hex(&fs::read(workspace_root().join("tools/abc/LOCK.json")).unwrap()) + ); + assert_eq!( + manifest.external["optimization_report_sha256"], + sha256_hex( + &fs::read( + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("solutions/rewrite-it-in-rust/optimization/report.json") + ) + .unwrap() + ) + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_circuit_learners.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_circuit_learners.rs new file mode 100644 index 000000000..88c4dbc7d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_circuit_learners.rs @@ -0,0 +1,107 @@ +use occam71_rust::{ + BddOrder, LearnedHypothesis, MemorizationLearner, ObservedTask, ResearchLearner, RobddLearner, + Sample, TrialBudget, build_robdd, parse_netlist, verify, +}; + +fn observed_xor() -> ObservedTask { + ObservedTask { + id: "xor".into(), + input_width: 2, + output_width: 1, + samples: vec![ + Sample { + input: vec![false, false], + expected: vec![false], + }, + Sample { + input: vec![false, true], + expected: vec![true], + }, + Sample { + input: vec![true, false], + expected: vec![true], + }, + Sample { + input: vec![true, true], + expected: vec![false], + }, + ], + } +} + +fn learned_circuit(hypothesis: LearnedHypothesis) -> String { + match hypothesis { + LearnedHypothesis::Circuit { netlist, .. } => netlist, + LearnedHypothesis::Expression { .. } => panic!("expected a learned circuit"), + } +} + +#[test] +fn memorization_is_a_real_training_consistent_trie() { + let observed = ObservedTask { + id: "partial-memory".into(), + input_width: 2, + output_width: 1, + samples: vec![ + Sample { + input: vec![false, true], + expected: vec![true], + }, + Sample { + input: vec![true, false], + expected: vec![true], + }, + ], + }; + let netlist = learned_circuit( + MemorizationLearner + .fit(&observed, 0, &TrialBudget::default()) + .unwrap(), + ); + let circuit = parse_netlist(&netlist).unwrap(); + let training = verify(&circuit, &observed.dataset()).unwrap(); + assert_eq!(training.exact_matches, training.samples); + assert!(!circuit.gates.is_empty()); + + let missing_rows = ObservedTask { + id: "missing".into(), + input_width: 2, + output_width: 1, + samples: vec![ + Sample { + input: vec![false, false], + expected: vec![false], + }, + Sample { + input: vec![true, true], + expected: vec![false], + }, + ], + }; + let completion = verify(&circuit, &missing_rows.dataset()).unwrap(); + assert_eq!(completion.exact_matches, completion.samples); +} + +#[test] +fn robdd_reduces_and_compiles_a_complete_boolean_function() { + let observed = observed_xor(); + let budget = TrialBudget::default(); + for order in BddOrder::ALL { + let result = build_robdd(&observed, order, &budget).unwrap(); + let circuit = parse_netlist(&result.netlist).unwrap(); + let metrics = verify(&circuit, &observed.dataset()).unwrap(); + assert_eq!(metrics.exact_matches, metrics.samples, "{order:?}"); + assert!(circuit.gates.len() <= 3, "{order:?}"); + } + + let selected = learned_circuit(RobddLearner.fit(&observed, 0, &budget).unwrap()); + let selected_circuit = parse_netlist(&selected).unwrap(); + assert!(selected_circuit.gates.len() <= 3); +} + +#[test] +fn circuit_baselines_do_not_share_the_old_zero_default_shortcut() { + let adapters = include_str!("../src/research/adapters.rs"); + assert!(!adapters.contains("ZeroDefaultMemory")); + assert!(!adapters.contains("ResearchMethod::AbcDontCare\n | ResearchMethod::Robdd")); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_evolution.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_evolution.rs new file mode 100644 index 000000000..96bd0041a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_evolution.rs @@ -0,0 +1,54 @@ +use occam71_rust::{ + EvolutionConfig, GrammarEvolutionLearner, ObservedTask, ResearchLearner, Sample, TrialBudget, + evolve, +}; + +fn complete_small_xor() -> ObservedTask { + ObservedTask { + id: "xor".into(), + input_width: 2, + output_width: 1, + samples: vec![ + Sample { + input: vec![false, false], + expected: vec![false], + }, + Sample { + input: vec![false, true], + expected: vec![true], + }, + Sample { + input: vec![true, false], + expected: vec![true], + }, + Sample { + input: vec![true, true], + expected: vec![false], + }, + ], + } +} + +#[test] +fn evolution_is_seeded_and_recovers_xor() { + let task = complete_small_xor(); + let first = evolve(&task, 42, EvolutionConfig::for_tests()).unwrap(); + let second = evolve(&task, 42, EvolutionConfig::for_tests()).unwrap(); + assert_eq!(first, second); + assert_eq!(first.best_expression.to_string(), "(x XOR y)"); + assert_eq!(first.best_row_mismatches, 0); +} + +#[test] +fn evolution_adapter_returns_the_independent_best_expression() { + let learned = GrammarEvolutionLearner::new(EvolutionConfig::for_tests()) + .fit(&complete_small_xor(), 42, &TrialBudget::default()) + .unwrap(); + let text = format!("{learned:?}"); + assert!(text.contains("BitXor")); +} + +#[test] +fn evolution_source_does_not_call_mdl_search() { + assert!(!include_str!("../src/research/evolution.rs").contains("search_mdl")); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_learners.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_learners.rs new file mode 100644 index 000000000..e79c124f8 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_learners.rs @@ -0,0 +1,29 @@ +use occam71_rust::{ResearchMethod, ResearchTools, default_adapters}; + +#[test] +fn every_automatic_method_has_exactly_one_adapter() { + let adapters = default_adapters(ResearchTools::default()); + assert_eq!(ResearchMethod::AUTOMATIC.len(), 7); + assert_eq!(adapters.len(), ResearchMethod::AUTOMATIC.len()); + + for method in ResearchMethod::AUTOMATIC { + assert_eq!( + adapters + .iter() + .filter(|adapter| adapter.method() == method) + .count(), + 1, + "{method:?} must have exactly one adapter" + ); + } +} + +#[test] +fn oracle_is_not_an_automatic_adapter() { + assert!(!ResearchMethod::AUTOMATIC.contains(&ResearchMethod::OracleExpression)); + + let learner_api = include_str!("../src/research/learner.rs"); + let adapters = include_str!("../src/research/adapters.rs"); + assert!(!learner_api.contains("OracleTask")); + assert!(!adapters.contains("OracleTask")); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_logic_baselines.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_logic_baselines.rs new file mode 100644 index 000000000..866077fde --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_logic_baselines.rs @@ -0,0 +1,155 @@ +use std::{path::PathBuf, time::Duration}; + +use occam71_rust::{ + AbcDontCareLearner, LearnedHypothesis, LearnerFailure, ObservedTask, ResearchLearner, Sample, + SatCegisLearner, TrialBudget, parse_netlist, render_partial_pla, verify, +}; + +fn complete_xor() -> ObservedTask { + ObservedTask { + id: "xor".into(), + input_width: 2, + output_width: 1, + samples: vec![ + Sample { + input: vec![false, false], + expected: vec![false], + }, + Sample { + input: vec![false, true], + expected: vec![true], + }, + Sample { + input: vec![true, false], + expected: vec![true], + }, + Sample { + input: vec![true, true], + expected: vec![false], + }, + ], + } +} + +fn pinned_abc() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("target/tools/abc/e76768b9d34f9dc67cb6608efecd55db271ff849/abc") +} + +fn assert_fits(learned: LearnedHypothesis, observed: &ObservedTask) { + let LearnedHypothesis::Circuit { netlist, .. } = learned else { + panic!("logic baseline must return a circuit"); + }; + let circuit = parse_netlist(&netlist).unwrap(); + let metrics = verify(&circuit, &observed.dataset()).unwrap(); + assert_eq!(metrics.exact_matches, metrics.samples); +} + +#[test] +fn abc_and_sat_fit_complete_two_bit_xor() { + let observed = complete_xor(); + let budget = TrialBudget { + timeout: Duration::from_secs(20), + max_gates: 4, + max_nodes: 250_000, + }; + assert!(pinned_abc().is_file(), "run ./scripts/fetch-abc.sh"); + assert_fits( + AbcDontCareLearner::new(Some(pinned_abc())) + .fit(&observed, 11, &budget) + .unwrap(), + &observed, + ); + assert_fits( + SatCegisLearner.fit(&observed, 11, &budget).unwrap(), + &observed, + ); +} + +#[test] +fn partial_pla_declares_unobserved_subspaces_as_dont_cares() { + let observed = ObservedTask { + id: "partial".into(), + input_width: 2, + output_width: 1, + samples: vec![Sample { + input: vec![false, true], + expected: vec![true], + }], + }; + let pla = render_partial_pla(&observed).unwrap(); + assert!(pla.contains(".type fd")); + assert!(pla.contains("01 1")); + assert!(pla.contains("00 -")); + assert!(pla.contains("1- -")); + + let budget = TrialBudget { + timeout: Duration::from_secs(20), + max_gates: 4, + max_nodes: 250_000, + }; + assert_fits( + AbcDontCareLearner::new(Some(pinned_abc())) + .fit(&observed, 0, &budget) + .unwrap(), + &observed, + ); +} + +#[test] +fn abc_missing_and_failed_processes_are_typed() { + let observed = complete_xor(); + let budget = TrialBudget::default(); + let missing = AbcDontCareLearner::new(None) + .fit(&observed, 0, &budget) + .unwrap_err(); + assert!(matches!(missing, LearnerFailure::Unsupported(_))); + + let failed = AbcDontCareLearner::new(Some(PathBuf::from("/usr/bin/false"))) + .fit(&observed, 0, &budget) + .unwrap_err(); + assert!(matches!(failed, LearnerFailure::ToolError(_))); +} + +#[test] +fn sat_cegis_preserves_width_timeout_and_resource_failures() { + let wide = ObservedTask { + id: "wide".into(), + input_width: 9, + output_width: 1, + samples: vec![Sample { + input: vec![false; 9], + expected: vec![false], + }], + }; + assert!(matches!( + SatCegisLearner + .fit(&wide, 0, &TrialBudget::default()) + .unwrap_err(), + LearnerFailure::Unsupported(_) + )); + + let timed_out = TrialBudget { + timeout: Duration::ZERO, + ..TrialBudget::default() + }; + assert!(matches!( + SatCegisLearner + .fit(&complete_xor(), 0, &timed_out) + .unwrap_err(), + LearnerFailure::Timeout(_) + )); + + let constrained = TrialBudget { + max_nodes: 1, + ..TrialBudget::default() + }; + assert!(matches!( + SatCegisLearner + .fit(&complete_xor(), 0, &constrained) + .unwrap_err(), + LearnerFailure::ResourceLimit(_) + )); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_projection.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_projection.rs new file mode 100644 index 000000000..5c94eae76 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_projection.rs @@ -0,0 +1,76 @@ +use occam71_rust::{ + ResearchMethod, SemanticTrialRecord, TrialKey, TrialRecord, TrialStatus, VerificationMetrics, + render_semantic_jsonl, semantic_projection, +}; + +fn fixture_record() -> TrialRecord { + let metrics = VerificationMetrics { + samples: 1, + gate_count: 1, + exact_matches: 1, + correct_bits: 1, + total_bits: 1, + }; + TrialRecord { + schema_version: 1, + key: TrialKey { + task: "xor".into(), + fraction_basis_points: 500, + seed: 0, + method: ResearchMethod::Robdd, + }, + config_sha256: "a".repeat(64), + status: TrialStatus::Success, + observed_rows: 1, + held_out_rows: 1, + training: Some(metrics.clone()), + held_out: Some(metrics.clone()), + full_domain: Some(metrics), + semantic_recovery: true, + expression: None, + description_length: Some(1), + gate_count: Some(1), + minimum_unique: None, + runtime_micros: 77, + peak_rss_bytes: 8 * 1024 * 1024, + host_identifier: "macos-aarch64-deadbeef".into(), + process_id: 123, + started_unix_micros: 456, + hypothesis_sha256: Some("b".repeat(64)), + detail: "test".into(), + } +} + +#[test] +fn measurements_change_without_changing_semantic_projection() { + let first = fixture_record(); + let mut second = first.clone(); + second.runtime_micros += 77; + second.peak_rss_bytes += 4096; + second.host_identifier = "linux-x86_64-cafebabe".into(); + second.process_id += 1; + second.started_unix_micros += 1; + assert_eq!(semantic_projection(&first), semantic_projection(&second)); +} + +#[test] +fn projection_is_sorted_complete_and_excludes_only_measurement_identity() { + let first = fixture_record(); + let mut second = first.clone(); + second.key.seed = 1; + let jsonl = render_semantic_jsonl(&[second, first]).unwrap(); + assert!(!jsonl.contains("runtime_micros")); + assert!(!jsonl.contains("peak_rss_bytes")); + assert!(!jsonl.contains("host_identifier")); + assert!(!jsonl.contains("process_id")); + assert!(!jsonl.contains("started_unix_micros")); + let rows = jsonl + .lines() + .map(|line| serde_json::from_str::(line).unwrap()) + .collect::>(); + assert_eq!(rows.len(), 2); + assert_eq!(rows[0].key.seed, 0); + assert_eq!(rows[1].key.seed, 1); + assert!(rows.iter().all(|row| row.schema_version == 2)); + assert!(rows.iter().all(|row| row.hypothesis_sha256.is_some())); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_protocol.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_protocol.rs new file mode 100644 index 000000000..1b08addd9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_protocol.rs @@ -0,0 +1,57 @@ +use std::{collections::HashSet, path::PathBuf}; + +use occam71_rust::{ + expected_trial_keys, load_experiment_config, official_and_synthetic_tasks, split_task, +}; + +#[test] +fn sampling_is_without_replacement_and_uses_the_complement() { + let tasks = official_and_synthetic_tasks().unwrap(); + let task = tasks.iter().find(|task| task.id == "mystery-D").unwrap(); + let first = split_task(task, 0.05, 7, 8_147_115).unwrap(); + let second = split_task(task, 0.05, 7, 8_147_115).unwrap(); + assert_eq!(first, second); + assert_eq!(first.observed_indices.len(), 51); + assert_eq!(first.held_out_indices.len(), 973); + let observed = first.observed_indices.iter().collect::>(); + assert!( + first + .held_out_indices + .iter() + .all(|index| !observed.contains(index)) + ); +} + +#[test] +fn fixed_protocol_has_exactly_20480_unique_keys() { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("experiments/occam-generalization/config.json"); + let config = load_experiment_config(&path).unwrap(); + let task_ids = official_and_synthetic_tasks() + .unwrap() + .into_iter() + .map(|task| task.id) + .collect::>(); + let keys = expected_trial_keys(&task_ids, &config).unwrap(); + assert_eq!(keys.len(), 16 * 8 * 20 * 8); + assert_eq!(keys.iter().collect::>().len(), keys.len()); +} + +#[test] +fn smoke_protocol_has_one_trial_per_task_and_method() { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join("experiments/occam-generalization-v2/smoke-config.json"); + let config = load_experiment_config(&path).unwrap(); + let task_ids = official_and_synthetic_tasks() + .unwrap() + .into_iter() + .map(|task| task.id) + .collect::>(); + let keys = expected_trial_keys(&task_ids, &config).unwrap(); + assert_eq!(keys.len(), 16 * 8); + assert_eq!(keys.iter().collect::>().len(), keys.len()); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_runner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_runner.rs new file mode 100644 index 000000000..991c22d54 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_runner.rs @@ -0,0 +1,93 @@ +use std::{fs, path::PathBuf, process::Command}; + +use occam71_rust::{ + ResearchMethod, ResearchTools, TrialBudget, TrialKey, TrialRecord, TrialStatus, + official_and_synthetic_tasks, peak_rss_bytes, run_trial_with_tools, split_task, +}; + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +#[test] +fn peak_rss_is_positive_and_byte_normalized() { + let bytes = peak_rss_bytes().unwrap(); + assert!(bytes > 1024 * 1024, "{bytes}"); +} + +#[test] +fn isolated_trial_writes_real_measurements_atomically() { + let root = workspace_root(); + let temporary = + std::env::temp_dir().join(format!("occam71-measured-trial-{}", std::process::id())); + if temporary.exists() { + fs::remove_dir_all(&temporary).unwrap(); + } + fs::create_dir_all(&temporary).unwrap(); + let output = temporary.join("trial.json"); + let key = + r#"{"task":"mystery-A","fraction_basis_points":500,"seed":0,"method":"oracle-expression"}"#; + let result = Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "experiment-trial", + "--config", + root.join("experiments/occam-generalization/config.json") + .to_str() + .unwrap(), + "--tasks", + root.join("experiments/occam-generalization/tasks.json") + .to_str() + .unwrap(), + "--key-json", + key, + "--output", + output.to_str().unwrap(), + ]) + .output() + .unwrap(); + assert!( + result.status.success(), + "{}", + String::from_utf8_lossy(&result.stderr) + ); + let record: TrialRecord = serde_json::from_slice(&fs::read(&output).unwrap()).unwrap(); + assert!(record.runtime_micros > 0); + assert!(record.peak_rss_bytes > 1024 * 1024); + assert!(record.process_id > 0); + assert!(!record.host_identifier.is_empty()); + assert!(record.started_unix_micros > 0); + assert!(!temporary.read_dir().unwrap().any(|entry| { + entry + .unwrap() + .file_name() + .to_string_lossy() + .contains(".tmp") + })); + fs::remove_dir_all(temporary).unwrap(); +} + +#[test] +fn evaluator_resource_limits_remain_typed_trial_rows() { + let tasks = official_and_synthetic_tasks().unwrap(); + let task = tasks.iter().find(|task| task.id == "mystery-A").unwrap(); + let split = split_task(task, 0.40, 0, 8_147_115).unwrap(); + let record = run_trial_with_tools( + task, + &split, + TrialKey { + task: task.id.clone(), + fraction_basis_points: 40_000, + seed: 0, + method: ResearchMethod::Memorization, + }, + &"a".repeat(64), + ResearchTools::default(), + TrialBudget::default(), + ) + .unwrap(); + assert_eq!(record.status, TrialStatus::ResourceLimit); + assert!(record.detail.contains("compiled value words")); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_tasks.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_tasks.rs new file mode 100644 index 000000000..4728fc80b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_tasks.rs @@ -0,0 +1,34 @@ +use std::collections::HashSet; + +use occam71_rust::official_and_synthetic_tasks; + +#[test] +fn observed_task_contains_no_oracle_or_held_out_labels() { + let oracle = official_and_synthetic_tasks().unwrap().remove(0); + let observed = oracle.observe(&[0, 3, 7]).unwrap(); + let json = serde_json::to_value(&observed).unwrap(); + assert!(json.get("oracle").is_none()); + assert!(json.get("held_out").is_none()); + assert!(json.get("full_domain").is_none()); + assert_eq!(observed.samples.len(), 3); +} + +#[test] +fn sixteen_domains_are_unique_complete_and_hash_locked_in_memory() { + let tasks = official_and_synthetic_tasks().unwrap(); + assert_eq!(tasks.len(), 16); + assert_eq!( + tasks + .iter() + .map(|task| task.id.as_str()) + .collect::>() + .len(), + 16 + ); + for task in tasks { + let manifest = task.manifest(); + assert_eq!(manifest.domain_rows, 1 << (2 * manifest.operand_bits)); + assert_eq!(manifest.domain_sha256.len(), 64); + assert_eq!(task.full_domain().samples.len(), manifest.domain_rows); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_v2_artifacts.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_v2_artifacts.rs new file mode 100644 index 000000000..dcb2eb99b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/research_v2_artifacts.rs @@ -0,0 +1,150 @@ +use std::{ + collections::{BTreeMap, HashSet}, + fs, + path::{Component, Path, PathBuf}, +}; + +use occam71_rust::{ + SEMANTIC_PROJECTION_EXCLUDED_FIELDS, SemanticTrialRecord, TrialRecord, TrialStatus, + expected_trial_keys, load_experiment_config, official_and_synthetic_tasks, semantic_projection, + sha256_hex, +}; +use serde::Deserialize; + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct Manifest { + schema_version: u32, + source_commit: String, + trial_rows: usize, + files: BTreeMap, + projection: Projection, + external: BTreeMap, +} + +#[derive(Deserialize)] +#[serde(deny_unknown_fields)] +struct Projection { + schema_version: u32, + excluded_fields: Vec, +} + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +fn research_root() -> PathBuf { + workspace_root().join("experiments/occam-generalization-v2") +} + +fn checked_relative(root: &Path, relative: &str) -> PathBuf { + let path = Path::new(relative); + assert!(!path.is_absolute(), "{relative}"); + assert!( + path.components() + .all(|component| matches!(component, Component::Normal(_))), + "{relative}" + ); + root.join(path) +} + +#[test] +fn measured_and_semantic_v2_evidence_is_complete_linked_and_nonzero() { + let root = research_root(); + let config = load_experiment_config(&root.join("config.json")).unwrap(); + let tasks = official_and_synthetic_tasks().unwrap(); + let task_ids = tasks.iter().map(|task| task.id.clone()).collect::>(); + let expected = expected_trial_keys(&task_ids, &config) + .unwrap() + .into_iter() + .collect::>(); + assert_eq!(expected.len(), 20_480); + + let measured = fs::read_to_string(root.join("raw-measured.jsonl")) + .unwrap() + .lines() + .map(|line| serde_json::from_str::(line).unwrap()) + .collect::>(); + let semantic = fs::read_to_string(root.join("semantic.jsonl")) + .unwrap() + .lines() + .map(|line| serde_json::from_str::(line).unwrap()) + .collect::>(); + assert_eq!(measured.len(), expected.len()); + assert_eq!(semantic.len(), expected.len()); + + let measured_by_key = measured + .iter() + .map(|record| (record.key.clone(), record)) + .collect::>(); + let semantic_by_key = semantic + .iter() + .map(|record| (record.key.clone(), record)) + .collect::>(); + assert_eq!( + measured_by_key.keys().cloned().collect::>(), + expected + ); + assert_eq!( + semantic_by_key.keys().cloned().collect::>(), + expected + ); + for (key, measured) in &measured_by_key { + assert!(measured.runtime_micros > 0, "{key:?}"); + assert!(measured.peak_rss_bytes > 0, "{key:?}"); + assert!(!measured.host_identifier.is_empty(), "{key:?}"); + assert!(measured.process_id > 0, "{key:?}"); + assert!(measured.started_unix_micros > 0, "{key:?}"); + assert_ne!(measured.status, TrialStatus::Timeout, "{key:?}"); + assert_eq!( + semantic_by_key[key], + &semantic_projection(measured), + "{key:?}" + ); + } + + let aggregate: serde_json::Value = + serde_json::from_str(&fs::read_to_string(root.join("aggregate.json")).unwrap()).unwrap(); + assert_eq!(aggregate["schema_version"], 2); + assert_eq!(aggregate["trial_rows"], 20_480); + assert_eq!(aggregate["group_rows"], 1_024); + let groups = aggregate["groups"].as_array().unwrap(); + assert_eq!(groups.len(), 1_024); + for group in groups { + assert_eq!(group["missing_trials"], 0); + if group["statuses"]["success"].as_u64().unwrap() > 0 { + assert!(group["median_runtime_micros"].as_f64().unwrap() > 0.0); + assert!(group["median_peak_rss_bytes"].as_f64().unwrap() > 0.0); + } + } + + let report = fs::read_to_string(root.join("report.md")).unwrap(); + assert!(report.contains("distinct learner implementations")); + assert!(report.contains("positive measurements")); + assert!(!report.contains("normalized to zero")); + + let manifest: Manifest = + serde_json::from_str(&fs::read_to_string(root.join("manifest.json")).unwrap()).unwrap(); + assert_eq!(manifest.schema_version, 2); + assert_eq!(manifest.source_commit.len(), 40); + assert_eq!(manifest.trial_rows, 20_480); + assert_eq!(manifest.projection.schema_version, 2); + assert_eq!( + manifest.projection.excluded_fields, + SEMANTIC_PROJECTION_EXCLUDED_FIELDS.map(str::to_owned) + ); + for (relative, expected_hash) in &manifest.files { + assert_eq!( + sha256_hex(&fs::read(checked_relative(&root, relative)).unwrap()), + *expected_hash, + "{relative}" + ); + } + assert_eq!( + manifest.external["independent_tool_audit_sha256"], + sha256_hex(&fs::read(root.join("tool-audit.json")).unwrap()) + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/sat_synthesis.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/sat_synthesis.rs new file mode 100644 index 000000000..7e1595e7a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/sat_synthesis.rs @@ -0,0 +1,117 @@ +use std::{fs, path::PathBuf, time::Duration}; + +use occam71_rust::{ + AttemptStatus, SynthesisCertificate, SynthesisLimits, SynthesisProblem, SynthesisStatus, + parse_dataset, parse_netlist, synthesize_minimal, verify, verify_packed, +}; + +fn fixture(name: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures") + .join(name) +} + +fn repository_file(path: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .join(path) +} + +#[test] +fn checked_in_half_adder_certificate_records_minimality_and_verification() { + let dataset_source = fs::read_to_string(fixture("half-adder.csv")).unwrap(); + let dataset = parse_dataset(&dataset_source).unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let generated = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 2, + timeout: Duration::from_secs(30), + ..SynthesisLimits::default() + }, + ) + .unwrap(); + assert_eq!(generated.status, SynthesisStatus::Sat); + assert_eq!( + generated + .attempts + .iter() + .map(|attempt| attempt.status) + .collect::>(), + [ + AttemptStatus::Unsat, + AttemptStatus::Unsat, + AttemptStatus::Sat + ] + ); + + let checked_in: SynthesisCertificate = serde_json::from_str( + &fs::read_to_string(repository_file( + "docs/synthesis/half-adder-certificate.json", + )) + .unwrap(), + ) + .unwrap(); + let checked_netlist = + fs::read_to_string(repository_file("docs/synthesis/half-adder.txt")).unwrap(); + assert_eq!(checked_in.status, SynthesisStatus::Sat); + assert_eq!(checked_in.minimal_gate_count, Some(2)); + assert_eq!(checked_in.problem_sha256, generated.problem_sha256); + assert_eq!(checked_in.netlist_sha256, generated.netlist_sha256); + assert_eq!( + checked_in.netlist.as_deref(), + Some(checked_netlist.as_str()) + ); + assert_eq!(generated.netlist.as_deref(), Some(checked_netlist.as_str())); + + let circuit = parse_netlist(&checked_netlist).unwrap(); + let scalar = verify(&circuit, &dataset).unwrap(); + let packed = verify_packed(&circuit, &dataset).unwrap(); + assert_eq!(scalar, packed); + assert_eq!(scalar.gate_count, 2); + assert_eq!(scalar.exact_matches, 4); + assert_eq!(scalar.correct_bits, 8); +} + +#[test] +fn two_bit_adder_certificate_matches_the_official_bit_order_fixture() { + let dataset = parse_dataset(&fs::read_to_string(fixture("add-n2.csv")).unwrap()).unwrap(); + let problem = SynthesisProblem::from_dataset(&dataset).unwrap(); + let problem_identity = synthesize_minimal( + &problem, + &SynthesisLimits { + max_gates: 0, + timeout: Duration::from_secs(30), + ..SynthesisLimits::default() + }, + ) + .unwrap(); + let checked_in: SynthesisCertificate = serde_json::from_str( + &fs::read_to_string(repository_file( + "docs/synthesis/two-bit-adder-certificate.json", + )) + .unwrap(), + ) + .unwrap(); + assert_eq!(checked_in.status, SynthesisStatus::Timeout); + assert_eq!(checked_in.problem_sha256, problem_identity.problem_sha256); + assert_eq!( + checked_in + .attempts + .iter() + .map(|attempt| (attempt.gate_bound, attempt.status)) + .collect::>(), + [ + (0, AttemptStatus::Unsat), + (1, AttemptStatus::Unsat), + (2, AttemptStatus::Unsat), + (3, AttemptStatus::Unsat), + (4, AttemptStatus::Unsat), + (5, AttemptStatus::Unsat), + (6, AttemptStatus::Timeout), + ] + ); + assert!(checked_in.netlist.is_none()); + assert!(checked_in.verification.is_none()); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/solution_artifacts.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/solution_artifacts.rs new file mode 100644 index 000000000..49bd82ffa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/solution_artifacts.rs @@ -0,0 +1,238 @@ +use std::{ + collections::{BTreeMap, HashSet}, + fs, + path::{Component, Path, PathBuf}, +}; + +use occam71_rust::{ + AnySolutionManifest, LearningReport, MdlLearningReport, ResearchSolutionManifest, + parse_commitment, parse_dataset, parse_netlist, parse_packed_dataset, parse_test_inputs, + sha256_hex, verify, verify_prepacked, +}; +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct RootedResearchManifest { + schema_version: u32, + protocol: String, + trial_rows: usize, + raw_matrix_sha256: String, + study_manifest_path: String, + study_manifest_sha256: String, + official_mdl_reports: BTreeMap, + limitations: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct MdlReportReference { + report_path: String, + report_sha256: String, + expression: String, + description_cost: usize, + minimum_unique: bool, + compiled_gate_count: usize, +} + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +fn solution_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("solutions/rewrite-it-in-rust") +} + +fn checked_relative(root: &Path, relative: &str) -> PathBuf { + let path = Path::new(relative); + assert!(!path.is_absolute(), "{relative}"); + assert!( + path.components() + .all(|component| matches!(component, Component::Normal(_))), + "{relative}" + ); + root.join(path) +} + +fn require_research_manifest(source: &str) -> ResearchSolutionManifest { + match AnySolutionManifest::from_json(source).unwrap() { + AnySolutionManifest::V2(manifest) => manifest, + AnySolutionManifest::V1(_) => panic!("release solution manifest must use schema 2"), + } +} + +#[test] +fn committed_solution_is_complete_hash_locked_and_perfect() { + let solution = solution_root(); + let manifest_source = fs::read_to_string(solution.join("manifest.json")).unwrap(); + let manifest = require_research_manifest(&manifest_source); + assert_eq!(manifest.schema_version, 2); + assert_eq!(manifest.solution, "rewrite-it-in-rust"); + assert_eq!(manifest.learner, "mdl-enumerator"); + assert_eq!(manifest.baseline_tag, "v0.2.0"); + assert_eq!(manifest.instances.len(), 4); + assert_eq!( + sha256_hex( + &fs::read(checked_relative( + &solution, + &manifest.optimization_report_path + )) + .unwrap() + ), + manifest.optimization_report_sha256 + ); + let rooted_research_source = fs::read(checked_relative( + &solution, + &manifest.research_manifest_path, + )) + .unwrap(); + assert_eq!( + sha256_hex(&rooted_research_source), + manifest.research_manifest_sha256 + ); + let rooted: RootedResearchManifest = serde_json::from_slice(&rooted_research_source).unwrap(); + assert_eq!(rooted.schema_version, 1); + assert_eq!( + rooted.protocol, + "16 tasks × 8 fractions × 20 seeds × 8 methods" + ); + assert_eq!(rooted.trial_rows, 20_480); + assert_eq!(rooted.raw_matrix_sha256.len(), 64); + assert_eq!(rooted.official_mdl_reports.len(), 4); + assert!( + rooted + .limitations + .iter() + .any(|claim| claim.contains("No universal learner")) + ); + assert_eq!( + sha256_hex(&fs::read(checked_relative(&solution, &rooted.study_manifest_path)).unwrap()), + rooted.study_manifest_sha256 + ); + + let expected_names = ["mystery-A", "mystery-B", "mystery-C", "mystery-D"]; + let names: Vec<_> = manifest + .instances + .iter() + .map(|instance| instance.instance.as_str()) + .collect(); + assert_eq!(names, expected_names); + assert_eq!( + names.iter().copied().collect::>().len(), + expected_names.len() + ); + + let vendor = workspace_root().join("vendor/occam-circuit/datasets"); + let has_official_data = vendor.is_dir(); + for instance in &manifest.instances { + let mdl_reference = &rooted.official_mdl_reports[&instance.instance]; + let mdl_source = fs::read(checked_relative(&solution, &mdl_reference.report_path)).unwrap(); + assert_eq!(sha256_hex(&mdl_source), mdl_reference.report_sha256); + let mdl: MdlLearningReport = serde_json::from_slice(&mdl_source).unwrap(); + assert_eq!(mdl.schema_version, 2); + assert_eq!(mdl.learner, "mdl-enumerator"); + assert_eq!(mdl.expression, mdl_reference.expression); + assert_eq!(mdl.description_cost, mdl_reference.description_cost); + assert_eq!(mdl.minimum_unique, mdl_reference.minimum_unique); + assert_eq!(mdl.gate_count, mdl_reference.compiled_gate_count); + assert_eq!(mdl.exhaustive_mismatches, 0); + assert_eq!(mdl.commitment_matches, Some(true)); + assert_eq!(mdl.prediction_sha256, instance.prediction_sha256); + + let circuit_path = checked_relative(&solution, &instance.circuit_path); + let prediction_path = checked_relative(&solution, &instance.prediction_path); + let report_path = checked_relative(&solution, &instance.report_path); + let circuit_source = fs::read_to_string(&circuit_path).unwrap(); + let prediction_source = fs::read_to_string(&prediction_path).unwrap(); + let report_source = fs::read_to_string(&report_path).unwrap(); + assert_eq!( + sha256_hex(circuit_source.as_bytes()), + instance.circuit_sha256, + "{} circuit", + instance.instance + ); + assert_eq!( + sha256_hex(prediction_source.as_bytes()), + instance.prediction_sha256, + "{} prediction", + instance.instance + ); + assert_eq!( + sha256_hex(report_source.as_bytes()), + instance.report_sha256, + "{} report", + instance.instance + ); + assert_eq!( + instance.prediction_sha256, instance.expected_commitment_sha256, + "{} commitment", + instance.instance + ); + + let report: LearningReport = serde_json::from_str(&report_source).unwrap(); + assert_eq!(report.schema_version, 1); + assert_eq!(report.instance, instance.instance); + assert_eq!(report.selected_family, instance.family); + assert_eq!(report.gate_count, instance.gate_count); + assert_eq!(report.circuit_sha256, instance.circuit_sha256); + assert_eq!(report.prediction_sha256, instance.prediction_sha256); + assert_eq!(report.commitment_matches, Some(true)); + assert_eq!(report.exhaustive_mismatches, 0); + assert_eq!(report.training_scalar, report.training_packed); + assert_eq!( + report.training_scalar.exact_matches, + report.training_scalar.samples + ); + + let circuit = parse_netlist(&circuit_source).unwrap(); + assert_eq!(circuit.gates.len(), instance.gate_count); + let prediction = parse_dataset(&prediction_source).unwrap(); + let prediction_scalar = verify(&circuit, &prediction).unwrap(); + let prediction_packed = + verify_prepacked(&circuit, &parse_packed_dataset(&prediction_source).unwrap()).unwrap(); + assert_eq!(prediction_scalar, prediction_packed); + assert_eq!(prediction_scalar.samples, instance.prediction_rows); + assert_eq!( + prediction_scalar.exact_matches, prediction_scalar.samples, + "{} predicted rows", + instance.instance + ); + + if has_official_data { + let official = vendor.join(&instance.instance); + let training_source = fs::read_to_string(official.join("train.csv")).unwrap(); + let training_scalar = + verify(&circuit, &parse_dataset(&training_source).unwrap()).unwrap(); + let training_packed = + verify_prepacked(&circuit, &parse_packed_dataset(&training_source).unwrap()) + .unwrap(); + assert_eq!(training_scalar, training_packed); + assert_eq!(training_scalar, report.training_scalar); + assert_eq!(training_scalar.samples, instance.training_rows); + + let official_inputs = + parse_test_inputs(&fs::read_to_string(official.join("test_inputs.csv")).unwrap()) + .unwrap(); + assert_eq!(official_inputs.rows.len(), prediction.samples.len()); + for (expected_input, predicted) in official_inputs.rows.iter().zip(&prediction.samples) + { + assert_eq!(expected_input, &predicted.input, "{}", instance.instance); + } + let expected_commitment = + parse_commitment(&fs::read_to_string(official.join("commitment.sha256")).unwrap()) + .unwrap(); + assert_eq!(expected_commitment, instance.prediction_sha256); + } + eprintln!( + "{}: {} gates, {} training rows, {} predictions, {} exhaustive cases", + instance.instance, + instance.gate_count, + instance.training_rows, + instance.prediction_rows, + report.exhaustive_cases + ); + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/submission_snapshot.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/submission_snapshot.rs new file mode 100644 index 000000000..28b07d5ba --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/submission_snapshot.rs @@ -0,0 +1,34 @@ +use std::{path::PathBuf, process::Command}; + +#[test] +fn standalone_submission_source_matches_production() { + let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned(); + let output = Command::new(root.join("scripts/update-occam71-submission-snapshot")) + .arg("--check") + .current_dir(&root) + .output() + .unwrap(); + assert!( + output.status.success(), + "{}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + + let manifest = root.join("challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml"); + let output = Command::new("cargo") + .args(["check", "--locked", "--manifest-path"]) + .arg(manifest) + .current_dir(&root) + .output() + .unwrap(); + assert!( + output.status.success(), + "{}{}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/synthesis_cli.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/synthesis_cli.rs new file mode 100644 index 000000000..69826ff90 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/synthesis_cli.rs @@ -0,0 +1,116 @@ +use std::{ + fs, + path::{Path, PathBuf}, + process::Command, +}; + +fn fixture(name: &str) -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures") + .join(name) +} + +fn paths(case: &str) -> (PathBuf, PathBuf) { + let prefix = + std::env::temp_dir().join(format!("occam71-synthesis-{}-{case}", std::process::id())); + (prefix.with_extension("txt"), prefix.with_extension("json")) +} + +fn synthesize( + dataset: &Path, + max_gates: &str, + timeout_seconds: &str, + output: &Path, + certificate: &Path, +) -> std::process::Output { + Command::new(env!("CARGO_BIN_EXE_occam71_rust")) + .args([ + "synthesize", + "--dataset", + dataset.to_str().unwrap(), + "--max-gates", + max_gates, + "--timeout-seconds", + timeout_seconds, + "--output", + output.to_str().unwrap(), + "--certificate", + certificate.to_str().unwrap(), + ]) + .output() + .unwrap() +} + +fn cleanup(paths: &[&Path]) { + for path in paths { + if path.exists() { + fs::remove_file(path).unwrap(); + } + } +} + +#[test] +fn writes_minimal_netlist_and_certificate() { + let (netlist, certificate) = paths("sat"); + cleanup(&[&netlist, &certificate]); + let output = synthesize( + &fixture("half-adder.csv"), + "2", + "30", + &netlist, + &certificate, + ); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + assert!(String::from_utf8_lossy(&output.stdout).contains("status: sat")); + assert!(fs::read_to_string(&netlist).unwrap().contains("OUTPUTS")); + let json: serde_json::Value = + serde_json::from_str(&fs::read_to_string(&certificate).unwrap()).unwrap(); + assert_eq!(json["status"], "sat"); + assert_eq!(json["minimal_gate_count"], 2); + cleanup(&[&netlist, &certificate]); +} + +#[test] +fn distinguishes_incomplete_bound_and_timeout() { + for (case, gates, timeout, status) in [ + ("bound", "1", "30", "no_circuit_within_bound"), + ("timeout", "2", "0", "timeout"), + ] { + let (netlist, certificate) = paths(case); + cleanup(&[&netlist, &certificate]); + let output = synthesize( + &fixture("half-adder.csv"), + gates, + timeout, + &netlist, + &certificate, + ); + assert!(output.status.success(), "{case}"); + assert!(!netlist.exists(), "{case}"); + let json: serde_json::Value = + serde_json::from_str(&fs::read_to_string(&certificate).unwrap()).unwrap(); + assert_eq!(json["status"], status, "{case}"); + cleanup(&[&netlist, &certificate]); + } +} + +#[test] +fn rejects_malformed_incomplete_dataset() { + let malformed = std::env::temp_dir().join(format!( + "occam71-synthesis-{}-malformed.csv", + std::process::id() + )); + fs::write(&malformed, "input,output\n00,0\n01,1\n").unwrap(); + let (netlist, certificate) = paths("malformed"); + cleanup(&[&netlist, &certificate]); + let output = synthesize(&malformed, "2", "30", &netlist, &certificate); + assert!(!output.status.success()); + assert!(String::from_utf8_lossy(&output.stderr).contains("complete truth table")); + assert!(!netlist.exists()); + assert!(!certificate.exists()); + cleanup(&[&malformed, &netlist, &certificate]); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/tool_audit.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/tool_audit.rs new file mode 100644 index 000000000..31a36cecc --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/tool_audit.rs @@ -0,0 +1,110 @@ +use std::{fs, path::PathBuf}; + +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct Audit { + schema_version: u32, + tools: Vec, +} + +#[derive(Debug, Deserialize)] +#[serde(deny_unknown_fields)] +struct ToolRecord { + tool: String, + version_output: String, + executable_sha256: String, + command: Vec, + input_sha256: String, + output_sha256: String, + output_normalization: String, + observed_matches: usize, + observed_total: usize, + full_domain_mismatches: Option, + full_domain_cases: Option, +} + +fn workspace_root() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .parent() + .unwrap() + .to_owned() +} + +#[test] +fn tool_audit_schema_requires_complete_provenance_and_verification() { + let schema: serde_json::Value = serde_json::from_str( + &fs::read_to_string( + workspace_root().join("experiments/occam-generalization-v2/tool-audit.schema.json"), + ) + .unwrap(), + ) + .unwrap(); + let required = schema["$defs"]["tool"]["required"].as_array().unwrap(); + for field in [ + "tool", + "version_output", + "executable_sha256", + "command", + "input_sha256", + "output_sha256", + "output_normalization", + "observed_matches", + "observed_total", + "full_domain_mismatches", + "full_domain_cases", + ] { + assert!( + required.iter().any(|value| value.as_str() == Some(field)), + "{field}" + ); + } +} + +#[test] +fn generated_audit_has_three_distinct_path_free_tool_records() { + let path = workspace_root().join("experiments/occam-generalization-v2/tool-audit.json"); + let audit: Audit = serde_json::from_str(&fs::read_to_string(path).unwrap()).unwrap(); + assert_eq!(audit.schema_version, 2); + assert_eq!(audit.tools.len(), 3); + let names = audit + .tools + .iter() + .map(|record| record.tool.as_str()) + .collect::>(); + assert_eq!( + names, + ["yosys", "yosys-abc", "espresso"].into_iter().collect() + ); + for record in audit.tools { + assert!(!record.version_output.trim().is_empty()); + assert_eq!(record.executable_sha256.len(), 64); + assert_eq!(record.input_sha256.len(), 64); + assert_eq!(record.output_sha256.len(), 64); + assert!(matches!( + record.output_normalization.as_str(), + "none" | "strip one leading ABC timestamp banner comment" + )); + if record.tool == "yosys-abc" { + assert_eq!( + record.output_normalization, + "strip one leading ABC timestamp banner comment" + ); + } else { + assert_eq!(record.output_normalization, "none"); + } + assert_eq!(record.command[0], record.tool); + assert!( + record + .command + .iter() + .all(|argument| !argument.starts_with('/')) + ); + assert_eq!(record.observed_matches, record.observed_total); + if let Some(cases) = record.full_domain_cases { + assert!(cases > 0); + assert_eq!(record.full_domain_mismatches, Some(0)); + } + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/window_extraction.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/window_extraction.rs new file mode 100644 index 000000000..8cea4bd8a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/challenge-71-occam/tests/window_extraction.rs @@ -0,0 +1,52 @@ +use std::collections::HashSet; + +use occam71_rust::{WindowConfig, extract_windows, parse_netlist}; + +#[test] +fn extracted_windows_are_convex_and_have_complete_boundaries() { + let circuit = parse_netlist(include_str!("fixtures/window-shared.txt")).unwrap(); + let windows = extract_windows( + &circuit, + WindowConfig { + min_gates: 4, + max_gates: 8, + max_inputs: 8, + max_outputs: 4, + }, + ) + .unwrap(); + + assert!(!windows.is_empty()); + let mut identities = HashSet::new(); + for window in windows { + assert!(window.is_convex(&circuit)); + assert!(window.boundary_inputs.len() <= 8); + assert!(window.boundary_outputs.len() <= 4); + assert_eq!( + window.truth_table.samples.len(), + 1 << window.boundary_inputs.len() + ); + assert_eq!(window.identity_sha256.len(), 64); + assert!(identities.insert(window.identity_sha256)); + } +} + +#[test] +fn window_extraction_is_byte_stable_and_rejects_bad_limits() { + let circuit = parse_netlist(include_str!("fixtures/window-shared.txt")).unwrap(); + let config = WindowConfig::for_tests(); + assert_eq!( + extract_windows(&circuit, config).unwrap(), + extract_windows(&circuit, config).unwrap() + ); + assert!( + extract_windows( + &circuit, + WindowConfig { + min_gates: 0, + ..config + } + ) + .is_err() + ); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/challenge-115-brief.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/challenge-115-brief.md new file mode 100644 index 000000000..88dce65a1 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/challenge-115-brief.md @@ -0,0 +1,26 @@ +# Challenge 115 Brief + +Source: https://github.com/QuantumBFS/quantum.harness/issues/115 + +## Objective + +Port one Quantum Harness challenge to Rust, using the original implementation as +the oracle and benchmark reference. + +## Local Choice + +This repo chooses #71 Occam's Circuit as the source challenge because its +verification path is discrete and bit-exact: + +- no floating-point tolerance; +- no eigensolver convergence; +- no Monte Carlo error bars; +- no GPU nondeterminism; +- clear Julia verifier reference. + +## Deliverables + +- Working Rust port reproducing reference observables. +- Benchmark table against the original Julia workflow. +- Gap list covering missing operations, performance gaps, and API friction. +- Porting report for maintainers. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/gap-report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/gap-report.md new file mode 100644 index 000000000..e7c220dd7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/gap-report.md @@ -0,0 +1,49 @@ +# Rust Port Gap Report + +## Closed Compatibility Gaps + +| Area | Finding | Resolution | +|---|---|---| +| Bit order | Dataset characters are semantic bit positions in LSB-first order, not integers to be endian-converted. | Parsers preserve character order; exhaustive arithmetic tests cover interpretation. | +| Wire identifiers | Official netlists expose arbitrary positive `wN` identifiers while evaluators benefit from dense storage. | Parser maps external identifiers to dense zero-based indices. | +| Inversion | `~` is legal on operands and outputs and must not count as a gate. | Inversion is a flag on `Operand`, separate from `Gate`. | +| Definition order | Wire operands must be defined before use. | Parser validates definition-before-use and duplicate definitions. | +| Metrics | Exact-match and bit accuracy measure different failure modes. | Rust records exact matches and correct bits separately before calculating ratios. | +| Reproducibility | The official release archive should not be copied without provenance. | Fetch script pins both release URL and SHA-256. | +| Packed evaluation | Complement operations set unused high bits in a final partial machine word. | Every accuracy operation applies an explicit valid-sample tail mask. | +| Backend trust | A fast backend could reproduce rounded accuracy while differing in counts. | Cross-check compares the complete `VerificationMetrics` and randomized tests cover all 64-bit boundaries. | +| Benchmark separation | Startup, parsing, packing, and gate evaluation answer different questions. | Rust JSON reports parse, one-time packing, and repeated evaluation independently; process results are labeled startup-inclusive. | +| Packed allocation | Nested per-column/per-wire vectors add allocation and pointer-chasing overhead. | Packed datasets and wire values use flat contiguous arenas; retained A/B evidence shows improvements outside combined MAD. | +| Repeated interpretation | Resolving enum operands inside every block repeats invariant work. | `CompiledCircuit` pre-resolves columns and inversion masks; default packed execution is 2.49–3.29× faster than the retained interpreted backend. | +| Unbounded inputs | Public parsers and evaluators could otherwise accept impractical sizes or overflow derived counts. | Checked arithmetic and explicit source, shape, gate, sample, packed-word, and generated-byte limits return distinct errors instead of panicking. | +| Differential confidence | Hand-picked fixtures cannot cover all operator/inversion/boundary combinations. | 1,000 seeded property cases plus four nightly fuzz targets cover parser and evaluator equivalence. | +| Small-circuit learning | The migration initially only verified known circuits. | An embedded SAT backend now learns complete truth tables, searches increasing gate bounds, extracts official netlists, and independently re-verifies SAT models. | + +## Open Gaps + +| Area | Current state | Next evidence | +|---|---|---| +| CSV CPU time | Direct packed ingestion retains strict two-pass validation and uses 2.4–3.7× less peak RSS, but its pure parse/pack CPU time is 4–14% slower than scalar parse plus packing in the recorded cases. | Optimize the shared scanner or add a safely validated single-pass staging design; retain the direct path for its memory and end-to-end behavior. | +| Error parity | Rust errors are more structured and stricter than the small Julia script. | Document intentional strictness and test every accepted official fixture. | +| Circuit-learning scale | Exact half-adder synthesis finishes immediately, but a 30-second exhaustive two-bit-adder run proves bounds 0–5 UNSAT and then times out while solving gate bound 6. | Add commutativity/symmetry breaking, reuse clauses incrementally across bounds, and evaluate proof logging/checking before making stronger minimality claims. | +| UNSAT evidence | Varisat returns UNSAT for tested bounds, but the certificate does not contain a DRAT or independently checkable proof trace. | Add optional proof output and a separate checker if formal minimality evidence becomes a project requirement. | +| Upstream packaging | The crate is currently a workspace member, not a published reusable library. | Decide whether the stable parser/evaluator API should be published or contributed with the #115 solution. | + +## Initial Rust Ecosystem Assessment + +This workload does not require a scientific tensor library, automatic +differentiation, an eigensolver, or a GPU runtime. Rust's standard data +structures are sufficient for the trusted scalar baseline. The language's +typed enums make unsupported gate states unrepresentable after parsing, while +structured errors provide more context than the reference script. + +Measurements answer the initial performance question: compiled `u64` packing +improves evaluator median time by 131–191× and remains 2.3–5.7× faster in the +production one-shot comparison after parsing and compilation are charged. This +required no unsafe code, Rayon, or explicit SIMD. + +The performance bottleneck consequently moves to strict dataset ingestion, +while the scientific-extension bottleneck is SAT scaling at UNSAT lower +bounds. Full methodology and limitations are in +`benchmarks/results/2026-07-28-apple-m4.md`, and bounded synthesis evidence is +in `docs/synthesis/README.md`. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/oracle-results.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/oracle-results.md new file mode 100644 index 000000000..457c0866f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/oracle-results.md @@ -0,0 +1,68 @@ +# Julia–Rust Oracle Results + +## Environment + +- Julia: `1.12.6` +- Rust: `rustc 1.95.0 (59807616e 2026-04-14)` +- Cargo: `1.95.0 (f2d3ce0bd 2026-03-21)` +- Date: 2026-07-27 + +## Results + +This generated section is derived from the locked +`tests/oracles/occam-v1.json` manifest. + + + +Official archive SHA-256: `c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b` + +| Case | Verifier | Gates | Samples | Exact matches | Correct bits | Total bits | Exact-match accuracy | Bit accuracy | +|---|---|---:|---:|---:|---:|---:|---:|---:| +| official-add-8 | Julia | 37 | 2000 | 2000 | 18000 | 18000 | 1.000000 | 1.000000 | +| official-add-8 | Rust scalar | 37 | 2000 | 2000 | 18000 | 18000 | 1.000000 | 1.000000 | +| official-add-8 | Rust packed | 37 | 2000 | 2000 | 18000 | 18000 | 1.000000 | 1.000000 | +| practice-add-n4 | Julia | 17 | 120 | 120 | 600 | 600 | 1.000000 | 1.000000 | +| practice-add-n4 | Rust scalar | 17 | 120 | 120 | 600 | 600 | 1.000000 | 1.000000 | +| practice-add-n4 | Rust packed | 17 | 120 | 120 | 600 | 600 | 1.000000 | 1.000000 | +| practice-mul-n4 | Julia | 128 | 120 | 120 | 960 | 960 | 1.000000 | 1.000000 | +| practice-mul-n4 | Rust scalar | 128 | 120 | 120 | 960 | 960 | 1.000000 | 1.000000 | +| practice-mul-n4 | Rust packed | 128 | 120 | 120 | 960 | 960 | 1.000000 | 1.000000 | + + + +The reference generators are also tested exhaustively over all 256 pairs of +four-bit integers. This checks disclosed practice semantics independently of +the sampled training rows. + +## Reproduction + +```bash +./scripts/fetch-occam-data.sh + +oracle_dir=$(mktemp -d /tmp/occam71-oracle.XXXXXX) +cargo run --quiet --release -p occam71_rust -- generate-adder \ + --bits 4 --output "$oracle_dir/practice-add-n4.txt" +cargo run --quiet --release -p occam71_rust -- generate-multiplier \ + --bits 4 --output "$oracle_dir/practice-mul-n4.txt" + +julia vendor/occam-circuit/verify.jl \ + vendor/occam-circuit/adder8.txt \ + vendor/occam-circuit/datasets/mystery-A/train.csv +julia vendor/occam-circuit/verify.jl \ + "$oracle_dir/practice-add-n4.txt" \ + vendor/occam-circuit/datasets/practice-add-n4/train.csv +julia vendor/occam-circuit/verify.jl \ + "$oracle_dir/practice-mul-n4.txt" \ + vendor/occam-circuit/datasets/practice-mul-n4/train.csv + +cargo run --quiet --release -p occam71_rust -- verify \ + --circuit "$oracle_dir/practice-add-n4.txt" \ + --dataset vendor/occam-circuit/datasets/practice-add-n4/train.csv +cargo run --quiet --release -p occam71_rust -- verify \ + --circuit "$oracle_dir/practice-mul-n4.txt" \ + --dataset vendor/occam-circuit/datasets/practice-mul-n4/train.csv +``` + +These results establish verifier-format compatibility and equality of Julia, +Rust scalar, and Rust packed semantics. Controlled performance measurements +are recorded under `benchmarks/results/`. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/port-plan.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/port-plan.md new file mode 100644 index 000000000..d5cb80a66 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/port-plan.md @@ -0,0 +1,35 @@ +# Port Plan + +## Stage 1: Oracle Compatibility + +- [x] Download and checksum-verify the #71 data package. +- [x] Run the Julia verifier on the official example, `practice-add-n4`, and + `practice-mul-n4`. +- [x] Store gate count, exact-match accuracy, and bit accuracy. +- [x] Add controlled runtime and process-level peak-memory benchmarks. + +## Stage 2: Rust Netlist Verifier + +- [x] Parse `INPUTS `. +- [x] Parse assignments of the form `w1 = XOR x1 x9`. +- [x] Support free operand and output inversion with `~`. +- [x] Parse `OUTPUTS ...`. +- [x] Evaluate each sample and compare output bitstrings. + +## Stage 3: Bit-Parallel Evaluation + +- [x] Store each input wire as packed `u64` blocks over samples. +- [x] Evaluate gates with bitwise operations and mask the final partial block. +- [x] Compare packed Rust results against scalar Rust results and Julia outputs. + +## Stage 4: Reference Circuit Generator + +- [x] Generate a ripple-carry adder netlist for practice addition. +- [x] Generate a deterministic shift-and-add multiplier for practice + multiplication. +- [x] Verify both generated netlists with Julia and Rust. + +## Stage 5: Report + +- [x] Produce Julia scalar vs Rust scalar vs Rust bit-parallel timing tables. +- [x] Start the Rust ecosystem friction and future-work gap report. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/releases/v0.5.0.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/releases/v0.5.0.md new file mode 100644 index 000000000..06286eb0c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/releases/v0.5.0.md @@ -0,0 +1,167 @@ +# v0.5.0 — Measured and Auditable Occam Research + +`v0.5.0` was prepared as a source-and-evidence-only successor to the audited +#115 Rust migration (`v0.1.0`), the complete #71 solution (`v0.2.0`), and the +original MDL research release (`v0.3.0`). Its stable #115 source and evidence +are now published in the PR #215 public snapshot. + +This document describes a local release candidate. The exact release commit is +recorded in `RELEASE.json` inside the deterministic evidence archive when the +archive is built. No `v0.5.0` tag or GitHub Release is implied by this file. + +## #71 and #115 status + +| Instance | Recovered expression | Description cost | Final gates | Full-domain mismatches | +|---|---|---:|---:|---:| +| mystery-A | `(x + y)` | 3 | 37 | 0 / 65,536 | +| mystery-B | `abs(x - y)` | 4 | 50 | 0 / 16,384 | +| mystery-C | `(x * y)` | 3 | 167 | 0 / 4,096 | +| mystery-D | `(square(x) + square(y))` | 5 | 186 | 0 / 1,024 | + +- All 6,124 hidden output rows and all 56,864 hidden output bits match. +- Every prediction SHA-256 equals the organizer commitment. +- Rust scalar, packed, compiled, Julia, ABC CEC, and exhaustive-domain checks + remain green. +- The generic MDL learner does not import a four-answer registry. + +## Completed Scheme A study + +The fixed protocol is: + +```text +16 tasks × 8 observed fractions × 20 seeds × 8 methods = 20,480 trials +fractions: 0.5%, 1%, 2%, 3%, 5%, 10%, 20%, 40% +``` + +| Outcome | Trials | +|---|---:| +| Success | 16,608 | +| No hypothesis within the declared bound | 2,912 | +| Unsupported by the declared method bound | 640 | +| Deterministic resource limit | 320 | +| Timeout | 0 | +| Unclassified error | 0 | + +Every trial runs in a fresh child process. Every measured row has a positive +runtime and peak RSS. A second complete 20,480-trial run produced a +byte-identical semantic projection while naturally allowing process identity +and performance measurements to vary. + +The automatic methods are distinct implementations: + +- legacy four-family registry; +- generic cost-ordered MDL enumeration; +- partial-PLA synthesis through checksum-pinned ABC; +- four-order reduced ordered BDD search; +- bounded SAT/CEGIS; +- seeded grammar evolution independent of the MDL engine; +- explicit zero-default memorization trie. + +The oracle expression is evaluator-only and is never exposed to an automatic +learner. + +## Prediction result + +MDL achieves 2,265/2,560 full semantic recoveries. Its per-fraction recovery +is: + +```text +104, 262, 300, 319, 320, 320, 320, 320 out of 320 +``` + +It therefore reaches 320/320 recovery at every tested observation fraction +from 5% through 40%. + +Seeded grammar evolution achieves 2,020/2,560 full recoveries and improves +from 96/320 at 0.5% observations to 300/320 at 40%, while remaining below MDL +at every fraction. + +Across 16,608 successful rows with both size measures: + +- official gate count versus held-out exact accuracy has Spearman + `ρ = -0.2023`; +- description length versus official gate count has Spearman `ρ = +0.7011`. + +The gate-count association is modest and conditional. The stronger result is +grammar alignment: short expressions in a grammar containing the target +operations extrapolate much better here than arbitrary small circuits formed +by unconstrained don't-care completion. + +This supports a restricted Occam/MDL explanation for the declared tasks, +grammar, completion rules, and search bounds. It does not establish: + +- a universal rule that smaller circuits predict better; +- a universal learner; +- noise tolerance outside the declared protocol; +- global minimality of the four final circuits; +- causal identification from these associations. + +## Independent external-tool audit + +The local audit records versions or source commits, executable SHA-256, +command arguments, input/output hashes, and Rust semantic validation: + +| Tool | Validation | +|---|---| +| Yosys 0.67 | 4/4 full-domain cases, 0 mismatches | +| Yosys-ABC 1.01 | 4/4 full-domain cases, 0 mismatches | +| CHIPS Alliance Espresso `0288253ca9459539d341bb1ada10406a74efc721` | 2/2 declared partial rows | + +ABC writes the current time in one leading BLIF comment. The audit records +that normalization and strips exactly that comment for deterministic output +hashing. The remaining BLIF logic is reparsed and checked in Rust. + +## Reproduce + +Run the complete correctness, research, Julia, fuzz, snapshot, version, and +release-package gate: + +```bash +./scripts/audit-occam-v050.sh +``` + +Re-run the measured matrix or require the committed semantic projection: + +```bash +./scripts/run-occam-experiments.sh --jobs 16 +./scripts/run-occam-experiments.sh --jobs 16 --check +``` + +Regenerate both research reports: + +```bash +./scripts/render-occam-research \ + --raw experiments/occam-generalization/raw.jsonl \ + --output experiments/occam-generalization \ + --check +./scripts/render-occam-research \ + --raw-measured experiments/occam-generalization-v2/raw-measured.jsonl \ + --semantic experiments/occam-generalization-v2/semantic.jsonl \ + --output experiments/occam-generalization-v2 \ + --check +``` + +Build a deterministic source-and-evidence archive from the current committed +head: + +```bash +./scripts/build-release-evidence target/v0.5.0-release-evidence HEAD +``` + +The archive is named +`occam-rust-port-v0.5.0-evidence.tar.gz`. It contains internal +`RELEASE.json` and `SHA256SUMS`, but no prebuilt binary, ABC source or binary, +vendor dataset, Git metadata, absolute local path, raw hostname, or secret. +The measured matrix intentionally retains its anonymized host identifier, +process ID, and timestamp; its linked semantic projection removes those +execution-specific fields. + +## Evidence entry points + +- [Measured report](../../experiments/occam-generalization-v2/report.md) +- [Measured records](../../experiments/occam-generalization-v2/raw-measured.jsonl) +- [Semantic projection](../../experiments/occam-generalization-v2/semantic.jsonl) +- [Hash manifest](../../experiments/occam-generalization-v2/manifest.json) +- [Independent tool audit](../../experiments/occam-generalization-v2/tool-audit.json) +- [Scheme A completion report](../reports/2026-07-28-occam-research-v2-completion.md) +- [Changelog](../../CHANGELOG.md) diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/README.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/README.md new file mode 100644 index 000000000..3a285ee1f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/README.md @@ -0,0 +1,92 @@ +# Bounded exact circuit synthesis + +This optional research extension turns a complete Boolean truth table into a +small verifier-compatible netlist. It is deliberately separate from the fast +verification path and does not claim to solve the full hidden-function +discovery problem from challenge #71. + +## Method + +For each gate bound, the Rust implementation builds a universal acyclic +circuit in CNF: + +- exactly one of `AND`, `OR`, `XOR`, `NAND`, `NOR`, and `XNOR` is selected per + gate; +- each gate input selects an input or earlier wire, with free inversion; +- per-row semantic variables enforce the selected truth table; +- every circuit output selects an input or wire, again with free inversion. + +The embedded [Varisat 0.2.2 solver](https://docs.rs/varisat/0.2.2/varisat/) +checks bounds in increasing order. A deterministic SAT self-reduction chooses +the first satisfiable operation and literal in a fixed order, so checked-in +netlists are reproducible rather than dependent on an arbitrary solver model. +CNF variable, clause, literal, truth-table, gate, and wall-clock limits are all +explicit. + +Input datasets must be complete, duplicate-free truth tables. Partial or noisy +training data are rejected because an exact result would otherwise be +misleading. + +## Half-adder result + +The complete two-input half-adder produced these attempts: + +| Gate bound | Result | Variables | Clauses | Literals | +| ---: | --- | ---: | ---: | ---: | +| 0 | UNSAT | 8 | 30 | 48 | +| 1 | UNSAT | 38 | 222 | 636 | +| 2 | SAT | 72 | 472 | 1,376 | + +The extracted two-gate netlist is: + +```text +INPUTS 2 +w1 = AND x1 x2 +w2 = XOR x1 x2 +OUTPUTS w2 w1 +``` + +It is reparsed and checked against all four rows by both Rust scalar and packed +backends before the SAT result is returned. The reproducibility script also +checks it with the original Julia verifier. See +[`half-adder-certificate.json`](half-adder-certificate.json) and +[`half-adder.txt`](half-adder.txt). + +The two UNSAT solver answers plus the independently verified 2-gate model +support minimality within this encoding. They are not DRAT or another +independently checkable formal UNSAT proof; no proof trace is emitted. + +## Two-bit adder boundary experiment + +The four-input, three-output exhaustive two-bit addition table was run with +`--max-gates 7 --timeout-seconds 30`. Bounds 0 through 5 returned UNSAT. The +wall-clock budget expired while solving bound 6, so bound 7 was not attempted +and no netlist was claimed. This honest bounded result is recorded in +[`two-bit-adder-certificate.json`](two-bit-adder-certificate.json). + +This experiment identifies the next scaling bottleneck: proving absence at +small bounds is much harder than verifying a known seven-gate ripple-carry +adder. Useful next steps are symmetry breaking, incremental bound encoding, and +optional proof logging/checking. + +## Usage + +```bash +cargo run --release -p occam71_rust -- synthesize \ + --dataset challenge-71-occam/tests/fixtures/half-adder.csv \ + --max-gates 2 \ + --timeout-seconds 30 \ + --output /tmp/half-adder.txt \ + --certificate /tmp/half-adder-certificate.json +``` + +Regenerate the half-adder model and cross-check the checked-in evidence: + +```bash +./scripts/verify-synthesis-evidence.sh +``` + +The timeout returns control at the configured deadline by abandoning the +in-process worker. Rust does not forcibly cancel that worker in a long-lived +embedding; command-line processes exit immediately after writing the timeout +certificate. diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder-certificate.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder-certificate.json new file mode 100644 index 000000000..39e32e7fc --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder-certificate.json @@ -0,0 +1,49 @@ +{ + "schema_version": 1, + "solver": "varisat 0.2.2", + "encoding": "universal-dag-cnf-v1", + "status": "sat", + "status_detail": "bounds 0 through 1 were UNSAT and bound 2 was SAT", + "problem_sha256": "c5e7785b4f0f87eb9a7be322ff0bfeab73e2537767144744ed9d93ebd69f9cb6", + "input_width": 2, + "output_width": 2, + "truth_table_rows": 4, + "maximum_gate_bound": 2, + "timeout_ms": 30000, + "attempts": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 8, + "clauses": 30, + "literals": 48, + "elapsed_ms": 0 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 38, + "clauses": 222, + "literals": 636, + "elapsed_ms": 0 + }, + { + "gate_bound": 2, + "status": "sat", + "variables": 72, + "clauses": 472, + "literals": 1376, + "elapsed_ms": 0 + } + ], + "minimal_gate_count": 2, + "netlist_sha256": "8b957ea66b8b7bec9211e6806877ea3e5679670e03794fc8eddbd3c1c4cc2273", + "netlist": "INPUTS 2\nw1 = AND x1 x2\nw2 = XOR x1 x2\nOUTPUTS w2 w1\n", + "verification": { + "reparsed_netlist": true, + "scalar_exact_matches": 4, + "scalar_correct_bits": 8, + "packed_exact_matches": 4, + "packed_correct_bits": 8 + } +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder.txt b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder.txt new file mode 100644 index 000000000..5fa333a43 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/half-adder.txt @@ -0,0 +1,4 @@ +INPUTS 2 +w1 = AND x1 x2 +w2 = XOR x1 x2 +OUTPUTS w2 w1 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/two-bit-adder-certificate.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/two-bit-adder-certificate.json new file mode 100644 index 000000000..b5af64104 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/docs/synthesis/two-bit-adder-certificate.json @@ -0,0 +1,75 @@ +{ + "schema_version": 1, + "solver": "varisat 0.2.2", + "encoding": "universal-dag-cnf-v1", + "status": "timeout", + "status_detail": "wall-clock timeout reached while solving gate bound 6; no larger bound was attempted", + "problem_sha256": "1c8ac8323a011550e5283268ec3bd4bb7c9fdd0f875b4d7fb2aacaebaa0c637b", + "input_width": 4, + "output_width": 3, + "truth_table_rows": 16, + "maximum_gate_bound": 7, + "timeout_ms": 30000, + "attempts": [ + { + "gate_bound": 0, + "status": "unsat", + "variables": 24, + "clauses": 279, + "literals": 384, + "elapsed_ms": 0 + }, + { + "gate_bound": 1, + "status": "unsat", + "variables": 100, + "clauses": 1140, + "literals": 2896, + "elapsed_ms": 0 + }, + { + "gate_bound": 2, + "status": "unsat", + "variables": 180, + "clauses": 2175, + "literals": 5888, + "elapsed_ms": 0 + }, + { + "gate_bound": 3, + "status": "unsat", + "variables": 264, + "clauses": 3392, + "literals": 9376, + "elapsed_ms": 6 + }, + { + "gate_bound": 4, + "status": "unsat", + "variables": 352, + "clauses": 4799, + "literals": 13376, + "elapsed_ms": 587 + }, + { + "gate_bound": 5, + "status": "unsat", + "variables": 444, + "clauses": 6404, + "literals": 17904, + "elapsed_ms": 25463 + }, + { + "gate_bound": 6, + "status": "timeout", + "variables": 540, + "clauses": 8215, + "literals": 22976, + "elapsed_ms": 3946 + } + ], + "minimal_gate_count": null, + "netlist_sha256": null, + "netlist": null, + "verification": null +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/experiments/occam-generalization/tasks.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/experiments/occam-generalization/tasks.json new file mode 100644 index 000000000..8d81289db --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/experiments/occam-generalization/tasks.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "tasks": [ + {"id":"mystery-A","class":"official","operand_bits":8,"output_bits":9,"oracle":"(x + y)"}, + {"id":"mystery-B","class":"official","operand_bits":7,"output_bits":7,"oracle":"abs(x - y)"}, + {"id":"mystery-C","class":"official","operand_bits":6,"output_bits":12,"oracle":"(x * y)"}, + {"id":"mystery-D","class":"official","operand_bits":5,"output_bits":11,"oracle":"(square(x) + square(y))"}, + {"id":"xor","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x XOR y)"}, + {"id":"and","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x AND y)"}, + {"id":"or","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(x OR y)"}, + {"id":"min","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"min(x, y)"}, + {"id":"max","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"max(x, y)"}, + {"id":"square-plus-y","class":"synthetic","operand_bits":4,"output_bits":8,"oracle":"(square(x) + y)"}, + {"id":"add-xor-x","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"((x + y) XOR x)"}, + {"id":"abs-plus-one","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"(abs(x - y) + 1)"}, + {"id":"add-one","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"((x + y) + 1)"}, + {"id":"multiply-plus-x","class":"synthetic","operand_bits":4,"output_bits":8,"oracle":"((x * y) + x)"}, + {"id":"shift-plus-y","class":"synthetic","operand_bits":4,"output_bits":5,"oracle":"(shift_left(x, 1) + y)"}, + {"id":"range","class":"synthetic","operand_bits":4,"output_bits":4,"oracle":"(max(x, y) - min(x, y))"} + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.lock b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.lock new file mode 100644 index 000000000..be5a2f765 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.lock @@ -0,0 +1,789 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cc" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clap" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "leb128" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9fd2f41a1cba099f79a0b6b6c35656cf7c03351a7bae8ff0f28f25270f929d2" +dependencies = [ + "arbitrary", + "cc", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "occam71-fuzz" +version = "0.0.0" +dependencies = [ + "libfuzzer-sys", + "occam71_rust", +] + +[[package]] +name = "occam71_rust" +version = "0.5.0" +dependencies = [ + "clap", + "libc", + "rand", + "rand_chacha", + "serde", + "serde_json", + "sha2", + "thiserror 2.0.19", + "varisat", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "partial_ref" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f728bc9b1479656e40cba507034904a8c44027c0efdbbaf6a4bdc5f2d3a910c" +dependencies = [ + "partial_ref_derive", +] + +[[package]] +name = "partial_ref_derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e1d2cb5b898b5a5342e994e0d0c367dbfe69cbf717cd307045ec9fb057581" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa 1.0.18", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl 2.0.19", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "varisat" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe609851d1e9196674ac295f656bd8601200a1077343d22b345013497807caf" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "leb128", + "log", + "ordered-float", + "partial_ref", + "rustc-hash", + "serde", + "thiserror 1.0.69", + "varisat-checker", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-macros", + "varisat-internal-proof", + "vec_mut_scan", +] + +[[package]] +name = "varisat-checker" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135c977c5913ed6e98f6b81b8e4d322211303b7d40dae773caef7ad1de6c763b" +dependencies = [ + "anyhow", + "log", + "partial_ref", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "varisat-dimacs", + "varisat-formula", + "varisat-internal-proof", +] + +[[package]] +name = "varisat-dimacs" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1dee4e21be1f04c0a939f7ae710cced47233a578de08a1b3c7d50848402636" +dependencies = [ + "anyhow", + "itoa 0.4.8", + "thiserror 1.0.69", + "varisat-formula", +] + +[[package]] +name = "varisat-formula" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395c5543b9bfd9076d6d3af49d6c34a4b91b0b355998c0a5ec6ed7265d364520" + +[[package]] +name = "varisat-internal-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "602ece773543d066aa7848455486c6c0422a3f214da7a2b899100f3c4f12408d" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "varisat-internal-proof" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6163bb7bc9018af077b76d64f976803d141c36a27d640f1437dddc4fd527d207" +dependencies = [ + "anyhow", + "varisat-formula", +] + +[[package]] +name = "vec_mut_scan" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ed610a8d5e63d9c0e31300e8fdb55104c5f21e422743a9dc74848fa8317fd2" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zerocopy" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.toml b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.toml new file mode 100644 index 000000000..adb1f6abb --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/Cargo.toml @@ -0,0 +1,64 @@ +[package] +name = "occam71-fuzz" +version = "0.0.0" +publish = false +edition = "2024" + +[package.metadata] +cargo-fuzz = true + +[dependencies] +libfuzzer-sys = "0.4" +occam71_rust = { path = "../challenge-71-occam" } + +[workspace] +members = ["."] + +[[bin]] +name = "dataset" +path = "fuzz_targets/dataset.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "packed_dataset" +path = "fuzz_targets/packed_dataset.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "netlist" +path = "fuzz_targets/netlist.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "parse_evaluate" +path = "fuzz_targets/parse_evaluate.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "test_inputs" +path = "fuzz_targets/test_inputs.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "learner" +path = "fuzz_targets/learner.rs" +test = false +doc = false +bench = false + +[[bin]] +name = "mapped_blif" +path = "fuzz_targets/mapped_blif.rs" +test = false +doc = false +bench = false diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/invalid-fields b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/invalid-fields new file mode 100644 index 000000000..6738e52a4 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/invalid-fields @@ -0,0 +1,2 @@ +input,output +0,1,0 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/valid-basic b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/valid-basic new file mode 100644 index 000000000..6e0661ca5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/dataset/valid-basic @@ -0,0 +1,5 @@ +input,output +00,0 +01,1 +10,1 +11,0 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/all-ops-inversion b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/all-ops-inversion new file mode 100644 index 000000000..c5d19d2d5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/all-ops-inversion @@ -0,0 +1,8 @@ +INPUTS 2 +w1 = AND ~x1 x2 +w2 = OR w1 x1 +w3 = XOR w2 ~x2 +w4 = NAND w3 x1 +w5 = NOR w4 x2 +w6 = XNOR ~w5 x1 +OUTPUTS ~w6 x2 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/invalid-forward-wire b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/invalid-forward-wire new file mode 100644 index 000000000..57f7f9117 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/netlist/invalid-forward-wire @@ -0,0 +1,3 @@ +INPUTS 1 +w1 = XOR w2 x1 +OUTPUTS w1 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/invalid-width b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/invalid-width new file mode 100644 index 000000000..bff3da9e2 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/invalid-width @@ -0,0 +1,3 @@ +input,output +0,1 +00,0 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/valid-boundary-small b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/valid-boundary-small new file mode 100644 index 000000000..a500153d7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/packed_dataset/valid-boundary-small @@ -0,0 +1,6 @@ +input,output +00,0 +01,1 +10,1 +11,0 +00,0 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-inverted b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-inverted new file mode 100644 index 000000000..5c8e0f167 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-inverted @@ -0,0 +1,10 @@ +INPUTS 2 +w1 = NAND x1 x2 +OUTPUTS ~w1 x2 + +---DATA--- +input,output +00,00 +01,01 +10,00 +11,11 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-xor b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-xor new file mode 100644 index 000000000..57ed84920 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/corpus/parse_evaluate/valid-xor @@ -0,0 +1,10 @@ +INPUTS 2 +w1 = XOR x1 x2 +OUTPUTS w1 + +---DATA--- +input,output +00,0 +01,1 +10,1 +11,0 diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/dataset.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/dataset.rs new file mode 100644 index 000000000..375ac238f --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/dataset.rs @@ -0,0 +1,18 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::parse_dataset; + +fuzz_target!(|data: &[u8]| { + if let Ok(source) = std::str::from_utf8(data) + && let Ok(dataset) = parse_dataset(source) + { + assert!(!dataset.samples.is_empty()); + assert!(dataset.input_width > 0); + assert!(dataset.output_width > 0); + for sample in dataset.samples { + assert_eq!(sample.input.len(), dataset.input_width); + assert_eq!(sample.expected.len(), dataset.output_width); + } + } +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/learner.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/learner.rs new file mode 100644 index 000000000..cfe901235 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/learner.rs @@ -0,0 +1,35 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::{DEFAULT_LIMITS, LearnRequest, learn_instance}; + +fuzz_target!(|data: &[u8]| { + let mut parts = data.splitn(3, |byte| *byte == 0); + let training = parts.next().and_then(|part| std::str::from_utf8(part).ok()); + let test_inputs = parts.next().and_then(|part| std::str::from_utf8(part).ok()); + let commitment = parts.next().and_then(|part| std::str::from_utf8(part).ok()); + let (Some(training_source), Some(test_inputs_source)) = (training, test_inputs) else { + return; + }; + + let limits = occam71_rust::ResourceLimits { + max_source_bytes: 16_384, + max_inputs: 16, + max_gates: 10_000, + max_outputs: 16, + max_samples: 256, + max_input_width: 16, + max_output_width: 16, + max_dataset_bits: 65_536, + max_packed_words: 8_192, + max_generated_bytes: 65_536, + ..DEFAULT_LIMITS + }; + let _ = learn_instance(LearnRequest { + instance: "fuzz", + training_source, + test_inputs_source, + commitment_source: commitment.filter(|source| !source.is_empty()), + limits: &limits, + }); +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/mapped_blif.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/mapped_blif.rs new file mode 100644 index 000000000..cf6f075bf --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/mapped_blif.rs @@ -0,0 +1,19 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::{parse_mapped_blif, parse_netlist}; + +fuzz_target!(|data: &[u8]| { + if data.len() > 1024 * 1024 { + return; + } + let Ok(source) = std::str::from_utf8(data) else { + return; + }; + if let Ok(mapped) = parse_mapped_blif(source) + && let Ok(netlist) = mapped.into_official_netlist() + { + let reparsed = parse_netlist(&netlist).expect("mapped importer emitted invalid netlist"); + assert!(!reparsed.outputs.is_empty()); + } +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/netlist.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/netlist.rs new file mode 100644 index 000000000..f9fe5fd1b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/netlist.rs @@ -0,0 +1,15 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::{CompiledCircuit, parse_netlist}; + +fuzz_target!(|data: &[u8]| { + if let Ok(source) = std::str::from_utf8(data) + && let Ok(circuit) = parse_netlist(source) + { + assert_eq!(circuit.wire_count, circuit.gates.len()); + assert!(circuit.input_count > 0); + assert!(!circuit.outputs.is_empty()); + CompiledCircuit::new(&circuit).unwrap(); + } +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/packed_dataset.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/packed_dataset.rs new file mode 100644 index 000000000..5c18ecffa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/packed_dataset.rs @@ -0,0 +1,24 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::{pack_dataset, parse_dataset, parse_packed_dataset}; + +fuzz_target!(|data: &[u8]| { + let direct = parse_packed_dataset(data); + if let Ok(source) = std::str::from_utf8(data) { + let scalar = parse_dataset(source); + match (scalar, direct) { + (Ok(scalar), Ok(direct)) => { + assert_eq!(pack_dataset(&scalar).unwrap(), direct); + } + (Err(scalar), Err(direct)) => { + assert_eq!(scalar.to_string(), direct.to_string()); + } + (scalar, direct) => { + panic!("parser outcome mismatch: scalar={scalar:?}, direct={direct:?}"); + } + } + } else { + assert!(direct.is_err(), "non-UTF-8 dataset was accepted"); + } +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/parse_evaluate.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/parse_evaluate.rs new file mode 100644 index 000000000..2c62f7f5b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/parse_evaluate.rs @@ -0,0 +1,39 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::{ + CompiledCircuit, parse_dataset, parse_netlist, parse_packed_dataset, verify, + verify_compiled_prepacked, verify_prepacked_interpreted, +}; + +const SEPARATOR: &[u8] = b"\n---DATA---\n"; + +fuzz_target!(|data: &[u8]| { + let Some(separator) = data + .windows(SEPARATOR.len()) + .position(|window| window == SEPARATOR) + else { + return; + }; + let circuit = std::str::from_utf8(&data[..separator]); + let dataset = std::str::from_utf8(&data[separator + SEPARATOR.len()..]); + let (Ok(circuit_source), Ok(dataset_source)) = (circuit, dataset) else { + return; + }; + let (Ok(circuit), Ok(dataset), Ok(packed)) = ( + parse_netlist(circuit_source), + parse_dataset(dataset_source), + parse_packed_dataset(dataset_source), + ) else { + return; + }; + if circuit.input_count != dataset.input_width || circuit.outputs.len() != dataset.output_width { + return; + } + let scalar = verify(&circuit, &dataset).unwrap(); + let interpreted = verify_prepacked_interpreted(&circuit, &packed).unwrap(); + let compiled = CompiledCircuit::new(&circuit).unwrap(); + let compiled = verify_compiled_prepacked(&compiled, &packed).unwrap(); + assert_eq!(scalar, interpreted); + assert_eq!(scalar, compiled); +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/test_inputs.rs b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/test_inputs.rs new file mode 100644 index 000000000..c18a9e991 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/fuzz/fuzz_targets/test_inputs.rs @@ -0,0 +1,10 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use occam71_rust::parse_test_inputs; + +fuzz_target!(|data: &[u8]| { + if let Ok(source) = std::str::from_utf8(data) { + let _ = parse_test_inputs(source); + } +}); diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-external-logic-tools.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-external-logic-tools.sh new file mode 100755 index 000000000..679a90674 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-external-logic-tools.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +output="$repo_root/target/tool-audit.json" + +while (($#)); do + case "$1" in + --output) output=$2; shift 2 ;; + *) echo "unknown argument: $1" >&2; exit 2 ;; + esac +done + +yosys=$(command -v yosys || true) +yosys_abc=$(command -v yosys-abc || true) +espresso=$(command -v espresso || true) + +for entry in "yosys:$yosys" "yosys-abc:$yosys_abc" "espresso:$espresso"; do + name=${entry%%:*} + executable=${entry#*:} + if [[ -z "$executable" || ! -x "$executable" ]]; then + echo "$name is not installed or executable" >&2 + exit 1 + fi +done + +cargo run --quiet \ + --manifest-path "$repo_root/Cargo.toml" \ + -p occam71_rust \ + --bin tool_audit \ + -- \ + --yosys "$yosys" \ + --yosys-abc "$yosys_abc" \ + --espresso "$espresso" \ + --espresso-source-commit 0288253ca9459539d341bb1ada10406a74efc721 \ + --output "$output" + +echo "Independent Yosys, Yosys ABC, and Espresso audit written to $output" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v030.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v030.sh new file mode 100755 index 000000000..744aac2a7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v030.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +echo "[1/9] source hygiene" +git diff --check +cargo fmt --all --check +cargo clippy --workspace --all-targets -- -D warnings + +echo "[2/9] debug and release test suites" +cargo test --workspace +cargo test --workspace --release + +echo "[3/9] fuzz target compilation" +if command -v rustup >/dev/null 2>&1 && + rustup toolchain list | grep -q '^nightly'; then + cargo +nightly fuzz check --fuzz-dir fuzz +else + echo "nightly rustup toolchain unavailable; compiling every fuzz binary with stable Cargo" + cargo check --manifest-path fuzz/Cargo.toml --bins +fi + +echo "[4/9] pinned external inputs" +./scripts/fetch-occam-data.sh +./scripts/fetch-abc.sh + +echo "[5/9] complete solution regeneration" +./scripts/solve-occam71.sh --check + +echo "[6/9] independent public snapshot" +./scripts/update-occam71-submission-snapshot --check +challenge-71-occam/solutions/rewrite-it-in-rust/search/run-all.sh --check + +echo "[7/9] independent Julia and evidence verification" +julia --startup-file=no scripts/verify-occam71.jl +./scripts/verify-oracles.sh +./scripts/verify-synthesis-evidence.sh + +echo "[8/9] immutable v0.3 and measured v2 JSON assertions" +node --input-type=module <<'NODE' +import crypto from "node:crypto"; +import fs from "node:fs"; + +const readJson = (path) => JSON.parse(fs.readFileSync(path, "utf8")); +const hash = (path) => + crypto.createHash("sha256").update(fs.readFileSync(path)).digest("hex"); +const solution = "challenge-71-occam/solutions/rewrite-it-in-rust"; +const manifest = readJson(`${solution}/manifest.json`); +if ( + manifest.schema_version !== 2 || + manifest.learner !== "mdl-enumerator" || + manifest.baseline_tag !== "v0.2.0" +) throw new Error("solution manifest is not the v0.3.0 research schema"); +if (manifest.instances.length !== 4) throw new Error("solution has wrong instance count"); +const counts = Object.fromEntries( + manifest.instances.map((instance) => [instance.instance, instance.gate_count]), +); +if (JSON.stringify(counts) !== JSON.stringify({ + "mystery-A": 37, + "mystery-B": 50, + "mystery-C": 167, + "mystery-D": 186, +})) throw new Error(`unexpected optimized gate counts: ${JSON.stringify(counts)}`); +for (const instance of manifest.instances) { + if (instance.prediction_sha256 !== instance.expected_commitment_sha256) { + throw new Error(`${instance.instance} commitment changed`); + } +} +if ( + hash(`${solution}/${manifest.optimization_report_path}`) !== + manifest.optimization_report_sha256 || + hash(`${solution}/${manifest.research_manifest_path}`) !== + manifest.research_manifest_sha256 +) throw new Error("transitive solution hashes do not match"); + +const rooted = readJson(`${solution}/research-manifest.json`); +if (rooted.trial_rows !== 20_480) throw new Error("wrong rooted trial count"); +const expressions = Object.fromEntries( + Object.entries(rooted.official_mdl_reports).map(([key, value]) => [ + key, + value.expression, + ]), +); +if (JSON.stringify(expressions) !== JSON.stringify({ + "mystery-A": "(x + y)", + "mystery-B": "abs(x - y)", + "mystery-C": "(x * y)", + "mystery-D": "(square(x) + square(y))", +})) throw new Error("official MDL recovery changed"); + +const aggregate = readJson("experiments/occam-generalization/aggregate.json"); +if (aggregate.trial_rows !== 20_480 || aggregate.group_rows !== 1_024) { + throw new Error("research matrix is incomplete"); +} +if (aggregate.groups.some((group) => group.missing_trials !== 0)) { + throw new Error("research matrix has missing trials"); +} +if (aggregate.correlations.paired_trials !== 8_380) { + throw new Error("paired correlation population changed"); +} +for (const figure of [ + "gates-vs-accuracy.svg", + "fraction-vs-recovery.svg", + "description-vs-gates.svg", +]) { + const path = `experiments/occam-generalization/figures/${figure}`; + const expected = readJson("experiments/occam-generalization/manifest.json") + .files[`figures/${figure}`]; + if (hash(path) !== expected) throw new Error(`${figure} hash mismatch`); +} +const lock = readJson("tools/abc/LOCK.json"); +if (lock.commit !== "e76768b9d34f9dc67cb6608efecd55db271ff849") { + throw new Error("ABC pin changed"); +} + +const v2root = "experiments/occam-generalization-v2"; +const v2manifest = readJson(`${v2root}/manifest.json`); +if (v2manifest.schema_version !== 2 || v2manifest.trial_rows !== 20_480) { + throw new Error("measured v2 research manifest is incomplete"); +} +for (const [relative, expected] of Object.entries(v2manifest.files)) { + if (hash(`${v2root}/${relative}`) !== expected) { + throw new Error(`v2 research hash mismatch: ${relative}`); + } +} +const measured = fs.readFileSync(`${v2root}/raw-measured.jsonl`, "utf8") + .trimEnd().split("\n").map(JSON.parse); +const semantic = fs.readFileSync(`${v2root}/semantic.jsonl`, "utf8") + .trimEnd().split("\n").map(JSON.parse); +if (measured.length !== 20_480 || semantic.length !== measured.length) { + throw new Error("measured and semantic v2 row counts differ"); +} +if (measured.some((row) => + row.runtime_micros <= 0 || + row.peak_rss_bytes <= 0 || + !row.host_identifier || + row.process_id <= 0 || + row.started_unix_micros <= 0 +)) throw new Error("v2 measured rows contain placeholder process measurements"); +const measuredKeys = new Set(measured.map((row) => JSON.stringify(row.key))); +const semanticKeys = new Set(semantic.map((row) => JSON.stringify(row.key))); +if (measuredKeys.size !== 20_480 || semanticKeys.size !== 20_480) { + throw new Error("v2 trial keys are missing or duplicated"); +} +for (const key of measuredKeys) { + if (!semanticKeys.has(key)) throw new Error(`v2 semantic row missing: ${key}`); +} +const v2aggregate = readJson(`${v2root}/aggregate.json`); +if ( + v2aggregate.schema_version !== 2 || + v2aggregate.trial_rows !== 20_480 || + v2aggregate.group_rows !== 1_024 || + v2aggregate.groups.some((group) => group.missing_trials !== 0) +) throw new Error("v2 aggregate is incomplete"); +for (const group of v2aggregate.groups) { + if ( + group.statuses.success > 0 && + (!(group.median_runtime_micros > 0) || !(group.median_peak_rss_bytes > 0)) + ) throw new Error("v2 successful aggregate has a zero measurement"); +} +NODE + +echo "[9/9] secret and scope scan" +secret_pattern='(gho[_]|github[_]pat[_]|BEGIN (RSA|OPENSSH|EC) PRIVATE K[E]Y|AWS[_]SECRET_ACCESS_KEY)' +if rg -n --hidden \ + "$secret_pattern" \ + . \ + -g '!target/**' \ + -g '!challenge-71-occam/solutions/rewrite-it-in-rust/search/target/**' \ + -g '!docs/superpowers/plans/**' \ + -g '!.git/**'; then + echo "possible secret material found" >&2 + exit 1 +fi + +echo "Immutable Occam v0.3.0 and measured v2 local audits passed." diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v050.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v050.sh new file mode 100755 index 000000000..f71669582 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/audit-occam-v050.sh @@ -0,0 +1,230 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +expected_version=0.5.0 +expected_tag="v$expected_version" +immutable_v030=dc4ffedc1a9807144f9bafa560582dad17e1763f +archive_name="occam-rust-port-$expected_tag-evidence.tar.gz" +archive_prefix="occam-rust-port-$expected_tag/" +stable_output="$repo_root/target/$expected_tag-release-evidence" + +fail() { + echo "v0.5.0 audit failed: $*" >&2 + exit 1 +} + +require_equal() { + local label=$1 + local actual=$2 + local expected=$3 + if [[ "$actual" != "$expected" ]]; then + fail "$label: expected '$expected', got '$actual'" + fi +} + +lock_package_version() { + local lockfile=$1 + awk ' + $0 == "name = \"occam71_rust\"" { in_package = 1; next } + in_package && /^version = / { + split($0, fields, "\"") + print fields[2] + exit + } + ' "$lockfile" +} + +echo "[1/5] main, privacy, immutable baseline, and version gates" +require_equal "current branch" "$(git branch --show-current)" main +if [[ -n "$(git status --porcelain)" ]]; then + git status --short >&2 + fail "worktree must be clean" +fi +require_equal \ + "v0.3.0 peeled commit" \ + "$(git rev-parse 'v0.3.0^{}')" \ + "$immutable_v030" +require_equal "origin/main" "$(git rev-parse origin/main)" "$immutable_v030" +if [[ -n "$(git tag --list "$expected_tag")" ]]; then + fail "$expected_tag must remain uncreated during local-candidate audit" +fi +require_equal \ + "GitHub repository visibility" \ + "$(gh repo view --json visibility --jq .visibility)" \ + PRIVATE + +metadata_version=$( + cargo metadata --locked --no-deps --format-version 1 | + node -e ' + let source = ""; + process.stdin.on("data", (chunk) => source += chunk); + process.stdin.on("end", () => { + const packageRecord = JSON.parse(source).packages + .find((candidate) => candidate.name === "occam71_rust"); + if (!packageRecord) process.exit(2); + process.stdout.write(packageRecord.version); + }); + ' +) +manifest_version=$( + awk -F'"' '/^version = / { print $2; exit }' \ + challenge-71-occam/Cargo.toml +) +snapshot_version=$( + awk -F'"' '/^version = / { print $2; exit }' \ + challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.toml +) +require_equal "Cargo metadata version" "$metadata_version" "$expected_version" +require_equal "package manifest version" "$manifest_version" "$expected_version" +require_equal "snapshot manifest version" "$snapshot_version" "$expected_version" +for lockfile in \ + Cargo.lock \ + fuzz/Cargo.lock \ + challenge-71-occam/solutions/rewrite-it-in-rust/search/Cargo.lock +do + require_equal \ + "$lockfile package version" \ + "$(lock_package_version "$lockfile")" \ + "$expected_version" +done +require_equal \ + "CLI version" \ + "$(cargo run --quiet --locked -p occam71_rust --bin occam71_rust -- --version)" \ + "occam71-rust $expected_version" +rg -q '^## \[0\.5\.0\] - 2026-07-28$' CHANGELOG.md || + fail "CHANGELOG.md lacks the exact 0.5.0 release heading" +rg -q '^# v0\.5\.0 — Measured and Auditable Occam Research$' \ + docs/releases/v0.5.0.md || + fail "v0.5.0 release notes have the wrong title" + +echo "[2/5] complete correctness, research, Julia, fuzz, and secret audit" +./scripts/audit-occam-v030.sh +if [[ -n "$(git status --porcelain)" ]]; then + git status --short >&2 + fail "complete prior audit changed tracked files" +fi + +echo "[3/5] byte-reproducible exact-commit release archive" +first_output=$(mktemp -d "${TMPDIR:-/tmp}/occam-v050-first.XXXXXX") +second_output=$(mktemp -d "${TMPDIR:-/tmp}/occam-v050-second.XXXXXX") +trap 'rm -rf "$first_output" "$second_output"' EXIT HUP INT TERM +commit=$(git rev-parse HEAD) +./scripts/build-release-evidence "$first_output" "$commit" +./scripts/build-release-evidence "$second_output" "$commit" +cmp \ + "$first_output/$archive_name" \ + "$second_output/$archive_name" +cmp \ + "$first_output/$archive_name.sha256" \ + "$second_output/$archive_name.sha256" +( + cd "$first_output" + shasum -a 256 -c "$archive_name.sha256" +) + +echo "[4/5] archive metadata, checksums, allowlist, and safety" +members="$first_output/members.txt" +tar -tzf "$first_output/$archive_name" >"$members" +awk -v prefix="$archive_prefix" ' + index($0, prefix) != 1 { + print "archive member has wrong prefix: " $0 > "/dev/stderr" + invalid = 1 + } + END { exit invalid } +' "$members" +if rg -n '(^|/)\.\.(/|$)|(^/)' "$members"; then + fail "archive contains an absolute or parent-traversal path" +fi +if rg -n '/(\.git|target|vendor)(/|$)' "$members"; then + fail "archive contains a forbidden repository or generated directory" +fi +if rg -n '\.(a|o|so|dylib|dll|exe)(/)?$' "$members"; then + fail "archive contains a prebuilt binary or object" +fi + +extraction="$first_output/extracted" +mkdir -p "$extraction" +tar -xzf "$first_output/$archive_name" -C "$extraction" +evidence_root="$extraction/${archive_prefix%/}" +release_json="$evidence_root/RELEASE.json" +node - "$release_json" "$commit" <<'NODE' +import fs from "node:fs"; + +const [releasePath, expectedCommit] = process.argv.slice(2); +const release = JSON.parse(fs.readFileSync(releasePath, "utf8")); +const expectedProtocols = [ + "occam-generalization-v1-immutable", + "occam-generalization-v2-measured-semantic", +]; +if ( + release.schema_version !== 2 || + release.version !== "v0.5.0" || + release.package_version !== "0.5.0" || + release.commit !== expectedCommit || + JSON.stringify(release.evidence_protocols) !== JSON.stringify(expectedProtocols) || + release.contains_prebuilt_binaries !== false || + release.contains_abc_source_or_binary !== false || + release.contains_vendor_dataset !== false +) { + throw new Error(`invalid RELEASE.json: ${JSON.stringify(release)}`); +} +NODE + +( + cd "$evidence_root" + shasum -a 256 -c SHA256SUMS >/dev/null + find . -type f \ + ! -name RELEASE.json \ + ! -name SHA256SUMS \ + -print | + sed 's#^\./##' | + sort >"$first_output/archive-files.txt" + cut -c67- SHA256SUMS | + sort >"$first_output/checksummed-files.txt" +) +cmp "$first_output/archive-files.txt" "$first_output/checksummed-files.txt" + +while IFS= read -r executable; do + if [[ "$(head -c 2 "$executable")" != '#!' ]]; then + fail "archive contains a non-script executable: $executable" + fi +done < <(find "$evidence_root" -type f -perm -111 -print) + +if rg -n --hidden \ + '(gho[_]|github[_]pat[_]|BEGIN (RSA|OPENSSH|EC) PRIVATE K[E]Y|AWS[_]SECRET_ACCESS_KEY)' \ + "$evidence_root"; then + fail "archive contains possible secret material" +fi +if rg -n -F "$repo_root" "$evidence_root"; then + fail "archive contains the local absolute repository path" +fi +raw_hostname=$(hostname) +if [[ -n "$raw_hostname" ]] && rg -n -F "$raw_hostname" "$evidence_root"; then + fail "archive contains the raw local hostname" +fi + +echo "[5/5] stable local candidate artifact and clean handoff" +mkdir -p "$stable_output" +cp "$first_output/$archive_name" "$stable_output/$archive_name" +cp "$first_output/$archive_name.sha256" \ + "$stable_output/$archive_name.sha256" +( + cd "$stable_output" + shasum -a 256 -c "$archive_name.sha256" +) +if [[ -n "$(git status --porcelain)" ]]; then + git status --short >&2 + fail "release audit left tracked changes" +fi +digest=$(awk '{ print $1; exit }' "$stable_output/$archive_name.sha256") +size=$(wc -c <"$stable_output/$archive_name" | tr -d ' ') +printf 'v0.5.0 local release candidate passed.\n' +printf 'commit: %s\n' "$commit" +printf 'archive: %s\n' "$stable_output/$archive_name" +printf 'bytes: %s\n' "$size" +printf 'sha256: %s\n' "$digest" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/build-release-evidence b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/build-release-evidence new file mode 100755 index 000000000..ad85a202d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/build-release-evidence @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +output_dir=${1:-"$repo_root/target/release-evidence"} +commit=${2:-HEAD} + +commit=$(git rev-parse "$commit^{commit}") +package_version=$( + git show "$commit:challenge-71-occam/Cargo.toml" | + awk -F'"' '/^version = / { print $2; exit }' +) +if [[ ! "$package_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "invalid package version at $commit: $package_version" >&2 + exit 1 +fi +version="v$package_version" +archive_name="occam-rust-port-$version-evidence.tar.gz" +prefix="occam-rust-port-$version/" +release_document="docs/releases/$version.md" + +mkdir -p "$output_dir" +temporary=$(mktemp -d "${TMPDIR:-/tmp}/occam-release-package.XXXXXX") +trap 'rm -rf "$temporary"' EXIT HUP INT TERM + +paths=( + README.md + CHANGELOG.md + challenge-71-occam/solutions/rewrite-it-in-rust + experiments/occam-generalization + experiments/occam-generalization-v2 + docs/reports/2026-07-28-occam-mdl-generalization-completion.md + docs/reports/2026-07-28-occam-research-v2-completion.md + "$release_document" + tests/oracles/occam-v1.json + docs/oracle-results.md + docs/synthesis + benchmarks/results + benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4 + tools/abc/LOCK.json + tools/abc/LICENSE.url +) + +for candidate in "${paths[@]}"; do + if ! git cat-file -e "$commit:$candidate" 2>/dev/null; then + echo "release allowlist path is absent at $commit: $candidate" >&2 + exit 1 + fi +done + +git ls-tree -r --name-only "$commit" -- "${paths[@]}" | + while IFS= read -r file; do + digest=$(git show "$commit:$file" | shasum -a 256 | awk '{print $1}') + printf '%s %s\n' "$digest" "$file" + done >"$temporary/SHA256SUMS" + +commit_time=$(git show -s --format=%cI "$commit") +metadata=$(printf \ + '{\n "schema_version": 2,\n "version": "%s",\n "package_version": "%s",\n "commit": "%s",\n "commit_time": "%s",\n "evidence_protocols": [\n "occam-generalization-v1-immutable",\n "occam-generalization-v2-measured-semantic"\n ],\n "contains_prebuilt_binaries": false,\n "contains_abc_source_or_binary": false,\n "contains_vendor_dataset": false\n}\n' \ + "$version" "$package_version" "$commit" "$commit_time") +sums=$(<"$temporary/SHA256SUMS") + +git archive \ + --format=tar \ + --prefix="$prefix" \ + --add-virtual-file="${prefix}RELEASE.json:$metadata" \ + --add-virtual-file="${prefix}SHA256SUMS:$sums" \ + "$commit" \ + "${paths[@]}" >"$temporary/evidence.tar" +gzip -n -c "$temporary/evidence.tar" >"$output_dir/$archive_name" + +digest=$(shasum -a 256 "$output_dir/$archive_name" | awk '{print $1}') +printf '%s %s\n' "$digest" "$archive_name" \ + >"$output_dir/$archive_name.sha256" +printf 'version: %s\ncommit: %s\narchive: %s\nsha256: %s\n' \ + "$version" "$commit" "$output_dir/$archive_name" "$digest" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-abc.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-abc.sh new file mode 100755 index 000000000..99f183035 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-abc.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +lock_path="$repo_root/tools/abc/LOCK.json" + +read_lock_field() { + python3 -c \ + 'import json,sys; print(json.load(open(sys.argv[1], encoding="utf-8"))[sys.argv[2]])' \ + "$lock_path" "$1" +} + +run_with_timeout() { + local timeout_seconds=$1 + shift + python3 -c ' +import subprocess +import sys +try: + result = subprocess.run(sys.argv[2:], timeout=float(sys.argv[1]), check=False) +except subprocess.TimeoutExpired: + print(f"command timed out after {sys.argv[1]} seconds: {sys.argv[2:]}", file=sys.stderr) + raise SystemExit(124) +raise SystemExit(result.returncode) +' "$timeout_seconds" "$@" +} + +commit=$(read_lock_field commit) +archive_url=$(read_lock_field archive_url) +expected_sha=$(read_lock_field archive_sha256) +expected_bytes=$(read_lock_field archive_bytes) +destination="$repo_root/target/tools/abc/$commit" +binary="$destination/abc" +metadata="$destination/build-metadata.json" +lock_sha=$(shasum -a 256 "$lock_path" | awk '{print $1}') + +if [[ -x "$binary" && -f "$metadata" ]]; then + binary_sha=$(shasum -a 256 "$binary" | awk '{print $1}') + if python3 -c ' +import json +import sys +metadata = json.load(open(sys.argv[1], encoding="utf-8")) +raise SystemExit(0 if ( + metadata.get("schema_version") == 1 + and metadata.get("commit") == sys.argv[2] + and metadata.get("lock_sha256") == sys.argv[3] + and metadata.get("binary_sha256") == sys.argv[4] +) else 1) +' "$metadata" "$commit" "$lock_sha" "$binary_sha"; then + ( + cd "$destination" + run_with_timeout 10 "$binary" -c "version; quit" + ) + echo "Berkeley ABC cache verified at $binary" + exit 0 + fi +fi + +temporary_dir=$(mktemp -d "${TMPDIR:-/tmp}/occam-abc.XXXXXX") +trap 'rm -rf "$temporary_dir"' EXIT HUP INT TERM +archive="$temporary_dir/abc.tar.gz" +build_log="$temporary_dir/build.log" + +curl --location --fail --silent --show-error \ + --connect-timeout 30 --max-time 300 \ + "$archive_url" --output "$archive" + +actual_bytes=$(wc -c <"$archive" | tr -d '[:space:]') +if [[ "$actual_bytes" != "$expected_bytes" ]]; then + echo "ABC archive size mismatch: expected $expected_bytes, got $actual_bytes" >&2 + exit 1 +fi +actual_sha=$(shasum -a 256 "$archive" | awk '{print $1}') +if [[ "$actual_sha" != "$expected_sha" ]]; then + echo "ABC archive checksum mismatch: expected $expected_sha, got $actual_sha" >&2 + exit 1 +fi + +run_with_timeout 120 tar -xzf "$archive" -C "$temporary_dir" +source_root="$temporary_dir/abc-$commit" +if [[ ! -d "$source_root" ]]; then + echo "verified ABC archive did not contain abc-$commit" >&2 + exit 1 +fi + +if ! run_with_timeout 1800 make -C "$source_root" -j2 ABC_USE_NO_READLINE=1 \ + >"$build_log" 2>&1; then + tail -n 80 "$build_log" >&2 + exit 1 +fi +build_log_bytes=$(wc -c <"$build_log" | tr -d '[:space:]') +if (( build_log_bytes > 16777216 )); then + echo "ABC build log exceeded 16 MiB: $build_log_bytes bytes" >&2 + exit 1 +fi +( + cd "$source_root" + run_with_timeout 10 "$source_root/abc" -c "version; quit" +) + +mkdir -p "$destination" +temporary_binary="$destination/.abc.$$.tmp" +temporary_metadata="$destination/.build-metadata.$$.tmp" +cp "$source_root/abc" "$temporary_binary" +chmod +x "$temporary_binary" +binary_sha=$(shasum -a 256 "$temporary_binary" | awk '{print $1}') +printf '%s\n' \ + '{' \ + ' "schema_version": 1,' \ + " \"commit\": \"$commit\"," \ + " \"archive_sha256\": \"$actual_sha\"," \ + " \"lock_sha256\": \"$lock_sha\"," \ + " \"binary_sha256\": \"$binary_sha\"" \ + '}' >"$temporary_metadata" +mv "$temporary_binary" "$binary" +mv "$temporary_metadata" "$metadata" + +echo "verified ABC archive SHA-256: $actual_sha" +echo "installed Berkeley ABC at $binary" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-occam-data.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-occam-data.sh new file mode 100755 index 000000000..3afcee702 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/fetch-occam-data.sh @@ -0,0 +1,25 @@ +#!/bin/sh +set -eu + +archive_url='https://github.com/QuantumBFS/quantum.harness/releases/download/occam-circuit-data-v1/occam-circuit.zip' +expected_sha='c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b' +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +temporary_dir=$(mktemp -d "${TMPDIR:-/tmp}/occam-circuit.XXXXXX") +trap 'rm -rf "$temporary_dir"' EXIT HUP INT TERM + +curl -L --fail --silent --show-error "$archive_url" \ + -o "$temporary_dir/occam-circuit.zip" + +actual_sha=$(shasum -a 256 "$temporary_dir/occam-circuit.zip" | awk '{print $1}') +if [ "$actual_sha" != "$expected_sha" ]; then + echo "checksum mismatch: expected $expected_sha, got $actual_sha" >&2 + exit 1 +fi + +unzip -q "$temporary_dir/occam-circuit.zip" -d "$temporary_dir/unpacked" +mkdir -p "$repo_root/vendor" +rm -rf "$repo_root/vendor/occam-circuit" +mv "$temporary_dir/unpacked/occam-circuit" "$repo_root/vendor/occam-circuit" + +echo "verified SHA-256: $actual_sha" +echo "installed official data at $repo_root/vendor/occam-circuit" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/learn-occam71-mdl.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/learn-occam71-mdl.sh new file mode 100755 index 000000000..0a7e94094 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/learn-occam71-mdl.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +data_root="$repo_root/vendor/occam-circuit/datasets" +generated_root="$repo_root/target/occam71-mdl" +research_manifest="$repo_root/challenge-71-occam/solutions/rewrite-it-in-rust/research-manifest.json" +mode=${1:-run} +instances=(mystery-A mystery-B mystery-C mystery-D) + +if [[ "$mode" != "run" && "$mode" != "--check" ]]; then + echo "usage: $0 [--check]" >&2 + exit 2 +fi + +if [[ ! -d "$data_root" ]]; then + "$repo_root/scripts/fetch-occam-data.sh" +fi + +cargo build --quiet --release -p occam71_rust --manifest-path "$repo_root/Cargo.toml" +binary="$repo_root/target/release/occam71_rust" + +rm -rf "$generated_root" +mkdir -p "$generated_root" + +for instance in "${instances[@]}"; do + instance_root="$generated_root/$instance" + mkdir -p "$instance_root" + "$binary" learn-mdl \ + --train "$data_root/$instance/train.csv" \ + --test-inputs "$data_root/$instance/test_inputs.csv" \ + --commitment "$data_root/$instance/commitment.sha256" \ + --circuit "$instance_root/circuit.txt" \ + --predictions "$instance_root/test_outputs.csv" \ + --report "$instance_root/report.json" + "$binary" verify \ + --dataset "$data_root/$instance/train.csv" \ + --circuit "$instance_root/circuit.txt" \ + --backend cross-check >"$instance_root/verification.txt" +done + +if [[ "$mode" == "--check" ]]; then + if [[ ! -f "$research_manifest" ]]; then + echo "research manifest is absent: $research_manifest" >&2 + exit 1 + fi + for instance in "${instances[@]}"; do + actual=$(shasum -a 256 "$generated_root/$instance/report.json" | awk '{print $1}') + expected=$(jq -er \ + ".official_mdl_reports[\"$instance\"].report_sha256" \ + "$research_manifest") + if [[ "$actual" != "$expected" ]]; then + echo "$instance report mismatch: expected $expected, got $actual" >&2 + exit 1 + fi + done + echo "Occam #71 MDL report hashes match the committed research manifest." +else + echo "Occam #71 MDL artifacts written to $generated_root" +fi diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/optimize-occam71.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/optimize-occam71.sh new file mode 100755 index 000000000..c0eb79972 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/optimize-occam71.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +set -euo pipefail + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +solution_root="$repo_root/challenge-71-occam/solutions/rewrite-it-in-rust" +data_root="$repo_root/vendor/occam-circuit/datasets" +staging_root="$repo_root/target/occam71-optimization" +commit=e76768b9d34f9dc67cb6608efecd55db271ff849 +abc="$repo_root/target/tools/abc/$commit/abc" +mode=${1:-write} +instances=(mystery-B mystery-D mystery-C mystery-A) + +if [[ "$mode" != "write" && "$mode" != "--check" && "$mode" != "--verify" ]]; then + echo "usage: $0 [--check|--verify]" >&2 + exit 2 +fi + +if [[ ! -d "$data_root" ]]; then + "$repo_root/scripts/fetch-occam-data.sh" +fi +"$repo_root/scripts/fetch-abc.sh" +cargo build --quiet --release -p occam71_rust --manifest-path "$repo_root/Cargo.toml" +binary="$repo_root/target/release/occam71_rust" + +rm -rf "$staging_root" +mkdir -p "$staging_root/circuits" "$staging_root/reports" + +for instance in "${instances[@]}"; do + baseline="$staging_root/$instance-baseline.txt" + git -C "$repo_root" show \ + "v0.2.0:challenge-71-occam/solutions/rewrite-it-in-rust/circuits/$instance.txt" \ + >"$baseline" + "$binary" optimize-circuit \ + --circuit "$baseline" \ + --abc "$abc" \ + --output "$staging_root/circuits/$instance.txt" \ + --report "$staging_root/reports/$instance.json" + "$binary" verify \ + --dataset "$data_root/$instance/train.csv" \ + --circuit "$staging_root/circuits/$instance.txt" \ + --backend cross-check >"$staging_root/$instance-train-verification.txt" + "$binary" verify \ + --dataset "$solution_root/predictions/$instance/test_outputs.csv" \ + --circuit "$staging_root/circuits/$instance.txt" \ + --backend cross-check >"$staging_root/$instance-test-verification.txt" +done + +jq -n \ + --arg abc_commit "$commit" \ + --slurpfile a "$staging_root/reports/mystery-A.json" \ + --slurpfile b "$staging_root/reports/mystery-B.json" \ + --slurpfile c "$staging_root/reports/mystery-C.json" \ + --slurpfile d "$staging_root/reports/mystery-D.json" \ + '{ + schema_version: 1, + baseline: "baseline.json", + abc_commit: $abc_commit, + processing_order: ["mystery-B", "mystery-D", "mystery-C", "mystery-A"], + instances: { + "mystery-A": $a[0], + "mystery-B": $b[0], + "mystery-C": $c[0], + "mystery-D": $d[0] + } + }' >"$staging_root/report.json" + +if [[ "$mode" == "--check" ]]; then + for instance in "${instances[@]}"; do + cmp "$staging_root/circuits/$instance.txt" "$solution_root/circuits/$instance.txt" + cmp "$staging_root/reports/$instance.json" \ + "$solution_root/optimization/$instance.json" + done + cmp "$staging_root/report.json" "$solution_root/optimization/report.json" + echo "Occam #71 optimization artifacts are byte-for-byte reproducible." +elif [[ "$mode" == "--verify" ]]; then + for instance in "${instances[@]}"; do + jq -e \ + --slurpfile expected "$solution_root/optimization/$instance.json" \ + ' + .selected_gate_count == $expected[0].selected_gate_count and + .exhaustive_mismatches == 0 and + .abc.accepted_candidates > 0 and + .abc.selected_gate_count == .selected_gate_count + ' "$staging_root/reports/$instance.json" >/dev/null + done + jq -e \ + --slurpfile expected "$solution_root/optimization/report.json" \ + ' + .abc_commit == $expected[0].abc_commit and + ([.instances[] | .exhaustive_mismatches] | all(. == 0)) and + ([.instances[] | .selected_gate_count] | sort) == + ([$expected[0].instances[] | .selected_gate_count] | sort) + ' "$staging_root/report.json" >/dev/null + echo "Occam #71 optimization gate counts and full-domain semantics verified." +else + mkdir -p "$solution_root/optimization" + for instance in "${instances[@]}"; do + cp "$staging_root/circuits/$instance.txt" "$solution_root/circuits/$instance.txt" + cp "$staging_root/reports/$instance.json" \ + "$solution_root/optimization/$instance.json" + done + cp "$staging_root/report.json" "$solution_root/optimization/report.json" + echo "Occam #71 optimized circuits and reports written to $solution_root" +fi diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-benchmark-report b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-benchmark-report new file mode 100755 index 000000000..073be0c10 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-benchmark-report @@ -0,0 +1,307 @@ +#!/usr/bin/env python3 +import argparse +import difflib +import json +import math +import os +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +RESULTS = ROOT / "benchmarks" / "results" +CASE_ORDER = ("official-add-8", "add-8-100000", "add-16-100000", "mul-4-100000") +CASE_LABELS = { + "official-add-8": "official add-8", + "add-8-100000": "generated add-8", + "add-16-100000": "generated add-16", + "mul-4-100000": "generated mul-4", +} +REPORTS = { + "apple-m4": RESULTS / "2026-07-28-apple-m4.md", +} +BEGIN = "" +END = "" + + +def load_json(path: Path) -> dict: + value = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(value, dict): + raise ValueError(f"{path} must contain a JSON object") + return value + + +def validate_rust(case: str, backend: str, value: dict) -> None: + if value.get("schema_version") not in (2, 3) or value.get("backend") != backend: + raise ValueError(f"{case}/{backend}: wrong schema or backend") + if value["batch_count"] != 5 or len(value["batch_medians_ns"]) != 5: + raise ValueError(f"{case}/{backend}: expected five batches") + expected_raw = value["batch_count"] * value["measured_iterations"] + if len(value["raw_iterations_ns"]) != expected_raw: + raise ValueError(f"{case}/{backend}: raw iteration count mismatch") + if value["exact_matches"] != value["samples"]: + raise ValueError(f"{case}/{backend}: imperfect exact matches") + if value["correct_bits"] != value["total_bits"]: + raise ValueError(f"{case}/{backend}: imperfect bit matches") + if value["schema_version"] == 3: + for field in ( + "scalar_dataset_parse_iterations_ns", + "legacy_pack_iterations_ns", + "direct_packed_parse_iterations_ns", + "compilation_iterations_ns", + ): + if len(value.get(field, ())) != 5: + raise ValueError(f"{case}/{backend}: incomplete {field}") + for field in ("median_ns", "standard_deviation_ns", "median_absolute_deviation_ns"): + number = value["evaluation"][field] + if not isinstance(number, (int, float)) or not math.isfinite(number) or number < 0: + raise ValueError(f"{case}/{backend}: invalid {field}") + for path_field in ("circuit_path", "dataset_path"): + if Path(value[path_field]).is_absolute(): + raise ValueError(f"{case}/{backend}: absolute path in evidence") + + +def milliseconds(nanoseconds: float) -> float: + return nanoseconds / 1_000_000.0 + + +def decimal_mb(byte_count: int) -> float: + return byte_count / 1_000_000.0 + + +def environment_value(snapshot: list[str], prefix: str) -> str: + for line in snapshot: + if line.startswith(prefix): + return line[len(prefix):].strip() + raise ValueError(f"missing environment field {prefix}") + + +def render_report(profile: str) -> tuple[str, str]: + protocol = load_json(ROOT / "benchmarks" / "protocols" / f"{profile}.json") + process = load_json(RESULTS / f"{profile}-process.json") + if protocol.get("schema_version") != 1 or process.get("schema_version") != 1: + raise ValueError("unsupported protocol/process schema") + if protocol["profile"] != profile or process["profile"] != profile: + raise ValueError("profile mismatch") + if set(process["cases"]) != set(CASE_ORDER): + raise ValueError("process case set mismatch") + + rust = {} + evaluator_speedups = [] + one_shot_speedups = [] + for case in CASE_ORDER: + rust[case] = {} + for backend in ("scalar", "packed"): + value = load_json(RESULTS / f"{case}-{backend}.json") + validate_rust(case, backend, value) + rust[case][backend] = value + scalar = rust[case]["scalar"] + packed = rust[case]["packed"] + if scalar["samples"] != packed["samples"] or scalar["gates"] != packed["gates"]: + raise ValueError(f"{case}: backend dimension mismatch") + scalar_time = scalar["evaluation"]["median_ns"] + packed_time = packed["evaluation"]["median_ns"] + packing = packed["packing_ns"] + evaluator_speedups.append(scalar_time / packed_time) + if scalar["schema_version"] == packed["schema_version"] == 3: + one_shot_speedups.append(scalar["one_shot_ns"] / packed["one_shot_ns"]) + else: + one_shot_speedups.append(scalar_time / (packed_time + packing)) + + headline = ( + f"The recorded Apple M4 results show a " + f"{min(evaluator_speedups):.0f}–{max(evaluator_speedups):.0f}× " + f"evaluator-only packed speedup and a " + f"{min(one_shot_speedups):.1f}–{max(one_shot_speedups):.1f}× " + f"production one-shot speedup after charging parsing and compilation." + ) + + snapshot = process["environment_snapshot"] + lines = [ + "# Julia and Rust Verifier Benchmark — Apple M4", + "", + "> Generated by `scripts/render-benchmark-report`; do not edit numeric tables manually.", + "", + "## Environment", + "", + f"- Date: {protocol['date']}", + f"- Machine: {protocol['machine']}, {protocol['processor']}", + f"- CPU: {protocol['physical_cores']} physical/logical cores", + f"- Memory: {decimal_mb(protocol['memory_bytes']) / 1000:.1f} GB", + f"- Architecture: {protocol['architecture']}", + f"- Operating system: {protocol['operating_system']}", + f"- Rust: `{protocol['rust']}`", + f"- Julia: `{protocol['julia']}`", + f"- Power source: {environment_value(snapshot, 'power_source=')}", + f"- Battery state: {environment_value(snapshot, 'battery_state=')}", + f"- Low-power mode: {environment_value(snapshot, 'lowpowermode=')}", + f"- Load snapshot: `{environment_value(snapshot, 'system_load=')}`", + "", + "Serial numbers, hardware UUIDs, usernames, and absolute workspace paths are excluded.", + "", + "## Method", + "", + "Every case passed `Rust scalar == Rust packed == Julia` before timing.", + f"Rust uses {protocol['rust_batches']} independent batches; each batch has " + f"{protocol['rust_warmups_per_batch']} warm-ups followed by " + f"{protocol['rust_iterations_per_batch']} measured iterations. " + "Scalar/packed process order alternates by case. JSON stores every raw timing, " + "batch medians, standard deviation, and median absolute deviation (MAD).", + "", + f"Process measurements use {protocol['process_repetitions']} independent runs under " + f"{protocol['process_measurement']}. Julia time includes startup, JIT, parsing, " + "evaluation, and output.", + "", + "## Rust Evaluator Results", + "", + "| Case | Samples | Gates | Scalar parse ms | Scalar median ms | Packed preprocess ms | Packed median ms | Evaluator speedup | One-shot speedup |", + "|---|---:|---:|---:|---:|---:|---:|---:|---:|", + ] + for case in CASE_ORDER: + scalar = rust[case]["scalar"] + packed = rust[case]["packed"] + scalar_ns = scalar["evaluation"]["median_ns"] + packed_ns = packed["evaluation"]["median_ns"] + packing_ns = packed["packing_ns"] + one_shot_speedup = ( + scalar["one_shot_ns"] / packed["one_shot_ns"] + if scalar["schema_version"] == packed["schema_version"] == 3 + else scalar_ns / (packed_ns + packing_ns) + ) + lines.append( + f"| {CASE_LABELS[case]} | {scalar['samples']:,} | {scalar['gates']} | " + f"{milliseconds(scalar['parse_ns']):.3f} | {milliseconds(scalar_ns):.6f} | " + f"{milliseconds(packing_ns):.6f} | {milliseconds(packed_ns):.6f} | " + f"{scalar_ns / packed_ns:.2f}× | {one_shot_speedup:.2f}× |" + ) + + lines += [ + "", + "## Dispersion", + "", + "| Case | Scalar stddev ms | Scalar MAD ms | Packed stddev ms | Packed MAD ms |", + "|---|---:|---:|---:|---:|", + ] + for case in CASE_ORDER: + scalar = rust[case]["scalar"]["evaluation"] + packed = rust[case]["packed"]["evaluation"] + lines.append( + f"| {CASE_LABELS[case]} | " + f"{milliseconds(scalar['standard_deviation_ns']):.6f} | " + f"{milliseconds(scalar['median_absolute_deviation_ns']):.6f} | " + f"{milliseconds(packed['standard_deviation_ns']):.6f} | " + f"{milliseconds(packed['median_absolute_deviation_ns']):.6f} |" + ) + + lines += [ + "", + "## Throughput", + "", + "| Case | Scalar samples/s | Packed samples/s |", + "|---|---:|---:|", + ] + for case in CASE_ORDER: + scalar = rust[case]["scalar"] + packed = rust[case]["packed"] + lines.append( + f"| {CASE_LABELS[case]} | " + f"{scalar['samples_per_second_at_median']:,.0f} | " + f"{packed['samples_per_second_at_median']:,.0f} |" + ) + + lines += [ + "", + "## Startup-Inclusive Process Measurements", + "", + "| Case | Rust scalar wall s | Rust packed wall s | Julia wall s | Rust scalar peak RSS | Rust packed peak RSS | Julia peak RSS |", + "|---|---:|---:|---:|---:|---:|---:|", + ] + for case in CASE_ORDER: + case_process = process["cases"][case] + def wall(backend: str) -> str: + value = case_process[backend]["median_wall_seconds"] + return "<0.01" if value == 0 else f"{value:.2f}" + def rss(backend: str) -> str: + return f"{decimal_mb(case_process[backend]['median_rss_bytes']):.1f} MB" + lines.append( + f"| {CASE_LABELS[case]} | {wall('scalar')} | {wall('packed')} | " + f"{wall('julia')} | {rss('scalar')} | {rss('packed')} | {rss('julia')} |" + ) + + lines += [ + "", + "## Interpretation", + "", + headline, + "", + "The production packed path includes direct CSV ingestion and one-time circuit " + "compilation. Parsing is larger than packed evaluation on the generated cases, so " + "text ingestion is now the dominant optimization target.", + "", + "Julia process results are end-to-end evidence for the unmodified official verifier, " + "not a language-only kernel comparison. The controlled performance conclusion is the " + "Rust scalar-versus-packed comparison under the same parser, circuit, metrics, compiler, " + "and hardware.", + "", + "## Reproduction", + "", + "```bash", + "./scripts/run-benchmarks.sh", + "./scripts/render-benchmark-report --check --profile apple-m4", + "```", + "", + ] + return "\n".join(lines), headline + + +def replace_headline(readme: str, headline: str) -> str: + if readme.count(BEGIN) != 1 or readme.count(END) != 1: + raise ValueError("README benchmark markers are missing or duplicated") + start = readme.index(BEGIN) + len(BEGIN) + finish = readme.index(END) + return readme[:start] + "\n" + headline + "\n" + readme[finish:] + + +def atomic_write(path: Path, content: str) -> None: + descriptor, temporary = tempfile.mkstemp(prefix=path.name, dir=path.parent) + try: + with os.fdopen(descriptor, "w", encoding="utf-8") as stream: + stream.write(content) + os.replace(temporary, path) + except BaseException: + os.unlink(temporary) + raise + + +def check(path: Path, expected: str) -> bool: + actual = path.read_text(encoding="utf-8") + if actual == expected: + return True + print("".join(difflib.unified_diff( + actual.splitlines(keepends=True), + expected.splitlines(keepends=True), + fromfile=str(path), + tofile=f"{path} (generated)", + ))) + return False + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--check", action="store_true") + parser.add_argument("--profile", choices=REPORTS, required=True) + arguments = parser.parse_args() + report, headline = render_report(arguments.profile) + report += "" if report.endswith("\n") else "\n" + report_path = REPORTS[arguments.profile] + readme_path = ROOT / "README.md" + readme = replace_headline(readme_path.read_text(encoding="utf-8"), headline) + if arguments.check: + if not check(report_path, report) or not check(readme_path, readme): + raise SystemExit(1) + else: + atomic_write(report_path, report) + atomic_write(readme_path, readme) + + +if __name__ == "__main__": + main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-ingestion-report b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-ingestion-report new file mode 100755 index 000000000..7e95cfce9 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-ingestion-report @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +import argparse +import json +from pathlib import Path + +CASES = ( + ("add-8-100000", "add-8", "100,000"), + ("add-8-1000000", "add-8", "1,000,000"), + ("mul-4-100000", "mul-4", "100,000"), + ("mul-4-1000000", "mul-4", "1,000,000"), +) + + +def milliseconds(value): + return value / 1_000_000 + + +def render(results): + process = json.loads((results / "process.json").read_text()) + if process.get("schema_version") != 1 or process.get("repetitions") != 5: + raise SystemExit("invalid process summary") + + reports = {} + for key, _, _ in CASES: + report = json.loads((results / f"{key}.json").read_text()) + if report.get("schema_version") != 3 or report.get("backend") != "packed": + raise SystemExit(f"invalid benchmark report for {key}") + if ( + report["correct_bits"] != report["total_bits"] + or report["exact_matches"] != report["samples"] + or len(report["raw_iterations_ns"]) != 150 + ): + raise SystemExit(f"non-exact or incomplete benchmark report for {key}") + for field in ( + "scalar_dataset_parse_iterations_ns", + "legacy_pack_iterations_ns", + "direct_packed_parse_iterations_ns", + "compilation_iterations_ns", + ): + if len(report.get(field, ())) != 5: + raise SystemExit(f"incomplete {field} for {key}") + reports[key] = report + + lines = [ + "# Direct Packed Ingestion Benchmark", + "", + "Date: 2026-07-28", + "", + "Implementation: raw CSV bytes → flat `PackedDataset` columns", + "", + f"- Platform: {process['platform']}", + f"- Processor: {process['processor']}", + f"- Rust: `{process['rustc']}`", + "- Evaluator: compiled packed execution plan", + "- Timing: five preprocessing measurements, five batches of 30 evaluator measurements, and five fresh-process repetitions", + "- Correctness: every case has exact bit and sample metrics", + "", + "| Case | Samples | Legacy parse+pack (ms) | Direct packed parse (ms) | Legacy/direct time ratio | Evaluate median (ms) | One-shot (ms) |", + "|---|---:|---:|---:|---:|---:|---:|", + ] + for key, label, samples in CASES: + report = reports[key] + legacy = report["scalar_dataset_parse_ns"] + report["legacy_pack_ns"] + direct = report["direct_packed_parse_ns"] + lines.append( + f"| {label} | {samples} | {milliseconds(legacy):.3f} | " + f"{milliseconds(direct):.3f} | {legacy / direct:.2f}× | " + f"{milliseconds(report['evaluation']['median_ns']):.3f} | " + f"{milliseconds(report['one_shot_ns']):.3f} |" + ) + + lines.extend( + [ + "", + "| Case | Samples | Direct RSS (MiB) | Legacy RSS (MiB) | RSS reduction | Direct process wall (s) | Legacy process wall (s) |", + "|---|---:|---:|---:|---:|---:|---:|", + ] + ) + for key, label, samples in CASES: + case = process["cases"][key] + direct = case["packed"] + legacy = case["packed-legacy"] + direct_rss = direct["median_maximum_resident_bytes"] + legacy_rss = legacy["median_maximum_resident_bytes"] + lines.append( + f"| {label} | {samples} | {direct_rss / 2**20:.2f} | " + f"{legacy_rss / 2**20:.2f} | {legacy_rss / direct_rss:.2f}× | " + f"{direct['median_wall_seconds']:.3f} | " + f"{legacy['median_wall_seconds']:.3f} |" + ) + + time_ratios = [] + rss_ratios = [] + direct_process_not_slower = True + for key, _, _ in CASES: + report = reports[key] + legacy_time = ( + report["scalar_dataset_parse_ns"] + report["legacy_pack_ns"] + ) + time_ratios.append(legacy_time / report["direct_packed_parse_ns"]) + case = process["cases"][key] + direct_process = case["packed"] + legacy_process = case["packed-legacy"] + rss_ratios.append( + legacy_process["median_maximum_resident_bytes"] + / direct_process["median_maximum_resident_bytes"] + ) + direct_process_not_slower &= ( + direct_process["median_wall_seconds"] + <= legacy_process["median_wall_seconds"] + ) + + if min(time_ratios) >= 1: + timing_decision = ( + "Direct parsing is a CPU-time win in all four parsing medians " + f"(legacy/direct is {min(time_ratios):.2f}–{max(time_ratios):.2f}×)." + ) + elif max(time_ratios) < 1: + timing_decision = ( + "Direct parsing is not a CPU-time win in these four parsing medians " + f"(legacy/direct is {min(time_ratios):.2f}–{max(time_ratios):.2f}×)." + ) + else: + timing_decision = ( + "Direct parsing time is mixed across the four medians " + f"(legacy/direct is {min(time_ratios):.2f}–{max(time_ratios):.2f}×), " + "so retention is not based on a uniform CPU-time improvement." + ) + + process_decision = ( + "equal or lower end-to-end process time in every case" + if direct_process_not_slower + else "mixed end-to-end process time" + ) + parse_dominates = all( + report["direct_packed_parse_ns"] > report["evaluation"]["median_ns"] + for report in reports.values() + ) + lines.extend( + [ + "", + "## Decision", + "", + "Direct packed parsing is the production path because it avoids materializing " + "one `Vec` pair per sample while preserving the exact flat layout produced " + "by the legacy path.", + "", + f"{timing_decision} It reduces fresh-process peak RSS by " + f"{min(rss_ratios):.2f}–{max(rss_ratios):.2f}× and has " + f"{process_decision}. The retention decision is therefore grounded in " + "bounded memory behavior.", + "", + ( + "After the evaluator optimizations, direct CSV ingestion is now slower than " + "one evaluator pass in all four cases; the bottleneck has therefore moved from " + "Boolean circuit execution to text ingestion." + if parse_dominates + else "Text ingestion and evaluation remain comparable in at least one case." + ), + "", + "Each JSON file beside this report retains all 150 evaluator timings plus scalar " + "parse, legacy pack, direct parse, compilation, and one-shot timings. " + "`process.json` retains every fresh-process wall-time and RSS observation.", + "", + ] + ) + return "\n".join(lines) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--results", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + rendered = render(args.results) + if args.check: + if not args.output.exists() or args.output.read_text() != rendered: + raise SystemExit(f"{args.output} is stale") + else: + args.output.write_text(rendered) + + +if __name__ == "__main__": + main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-occam-research b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-occam-research new file mode 100755 index 000000000..f429906cb --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-occam-research @@ -0,0 +1,347 @@ +#!/usr/bin/env node + +import fs from "node:fs"; +import path from "node:path"; +import crypto from "node:crypto"; +import childProcess from "node:child_process"; + +const args = process.argv.slice(2); +const option = (name, fallback) => { + const index = args.indexOf(name); + return index < 0 ? fallback : args[index + 1]; +}; +const check = args.includes("--check"); +const repo = path.resolve(path.dirname(new URL(import.meta.url).pathname), ".."); +const semanticOption = option("--semantic", null); +const isV2 = semanticOption !== null; +const rawPath = path.resolve(option( + "--raw-measured", + option("--raw", path.join(repo, "experiments/occam-generalization/raw.jsonl")), +)); +const output = path.resolve(option("--output", path.dirname(rawPath))); +const raw = fs.readFileSync(rawPath, "utf8"); +const measuredRecords = raw.trimEnd().split("\n").map((line) => JSON.parse(line)); +let semanticRaw = null; +let records = measuredRecords; +if (isV2) { + const semanticPath = path.resolve(semanticOption); + semanticRaw = fs.readFileSync(semanticPath, "utf8"); + const semanticRecords = semanticRaw.trimEnd().split("\n").map((line) => JSON.parse(line)); + if (semanticRecords.length !== measuredRecords.length) { + throw new Error("measured and semantic row counts differ"); + } + const measuredByKey = new Map(measuredRecords.map((row) => [JSON.stringify(row.key), row])); + records = semanticRecords.map((semantic) => { + const key = JSON.stringify(semantic.key); + const measured = measuredByKey.get(key); + if (!measured) throw new Error(`semantic row has no measured peer: ${key}`); + if (semantic.schema_version !== 2 || semantic.measured_schema_version !== measured.schema_version) { + throw new Error(`semantic schema link is invalid: ${key}`); + } + if (semantic.hypothesis_sha256 !== measured.hypothesis_sha256 || + semantic.status !== measured.status || + semantic.config_sha256 !== measured.config_sha256) { + throw new Error(`measured and semantic row mismatch: ${key}`); + } + for (const field of ["runtime_micros", "peak_rss_bytes", "host_identifier", "process_id", "started_unix_micros"]) { + if (Object.hasOwn(semantic, field)) throw new Error(`semantic row retains excluded field ${field}`); + } + if (!(measured.runtime_micros > 0) || !(measured.peak_rss_bytes > 0)) { + throw new Error(`measured row has a zero performance value: ${key}`); + } + return { + ...semantic, + runtime_micros: measured.runtime_micros, + peak_rss_bytes: measured.peak_rss_bytes, + }; + }); +} +if (records.length !== 20480) throw new Error(`expected 20480 rows, got ${records.length}`); +const keys = new Set(records.map((row) => JSON.stringify(row.key))); +if (keys.size !== records.length) throw new Error("duplicate trial keys"); + +const methodOrder = [ + "legacy-registry", "mdl-enumerator", "abc-dont-care", "robdd", + "sat-cegis", "grammar-evolution", "memorization", "oracle-expression", +]; +const fractionOrder = [500, 1000, 2000, 3000, 5000, 10000, 20000, 40000]; +const groups = new Map(); +for (const row of records) { + const key = `${row.key.task}\0${row.key.method}\0${row.key.fraction_basis_points}`; + if (!groups.has(key)) groups.set(key, []); + groups.get(key).push(row); +} +const mean = (xs) => xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : null; +const quantile = (xs, p) => { + if (!xs.length) return null; + const sorted = [...xs].sort((a, b) => a - b); + const position = (sorted.length - 1) * p; + const lower = Math.floor(position), upper = Math.ceil(position); + return sorted[lower] + (sorted[upper] - sorted[lower]) * (position - lower); +}; +const wilson = (successes, total) => { + if (!total) return [0, 0]; + const z = 1.959963984540054, p = successes / total, z2 = z * z; + const denominator = 1 + z2 / total; + const center = (p + z2 / (2 * total)) / denominator; + const spread = z * Math.sqrt(p * (1 - p) / total + z2 / (4 * total * total)) / denominator; + return [center - spread, center + spread]; +}; +const tasks = [...new Set(records.map((row) => row.key.task))].sort(); +const aggregateRows = []; +for (const task of tasks) { + for (const method of methodOrder) { + for (const fraction of fractionOrder) { + const rows = groups.get(`${task}\0${method}\0${fraction}`) ?? []; + const recovered = rows.filter((row) => row.semantic_recovery).length; + const [low, high] = wilson(recovered, 20); + const successful = rows.filter((row) => row.status === "success"); + const exact = successful.filter((row) => row.held_out).map((row) => row.held_out.exact_matches / row.held_out.samples); + const bit = successful.filter((row) => row.held_out).map((row) => row.held_out.correct_bits / row.held_out.total_bits); + const gates = successful.map((row) => row.gate_count).filter((value) => value !== null); + const descriptions = successful.map((row) => row.description_length).filter((value) => value !== null); + const runtimes = (isV2 ? successful : rows).map((row) => row.runtime_micros); + const rss = (isV2 ? successful : rows).map((row) => row.peak_rss_bytes); + const statuses = Object.fromEntries(["success", "no-hypothesis", "unsupported", "timeout", "resource-limit", "error"].map((status) => [status, rows.filter((row) => row.status === status).length])); + aggregateRows.push({ + task, method, fraction_basis_points: fraction, expected_trials: 20, + missing_trials: 20 - rows.length, statuses, + semantic_recovery_successes: recovered, + semantic_recovery_rate: recovered / 20, + wilson95_low: low, wilson95_high: high, + mean_held_out_exact_accuracy: mean(exact), + mean_held_out_bit_accuracy: mean(bit), + median_runtime_micros: quantile(runtimes, 0.5), + runtime_iqr_micros: [quantile(runtimes, 0.25), quantile(runtimes, 0.75)], + median_peak_rss_bytes: quantile(rss, 0.5), + peak_rss_iqr_bytes: [quantile(rss, 0.25), quantile(rss, 0.75)], + median_gate_count: quantile(gates, 0.5), + median_description_length: quantile(descriptions, 0.5), + }); + } + } +} +const rank = (xs) => { + const indexed = xs.map((value, index) => ({ value, index })).sort((a, b) => a.value - b.value); + const ranks = Array(xs.length); + for (let start = 0; start < indexed.length;) { + let end = start + 1; + while (end < indexed.length && indexed[end].value === indexed[start].value) end++; + const average = (start + end - 1) / 2 + 1; + for (let i = start; i < end; i++) ranks[indexed[i].index] = average; + start = end; + } + return ranks; +}; +const spearman = (xs, ys) => { + if (xs.length < 2 || xs.length !== ys.length) return null; + const rx = rank(xs), ry = rank(ys), mx = mean(rx), my = mean(ry); + const numerator = rx.reduce((sum, value, i) => sum + (value - mx) * (ry[i] - my), 0); + const denominator = Math.sqrt(rx.reduce((sum, value) => sum + (value - mx) ** 2, 0) * ry.reduce((sum, value) => sum + (value - my) ** 2, 0)); + return denominator ? numerator / denominator : 0; +}; +const paired = records.filter((row) => row.status === "success" && row.gate_count !== null && row.description_length !== null && row.held_out); +const gateAccuracyRho = spearman(paired.map((row) => row.gate_count), paired.map((row) => row.held_out.exact_matches / row.held_out.samples)); +const descriptionGateRho = spearman(paired.map((row) => row.description_length), paired.map((row) => row.gate_count)); +const aggregate = { + schema_version: isV2 ? 2 : 1, + trial_rows: records.length, + group_rows: aggregateRows.length, + correlations: { + gate_count_vs_held_out_exact_spearman: gateAccuracyRho, + description_length_vs_gate_count_spearman: descriptionGateRho, + paired_trials: paired.length, + }, + groups: aggregateRows, +}; +const fixed = (value) => value === null ? "" : Number(value).toFixed(6); +const csvHeader = [ + "task","method","fraction_basis_points","expected_trials","missing_trials","successes", + "semantic_recovery_successes","semantic_recovery_rate","wilson95_low","wilson95_high", + "mean_held_out_exact_accuracy","mean_held_out_bit_accuracy","median_gate_count","median_description_length", + ...(isV2 ? ["median_runtime_micros","runtime_iqr_low_micros","runtime_iqr_high_micros", + "median_peak_rss_bytes","peak_rss_iqr_low_bytes","peak_rss_iqr_high_bytes"] : []), +]; +const csv = [csvHeader.join(","), ...aggregateRows.map((row) => [ + row.task,row.method,row.fraction_basis_points,row.expected_trials,row.missing_trials,row.statuses.success, + row.semantic_recovery_successes,fixed(row.semantic_recovery_rate),fixed(row.wilson95_low),fixed(row.wilson95_high), + fixed(row.mean_held_out_exact_accuracy),fixed(row.mean_held_out_bit_accuracy), + row.median_gate_count ?? "",row.median_description_length ?? "", + ...(isV2 ? [ + row.median_runtime_micros ?? "", + row.runtime_iqr_micros[0] ?? "", + row.runtime_iqr_micros[1] ?? "", + row.median_peak_rss_bytes ?? "", + row.peak_rss_iqr_bytes[0] ?? "", + row.peak_rss_iqr_bytes[1] ?? "", + ] : []), +].join(","))].join("\n") + "\n"; +const aggregateJson = JSON.stringify(aggregate, null, 2) + "\n"; +const escapeXml = (value) => String(value).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',"""); +const colors = ["#2563eb","#dc2626","#16a34a","#9333ea","#ea580c","#0891b2","#4b5563","#111827"]; +const svgFrame = (title, body) => ` + +${escapeXml(title)} + +${body} +\n`; +const fractionBody = methodOrder.map((method, mi) => { + const points = fractionOrder.map((fraction, fi) => { + const rows = aggregateRows.filter((row) => row.method === method && row.fraction_basis_points === fraction); + const rate = mean(rows.map((row) => row.semantic_recovery_rate)); + return `${110 + fi * 140},${700 - rate * 600}`; + }).join(" "); + return `${escapeXml(method)}`; +}).join("\n"); +const fractionSvg = svgFrame("Observed fraction vs semantic recovery", fractionBody); +const scatter = (xField, yField, title) => { + const rows = aggregateRows.filter((row) => row[xField] !== null && row[yField] !== null); + const xs = rows.map((row) => row[xField]), ys = rows.map((row) => row[yField]); + const xmin = Math.min(...xs), xmax = Math.max(...xs), ymin = Math.min(...ys), ymax = Math.max(...ys); + const body = rows.map((row) => { + const x = 100 + (row[xField] - xmin) / Math.max(1e-9, xmax - xmin) * 1020; + const y = 700 - (row[yField] - ymin) / Math.max(1e-9, ymax - ymin) * 590; + const mi = methodOrder.indexOf(row.method); + return `${escapeXml(`${row.task} ${row.method}`)}`; + }).join("\n"); + return svgFrame(title, body); +}; +const gatesSvg = scatter("median_gate_count", "mean_held_out_exact_accuracy", "Gate count vs held-out exact accuracy"); +const descriptionSvg = scatter("median_description_length", "median_gate_count", "Description length vs official gate count"); +const direction = gateAccuracyRho < -0.05 ? "smaller gate counts correlate with higher held-out accuracy" : gateAccuracyRho > 0.05 ? "larger gate counts correlate with higher held-out accuracy" : "gate count has little monotone association with held-out accuracy"; +const methodStatistics = methodOrder.map((method) => { + const rows = records.filter((row) => row.key.method === method); + const recovered = rows.filter((row) => row.semantic_recovery).length; + const successful = rows.filter((row) => row.status === "success" && row.held_out); + return { + method, + successful: successful.length, + recovered, + meanHeldOutExact: mean(successful.map((row) => row.held_out.exact_matches / row.held_out.samples)), + medianRuntimeMicros: quantile(successful.map((row) => row.runtime_micros), 0.5), + medianPeakRssBytes: quantile(successful.map((row) => row.peak_rss_bytes), 0.5), + }; +}); +const methodSummary = isV2 + ? methodStatistics.map((statistics) => + `| ${statistics.method} | ${statistics.successful}/2560 | ${statistics.recovered}/2560 | ${fixed(statistics.meanHeldOutExact)} | ${statistics.medianRuntimeMicros ?? ""} | ${statistics.medianPeakRssBytes ?? ""} |` + ).join("\n") + : methodOrder.map((method) => { + const rows = records.filter((row) => row.key.method === method); + const recovered = rows.filter((row) => row.semantic_recovery).length; + const successful = rows.filter((row) => row.status === "success").length; + return `| ${method} | ${successful}/2560 | ${recovered}/2560 |`; + }).join("\n"); +const implementationNote = isV2 + ? `The ABC partial-PLA, ROBDD, bounded SAT/CEGIS, seeded grammar-evolution, and explicit memorization methods are distinct learner implementations. The oracle expression is evaluator-only. Runtime and peak RSS summaries come only from successful isolated child trials with positive measurements; semantic conclusions come from the deterministic projection.` + : `The four partial-logic baselines use an explicit conservative zero completion in this release-grade deterministic matrix; they fit observed rows but are not presented as complete implementations of every possible ABC/BDD/CEGIS heuristic. The oracle expression is evaluator-only. Runtime and RSS fields are normalized to zero in the hash-stable matrix and must not be interpreted as performance measurements.`; +const tableHeader = isV2 + ? `| Method | Successful fits | Full semantic recovery | Mean held-out exact | Median runtime (µs) | Median peak RSS (bytes) | +|---|---:|---:|---:|---:|---:|` + : `| Method | Successful fits | Full semantic recovery | +|---|---:|---:|`; +const supplementalAnalysis = isV2 + ? `The generic MDL enumerator recovers 104/320 trials at 0.5% observation, +262/320 at 1%, 300/320 at 2%, 319/320 at 3%, and 320/320 at every tested +fraction from 5% through 40%. Seeded grammar evolution improves from 96/320 +recoveries at 0.5% to 300/320 at 40%, but remains below MDL at every fraction. +The partial-logic completion baselines recover no complete target semantics, +which separates interpolation of observed rows from genuine extrapolation. + +The gate-count association is modest and conditional. The stronger finding is +grammar alignment: short expressions in a grammar containing the target +operations predict unseen outputs far better here than small circuits produced +by unconstrained don't-care completion. This supports a restricted Occam/MDL +claim for these tasks; it does not establish that smaller circuits generally +predict better. + +` + : ""; +const report = `# Occam Size–Generalization Study + +This artifact contains exactly 16 tasks × 8 observed fractions × 20 seeds × 8 methods = 20,480 trial records. Observed rows are sampled without replacement; accuracy is evaluated on the held-out complement. Failed searches remain rows. + +## Measured conclusion + +Across ${paired.length} successful trials with both size measures, the Spearman correlation between official gate count and held-out exact accuracy is ${gateAccuracyRho.toFixed(4)}; therefore ${direction}. Description length and gate count have Spearman correlation ${descriptionGateRho.toFixed(4)}. These are associations under the declared grammar, tasks, completion rules, and bounds—not a universal learning law. + +${tableHeader} +${methodSummary} + +${implementationNote} + +${supplementalAnalysis}Timeout, resource-limit, unsupported, and no-hypothesis statuses count as failed recovery. No global circuit minimality or grammar universality is claimed. +`; +const environment = JSON.stringify(isV2 ? { + schema_version: 2, + protocol: "occam-generalization-v2", + isolated_child_per_trial: true, + semantic_projection_schema: 2, + runtime_and_rss_interpretation: "positive measured child-process values; aggregates use successful trials", +} : { + schema_version: 1, + protocol: "occam-generalization-v1", + deterministic_runtime_fields: true, + runtime_and_rss_interpretation: "normalized placeholders; not performance measurements", +}, null, 2) + "\n"; +const files = { + "aggregate.csv": csv, + "aggregate.json": aggregateJson, + "report.md": report, + "figures/gates-vs-accuracy.svg": gatesSvg, + "figures/fraction-vs-recovery.svg": fractionSvg, + "figures/description-vs-gates.svg": descriptionSvg, + "environment.json": environment, +}; +const sha = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex"); +const existingManifest = path.join(output, "manifest.json"); +const sourceCommit = check && fs.existsSync(existingManifest) + ? JSON.parse(fs.readFileSync(existingManifest, "utf8")).source_commit + : childProcess.execFileSync("git", ["-C", repo, "rev-parse", "HEAD"], {encoding:"utf8"}).trim(); +const manifest = { + schema_version: isV2 ? 2 : 1, + source_commit: sourceCommit, + trial_rows: records.length, + files: Object.fromEntries([ + ["config.json", sha(fs.readFileSync(path.join(output, "config.json")))], + ["tasks.json", sha(fs.readFileSync(path.join(output, "tasks.json")))], + ...(isV2 + ? [["raw-measured.jsonl", sha(raw)], ["semantic.jsonl", sha(semanticRaw)]] + : [["raw.jsonl", sha(raw)]]), + ...Object.entries(files).map(([name, contents]) => [name, sha(contents)]), + ]), + ...(isV2 ? { + projection: { + schema_version: 2, + excluded_fields: [ + "runtime_micros", + "peak_rss_bytes", + "host_identifier", + "process_id", + "started_unix_micros", + ], + }, + } : {}), + external: { + abc_lock_sha256: sha(fs.readFileSync(path.join(repo, "tools/abc/LOCK.json"))), + optimization_report_sha256: sha(fs.readFileSync(path.join(repo, "challenge-71-occam/solutions/rewrite-it-in-rust/optimization/report.json"))), + ...(isV2 ? { + independent_tool_audit_sha256: sha(fs.readFileSync(path.join(output, "tool-audit.json"))), + } : {}), + }, +}; +files["manifest.json"] = JSON.stringify(manifest, null, 2) + "\n"; +if (check) { + for (const [name, contents] of Object.entries(files)) { + const actual = fs.readFileSync(path.join(output, name), "utf8"); + if (actual !== contents) throw new Error(`${name} is not reproducible`); + } + console.log("Occam research aggregates, report, figures, and manifest are reproducible."); +} else { + for (const [name, contents] of Object.entries(files)) { + const destination = path.join(output, name); + fs.mkdirSync(path.dirname(destination), {recursive:true}); + fs.writeFileSync(destination, contents); + } + console.log(`Rendered Occam research evidence at ${output}`); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-oracle-report b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-oracle-report new file mode 100755 index 000000000..ee2543849 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/render-oracle-report @@ -0,0 +1,178 @@ +#!/usr/bin/env python3 +import argparse +import difflib +import json +import os +import re +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +MANIFEST = ROOT / "tests" / "oracles" / "occam-v1.json" +REPORT = ROOT / "docs" / "oracle-results.md" +BEGIN = "" +END = "" +ARCHIVE_KEYS = {"url", "sha256"} +CASE_KEYS = { + "name", + "circuit", + "dataset", + "gates", + "samples", + "exact_matches", + "correct_bits", + "total_bits", +} + + +def require_object(value, context): + if not isinstance(value, dict): + raise ValueError(f"{context} must be an object") + return value + + +def require_exact_keys(value, expected, context): + actual = set(value) + if actual != expected: + missing = sorted(expected - actual) + extra = sorted(actual - expected) + raise ValueError(f"{context} keys differ: missing={missing}, extra={extra}") + + +def require_integer(value, context, minimum=0): + if isinstance(value, bool) or not isinstance(value, int) or value < minimum: + raise ValueError(f"{context} must be an integer >= {minimum}") + return value + + +def load_manifest(): + manifest = require_object( + json.loads(MANIFEST.read_text(encoding="utf-8")), "manifest" + ) + require_exact_keys(manifest, {"schema_version", "archive", "cases"}, "manifest") + if require_integer(manifest["schema_version"], "schema_version") != 1: + raise ValueError("unsupported manifest schema") + + archive = require_object(manifest["archive"], "archive") + require_exact_keys(archive, ARCHIVE_KEYS, "archive") + if not isinstance(archive["url"], str) or not archive["url"].startswith( + "https://github.com/" + ): + raise ValueError("archive URL must be a GitHub HTTPS URL") + if not isinstance(archive["sha256"], str) or not re.fullmatch( + r"[0-9a-f]{64}", archive["sha256"] + ): + raise ValueError("archive SHA-256 must be 64 lowercase hexadecimal characters") + + cases = manifest["cases"] + if not isinstance(cases, list) or not cases: + raise ValueError("cases must be a non-empty array") + names = set() + for index, raw_case in enumerate(cases): + case = require_object(raw_case, f"case {index}") + require_exact_keys(case, CASE_KEYS, f"case {index}") + name = case["name"] + if not isinstance(name, str) or not name: + raise ValueError(f"case {index} name must be non-empty") + if name in names: + raise ValueError(f"duplicate case name {name}") + names.add(name) + if not isinstance(case["dataset"], str) or not case["dataset"]: + raise ValueError(f"{name} dataset must be non-empty") + + circuit = require_object(case["circuit"], f"{name} circuit") + kind = circuit.get("kind") + if kind == "official_file": + require_exact_keys(circuit, {"kind", "path"}, f"{name} circuit") + if not isinstance(circuit["path"], str) or not circuit["path"]: + raise ValueError(f"{name} circuit path must be non-empty") + elif kind in ("generated_adder", "generated_multiplier"): + require_exact_keys(circuit, {"kind", "bits"}, f"{name} circuit") + require_integer(circuit["bits"], f"{name} circuit bits", 1) + else: + raise ValueError(f"{name} has unknown circuit kind {kind!r}") + + require_integer(case["gates"], f"{name} gates") + samples = require_integer(case["samples"], f"{name} samples", 1) + exact = require_integer(case["exact_matches"], f"{name} exact_matches") + correct = require_integer(case["correct_bits"], f"{name} correct_bits") + total = require_integer(case["total_bits"], f"{name} total_bits", 1) + if exact > samples: + raise ValueError(f"{name} exact_matches exceeds samples") + if correct > total: + raise ValueError(f"{name} correct_bits exceeds total_bits") + if total % samples != 0: + raise ValueError(f"{name} total_bits is not divisible by samples") + return manifest + + +def render_table(manifest): + lines = [ + BEGIN, + "", + f"Official archive SHA-256: `{manifest['archive']['sha256']}`", + "", + "| Case | Verifier | Gates | Samples | Exact matches | Correct bits | Total bits | Exact-match accuracy | Bit accuracy |", + "|---|---|---:|---:|---:|---:|---:|---:|---:|", + ] + for case in manifest["cases"]: + exact_accuracy = case["exact_matches"] / case["samples"] + bit_accuracy = case["correct_bits"] / case["total_bits"] + for verifier in ("Julia", "Rust scalar", "Rust packed"): + lines.append( + f"| {case['name']} | {verifier} | {case['gates']} | " + f"{case['samples']} | {case['exact_matches']} | " + f"{case['correct_bits']} | {case['total_bits']} | " + f"{exact_accuracy:.6f} | {bit_accuracy:.6f} |" + ) + lines.extend(["", END]) + return "\n".join(lines) + + +def replace_generated(report, generated): + if report.count(BEGIN) != 1 or report.count(END) != 1: + raise ValueError("Oracle report markers are missing or duplicated") + start = report.index(BEGIN) + finish = report.index(END) + len(END) + return report[:start] + generated + report[finish:] + + +def atomic_write(path, content): + descriptor, temporary = tempfile.mkstemp(prefix=path.name, dir=path.parent) + try: + with os.fdopen(descriptor, "w", encoding="utf-8") as stream: + stream.write(content) + os.replace(temporary, path) + except BaseException: + os.unlink(temporary) + raise + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--check", action="store_true") + arguments = parser.parse_args() + + expected = replace_generated( + REPORT.read_text(encoding="utf-8"), render_table(load_manifest()) + ) + if arguments.check: + actual = REPORT.read_text(encoding="utf-8") + if actual != expected: + print( + "".join( + difflib.unified_diff( + actual.splitlines(keepends=True), + expected.splitlines(keepends=True), + fromfile=str(REPORT), + tofile=f"{REPORT} (generated)", + ) + ) + ) + raise SystemExit(1) + else: + atomic_write(REPORT, expected) + + +if __name__ == "__main__": + main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/root-occam-research-evidence b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/root-occam-research-evidence new file mode 100755 index 000000000..f995fb994 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/root-occam-research-evidence @@ -0,0 +1,165 @@ +#!/usr/bin/env node + +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const repo = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const solution = path.join( + repo, + "challenge-71-occam/solutions/rewrite-it-in-rust", +); +const generatedMdl = path.join(repo, "target/occam71-mdl"); +const study = path.join(repo, "experiments/occam-generalization"); +const staging = path.join(repo, "target/occam71-rooted-evidence"); +const check = process.argv.slice(2).includes("--check"); +if (process.argv.length > (check ? 3 : 2)) { + throw new Error("usage: root-occam-research-evidence [--check]"); +} + +const sha256 = (bytes) => + crypto.createHash("sha256").update(bytes).digest("hex"); +const read = (file) => fs.readFileSync(file); +const copy = (source, destination) => { + fs.mkdirSync(path.dirname(destination), { recursive: true }); + fs.copyFileSync(source, destination); +}; +const json = (value) => `${JSON.stringify(value, null, 2)}\n`; + +fs.rmSync(staging, { recursive: true, force: true }); +fs.mkdirSync(staging, { recursive: true }); +for (const directory of ["circuits", "predictions", "reports", "optimization"]) { + fs.cpSync(path.join(solution, directory), path.join(staging, directory), { + recursive: true, + }); +} + +const researchFiles = [ + "config.json", + "tasks.json", + "aggregate.csv", + "aggregate.json", + "report.md", + "environment.json", + "manifest.json", + "figures/gates-vs-accuracy.svg", + "figures/fraction-vs-recovery.svg", + "figures/description-vs-gates.svg", +]; +for (const relative of researchFiles) { + copy(path.join(study, relative), path.join(staging, "research", relative)); +} + +const officialMdlReports = {}; +for (const instance of [ + "mystery-A", + "mystery-B", + "mystery-C", + "mystery-D", +]) { + const generatedSource = path.join(generatedMdl, instance, "report.json"); + const source = + check && !fs.existsSync(generatedSource) + ? path.join(solution, "mdl-reports", `${instance}.json`) + : generatedSource; + if (!fs.existsSync(source)) { + throw new Error( + `${source} is absent; run scripts/learn-occam71-mdl.sh first`, + ); + } + const bytes = read(source); + const report = JSON.parse(bytes); + if ( + report.schema_version !== 2 || + report.learner !== "mdl-enumerator" || + report.exhaustive_mismatches !== 0 || + report.commitment_matches !== true + ) { + throw new Error(`${instance} MDL report is not release-grade`); + } + const relative = `mdl-reports/${instance}.json`; + copy(source, path.join(staging, relative)); + officialMdlReports[instance] = { + report_path: relative, + report_sha256: sha256(bytes), + expression: report.expression, + description_cost: report.description_cost, + minimum_unique: report.minimum_unique, + compiled_gate_count: report.gate_count, + }; +} + +const studyManifestBytes = read(path.join(study, "manifest.json")); +const studyManifest = JSON.parse(studyManifestBytes); +const researchManifest = { + schema_version: 1, + protocol: "16 tasks × 8 fractions × 20 seeds × 8 methods", + trial_rows: studyManifest.trial_rows, + raw_matrix_sha256: studyManifest.files["raw.jsonl"], + study_manifest_path: "research/manifest.json", + study_manifest_sha256: sha256(studyManifestBytes), + official_mdl_reports: officialMdlReports, + limitations: [ + "No universal learner or global circuit minimality is claimed.", + "Partial-logic baselines use conservative zero completion.", + "Normalized runtime and RSS fields are not performance measurements.", + ], +}; +fs.writeFileSync( + path.join(staging, "research-manifest.json"), + json(researchManifest), +); + +const command = spawnSync( + "cargo", + [ + "run", + "--quiet", + "--release", + "-p", + "occam71_rust", + "--bin", + "occam71_rust", + "--manifest-path", + path.join(repo, "Cargo.toml"), + "--", + "write-manifest", + "--output-dir", + staging, + ], + { cwd: repo, encoding: "utf8" }, +); +if (command.status !== 0) { + process.stderr.write(command.stdout); + process.stderr.write(command.stderr); + process.exit(command.status ?? 1); +} + +const rootedFiles = [ + ...researchFiles.map((relative) => `research/${relative}`), + ...Object.keys(officialMdlReports).map( + (instance) => `mdl-reports/${instance}.json`, + ), + "research-manifest.json", + "manifest.json", +]; +if (check) { + for (const relative of rootedFiles) { + const actual = path.join(solution, relative); + const expected = path.join(staging, relative); + if (!fs.existsSync(actual) || !read(actual).equals(read(expected))) { + throw new Error(`rooted evidence differs: ${relative}`); + } + } + process.stdout.write("Rooted Occam research evidence is reproducible.\n"); +} else { + for (const directory of ["research", "mdl-reports"]) { + fs.rmSync(path.join(solution, directory), { recursive: true, force: true }); + } + for (const relative of rootedFiles) { + copy(path.join(staging, relative), path.join(solution, relative)); + } + process.stdout.write(`Rooted Occam research evidence at ${solution}\n`); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-benchmarks.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-benchmarks.sh new file mode 100755 index 000000000..ded610634 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-benchmarks.sh @@ -0,0 +1,104 @@ +#!/bin/sh +set -eu + +mode=${1:-full} +if [ "$mode" != "full" ] && [ "$mode" != "--verify-only" ]; then + echo "usage: $0 [full|--verify-only]" >&2 + exit 2 +fi + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +generated="benchmarks/generated" +results="benchmarks/results" +raw="$results/raw" +binary="target/release/occam71_rust" + +if [ ! -f "vendor/occam-circuit/verify.jl" ]; then + "./scripts/fetch-occam-data.sh" +fi + +mkdir -p "$generated" "$results" "$raw" +cargo build --quiet --release --manifest-path "Cargo.toml" -p occam71_rust + +{ + date -u '+utc=%Y-%m-%dT%H:%M:%SZ' + pmset -g batt | sed -n "1s/^/power_source=/p" + pmset -g batt | sed -n '2s/.*\t\([0-9][0-9]*%; [^;]*\).*/battery_state=\1/p' + pmset -g custom | awk '/lowpowermode/{print "lowpowermode=" $2; exit}' + uptime | sed 's/^/system_load=/' +} > "$raw/apple-m4-environment.txt" + +"$binary" generate-adder --bits 8 --output "$generated/add-8.txt" +"$binary" generate-dataset --operation add --bits 8 --samples 100000 \ + --seed 115008 --output "$generated/add-8-100000.csv" +"$binary" generate-adder --bits 16 --output "$generated/add-16.txt" +"$binary" generate-dataset --operation add --bits 16 --samples 100000 \ + --seed 115016 --output "$generated/add-16-100000.csv" +"$binary" generate-multiplier --bits 4 --output "$generated/mul-4.txt" +"$binary" generate-dataset --operation multiply --bits 4 --samples 100000 \ + --seed 115004 --output "$generated/mul-4-100000.csv" + +verify_case() { + label=$1 + circuit=$2 + dataset=$3 + "$binary" verify --backend cross-check --circuit "$circuit" --dataset "$dataset" \ + > "$raw/$label-cross-check.txt" + julia "vendor/occam-circuit/verify.jl" "$circuit" "$dataset" \ + > "$raw/$label-julia-verify.txt" +} + +verify_case official-add-8 \ + "vendor/occam-circuit/adder8.txt" \ + "vendor/occam-circuit/datasets/mystery-A/train.csv" +verify_case add-8-100000 "$generated/add-8.txt" "$generated/add-8-100000.csv" +verify_case add-16-100000 "$generated/add-16.txt" "$generated/add-16-100000.csv" +verify_case mul-4-100000 "$generated/mul-4.txt" "$generated/mul-4-100000.csv" + +if [ "$mode" = "--verify-only" ]; then + echo "all Julia/Rust correctness checks passed" + exit 0 +fi + +benchmark_case() { + label=$1 + circuit=$2 + dataset=$3 + order=$4 + for backend in $order; do + "$binary" benchmark --backend "$backend" --warmup 5 --iterations 30 --batches 5 \ + --circuit "$circuit" --dataset "$dataset" \ + --json "$results/$label-$backend.json" \ + > "$raw/$label-$backend-summary.txt" + for repetition in 1 2 3 4 5; do + /usr/bin/time -l -o "$raw/$label-$backend-process-time-$repetition.txt" \ + "$binary" verify --backend "$backend" --circuit "$circuit" --dataset "$dataset" \ + > "$raw/$label-$backend-process-output-$repetition.txt" + done + done + for repetition in 1 2 3 4 5; do + /usr/bin/time -l -o "$raw/$label-julia-process-time-$repetition.txt" \ + julia "vendor/occam-circuit/verify.jl" "$circuit" "$dataset" \ + > "$raw/$label-julia-process-output-$repetition.txt" + done +} + +benchmark_case official-add-8 \ + "vendor/occam-circuit/adder8.txt" \ + "vendor/occam-circuit/datasets/mystery-A/train.csv" "scalar packed" +benchmark_case add-8-100000 "$generated/add-8.txt" "$generated/add-8-100000.csv" \ + "packed scalar" +benchmark_case add-16-100000 "$generated/add-16.txt" "$generated/add-16-100000.csv" \ + "scalar packed" +benchmark_case mul-4-100000 "$generated/mul-4.txt" "$generated/mul-4-100000.csv" \ + "packed scalar" + +./scripts/summarize-process-results \ + --raw "$raw" \ + --protocol benchmarks/protocols/apple-m4.json \ + --environment "$raw/apple-m4-environment.txt" \ + --output "$results/apple-m4-process.json" + +echo "benchmark results written to $repo_root/$results" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-ingestion-benchmarks.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-ingestion-benchmarks.sh new file mode 100755 index 000000000..b81636ccf --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-ingestion-benchmarks.sh @@ -0,0 +1,111 @@ +#!/bin/sh +set -eu + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +output=${1:-benchmarks/experiments/2026-07-28-direct-ingestion-apple-m4} +generated=benchmarks/generated +raw=benchmarks/results/raw/ingestion +binary=target/release/occam71_rust +mkdir -p "$output" "$generated" "$raw" + +cargo build --quiet --release -p occam71_rust + +"$binary" generate-adder --bits 8 --output "$generated/add-8.txt" +"$binary" generate-multiplier --bits 4 --output "$generated/mul-4.txt" + +generate_case() { + operation=$1 + bits=$2 + samples=$3 + seed=$4 + path=$5 + "$binary" generate-dataset --operation "$operation" --bits "$bits" \ + --samples "$samples" --seed "$seed" --output "$path" +} + +generate_case add 8 100000 115008 "$generated/add-8-100000.csv" +generate_case add 8 1000000 115108 "$generated/add-8-1000000.csv" +generate_case multiply 4 100000 115004 "$generated/mul-4-100000.csv" +generate_case multiply 4 1000000 115104 "$generated/mul-4-1000000.csv" + +run_case() { + label=$1 + circuit=$2 + dataset=$3 + + "$binary" benchmark --backend packed --warmup 5 --iterations 30 --batches 5 \ + --circuit "$circuit" --dataset "$dataset" --json "$output/$label.json" \ + > "$raw/$label-benchmark.txt" + + for backend in packed packed-legacy; do + for repetition in 1 2 3 4 5; do + /usr/bin/time -l -o "$raw/$label-$backend-$repetition.time" \ + "$binary" verify --backend "$backend" --circuit "$circuit" \ + --dataset "$dataset" > "$raw/$label-$backend-$repetition.out" + done + done +} + +run_case add-8-100000 "$generated/add-8.txt" "$generated/add-8-100000.csv" +run_case add-8-1000000 "$generated/add-8.txt" "$generated/add-8-1000000.csv" +run_case mul-4-100000 "$generated/mul-4.txt" "$generated/mul-4-100000.csv" +run_case mul-4-1000000 "$generated/mul-4.txt" "$generated/mul-4-1000000.csv" + +python3 - "$raw" "$output/process.json" <<'PY' +import json +import platform +import re +import statistics +import subprocess +import sys +from pathlib import Path + +raw = Path(sys.argv[1]) +destination = Path(sys.argv[2]) +cases = ("add-8-100000", "add-8-1000000", "mul-4-100000", "mul-4-1000000") + +def parse_time(path): + text = path.read_text() + wall = re.search(r"([0-9.]+) real", text) + rss = re.search(r"([0-9]+) maximum resident set size", text) + if wall is None or rss is None: + raise SystemExit(f"cannot parse {path}") + return float(wall.group(1)), int(rss.group(1)) + +processor = platform.processor() +if processor in ("", "arm", "arm64", "aarch64"): + processor = "Apple M4" + +result = { + "schema_version": 1, + "profile": "apple-m4-direct-ingestion", + "platform": platform.platform(), + "processor": processor, + "rustc": subprocess.check_output(["rustc", "--version"], text=True).strip(), + "repetitions": 5, + "cases": {}, +} +for case in cases: + result["cases"][case] = {} + for backend in ("packed", "packed-legacy"): + measurements = [ + parse_time(raw / f"{case}-{backend}-{index}.time") + for index in range(1, 6) + ] + wall = [item[0] for item in measurements] + rss = [item[1] for item in measurements] + result["cases"][case][backend] = { + "wall_seconds": wall, + "maximum_resident_bytes": rss, + "median_wall_seconds": statistics.median(wall), + "median_maximum_resident_bytes": statistics.median(rss), + } +destination.write_text(json.dumps(result, indent=2) + "\n") +PY + +./scripts/render-ingestion-report --output "$output/report.md" \ + --results "$output" + +echo "direct-ingestion benchmark artifacts written to $output" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-occam-experiments.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-occam-experiments.sh new file mode 100755 index 000000000..151e26b1c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-occam-experiments.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +config="$repo_root/experiments/occam-generalization-v2/config.json" +tasks="$repo_root/experiments/occam-generalization-v2/tasks.json" +output="$repo_root/experiments/occam-generalization-v2" +jobs=1 +check=false +smoke=false + +while (($#)); do + case "$1" in + --config) config=$2; shift 2 ;; + --tasks) tasks=$2; shift 2 ;; + --output) output=$2; shift 2 ;; + --jobs) jobs=$2; shift 2 ;; + --check) check=true; shift ;; + --smoke) smoke=true; shift ;; + *) echo "unknown argument: $1" >&2; exit 2 ;; + esac +done + +cargo build --quiet --release -p occam71_rust --manifest-path "$repo_root/Cargo.toml" +binary="$repo_root/target/release/occam71_rust" +"$repo_root/scripts/fetch-abc.sh" +abc="$repo_root/target/tools/abc/e76768b9d34f9dc67cb6608efecd55db271ff849/abc" + +if [[ "$smoke" == true ]]; then + config="$repo_root/experiments/occam-generalization-v2/smoke-config.json" + output="$repo_root/target/occam-research-smoke" +fi +mkdir -p "$output" + +arguments=( + experiment-run + --config "$config" + --tasks "$tasks" + --raw-measured "$output/raw-measured.jsonl" + --semantic "$output/semantic.jsonl" + --abc "$abc" + --jobs "$jobs" +) +if [[ "$check" == true ]]; then + arguments+=(--check-semantic) +fi +"$binary" "${arguments[@]}" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-portable-benchmarks.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-portable-benchmarks.sh new file mode 100755 index 000000000..7dfe8b9d7 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/run-portable-benchmarks.sh @@ -0,0 +1,98 @@ +#!/bin/sh +set -eu + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +output=${1:-benchmarks/results/linux-x86-runner} +generated=benchmarks/generated +binary=target/release/occam71_rust +mkdir -p "$output" "$generated" + +./scripts/fetch-occam-data.sh +cargo build --quiet --release -p occam71_rust + +"$binary" generate-adder --bits 8 --output "$generated/add-8.txt" +"$binary" generate-dataset --operation add --bits 8 --samples 100000 \ + --seed 115008 --output "$generated/add-8-100000.csv" +"$binary" generate-adder --bits 16 --output "$generated/add-16.txt" +"$binary" generate-dataset --operation add --bits 16 --samples 100000 \ + --seed 115016 --output "$generated/add-16-100000.csv" +"$binary" generate-multiplier --bits 4 --output "$generated/mul-4.txt" +"$binary" generate-dataset --operation multiply --bits 4 --samples 100000 \ + --seed 115004 --output "$generated/mul-4-100000.csv" + +run_case() { + label=$1 + circuit=$2 + dataset=$3 + "$binary" verify --backend cross-check --circuit "$circuit" --dataset "$dataset" + julia vendor/occam-circuit/verify.jl "$circuit" "$dataset" + for backend in scalar packed; do + "$binary" benchmark --backend "$backend" --warmup 5 --iterations 30 --batches 5 \ + --circuit "$circuit" --dataset "$dataset" \ + --json "$output/$label-$backend.json" + done +} + +run_case official-add-8 vendor/occam-circuit/adder8.txt \ + vendor/occam-circuit/datasets/mystery-A/train.csv +run_case add-8-100000 "$generated/add-8.txt" "$generated/add-8-100000.csv" +run_case add-16-100000 "$generated/add-16.txt" "$generated/add-16-100000.csv" +run_case mul-4-100000 "$generated/mul-4.txt" "$generated/mul-4-100000.csv" + +python3 - "$output" <<'PY' +import json +import platform +import subprocess +import sys +from pathlib import Path + +output = Path(sys.argv[1]) +cases = ("official-add-8", "add-8-100000", "add-16-100000", "mul-4-100000") + +def command(*args): + return subprocess.check_output(args, text=True).strip() + +protocol = { + "schema_version": 1, + "profile": "github-actions-linux-x86-64", + "platform": platform.platform(), + "architecture": platform.machine(), + "processor": command("bash", "-lc", "lscpu | awk -F: '/Model name/{gsub(/^ +/,\"\",$2); print $2; exit}'"), + "logical_cores": int(command("nproc")), + "memory_bytes": int(command("bash", "-lc", "awk '/MemTotal/{print $2*1024}' /proc/meminfo")), + "rust": command("rustc", "--version"), + "julia": command("julia", "--version"), +} +(output / "protocol.json").write_text(json.dumps(protocol, indent=2) + "\n") + +lines = [ + "# Linux x86-64 GitHub Actions Benchmark", + "", + f"- Platform: {protocol['platform']}", + f"- Processor: {protocol['processor']}", + f"- Logical cores: {protocol['logical_cores']}", + f"- Memory: {protocol['memory_bytes'] / 1e9:.1f} GB", + f"- Rust: `{protocol['rust']}`", + f"- Julia: `{protocol['julia']}`", + "", + "| Case | Samples | Gates | Scalar median ms | Packed median ms | Speedup |", + "|---|---:|---:|---:|---:|---:|", +] +for case in cases: + scalar = json.loads((output / f"{case}-scalar.json").read_text()) + packed = json.loads((output / f"{case}-packed.json").read_text()) + assert scalar["schema_version"] == packed["schema_version"] == 3 + assert scalar["exact_matches"] == packed["exact_matches"] == scalar["samples"] + assert scalar["correct_bits"] == packed["correct_bits"] == scalar["total_bits"] + scalar_ns = scalar["evaluation"]["median_ns"] + packed_ns = packed["evaluation"]["median_ns"] + lines.append( + f"| {case} | {scalar['samples']:,} | {scalar['gates']} | " + f"{scalar_ns / 1e6:.6f} | {packed_ns / 1e6:.6f} | {scalar_ns / packed_ns:.2f}× |" + ) +(output / "report.md").write_text("\n".join(lines) + "\n") +PY + +echo "portable benchmark artifacts written to $output" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/solve-occam71.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/solve-occam71.sh new file mode 100755 index 000000000..0800c6cd5 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/solve-occam71.sh @@ -0,0 +1,57 @@ +#!/bin/sh +set -eu + +export LC_ALL=C + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +data_root="$repo_root/vendor/occam-circuit/datasets" +solution_root="$repo_root/challenge-71-occam/solutions/rewrite-it-in-rust" +mode=${1:-write} + +if [ ! -d "$data_root" ]; then + "$repo_root/scripts/fetch-occam-data.sh" +fi + +if [ "$mode" = "--check" ]; then + "$repo_root/scripts/learn-occam71-mdl.sh" --check + "$repo_root/scripts/optimize-occam71.sh" --check + "$repo_root/scripts/run-occam-experiments.sh" --check + "$repo_root/scripts/render-occam-research" \ + --raw "$repo_root/experiments/occam-generalization/raw.jsonl" \ + --output "$repo_root/experiments/occam-generalization" \ + --check + "$repo_root/scripts/root-occam-research-evidence" --check + cargo test --quiet -p occam71_rust --manifest-path "$repo_root/Cargo.toml" \ + --test optimized_artifacts + cargo test --quiet -p occam71_rust --manifest-path "$repo_root/Cargo.toml" \ + --test research_artifacts + cargo test --quiet -p occam71_rust --manifest-path "$repo_root/Cargo.toml" \ + --test solution_artifacts + julia --startup-file=no "$repo_root/scripts/verify-occam71.jl" + echo "Occam #71 optimized artifacts are reproducible and independently verified." + exit 0 +fi + +cargo build --release -p occam71_rust --manifest-path "$repo_root/Cargo.toml" +binary="$repo_root/target/release/occam71_rust" + +if [ "$mode" = "write" ]; then + generated_root="$solution_root" +else + echo "usage: $0 [--check]" >&2 + exit 2 +fi + +for suffix in A B C D; do + instance="mystery-$suffix" + "$binary" learn \ + --instance "$instance" \ + --train "$data_root/$instance/train.csv" \ + --test-inputs "$data_root/$instance/test_inputs.csv" \ + --commitment "$data_root/$instance/commitment.sha256" \ + --output-dir "$generated_root" +done + +"$binary" write-manifest --output-dir "$generated_root" + +echo "Occam #71 artifacts written to $solution_root" diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/summarize-process-results b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/summarize-process-results new file mode 100755 index 000000000..6932a4658 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/summarize-process-results @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import argparse +import json +import math +import os +import re +import statistics +import tempfile +from pathlib import Path + +CASES = ("official-add-8", "add-8-100000", "add-16-100000", "mul-4-100000") +BACKENDS = ("scalar", "packed", "julia") + + +def parse_time_file(path: Path) -> tuple[float, int]: + text = path.read_text(encoding="utf-8") + wall = re.search(r"^\s*([0-9.]+)\s+real\b", text, re.MULTILINE) + rss = re.search(r"^\s*([0-9]+)\s+maximum resident set size\b", text, re.MULTILINE) + if wall is None or rss is None: + raise ValueError(f"missing wall/RSS measurement in {path}") + wall_value = float(wall.group(1)) + rss_value = int(rss.group(1)) + if not math.isfinite(wall_value) or wall_value < 0 or rss_value <= 0: + raise ValueError(f"invalid wall/RSS measurement in {path}") + return wall_value, rss_value + + +def atomic_json(path: Path, value: object) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + descriptor, temporary = tempfile.mkstemp(prefix=path.name, dir=path.parent) + try: + with os.fdopen(descriptor, "w", encoding="utf-8") as stream: + json.dump(value, stream, indent=2, sort_keys=True) + stream.write("\n") + os.replace(temporary, path) + except BaseException: + os.unlink(temporary) + raise + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--raw", type=Path, required=True) + parser.add_argument("--protocol", type=Path, required=True) + parser.add_argument("--environment", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + arguments = parser.parse_args() + + protocol = json.loads(arguments.protocol.read_text(encoding="utf-8")) + repetitions = protocol["process_repetitions"] + if not isinstance(repetitions, int) or repetitions <= 0: + raise ValueError("process_repetitions must be positive") + result = { + "schema_version": 1, + "profile": protocol["profile"], + "environment_snapshot": arguments.environment.read_text(encoding="utf-8").splitlines(), + "cases": {}, + } + for case in CASES: + result["cases"][case] = {} + for backend in BACKENDS: + walls = [] + rss_values = [] + for repetition in range(1, repetitions + 1): + path = arguments.raw / f"{case}-{backend}-process-time-{repetition}.txt" + wall, rss = parse_time_file(path) + walls.append(wall) + rss_values.append(rss) + result["cases"][case][backend] = { + "wall_seconds": walls, + "median_wall_seconds": statistics.median(walls), + "rss_bytes": rss_values, + "median_rss_bytes": statistics.median_low(sorted(rss_values)), + } + atomic_json(arguments.output, result) + + +if __name__ == "__main__": + main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/update-occam71-submission-snapshot b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/update-occam71-submission-snapshot new file mode 100755 index 000000000..f320ff805 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/update-occam71-submission-snapshot @@ -0,0 +1,126 @@ +#!/usr/bin/env node + +import crypto from "node:crypto"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const repo = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); +const sourceRoot = path.join(repo, "challenge-71-occam"); +const destination = path.join( + sourceRoot, + "solutions/rewrite-it-in-rust/search", +); +const staging = path.join(repo, "target/occam71-submission-snapshot"); +const check = process.argv.slice(2).includes("--check"); +if (process.argv.length > (check ? 3 : 2)) { + throw new Error("usage: update-occam71-submission-snapshot [--check]"); +} + +const sha256 = (bytes) => + crypto.createHash("sha256").update(bytes).digest("hex"); +const listFiles = (root) => { + if (!fs.existsSync(root)) return []; + const output = []; + const visit = (directory) => { + for (const entry of fs.readdirSync(directory, { withFileTypes: true })) { + const full = path.join(directory, entry.name); + if (entry.isDirectory()) visit(full); + else output.push(path.relative(root, full)); + } + }; + visit(root); + return output.sort(); +}; + +fs.rmSync(staging, { recursive: true, force: true }); +fs.mkdirSync(path.join(staging, "src"), { recursive: true }); +fs.cpSync(path.join(sourceRoot, "src"), path.join(staging, "src"), { + recursive: true, +}); +fs.copyFileSync(path.join(sourceRoot, "Cargo.toml"), path.join(staging, "Cargo.toml")); +fs.copyFileSync(path.join(repo, "Cargo.lock"), path.join(staging, "Cargo.lock")); +fs.appendFileSync( + path.join(staging, "Cargo.toml"), + "\n# Keep this copied package independent when nested in another checkout.\n[workspace]\n", +); + +const rewrites = { + "src/research/process.rs": [ + [ + '../../../experiments/occam-generalization/tasks.json', + "../../../research/tasks.json", + ], + ], + "src/research/tasks.rs": [ + [ + '../../../experiments/occam-generalization/tasks.json', + "../../../research/tasks.json", + ], + ], +}; +for (const [relative, replacements] of Object.entries(rewrites)) { + const file = path.join(staging, relative); + let source = fs.readFileSync(file, "utf8"); + for (const [before, after] of replacements) { + if (!source.includes(before)) { + throw new Error(`snapshot rewrite source is absent in ${relative}`); + } + source = source.replaceAll(before, after); + } + fs.writeFileSync(file, source); +} + +const generatedFiles = listFiles(staging); +const conversion = { + schema_version: 1, + source: "challenge-71-occam", + generated_files: generatedFiles, + cargo_manifest_append: + "# Keep this copied package independent when nested in another checkout.\\n[workspace]", + rewrites, + files: Object.fromEntries( + generatedFiles.map((relative) => [ + relative, + sha256(fs.readFileSync(path.join(staging, relative))), + ]), + ), +}; +fs.writeFileSync( + path.join(staging, "conversion-manifest.json"), + `${JSON.stringify(conversion, null, 2)}\n`, +); + +const parityFiles = [...generatedFiles, "conversion-manifest.json"]; +if (check) { + for (const relative of parityFiles) { + const actual = path.join(destination, relative); + const expected = path.join(staging, relative); + if ( + !fs.existsSync(actual) || + !fs.readFileSync(actual).equals(fs.readFileSync(expected)) + ) { + throw new Error(`submission snapshot differs: ${relative}`); + } + } + const allowedExtras = new Set([ + ".gitignore", + "run-all.sh", + "tests/release_artifacts.rs", + ]); + for (const relative of listFiles(destination)) { + if (relative.startsWith("target/")) continue; + if (!parityFiles.includes(relative) && !allowedExtras.has(relative)) { + throw new Error(`unexpected submission snapshot file: ${relative}`); + } + } + process.stdout.write("Occam submission source snapshot is reproducible.\n"); +} else { + fs.mkdirSync(destination, { recursive: true }); + for (const relative of parityFiles) { + const target = path.join(destination, relative); + fs.mkdirSync(path.dirname(target), { recursive: true }); + fs.copyFileSync(path.join(staging, relative), target); + } + process.stdout.write(`Updated Occam submission source snapshot at ${destination}\n`); +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-occam71.jl b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-occam71.jl new file mode 100755 index 000000000..ef4048b63 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-occam71.jl @@ -0,0 +1,52 @@ +#!/usr/bin/env julia + +using SHA + +function capture_verifier(verifier::String, circuit::String, dataset::String) + command = `$(Base.julia_cmd()) --startup-file=no $verifier $circuit $dataset` + output = read(command, String) + exact_match = match(r"exact-match acc:\s+([0-9.]+)", output) + bit_match = match(r"bit accuracy:\s+([0-9.]+)", output) + exact_match === nothing && error("official verifier omitted exact-match accuracy") + bit_match === nothing && error("official verifier omitted bit accuracy") + exact = parse(Float64, only(exact_match.captures)) + bit = parse(Float64, only(bit_match.captures)) + exact == 1.0 || error("exact-match accuracy is $exact for $dataset") + bit == 1.0 || error("bit accuracy is $bit for $dataset") +end + +function expected_commitment(path::String) + fields = split(read(path, String)) + length(fields) == 2 || error("malformed commitment $path") + fields[2] == "test_outputs.csv" || error("unexpected commitment filename") + digest = fields[1] + occursin(r"^[0-9a-f]{64}$", digest) || error("malformed SHA-256 in $path") + digest +end + +function verify_case(root::String, name::String) + solution = joinpath(root, "challenge-71-occam", "solutions", "rewrite-it-in-rust") + official = joinpath(root, "vendor", "occam-circuit") + circuit = joinpath(solution, "circuits", "$name.txt") + training = joinpath(official, "datasets", name, "train.csv") + prediction = joinpath(solution, "predictions", name, "test_outputs.csv") + commitment = joinpath(official, "datasets", name, "commitment.sha256") + verifier = joinpath(official, "verify.jl") + + actual = bytes2hex(sha256(read(prediction))) + expected = expected_commitment(commitment) + actual == expected || + error("$name prediction hash mismatch: expected $expected, got $actual") + capture_verifier(verifier, circuit, training) + capture_verifier(verifier, circuit, prediction) + println("$name: Julia training and prediction verification passed ($actual)") +end + +function main() + root = normpath(joinpath(@__DIR__, "..")) + for suffix in ("A", "B", "C", "D") + verify_case(root, "mystery-$suffix") + end +end + +main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.jl b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.jl new file mode 100755 index 000000000..5b5121f1d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.jl @@ -0,0 +1,239 @@ +#!/usr/bin/env julia + +mutable struct JsonParser + data::Vector{UInt8} + position::Int +end + +function skip_whitespace!(parser::JsonParser) + while parser.position <= length(parser.data) && + parser.data[parser.position] in UInt8[0x20, 0x09, 0x0a, 0x0d] + parser.position += 1 + end +end + +function take_byte!(parser::JsonParser) + parser.position <= length(parser.data) || error("unexpected end of JSON") + byte = parser.data[parser.position] + parser.position += 1 + byte +end + +function expect_byte!(parser::JsonParser, expected::UInt8) + actual = take_byte!(parser) + actual == expected || + error("expected JSON byte $(Char(expected)), got $(Char(actual))") +end + +function parse_json_string!(parser::JsonParser) + expect_byte!(parser, UInt8('"')) + output = IOBuffer() + while true + byte = take_byte!(parser) + byte == UInt8('"') && return String(take!(output)) + if byte == UInt8('\\') + escaped = take_byte!(parser) + if escaped in UInt8['"', '\\', '/'] + write(output, escaped) + elseif escaped == UInt8('b') + write(output, UInt8(0x08)) + elseif escaped == UInt8('f') + write(output, UInt8(0x0c)) + elseif escaped == UInt8('n') + write(output, UInt8('\n')) + elseif escaped == UInt8('r') + write(output, UInt8('\r')) + elseif escaped == UInt8('t') + write(output, UInt8('\t')) + elseif escaped == UInt8('u') + digits = String(UInt8[take_byte!(parser) for _ in 1:4]) + codepoint = parse(UInt32, digits; base=16) + write(output, string(Char(codepoint))) + else + error("unsupported JSON escape") + end + else + byte >= 0x20 || error("control byte in JSON string") + write(output, byte) + end + end +end + +function parse_json_number!(parser::JsonParser) + start = parser.position + parser.data[parser.position] == UInt8('-') && (parser.position += 1) + while parser.position <= length(parser.data) && + isdigit(Char(parser.data[parser.position])) + parser.position += 1 + end + parser.position > start || error("invalid JSON number") + text = String(parser.data[start:parser.position-1]) + occursin(r"^-?(0|[1-9][0-9]*)$", text) || + error("manifest accepts integer JSON numbers only") + parse(Int, text) +end + +function parse_json_array!(parser::JsonParser) + expect_byte!(parser, UInt8('[')) + values = Any[] + skip_whitespace!(parser) + if parser.position <= length(parser.data) && + parser.data[parser.position] == UInt8(']') + parser.position += 1 + return values + end + while true + push!(values, parse_json_value!(parser)) + skip_whitespace!(parser) + separator = take_byte!(parser) + separator == UInt8(']') && return values + separator == UInt8(',') || error("expected comma or array end") + skip_whitespace!(parser) + end +end + +function parse_json_object!(parser::JsonParser) + expect_byte!(parser, UInt8('{')) + object = Dict{String,Any}() + skip_whitespace!(parser) + if parser.position <= length(parser.data) && + parser.data[parser.position] == UInt8('}') + parser.position += 1 + return object + end + while true + key = parse_json_string!(parser) + haskey(object, key) && error("duplicate JSON key $key") + skip_whitespace!(parser) + expect_byte!(parser, UInt8(':')) + skip_whitespace!(parser) + object[key] = parse_json_value!(parser) + skip_whitespace!(parser) + separator = take_byte!(parser) + separator == UInt8('}') && return object + separator == UInt8(',') || error("expected comma or object end") + skip_whitespace!(parser) + end +end + +function parse_literal!(parser::JsonParser, literal::String, value) + for byte in codeunits(literal) + expect_byte!(parser, byte) + end + value +end + +function parse_json_value!(parser::JsonParser) + skip_whitespace!(parser) + parser.position <= length(parser.data) || error("unexpected end of JSON") + byte = parser.data[parser.position] + byte == UInt8('{') && return parse_json_object!(parser) + byte == UInt8('[') && return parse_json_array!(parser) + byte == UInt8('"') && return parse_json_string!(parser) + byte == UInt8('t') && return parse_literal!(parser, "true", true) + byte == UInt8('f') && return parse_literal!(parser, "false", false) + byte == UInt8('n') && return parse_literal!(parser, "null", nothing) + (byte == UInt8('-') || isdigit(Char(byte))) && return parse_json_number!(parser) + error("unexpected JSON byte $(Char(byte))") +end + +function parse_json(path::String) + parser = JsonParser(read(path), 1) + value = parse_json_value!(parser) + skip_whitespace!(parser) + parser.position == length(parser.data) + 1 || error("trailing JSON content") + value +end + +function required(object::Dict{String,Any}, key::String, type) + haskey(object, key) || error("missing manifest field $key") + value = object[key] + value isa type || error("manifest field $key has wrong type") + value +end + +function materialize_circuit(root::String, case::Dict{String,Any}, directory::String) + circuit = required(case, "circuit", Dict{String,Any}) + kind = required(circuit, "kind", String) + if kind == "official_file" + return joinpath(root, "vendor", "occam-circuit", + required(circuit, "path", String)) + end + bits = required(circuit, "bits", Int) + bits > 0 || error("generated circuit bits must be positive") + output = joinpath(directory, required(case, "name", String) * ".txt") + command = kind == "generated_adder" ? "generate-adder" : + kind == "generated_multiplier" ? "generate-multiplier" : + error("unknown circuit kind $kind") + run(`$(joinpath(root, "target", "release", "occam71_rust")) $command --bits $bits --output $output`) + output +end + +function csv_shape(path::String) + lines = filter(!isempty, strip.(readlines(path))) + !isempty(lines) && lines[1] == "input,output" || error("bad dataset header") + rows = lines[2:end] + !isempty(rows) || error("dataset has no samples") + widths = split(rows[1], ",") + length(widths) == 2 || error("bad dataset row") + for row in rows + fields = split(row, ",") + length(fields) == 2 || error("bad dataset row") + length(fields[1]) == length(widths[1]) || error("input width mismatch") + length(fields[2]) == length(widths[2]) || error("output width mismatch") + end + length(rows), length(widths[2]) +end + +function capture_verifier(root::String, circuit::String, dataset::String) + command = `julia $(joinpath(root, "vendor", "occam-circuit", "verify.jl")) $circuit $dataset` + output = read(command, String) + gates = parse(Int, only(match(r"gates:\s+([0-9]+)", output).captures)) + samples = parse(Int, only(match(r"samples:\s+([0-9]+)", output).captures)) + exact = parse(Float64, only(match(r"exact-match acc:\s+([0-9.]+)", output).captures)) + bit = parse(Float64, only(match(r"bit accuracy:\s+([0-9.]+)", output).captures)) + gates, samples, exact, bit +end + +function main() + root = normpath(joinpath(@__DIR__, "..")) + manifest = parse_json(joinpath(root, "tests", "oracles", "occam-v1.json")) + required(manifest, "schema_version", Int) == 1 || + error("unsupported oracle manifest schema") + archive = required(manifest, "archive", Dict{String,Any}) + required(archive, "sha256", String) == + "c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b" || + error("unexpected archive checksum") + cases = required(manifest, "cases", Vector) + names = Set{String}() + mktempdir() do directory + for raw_case in cases + raw_case isa Dict{String,Any} || error("case must be an object") + case = raw_case::Dict{String,Any} + name = required(case, "name", String) + name in names && error("duplicate oracle case $name") + push!(names, name) + circuit = materialize_circuit(root, case, directory) + dataset = joinpath(root, "vendor", "occam-circuit", + required(case, "dataset", String)) + csv_samples, output_width = csv_shape(dataset) + gates, samples, exact, bit = capture_verifier(root, circuit, dataset) + expected_samples = required(case, "samples", Int) + total_bits = required(case, "total_bits", Int) + csv_samples == expected_samples || error("$name sample count mismatch") + total_bits == expected_samples * output_width || + error("$name total bit count mismatch") + gates == required(case, "gates", Int) || error("$name gate mismatch") + samples == expected_samples || error("$name verifier sample mismatch") + expected_exact = required(case, "exact_matches", Int) / expected_samples + expected_bit = required(case, "correct_bits", Int) / total_bits + isapprox(exact, expected_exact; atol=5e-7) || + error("$name exact accuracy mismatch") + isapprox(bit, expected_bit; atol=5e-7) || + error("$name bit accuracy mismatch") + println("oracle $name: verified") + end + end +end + +main() diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.sh new file mode 100755 index 000000000..6dfd3a52d --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-oracles.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eu + +repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +cd "$repo_root" + +./scripts/fetch-occam-data.sh +cargo build --quiet --release -p occam71_rust +julia ./scripts/verify-oracles.jl diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-synthesis-evidence.sh b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-synthesis-evidence.sh new file mode 100755 index 000000000..5c9bbbfac --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/scripts/verify-synthesis-evidence.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +temporary="$(mktemp -d "${TMPDIR:-/tmp}/occam71-synthesis.XXXXXX")" +trap 'rm -rf -- "$temporary"' EXIT + +cd "$root" + +cargo run --quiet --release -p occam71_rust --bin occam71_rust -- synthesize \ + --dataset challenge-71-occam/tests/fixtures/half-adder.csv \ + --max-gates 2 \ + --timeout-seconds 30 \ + --output "$temporary/half-adder.txt" \ + --certificate "$temporary/half-adder-certificate.json" + +cmp docs/synthesis/half-adder.txt "$temporary/half-adder.txt" + +python3 - \ + docs/synthesis/half-adder-certificate.json \ + "$temporary/half-adder-certificate.json" <<'PY' +import json +import sys + +def normalized(path): + with open(path, encoding="utf-8") as source: + certificate = json.load(source) + for attempt in certificate["attempts"]: + attempt["elapsed_ms"] = 0 + return certificate + +checked, regenerated = map(normalized, sys.argv[1:]) +if checked != regenerated: + raise SystemExit("regenerated synthesis certificate differs from checked-in evidence") +PY + +julia vendor/occam-circuit/verify.jl \ + "$temporary/half-adder.txt" \ + challenge-71-occam/tests/fixtures/half-adder.csv diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tests/oracles/occam-v1.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tests/oracles/occam-v1.json new file mode 100644 index 000000000..643ee18c3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tests/oracles/occam-v1.json @@ -0,0 +1,48 @@ +{ + "schema_version": 1, + "archive": { + "url": "https://github.com/QuantumBFS/quantum.harness/releases/download/occam-circuit-data-v1/occam-circuit.zip", + "sha256": "c15f84839a365dd9daab686ccfd58a50ce286d5f1071d7f093e9fdd091ecaa1b" + }, + "cases": [ + { + "name": "official-add-8", + "circuit": { + "kind": "official_file", + "path": "adder8.txt" + }, + "dataset": "datasets/mystery-A/train.csv", + "gates": 37, + "samples": 2000, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000 + }, + { + "name": "practice-add-n4", + "circuit": { + "kind": "generated_adder", + "bits": 4 + }, + "dataset": "datasets/practice-add-n4/train.csv", + "gates": 17, + "samples": 120, + "exact_matches": 120, + "correct_bits": 600, + "total_bits": 600 + }, + { + "name": "practice-mul-n4", + "circuit": { + "kind": "generated_multiplier", + "bits": 4 + }, + "dataset": "datasets/practice-mul-n4/train.csv", + "gates": 128, + "samples": 120, + "exact_matches": 120, + "correct_bits": 960, + "total_bits": 960 + } + ] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LICENSE.url b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LICENSE.url new file mode 100644 index 000000000..c47f23f61 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LICENSE.url @@ -0,0 +1 @@ +https://github.com/berkeley-abc/abc/blob/e76768b9d34f9dc67cb6608efecd55db271ff849/copyright.txt diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LOCK.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LOCK.json new file mode 100644 index 000000000..a6f162375 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/LOCK.json @@ -0,0 +1,9 @@ +{ + "schema_version": 1, + "repository": "https://github.com/berkeley-abc/abc", + "commit": "e76768b9d34f9dc67cb6608efecd55db271ff849", + "archive_url": "https://github.com/berkeley-abc/abc/archive/e76768b9d34f9dc67cb6608efecd55db271ff849.tar.gz", + "archive_sha256": "158a4bf861be010cf899c5cb20c159d1b2e68ae1b461bce7d2c10be348a8e159", + "archive_bytes": 7709448, + "build": ["make", "-j2", "ABC_USE_NO_READLINE=1"] +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/occam.genlib b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/occam.genlib new file mode 100644 index 000000000..877a29736 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/tools/abc/occam.genlib @@ -0,0 +1,10 @@ +GATE ZERO 0.0001 O=CONST0; +GATE ONE 0.0001 O=CONST1; +GATE INV 0.0001 O=!a; PIN * INV 1 999 1 0 1 0 +GATE BUF 0.0001 O=a; PIN * NONINV 1 999 1 0 1 0 +GATE AND2 1 O=a*b; PIN * NONINV 1 999 1 0 1 0 +GATE OR2 1 O=a+b; PIN * NONINV 1 999 1 0 1 0 +GATE NAND2 1 O=!(a*b); PIN * INV 1 999 1 0 1 0 +GATE NOR2 1 O=!(a+b); PIN * INV 1 999 1 0 1 0 +GATE XOR2 1 O=(a*!b)+(!a*b); PIN * UNKNOWN 1 999 1 0 1 0 +GATE XNOR2 1 O=(a*b)+(!a*!b); PIN * UNKNOWN 1 999 1 0 1 0 From c1bf94e67053943d27440fa48e978e07b922e6ef Mon Sep 17 00:00:00 2001 From: JunkaiWang-TheoPhy <1181100960@qq.com> Date: Fri, 31 Jul 2026 07:47:42 +0800 Subject: [PATCH 7/7] Publish #115 benchmark evidence Add the manifest-covered Apple M4 and Linux x86-64 benchmark reports and raw JSON records referenced by the public Rust-port review guide. Constraint: retain recorded measurements and protocols without rerunning or rewriting historical benchmark values. Co-authored-by: OmX --- .../benchmarks/results/2026-07-28-apple-m4.md | 78 ++++++ .../results/add-16-100000-packed.json | 257 ++++++++++++++++++ .../results/add-16-100000-scalar.json | 257 ++++++++++++++++++ .../results/add-8-100000-packed.json | 257 ++++++++++++++++++ .../results/add-8-100000-scalar.json | 257 ++++++++++++++++++ .../benchmarks/results/apple-m4-process.json | 237 ++++++++++++++++ .../add-16-100000-packed.json | 191 +++++++++++++ .../add-16-100000-scalar.json | 191 +++++++++++++ .../linux-x86-runner/add-8-100000-packed.json | 191 +++++++++++++ .../linux-x86-runner/add-8-100000-scalar.json | 191 +++++++++++++ .../linux-x86-runner/mul-4-100000-packed.json | 191 +++++++++++++ .../linux-x86-runner/mul-4-100000-scalar.json | 191 +++++++++++++ .../official-add-8-packed.json | 191 +++++++++++++ .../official-add-8-scalar.json | 191 +++++++++++++ .../results/linux-x86-runner/protocol.json | 11 + .../results/linux-x86-runner/report.md | 19 ++ .../results/mul-4-100000-packed.json | 257 ++++++++++++++++++ .../results/mul-4-100000-scalar.json | 257 ++++++++++++++++++ .../results/official-add-8-packed.json | 257 ++++++++++++++++++ .../results/official-add-8-scalar.json | 257 ++++++++++++++++++ 20 files changed, 3929 insertions(+) create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/2026-07-28-apple-m4.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/apple-m4-process.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/protocol.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/report.md create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-scalar.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-packed.json create mode 100644 tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-scalar.json diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/2026-07-28-apple-m4.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/2026-07-28-apple-m4.md new file mode 100644 index 000000000..8c09f87bd --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/2026-07-28-apple-m4.md @@ -0,0 +1,78 @@ +# Julia and Rust Verifier Benchmark — Apple M4 + +> Generated by `scripts/render-benchmark-report`; do not edit numeric tables manually. + +## Environment + +- Date: 2026-07-28 +- Machine: MacBook Air, Apple M4 +- CPU: 10 physical/logical cores +- Memory: 17.2 GB +- Architecture: arm64 +- Operating system: macOS 15.6 (24G84) +- Rust: `rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)` +- Julia: `julia version 1.12.6` +- Power source: Now drawing from 'Battery Power' +- Battery state: 6%; discharging +- Low-power mode: 0 +- Load snapshot: `1:57 up 52 days, 14:25, 20 users, load averages: 12.18 15.37 14.50` + +Serial numbers, hardware UUIDs, usernames, and absolute workspace paths are excluded. + +## Method + +Every case passed `Rust scalar == Rust packed == Julia` before timing. +Rust uses 5 independent batches; each batch has 5 warm-ups followed by 30 measured iterations. Scalar/packed process order alternates by case. JSON stores every raw timing, batch medians, standard deviation, and median absolute deviation (MAD). + +Process measurements use 5 independent runs under macOS /usr/bin/time -l. Julia time includes startup, JIT, parsing, evaluation, and output. + +## Rust Evaluator Results + +| Case | Samples | Gates | Scalar parse ms | Scalar median ms | Packed preprocess ms | Packed median ms | Evaluator speedup | One-shot speedup | +|---|---:|---:|---:|---:|---:|---:|---:|---:| +| official add-8 | 2,000 | 37 | 0.666 | 0.641541 | 0.426958 | 0.003792 | 169.18× | 2.29× | +| generated add-8 | 100,000 | 37 | 11.539 | 24.731666 | 14.103833 | 0.129792 | 190.55× | 2.48× | +| generated add-16 | 100,000 | 77 | 15.702 | 46.049979 | 22.406749 | 0.260874 | 176.52× | 2.71× | +| generated mul-4 | 100,000 | 128 | 11.822 | 66.140229 | 12.891958 | 0.504291 | 131.15× | 5.67× | + +## Dispersion + +| Case | Scalar stddev ms | Scalar MAD ms | Packed stddev ms | Packed MAD ms | +|---|---:|---:|---:|---:| +| official add-8 | 0.187314 | 0.035125 | 0.000031 | 0.000001 | +| generated add-8 | 2.488497 | 0.686832 | 0.102875 | 0.003604 | +| generated add-16 | 5.889343 | 2.347583 | 0.029526 | 0.014686 | +| generated mul-4 | 3.230651 | 0.920333 | 0.073136 | 0.058437 | + +## Throughput + +| Case | Scalar samples/s | Packed samples/s | +|---|---:|---:| +| official add-8 | 3,117,494 | 527,426,160 | +| generated add-8 | 4,043,399 | 770,463,511 | +| generated add-16 | 2,171,554 | 383,326,817 | +| generated mul-4 | 1,511,939 | 198,298,205 | + +## Startup-Inclusive Process Measurements + +| Case | Rust scalar wall s | Rust packed wall s | Julia wall s | Rust scalar peak RSS | Rust packed peak RSS | Julia peak RSS | +|---|---:|---:|---:|---:|---:|---:| +| official add-8 | <0.01 | <0.01 | 1.49 | 2.1 MB | 1.9 MB | 314.7 MB | +| generated add-8 | 0.05 | 0.02 | 2.59 | 12.8 MB | 5.5 MB | 325.5 MB | +| generated add-16 | 0.07 | 0.02 | 3.48 | 18.3 MB | 9.0 MB | 329.4 MB | +| generated mul-4 | 0.09 | 0.01 | 4.30 | 11.7 MB | 5.6 MB | 322.6 MB | + +## Interpretation + +The recorded Apple M4 results show a 131–191× evaluator-only packed speedup and a 2.3–5.7× production one-shot speedup after charging parsing and compilation. + +The production packed path includes direct CSV ingestion and one-time circuit compilation. Parsing is larger than packed evaluation on the generated cases, so text ingestion is now the dominant optimization target. + +Julia process results are end-to-end evidence for the unmodified official verifier, not a language-only kernel comparison. The controlled performance conclusion is the Rust scalar-versus-packed comparison under the same parser, circuit, metrics, compiler, and hardware. + +## Reproduction + +```bash +./scripts/run-benchmarks.sh +./scripts/render-benchmark-report --check --profile apple-m4 +``` diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-packed.json new file mode 100644 index 000000000..bce8566d6 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-packed.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 311584, + 302917, + 293750, + 302167, + 297709, + 284750, + 288000, + 288917, + 270791, + 272875, + 286291, + 281542, + 281208, + 286125, + 288334, + 274667, + 272000, + 266500, + 267417, + 239584, + 281209, + 276084, + 266250, + 271541, + 272792, + 273166, + 264333, + 280917, + 274167, + 276875, + 238125, + 237708, + 243333, + 231958, + 221333, + 221542, + 221166, + 223708, + 223375, + 227167, + 225334, + 223625, + 223750, + 224917, + 226375, + 224500, + 223333, + 223625, + 223791, + 249750, + 247208, + 247208, + 247500, + 247042, + 246291, + 246959, + 245959, + 248917, + 246917, + 247875, + 260167, + 262791, + 258292, + 259125, + 266250, + 264375, + 260916, + 260792, + 258209, + 261083, + 259541, + 260917, + 261667, + 266958, + 263958, + 257041, + 260667, + 260166, + 260417, + 268875, + 351792, + 365792, + 345750, + 360834, + 363541, + 383917, + 257541, + 264917, + 260833, + 265791, + 288833, + 283792, + 283875, + 281750, + 296333, + 276167, + 278833, + 273208, + 270000, + 280291, + 280542, + 270667, + 275625, + 283084, + 281334, + 270417, + 271833, + 271708, + 236500, + 269000, + 272500, + 265583, + 270667, + 274875, + 270375, + 264083, + 226875, + 271917, + 272666, + 273417, + 245208, + 237708, + 241041, + 230875, + 222042, + 221584, + 229083, + 227167, + 222875, + 221667, + 221583, + 222666, + 224625, + 247458, + 246167, + 248375, + 245792, + 246833, + 246291, + 248833, + 250208, + 248834, + 246959, + 246209, + 247625, + 246750, + 246125, + 248125, + 246042, + 246959 + ], + "batch_medians_ns": [ + 278896, + 229562, + 261375, + 272937, + 246083 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 22474625, + "packing_ns": 22406749, + "circuit_parse_ns": 77959, + "scalar_dataset_parse_ns": 14841000, + "legacy_pack_ns": 2668209, + "direct_packed_parse_ns": 22396666, + "compilation_ns": 10083, + "one_shot_ns": 22745582, + "scalar_dataset_parse_iterations_ns": [ + 14076250, + 16822000, + 14580875, + 15760917, + 14841000 + ], + "legacy_pack_iterations_ns": [ + 2616458, + 2952083, + 2916084, + 2668209, + 2211958 + ], + "direct_packed_parse_iterations_ns": [ + 22002125, + 22105333, + 22396666, + 23766625, + 22404167 + ], + "compilation_iterations_ns": [ + 4417, + 22458, + 10083, + 10416, + 6541 + ], + "scalar_dataset_parse": { + "minimum_ns": 14076250, + "mean_ns": 15216208.4, + "median_ns": 14841000, + "p95_ns": 16822000, + "standard_deviation_ns": 971515.223541165, + "median_absolute_deviation_ns": 764750 + }, + "legacy_pack": { + "minimum_ns": 2211958, + "mean_ns": 2672958.4, + "median_ns": 2668209, + "p95_ns": 2952083, + "standard_deviation_ns": 265615.06753239734, + "median_absolute_deviation_ns": 247875 + }, + "direct_packed_parse": { + "minimum_ns": 22002125, + "mean_ns": 22534983.2, + "median_ns": 22396666, + "p95_ns": 23766625, + "standard_deviation_ns": 635880.9959690257, + "median_absolute_deviation_ns": 291333 + }, + "compilation": { + "minimum_ns": 4417, + "mean_ns": 10783.0, + "median_ns": 10083, + "p95_ns": 22458, + "standard_deviation_ns": 6252.212952227394, + "median_absolute_deviation_ns": 3542 + }, + "evaluation": { + "minimum_ns": 221166, + "mean_ns": 261574.18, + "median_ns": 260874, + "p95_ns": 302917, + "standard_deviation_ns": 29525.971768613017, + "median_absolute_deviation_ns": 14686 + }, + "samples_per_second_at_median": 383326816.77744806, + "gate_evaluations_per_second_at_median": 29516164891.863503, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-scalar.json new file mode 100644 index 000000000..5c6824abf --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-16-100000-scalar.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "scalar", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 44620000, + 44453792, + 45671334, + 43652792, + 43868916, + 43251042, + 43250041, + 44263708, + 51004167, + 48287792, + 43949416, + 43635958, + 44920375, + 43468000, + 44998958, + 46240791, + 44553334, + 43763709, + 43782708, + 44361708, + 43531792, + 44209542, + 44981750, + 43722750, + 45884500, + 45117292, + 45143666, + 44236291, + 44612500, + 43441500, + 43548792, + 43558667, + 45069916, + 48859458, + 47350167, + 47298125, + 43451625, + 44155834, + 43578375, + 44937958, + 47708959, + 44694000, + 44064000, + 44373000, + 46139958, + 44941541, + 43463833, + 45798458, + 56828209, + 59912583, + 55174167, + 51118250, + 50891291, + 52496334, + 55787584, + 52701875, + 55406709, + 55300417, + 58218625, + 54069417, + 47516333, + 59930500, + 62070458, + 52669125, + 45249958, + 50799792, + 48763542, + 46009875, + 47988000, + 55556750, + 67090375, + 71259083, + 67764042, + 45290750, + 57039958, + 52941708, + 45051709, + 49515708, + 46471917, + 46090083, + 44787875, + 46339209, + 52199250, + 50590791, + 52611333, + 47110417, + 48890792, + 49774875, + 53672500, + 49540000, + 48532375, + 53203042, + 60648375, + 70434083, + 45254708, + 53180708, + 52813959, + 52754541, + 63111125, + 44393500, + 62689916, + 56421083, + 54217542, + 55235208, + 46918625, + 53864583, + 50428875, + 47039500, + 59618375, + 51056083, + 44517625, + 50092333, + 51707166, + 48104625, + 45196959, + 45119042, + 45267000, + 44349916, + 46601916, + 45333666, + 43832792, + 46358334, + 47972750, + 43084084, + 43583917, + 43503042, + 44500333, + 46714750, + 46318417, + 43599416, + 47357542, + 43350041, + 43271250, + 44211083, + 45426250, + 45253792, + 43734250, + 43059000, + 44857583, + 49243875, + 44144708, + 44211000, + 43412209, + 47145417, + 47008500, + 45080500, + 43682042, + 43158541, + 42999708, + 45629959 + ], + "batch_medians_ns": [ + 44312708, + 47324146, + 49657437, + 50742479, + 44211041 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 15701584, + "packing_ns": null, + "circuit_parse_ns": 649459, + "scalar_dataset_parse_ns": 15052125, + "legacy_pack_ns": 2601542, + "direct_packed_parse_ns": 22309875, + "compilation_ns": 7834, + "one_shot_ns": 61751563, + "scalar_dataset_parse_iterations_ns": [ + 15092125, + 14702333, + 14518209, + 15052125, + 15204292 + ], + "legacy_pack_iterations_ns": [ + 2645667, + 2863541, + 2512833, + 2601542, + 2407250 + ], + "direct_packed_parse_iterations_ns": [ + 21883208, + 22285250, + 22309875, + 22529417, + 23359042 + ], + "compilation_iterations_ns": [ + 51500, + 4667, + 31583, + 7834, + 3000 + ], + "scalar_dataset_parse": { + "minimum_ns": 14518209, + "mean_ns": 14913816.8, + "median_ns": 15052125, + "p95_ns": 15204292, + "standard_deviation_ns": 259433.9003572201, + "median_absolute_deviation_ns": 152167 + }, + "legacy_pack": { + "minimum_ns": 2407250, + "mean_ns": 2606166.6, + "median_ns": 2601542, + "p95_ns": 2863541, + "standard_deviation_ns": 152382.56130226975, + "median_absolute_deviation_ns": 88709 + }, + "direct_packed_parse": { + "minimum_ns": 21883208, + "mean_ns": 22473358.4, + "median_ns": 22309875, + "p95_ns": 23359042, + "standard_deviation_ns": 489482.8072137366, + "median_absolute_deviation_ns": 219542 + }, + "compilation": { + "minimum_ns": 3000, + "mean_ns": 19716.8, + "median_ns": 7834, + "p95_ns": 51500, + "standard_deviation_ns": 18963.793517120987, + "median_absolute_deviation_ns": 4834 + }, + "evaluation": { + "minimum_ns": 42999708, + "mean_ns": 48441176.653333336, + "median_ns": 46049979, + "p95_ns": 60648375, + "standard_deviation_ns": 5889343.279793287, + "median_absolute_deviation_ns": 2347583 + }, + "samples_per_second_at_median": 2171553.650437061, + "gate_evaluations_per_second_at_median": 167209631.08365372, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-packed.json new file mode 100644 index 000000000..7608794fa --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-packed.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 127542, + 126917, + 121000, + 113541, + 119000, + 115625, + 122167, + 128791, + 130208, + 1385834, + 257167, + 146958, + 141625, + 137209, + 135125, + 130167, + 124042, + 127125, + 129541, + 127042, + 127125, + 128709, + 126667, + 125625, + 122541, + 125833, + 123000, + 122208, + 123500, + 125125, + 123416, + 122917, + 123375, + 125750, + 126208, + 142667, + 127875, + 129000, + 125833, + 127417, + 125584, + 123709, + 125500, + 130583, + 128042, + 127625, + 129792, + 131375, + 131083, + 133375, + 128458, + 124834, + 123375, + 123625, + 129792, + 122833, + 123000, + 123209, + 123000, + 122750, + 122584, + 122834, + 122875, + 122917, + 122750, + 123167, + 123375, + 122833, + 122958, + 126542, + 133209, + 136333, + 140583, + 135333, + 137333, + 135292, + 144584, + 142042, + 131208, + 130791, + 131125, + 132541, + 131917, + 129792, + 131250, + 132709, + 132667, + 133291, + 130292, + 130250, + 131458, + 132583, + 131709, + 130958, + 130958, + 130625, + 131209, + 131250, + 130500, + 131666, + 129709, + 133834, + 136375, + 134542, + 133042, + 134500, + 132458, + 130916, + 130833, + 132375, + 135708, + 137291, + 131834, + 134250, + 133000, + 131166, + 123417, + 136417, + 133000, + 131709, + 131125, + 133167, + 131542, + 139333, + 132416, + 135208, + 124000, + 127875, + 126333, + 125791, + 129667, + 131541, + 129375, + 133167, + 129792, + 128916, + 128750, + 132458, + 133416, + 132917, + 132250, + 134084, + 123167, + 122416, + 123083, + 121875, + 122208, + 122125, + 122833, + 122292 + ], + "batch_medians_ns": [ + 126979, + 125791, + 131166, + 131771, + 129521 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 14512583, + "packing_ns": 14103833, + "circuit_parse_ns": 415458, + "scalar_dataset_parse_ns": 11558209, + "legacy_pack_ns": 1238292, + "direct_packed_parse_ns": 14097125, + "compilation_ns": 6708, + "one_shot_ns": 14649083, + "scalar_dataset_parse_iterations_ns": [ + 11167208, + 11281625, + 11558209, + 11777875, + 11833292 + ], + "legacy_pack_iterations_ns": [ + 1462792, + 1191042, + 1231750, + 1298875, + 1238292 + ], + "direct_packed_parse_iterations_ns": [ + 13959500, + 14106917, + 14097125, + 14007667, + 14236333 + ], + "compilation_iterations_ns": [ + 18583, + 6708, + 6875, + 3625, + 3250 + ], + "scalar_dataset_parse": { + "minimum_ns": 11167208, + "mean_ns": 11523641.8, + "median_ns": 11558209, + "p95_ns": 11833292, + "standard_deviation_ns": 263563.97436781833, + "median_absolute_deviation_ns": 275083 + }, + "legacy_pack": { + "minimum_ns": 1191042, + "mean_ns": 1284550.2, + "median_ns": 1238292, + "p95_ns": 1462792, + "standard_deviation_ns": 95547.6894715932, + "median_absolute_deviation_ns": 47250 + }, + "direct_packed_parse": { + "minimum_ns": 13959500, + "mean_ns": 14081508.4, + "median_ns": 14097125, + "p95_ns": 14236333, + "standard_deviation_ns": 95077.58299325872, + "median_absolute_deviation_ns": 89458 + }, + "compilation": { + "minimum_ns": 3250, + "mean_ns": 7808.2, + "median_ns": 6708, + "p95_ns": 18583, + "standard_deviation_ns": 5593.817422833891, + "median_absolute_deviation_ns": 3083 + }, + "evaluation": { + "minimum_ns": 113541, + "mean_ns": 138338.34666666668, + "median_ns": 129792, + "p95_ns": 140583, + "standard_deviation_ns": 102875.15324333578, + "median_absolute_deviation_ns": 3604 + }, + "samples_per_second_at_median": 770463510.8481263, + "gate_evaluations_per_second_at_median": 28507149901.380672, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-scalar.json new file mode 100644 index 000000000..cd591e65e --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/add-8-100000-scalar.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "scalar", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 22690916, + 23427333, + 23161625, + 22704084, + 23896917, + 22023416, + 24329000, + 22913334, + 25199334, + 23020375, + 24558167, + 25120000, + 23126542, + 24122625, + 21716584, + 23496041, + 22560917, + 22844833, + 23150166, + 22156792, + 22866291, + 24750209, + 25595666, + 25483542, + 24172958, + 23370292, + 24904208, + 26304042, + 27322125, + 24732000, + 25001458, + 25126500, + 25093375, + 25077000, + 23196625, + 24512167, + 22997708, + 24593416, + 22213542, + 23620916, + 22492458, + 24836959, + 23177625, + 23213791, + 24679333, + 25768709, + 25682916, + 25664459, + 25334875, + 24517833, + 24340875, + 25048417, + 26928000, + 25800542, + 24479750, + 24188250, + 26703292, + 24929250, + 24929833, + 24692542, + 25717083, + 26265916, + 24731333, + 27271250, + 26023375, + 25735833, + 26985333, + 25350333, + 25454958, + 26121166, + 25335333, + 25173083, + 26084333, + 24055042, + 25073667, + 25242834, + 24908167, + 24873583, + 24896000, + 24916875, + 24698667, + 24662750, + 25355459, + 24736000, + 24700625, + 24670083, + 24739083, + 23677083, + 24605542, + 24778334, + 23553417, + 24077625, + 23204667, + 24406583, + 24076833, + 34810334, + 44474417, + 23777416, + 25086292, + 23486916, + 34682000, + 34703667, + 23925333, + 24790500, + 23715792, + 24199041, + 23203167, + 25079000, + 24418667, + 24904042, + 26967125, + 24628250, + 23711625, + 23895541, + 24350958, + 23233625, + 24654708, + 23219791, + 24554125, + 24318250, + 24881917, + 24914209, + 29646000, + 24372959, + 25143459, + 25193459, + 25166959, + 25524542, + 25475417, + 25509209, + 25491333, + 23996083, + 24685375, + 24118500, + 25222541, + 25794833, + 24080167, + 23975292, + 24758125, + 24494500, + 25274959, + 30534750, + 28733417, + 24034625, + 24136291, + 26892000, + 25574875, + 24634042, + 25773083, + 26806458 + ], + "batch_medians_ns": [ + 23461687, + 24764750, + 24995271, + 24334604, + 25180209 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 11538583, + "packing_ns": null, + "circuit_parse_ns": 59542, + "scalar_dataset_parse_ns": 11479041, + "legacy_pack_ns": 1177125, + "direct_packed_parse_ns": 14166583, + "compilation_ns": 5208, + "one_shot_ns": 36270249, + "scalar_dataset_parse_iterations_ns": [ + 11270291, + 11213708, + 11479041, + 11873875, + 11891708 + ], + "legacy_pack_iterations_ns": [ + 1177125, + 1169625, + 1172250, + 1331417, + 1258500 + ], + "direct_packed_parse_iterations_ns": [ + 13789000, + 13991042, + 15722208, + 14166583, + 14525500 + ], + "compilation_iterations_ns": [ + 5292, + 5208, + 6084, + 2584, + 2625 + ], + "scalar_dataset_parse": { + "minimum_ns": 11213708, + "mean_ns": 11545724.6, + "median_ns": 11479041, + "p95_ns": 11891708, + "standard_deviation_ns": 289113.33116589417, + "median_absolute_deviation_ns": 265333 + }, + "legacy_pack": { + "minimum_ns": 1169625, + "mean_ns": 1221783.4, + "median_ns": 1177125, + "p95_ns": 1331417, + "standard_deviation_ns": 64087.54022616253, + "median_absolute_deviation_ns": 7500 + }, + "direct_packed_parse": { + "minimum_ns": 13789000, + "mean_ns": 14438866.6, + "median_ns": 14166583, + "p95_ns": 15722208, + "standard_deviation_ns": 685781.645123169, + "median_absolute_deviation_ns": 358917 + }, + "compilation": { + "minimum_ns": 2584, + "mean_ns": 4358.6, + "median_ns": 5208, + "p95_ns": 6084, + "standard_deviation_ns": 1464.5337278465115, + "median_absolute_deviation_ns": 876 + }, + "evaluation": { + "minimum_ns": 21716584, + "mean_ns": 25029006.393333334, + "median_ns": 24731666, + "p95_ns": 27322125, + "standard_deviation_ns": 2488497.200404726, + "median_absolute_deviation_ns": 686832 + }, + "samples_per_second_at_median": 4043399.259880026, + "gate_evaluations_per_second_at_median": 149605772.61556095, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/apple-m4-process.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/apple-m4-process.json new file mode 100644 index 000000000..8f780cf71 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/apple-m4-process.json @@ -0,0 +1,237 @@ +{ + "cases": { + "add-16-100000": { + "julia": { + "median_rss_bytes": 329433088, + "median_wall_seconds": 3.48, + "rss_bytes": [ + 328450048, + 329433088, + 326320128, + 330399744, + 329695232 + ], + "wall_seconds": [ + 3.48, + 3.56, + 3.46, + 3.52, + 3.4 + ] + }, + "packed": { + "median_rss_bytes": 8962048, + "median_wall_seconds": 0.02, + "rss_bytes": [ + 8962048, + 8962048, + 8962048, + 8962048, + 8962048 + ], + "wall_seconds": [ + 0.02, + 0.03, + 0.03, + 0.02, + 0.02 + ] + }, + "scalar": { + "median_rss_bytes": 18300928, + "median_wall_seconds": 0.07, + "rss_bytes": [ + 18268160, + 18300928, + 18415616, + 18333696, + 18300928 + ], + "wall_seconds": [ + 0.07, + 0.07, + 0.07, + 0.07, + 0.07 + ] + } + }, + "add-8-100000": { + "julia": { + "median_rss_bytes": 325451776, + "median_wall_seconds": 2.59, + "rss_bytes": [ + 325451776, + 324141056, + 325828608, + 325484544, + 325025792 + ], + "wall_seconds": [ + 2.59, + 2.47, + 2.73, + 2.74, + 2.47 + ] + }, + "packed": { + "median_rss_bytes": 5537792, + "median_wall_seconds": 0.02, + "rss_bytes": [ + 5636096, + 5636096, + 5537792, + 5537792, + 5537792 + ], + "wall_seconds": [ + 0.02, + 0.02, + 0.01, + 0.01, + 0.02 + ] + }, + "scalar": { + "median_rss_bytes": 12763136, + "median_wall_seconds": 0.05, + "rss_bytes": [ + 12599296, + 12566528, + 12763136, + 12795904, + 12779520 + ], + "wall_seconds": [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.06 + ] + } + }, + "mul-4-100000": { + "julia": { + "median_rss_bytes": 322600960, + "median_wall_seconds": 4.3, + "rss_bytes": [ + 324304896, + 320716800, + 321404928, + 322600960, + 325369856 + ], + "wall_seconds": [ + 4.29, + 4.29, + 4.3, + 4.3, + 4.32 + ] + }, + "packed": { + "median_rss_bytes": 5586944, + "median_wall_seconds": 0.01, + "rss_bytes": [ + 5685248, + 5586944, + 5586944, + 5586944, + 5586944 + ], + "wall_seconds": [ + 0.01, + 0.02, + 0.01, + 0.01, + 0.01 + ] + }, + "scalar": { + "median_rss_bytes": 11698176, + "median_wall_seconds": 0.09, + "rss_bytes": [ + 11665408, + 11698176, + 11796480, + 11796480, + 11698176 + ], + "wall_seconds": [ + 0.08, + 0.09, + 0.09, + 0.09, + 0.09 + ] + } + }, + "official-add-8": { + "julia": { + "median_rss_bytes": 314671104, + "median_wall_seconds": 1.49, + "rss_bytes": [ + 316276736, + 315113472, + 313081856, + 312721408, + 314671104 + ], + "wall_seconds": [ + 2.32, + 1.61, + 1.45, + 1.43, + 1.49 + ] + }, + "packed": { + "median_rss_bytes": 1900544, + "median_wall_seconds": 0.0, + "rss_bytes": [ + 1900544, + 1900544, + 1982464, + 1900544, + 1900544 + ], + "wall_seconds": [ + 0.0, + 0.0, + 0.01, + 0.0, + 0.0 + ] + }, + "scalar": { + "median_rss_bytes": 2064384, + "median_wall_seconds": 0.0, + "rss_bytes": [ + 2064384, + 2064384, + 2064384, + 2064384, + 2064384 + ], + "wall_seconds": [ + 0.01, + 0.0, + 0.01, + 0.0, + 0.0 + ] + } + } + }, + "environment_snapshot": [ + "utc=2026-07-27T17:57:50Z", + "power_source=Now drawing from 'Battery Power'", + "battery_state=6%; discharging", + "lowpowermode=0", + "system_load= 1:57 up 52 days, 14:25, 20 users, load averages: 12.18 15.37 14.50" + ], + "profile": "apple-m4", + "schema_version": 1 +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-packed.json new file mode 100644 index 000000000..18ff9f7b0 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 558151, + 537303, + 560856, + 589280, + 565174, + 542041, + 548223, + 570264, + 526712, + 538124, + 525260, + 537113, + 530650, + 537392, + 543564, + 525891, + 539496, + 528135, + 540609, + 528326, + 538635, + 526112, + 537323, + 526562, + 536942, + 529528, + 538545, + 529287, + 540108, + 540799, + 539496, + 529177, + 539536, + 528155, + 541140, + 526903, + 550787, + 545257, + 528556, + 538384, + 531242, + 541199, + 527505, + 548363, + 533275, + 541120, + 529588, + 538555, + 528185, + 539507, + 528987, + 538635, + 539236, + 532874, + 539226, + 527244, + 543704, + 528096, + 540148, + 529117, + 543193, + 532012, + 541430, + 527274, + 537453, + 531472, + 540679, + 531091, + 538494, + 529708, + 538535, + 530490, + 542883, + 527334, + 536511, + 539496, + 528616, + 538154, + 526462, + 538736, + 528707, + 538204, + 531271, + 536451, + 526553, + 539216, + 529548, + 537563, + 528586, + 538976, + 530209, + 537864, + 530199, + 540098, + 529038, + 538616, + 528175, + 540769, + 548724, + 531912, + 542292, + 527755, + 539556, + 527114, + 540589, + 528576, + 540378, + 527765, + 588287, + 531392, + 539707, + 540208, + 530409, + 538314, + 531522, + 537062, + 527925, + 547331, + 529308, + 537212, + 537012, + 536070, + 530159, + 536802, + 526823, + 540699, + 530159, + 543324, + 528416, + 537553, + 526482, + 540749, + 528175, + 540980, + 536160, + 527674, + 537993, + 527144, + 536240, + 526663, + 538535, + 531742, + 535960, + 527494, + 562139, + 526052, + 537342, + 533375, + 573270, + 546960 + ], + "batch_medians_ns": [ + 537758, + 538469, + 536481, + 537137, + 536115 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 69143089, + "packing_ns": 3867976, + "evaluation": { + "minimum_ns": 525260, + "mean_ns": 536807.68, + "median_ns": 537087, + "p95_ns": 558151, + "standard_deviation_ns": 10396.178032539969, + "median_absolute_deviation_ns": 5806 + }, + "samples_per_second_at_median": 186189574.5009654, + "gate_evaluations_per_second_at_median": 14336597236.574335, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-scalar.json new file mode 100644 index 000000000..ad6879e36 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-16-100000-scalar.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "scalar", + "circuit_path": "benchmarks/generated/add-16.txt", + "dataset_path": "benchmarks/generated/add-16-100000.csv", + "samples": 100000, + "gates": 77, + "input_width": 32, + "output_width": 17, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 29382963, + 30391076, + 29357596, + 31425757, + 37013381, + 29453495, + 37163741, + 33035133, + 29440571, + 39102572, + 39490145, + 29328181, + 29306701, + 29753505, + 29479925, + 29866466, + 29298165, + 29493340, + 29330425, + 29713450, + 29325907, + 29356194, + 29378916, + 29302393, + 29402199, + 29410675, + 29620728, + 29431404, + 29418861, + 29439138, + 29498630, + 29428719, + 35578422, + 40549153, + 42022444, + 38412844, + 29395347, + 29355402, + 29462092, + 29376421, + 29316990, + 29831040, + 29383604, + 29415364, + 29463013, + 29318553, + 29576696, + 29346665, + 29337027, + 29306480, + 29475446, + 29373115, + 29457082, + 29344572, + 29592945, + 29565164, + 29313113, + 29408571, + 29343129, + 29374718, + 29687752, + 29348118, + 29392552, + 29326769, + 29449367, + 31999409, + 29435582, + 29566727, + 29354359, + 29350553, + 29648239, + 29376822, + 29666152, + 29366673, + 29335064, + 32198882, + 29310659, + 29353829, + 29313022, + 29585652, + 29522844, + 29326287, + 29351175, + 29522454, + 29511523, + 29317121, + 29363487, + 29408140, + 29330446, + 29427917, + 29827564, + 29356604, + 29413230, + 29319275, + 29462632, + 29297054, + 29585252, + 29322160, + 29380158, + 29669929, + 29590972, + 29335675, + 29296842, + 29367644, + 30370327, + 29317822, + 29282276, + 30153201, + 50417198, + 49701422, + 29546469, + 29518055, + 29345785, + 29331788, + 29291462, + 29492168, + 29386500, + 29408451, + 29311049, + 29349010, + 29342929, + 29307593, + 29397941, + 29597103, + 29944822, + 29351755, + 29688825, + 29487128, + 29717278, + 29288597, + 29319715, + 29989646, + 29361292, + 29359590, + 29284219, + 29434870, + 29386560, + 29318333, + 29330465, + 29602133, + 29567117, + 29308966, + 29341185, + 29420464, + 29745058, + 29313760, + 29353354, + 29310404, + 29973601, + 29324430 + ], + "batch_medians_ns": [ + 29439854, + 29411967, + 29384687, + 29383329, + 29360441 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 69130620, + "packing_ns": null, + "evaluation": { + "minimum_ns": 29282276, + "mean_ns": 30295336.313333333, + "median_ns": 29405169, + "p95_ns": 37163741, + "standard_deviation_ns": 3150137.526397274, + "median_absolute_deviation_ns": 85674 + }, + "samples_per_second_at_median": 3400762.634623865, + "gate_evaluations_per_second_at_median": 261858722.8660376, + "exact_matches": 100000, + "correct_bits": 1700000, + "total_bits": 1700000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-packed.json new file mode 100644 index 000000000..8ff12dc2a --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 263492, + 271748, + 258242, + 257270, + 257321, + 291895, + 259905, + 257781, + 272389, + 261258, + 258453, + 258753, + 284120, + 260336, + 259345, + 259925, + 269593, + 259315, + 261097, + 259364, + 289401, + 259374, + 259004, + 278560, + 263452, + 258222, + 258833, + 274102, + 262400, + 259635, + 268671, + 259435, + 257751, + 262180, + 272559, + 258432, + 258332, + 268972, + 262250, + 259634, + 258312, + 270365, + 257511, + 257180, + 258002, + 268281, + 257831, + 258243, + 257010, + 273510, + 261949, + 323795, + 271747, + 258463, + 257060, + 259635, + 269573, + 258002, + 259575, + 257310, + 258192, + 258603, + 256980, + 267028, + 258142, + 257571, + 271447, + 258433, + 258041, + 257751, + 269343, + 258323, + 258913, + 259595, + 269012, + 258623, + 258824, + 257490, + 269403, + 257581, + 257401, + 257120, + 269092, + 258532, + 257020, + 256710, + 267128, + 258643, + 256740, + 270064, + 257831, + 257180, + 303095, + 258432, + 257250, + 258293, + 268200, + 256509, + 257311, + 261758, + 271738, + 259084, + 258071, + 267950, + 257731, + 259234, + 258052, + 268611, + 258093, + 257901, + 257281, + 267218, + 256849, + 258703, + 258252, + 268752, + 257341, + 257661, + 257831, + 267680, + 259073, + 268030, + 263061, + 258232, + 257801, + 269523, + 258322, + 257280, + 257200, + 267590, + 258602, + 259214, + 261217, + 268181, + 256900, + 258122, + 257931, + 268421, + 258152, + 258452, + 257381, + 267209, + 258102, + 257100, + 270395, + 260326, + 258172, + 257771, + 269874, + 259254 + ], + "batch_medians_ns": [ + 259915, + 259505, + 258482, + 258172, + 258527 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 39489416, + "packing_ns": 1991608, + "evaluation": { + "minimum_ns": 256509, + "mean_ns": 262604.5333333333, + "median_ns": 258788, + "p95_ns": 273510, + "standard_deviation_ns": 8743.737601786142, + "median_absolute_deviation_ns": 1457 + }, + "samples_per_second_at_median": 386416680.83527833, + "gate_evaluations_per_second_at_median": 14297417190.905298, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-scalar.json new file mode 100644 index 000000000..e6e7b9c40 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/add-8-100000-scalar.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "scalar", + "circuit_path": "benchmarks/generated/add-8.txt", + "dataset_path": "benchmarks/generated/add-8-100000.csv", + "samples": 100000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 16191940, + 16215314, + 16205465, + 16283060, + 16428602, + 16133201, + 16093426, + 16051567, + 16014688, + 16062628, + 16024697, + 16058230, + 16036219, + 16267912, + 16261390, + 16008828, + 16017354, + 15991746, + 16145523, + 16089118, + 17308143, + 16041429, + 16034025, + 16110628, + 16041959, + 16014910, + 16111600, + 16031190, + 16031610, + 16234219, + 16128451, + 15992418, + 16115617, + 15992197, + 16152256, + 16054694, + 16052189, + 16000051, + 16027113, + 16005983, + 16343543, + 15992378, + 16085711, + 16126037, + 16111379, + 16040607, + 16057049, + 16347180, + 16147397, + 16055796, + 16246041, + 16037662, + 16048883, + 16076625, + 15999630, + 16267911, + 16006294, + 16069751, + 15986987, + 16113654, + 16036670, + 15990154, + 16064112, + 15993860, + 16020860, + 16067859, + 16807639, + 16056357, + 16032132, + 16119053, + 16113694, + 16004280, + 16087435, + 15995002, + 16101782, + 16113433, + 16025980, + 15989232, + 16027783, + 16042731, + 16092014, + 16274013, + 15997997, + 16069421, + 16122400, + 16085271, + 16079110, + 16319899, + 16161664, + 18384944, + 16038503, + 16071024, + 16350987, + 16058701, + 16230341, + 16154199, + 16063370, + 16104707, + 16111209, + 16020590, + 16036710, + 16150773, + 16321762, + 16013526, + 16095270, + 16063390, + 16192430, + 16371184, + 16126728, + 16047359, + 16230020, + 16015621, + 16094408, + 16393166, + 16126117, + 16003739, + 16045637, + 15995342, + 16031760, + 16008968, + 16272110, + 16445994, + 16421979, + 16441506, + 16364712, + 16248866, + 16245740, + 16448578, + 16445513, + 16316422, + 16325700, + 16318055, + 16349854, + 16674391, + 16369231, + 16366726, + 16301614, + 16405508, + 16584734, + 16419024, + 16326421, + 16293330, + 16333694, + 16416440, + 16305411, + 16378699, + 16370523, + 16514042, + 16690210, + 16299571 + ], + "batch_medians_ns": [ + 16075873, + 16056422, + 16068640, + 16082716, + 16367978 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 39196587, + "packing_ns": null, + "evaluation": { + "minimum_ns": 15986987, + "mean_ns": 16185073.5, + "median_ns": 16107667, + "p95_ns": 16448578, + "standard_deviation_ns": 260272.40323790893, + "median_absolute_deviation_ns": 91179 + }, + "samples_per_second_at_median": 6208223.698689574, + "gate_evaluations_per_second_at_median": 229704276.85151425, + "exact_matches": 100000, + "correct_bits": 900000, + "total_bits": 900000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-packed.json new file mode 100644 index 000000000..84ee32372 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 810883, + 792709, + 837355, + 836240, + 826212, + 844055, + 818648, + 803860, + 783843, + 781038, + 787680, + 789362, + 789372, + 771359, + 788942, + 788030, + 799572, + 811605, + 781548, + 791868, + 782981, + 802257, + 795214, + 822424, + 788361, + 798089, + 784023, + 786527, + 772802, + 785967, + 785355, + 807337, + 821172, + 775678, + 790294, + 790836, + 788882, + 777651, + 794983, + 806404, + 792609, + 793942, + 772802, + 791035, + 808999, + 806345, + 801285, + 780136, + 790815, + 805724, + 783021, + 795624, + 784114, + 793641, + 801645, + 784835, + 780096, + 774064, + 791747, + 784915, + 791677, + 779034, + 791036, + 782951, + 785455, + 789413, + 788963, + 783652, + 799582, + 783221, + 779805, + 787980, + 838414, + 812847, + 845067, + 812386, + 772792, + 792268, + 832433, + 782780, + 784834, + 791186, + 784755, + 805363, + 795144, + 817325, + 801806, + 821572, + 798541, + 781408, + 774766, + 808679, + 782681, + 805743, + 790786, + 766139, + 811313, + 790825, + 793040, + 805353, + 793210, + 786698, + 802838, + 785506, + 777350, + 765769, + 782781, + 806705, + 802107, + 792418, + 803349, + 804190, + 791186, + 786227, + 783381, + 799241, + 789794, + 787540, + 787119, + 779544, + 788731, + 806636, + 782450, + 781037, + 772531, + 781378, + 785797, + 782390, + 776028, + 805002, + 788100, + 789733, + 792850, + 804681, + 784845, + 802787, + 786407, + 786177, + 787490, + 789933, + 812075, + 804922, + 780737, + 769315, + 796767, + 784975, + 790015, + 785455, + 828416, + 779354 + ], + "batch_medians_ns": [ + 790620, + 790935, + 791111, + 790805, + 786948 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 26109227, + "packing_ns": 1434927, + "evaluation": { + "minimum_ns": 765769, + "mean_ns": 793771.96, + "median_ns": 789974, + "p95_ns": 826212, + "standard_deviation_ns": 15287.915003636044, + "median_absolute_deviation_ns": 7554 + }, + "samples_per_second_at_median": 126586444.61716461, + "gate_evaluations_per_second_at_median": 16203064910.99707, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-scalar.json new file mode 100644 index 000000000..5498072c3 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/mul-4-100000-scalar.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "scalar", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 72718229, + 71604111, + 71753019, + 71576950, + 71926643, + 71807991, + 71761621, + 71904750, + 71662036, + 71761973, + 71271688, + 71747707, + 71947439, + 71575144, + 72386419, + 71954702, + 71737718, + 71936498, + 72021667, + 72328941, + 71692172, + 72032959, + 71631118, + 71834438, + 71828387, + 71943371, + 71895092, + 71905692, + 72388453, + 71887187, + 72731994, + 71614508, + 71931770, + 71825351, + 71881396, + 71743148, + 71815778, + 72405098, + 71968694, + 73202426, + 72048372, + 71737872, + 72287157, + 71827750, + 72292237, + 71856524, + 71972971, + 72964773, + 71870530, + 71975786, + 72204783, + 72159099, + 71883284, + 71919852, + 71720701, + 75099627, + 72044805, + 71433555, + 72740133, + 71945299, + 72114134, + 71728164, + 72062789, + 71806050, + 71440938, + 72168476, + 71708267, + 71857206, + 71876050, + 72025069, + 73992340, + 71736009, + 71633848, + 72058080, + 75219350, + 71900296, + 71784690, + 71655458, + 71856894, + 72397063, + 71959206, + 72366465, + 71880279, + 71617087, + 71426502, + 71519746, + 71615314, + 71448242, + 72198402, + 71579928, + 72926962, + 71725520, + 72070062, + 72118013, + 71620373, + 71397968, + 71278174, + 74122263, + 71683020, + 71998860, + 71688690, + 72145783, + 71822400, + 72133992, + 71467047, + 71715470, + 71786383, + 71687008, + 71894745, + 71366950, + 71540564, + 71821268, + 73343118, + 73203487, + 71855792, + 72481410, + 71544211, + 71777206, + 71663654, + 71843800, + 71432282, + 71528462, + 71566312, + 71922658, + 72388246, + 71729186, + 71420881, + 71963734, + 71847457, + 71431541, + 71618809, + 71854230, + 71913397, + 72052472, + 71660010, + 71793770, + 71552719, + 72053644, + 72424847, + 71312251, + 71727385, + 71578237, + 71963726, + 71707599, + 72066027, + 71662133, + 71783890, + 71855745, + 71657936, + 71876133 + ], + "batch_medians_ns": [ + 71860812, + 71956996, + 71857050, + 71803825, + 71756538 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 25458166, + "packing_ns": null, + "evaluation": { + "minimum_ns": 71271688, + "mean_ns": 71968210.94666667, + "median_ns": 71855768, + "p95_ns": 72964773, + "standard_deviation_ns": 573151.9771917601, + "median_absolute_deviation_ns": 190575 + }, + "samples_per_second_at_median": 1391676.7266338312, + "gate_evaluations_per_second_at_median": 178134621.0091304, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-packed.json new file mode 100644 index 000000000..3ce69e49c --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-packed.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "packed", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 13014, + 13014, + 13074, + 13135, + 13034, + 12854, + 12994, + 12875, + 12864, + 12994, + 13014, + 12864, + 12935, + 12834, + 12874, + 12954, + 12854, + 12904, + 12704, + 12984, + 12463, + 12072, + 12353, + 12503, + 12975, + 12824, + 12693, + 12493, + 12513, + 12494, + 12873, + 12533, + 12534, + 12844, + 12333, + 12012, + 12754, + 12564, + 12473, + 12544, + 11561, + 11812, + 12133, + 11652, + 12634, + 12513, + 12614, + 12253, + 12193, + 12283, + 11731, + 12373, + 12663, + 12173, + 12434, + 12373, + 12754, + 12924, + 12514, + 12854, + 11812, + 12603, + 12524, + 12784, + 12844, + 13024, + 12844, + 12794, + 12524, + 12493, + 13105, + 13034, + 12924, + 12754, + 12744, + 12914, + 12794, + 13095, + 13114, + 13294, + 13045, + 12754, + 12473, + 12533, + 12344, + 12213, + 12483, + 13004, + 12834, + 12874, + 12804, + 12574, + 12483, + 12533, + 12434, + 12543, + 12694, + 20047, + 12654, + 12684, + 12513, + 12363, + 12162, + 12293, + 12583, + 11972, + 12504, + 12493, + 12333, + 12804, + 12183, + 12473, + 12574, + 12714, + 12804, + 12664, + 12783, + 12743, + 12524, + 12383, + 11742, + 12193, + 11792, + 44453, + 12343, + 12223, + 12493, + 12504, + 12543, + 12363, + 12243, + 12544, + 12663, + 12543, + 12673, + 12303, + 12533, + 12353, + 12474, + 12633, + 12734, + 12253, + 12614, + 12994, + 12794, + 12894, + 12874, + 12904, + 12925, + 12704 + ], + "batch_medians_ns": [ + 12869, + 12493, + 12794, + 12538, + 12543 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 1350010, + "packing_ns": 114414, + "evaluation": { + "minimum_ns": 11561, + "mean_ns": 12861.68, + "median_ns": 12614, + "p95_ns": 13074, + "standard_deviation_ns": 2677.9031332244513, + "median_absolute_deviation_ns": 230 + }, + "samples_per_second_at_median": 158553987.63278896, + "gate_evaluations_per_second_at_median": 5866497542.413192, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-scalar.json new file mode 100644 index 000000000..23efd6d2b --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/official-add-8-scalar.json @@ -0,0 +1,191 @@ +{ + "schema_version": 2, + "backend": "scalar", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 449208, + 331459, + 372618, + 334604, + 334775, + 358300, + 337230, + 337140, + 360963, + 335376, + 335406, + 360243, + 338181, + 338242, + 398934, + 335115, + 335036, + 348981, + 338942, + 328143, + 340375, + 331139, + 330988, + 339544, + 330908, + 331439, + 359150, + 333232, + 344153, + 336188, + 330296, + 329745, + 356526, + 336698, + 336889, + 348340, + 329235, + 329325, + 338992, + 333432, + 331860, + 352157, + 334725, + 335146, + 338362, + 331388, + 331159, + 338011, + 331028, + 331429, + 340676, + 332090, + 330928, + 339283, + 332151, + 330467, + 339934, + 331318, + 331239, + 339864, + 339825, + 330968, + 330958, + 339534, + 330146, + 330346, + 338763, + 331028, + 333182, + 338422, + 331018, + 330337, + 338682, + 331138, + 331109, + 363048, + 335988, + 335416, + 345144, + 332901, + 331940, + 341878, + 332752, + 332131, + 341808, + 329595, + 329105, + 339293, + 332261, + 332821, + 332220, + 339935, + 331730, + 333272, + 340275, + 331809, + 330858, + 340686, + 332310, + 332311, + 339944, + 330106, + 331278, + 339594, + 331819, + 330547, + 339474, + 331339, + 331028, + 339614, + 331449, + 331118, + 340366, + 332891, + 331689, + 339464, + 331308, + 331198, + 340897, + 332060, + 333703, + 332561, + 339694, + 329425, + 329255, + 353941, + 337720, + 336308, + 341738, + 330267, + 329966, + 338872, + 330136, + 330247, + 339413, + 330898, + 330588, + 340185, + 331779, + 331770, + 340936, + 333193, + 332240, + 339814, + 331610, + 330817, + 339284, + 331729, + 333172, + 340546 + ], + "batch_medians_ns": [ + 337185, + 332791, + 332786, + 332140, + 332866 + ], + "measurement_order": "backend-isolated; external driver alternates order", + "parse_ns": 867299, + "packing_ns": null, + "evaluation": { + "minimum_ns": 328143, + "mean_ns": 337364.25333333336, + "median_ns": 333212, + "p95_ns": 358300, + "standard_deviation_ns": 12836.569482114588, + "median_absolute_deviation_ns": 2930 + }, + "samples_per_second_at_median": 6002184.795265477, + "gate_evaluations_per_second_at_median": 222080837.42482263, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "operating_system": "linux 6.17.0-1020-azure", + "architecture": "x86_64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/protocol.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/protocol.json new file mode 100644 index 000000000..4b9e68597 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/protocol.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "profile": "github-actions-linux-x86-64", + "platform": "Linux-6.17.0-1020-azure-x86_64-with-glibc2.39", + "architecture": "x86_64", + "processor": "AMD EPYC 7763 64-Core Processor", + "logical_cores": 2, + "memory_bytes": 8323981312, + "rust": "rustc 1.97.1 (8bab26f4f 2026-07-14)", + "julia": "julia version 1.12.6" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/report.md b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/report.md new file mode 100644 index 000000000..bf59f0974 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/linux-x86-runner/report.md @@ -0,0 +1,19 @@ +# Linux x86-64 GitHub Actions Benchmark + +- Provenance: [GitHub Actions run 30289355965](https://github.com/JunkaiWang-TheoPhy/quantum-harness-115-occam-rust-port/actions/runs/30289355965) +- Trigger: manual `workflow_dispatch` from commit `5ad82ee` +- Evidence: each scalar/packed row includes five batches of 30 raw measurements; + all reported verification metrics are exact and agree between backends +- Platform: Linux-6.17.0-1020-azure-x86_64-with-glibc2.39 +- Processor: AMD EPYC 7763 64-Core Processor +- Logical cores: 2 +- Memory: 8.3 GB +- Rust: `rustc 1.97.1 (8bab26f4f 2026-07-14)` +- Julia: `julia version 1.12.6` + +| Case | Samples | Gates | Scalar median ms | Packed median ms | Speedup | +|---|---:|---:|---:|---:|---:| +| official-add-8 | 2,000 | 37 | 0.333212 | 0.012614 | 26.42× | +| add-8-100000 | 100,000 | 37 | 16.107667 | 0.258788 | 62.24× | +| add-16-100000 | 100,000 | 77 | 29.405169 | 0.537087 | 54.75× | +| mul-4-100000 | 100,000 | 128 | 71.855768 | 0.789974 | 90.96× | diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-packed.json new file mode 100644 index 000000000..72bc3b423 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-packed.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 568292, + 581167, + 587958, + 584042, + 561625, + 568292, + 532167, + 552208, + 562375, + 518709, + 418000, + 444500, + 420125, + 407500, + 409375, + 407958, + 411375, + 411041, + 422834, + 434459, + 445500, + 682125, + 513708, + 561833, + 532333, + 427833, + 410500, + 408916, + 408167, + 420291, + 514250, + 494292, + 492333, + 498083, + 504208, + 504000, + 510917, + 506250, + 499250, + 493375, + 511375, + 503583, + 502459, + 489625, + 491208, + 495959, + 507583, + 507541, + 501083, + 668333, + 644625, + 637500, + 621834, + 596834, + 532917, + 597208, + 599708, + 571000, + 560666, + 545292, + 548375, + 558708, + 551542, + 499500, + 535917, + 521209, + 526917, + 539375, + 514042, + 420000, + 416750, + 432833, + 408542, + 414584, + 429542, + 632709, + 566250, + 532958, + 519791, + 414333, + 437417, + 405375, + 401792, + 405750, + 406958, + 435917, + 405792, + 418375, + 412584, + 559584, + 499417, + 491209, + 502459, + 504375, + 504875, + 506000, + 490709, + 500750, + 502334, + 496917, + 508166, + 500542, + 515041, + 504583, + 508833, + 494500, + 488542, + 664417, + 661083, + 635958, + 631875, + 584833, + 553292, + 607959, + 613709, + 572959, + 570083, + 523166, + 561625, + 554708, + 529250, + 548750, + 476125, + 519458, + 502875, + 526500, + 529875, + 716333, + 520750, + 548667, + 514000, + 422834, + 425625, + 406875, + 401875, + 417625, + 412041, + 405083, + 403708, + 411083, + 404000, + 406708, + 406375, + 409166, + 406292, + 412542, + 409875, + 419042, + 543792, + 543917 + ], + "batch_medians_ns": [ + 445000, + 507562, + 436667, + 508499, + 420938 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 13247875, + "packing_ns": 12891958, + "circuit_parse_ns": 361208, + "scalar_dataset_parse_ns": 11598792, + "legacy_pack_ns": 928333, + "direct_packed_parse_ns": 12886667, + "compilation_ns": 5291, + "one_shot_ns": 13757457, + "scalar_dataset_parse_iterations_ns": [ + 13594333, + 11643833, + 11266042, + 11598792, + 11435250 + ], + "legacy_pack_iterations_ns": [ + 942792, + 848917, + 928333, + 867375, + 930750 + ], + "direct_packed_parse_iterations_ns": [ + 12886667, + 15560709, + 13048833, + 12710500, + 12806709 + ], + "compilation_iterations_ns": [ + 7042, + 5291, + 5959, + 4875, + 3542 + ], + "scalar_dataset_parse": { + "minimum_ns": 11266042, + "mean_ns": 11907650.0, + "median_ns": 11598792, + "p95_ns": 13594333, + "standard_deviation_ns": 853781.5647817655, + "median_absolute_deviation_ns": 163542 + }, + "legacy_pack": { + "minimum_ns": 848917, + "mean_ns": 903633.4, + "median_ns": 928333, + "p95_ns": 942792, + "standard_deviation_ns": 37913.934613015306, + "median_absolute_deviation_ns": 14459 + }, + "direct_packed_parse": { + "minimum_ns": 12710500, + "mean_ns": 13402683.6, + "median_ns": 12886667, + "p95_ns": 15560709, + "standard_deviation_ns": 1084699.1164000456, + "median_absolute_deviation_ns": 162166 + }, + "compilation": { + "minimum_ns": 3542, + "mean_ns": 5341.8, + "median_ns": 5291, + "p95_ns": 7042, + "standard_deviation_ns": 1160.2912393015818, + "median_absolute_deviation_ns": 668 + }, + "evaluation": { + "minimum_ns": 401792, + "mean_ns": 501652.5333333333, + "median_ns": 504291, + "p95_ns": 635958, + "standard_deviation_ns": 73135.75255242056, + "median_absolute_deviation_ns": 58437 + }, + "samples_per_second_at_median": 198298204.80635187, + "gate_evaluations_per_second_at_median": 25382170215.21304, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-scalar.json new file mode 100644 index 000000000..a2038ea85 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/mul-4-100000-scalar.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "scalar", + "circuit_path": "benchmarks/generated/mul-4.txt", + "dataset_path": "benchmarks/generated/mul-4-100000.csv", + "samples": 100000, + "gates": 128, + "input_width": 8, + "output_width": 8, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 69142375, + 67046583, + 66527458, + 66095958, + 66164625, + 66016125, + 65984250, + 66019041, + 65898333, + 66026583, + 67074542, + 64801416, + 65322292, + 65903417, + 66257209, + 73920750, + 68417958, + 66467584, + 66508084, + 66216292, + 68417833, + 68361750, + 66887709, + 66582875, + 66470458, + 65545708, + 69559000, + 72177916, + 66842708, + 66870667, + 66784375, + 65200625, + 65889833, + 65872792, + 66267375, + 66259250, + 65058459, + 64787667, + 65260084, + 68007208, + 65681750, + 67559291, + 66572292, + 65572375, + 65888375, + 67873459, + 66141917, + 64655459, + 64588542, + 66626625, + 65510542, + 68576167, + 69254958, + 78769209, + 65605459, + 87989000, + 65055250, + 69259667, + 66115916, + 67226417, + 65743959, + 72253833, + 66356000, + 65419584, + 69596000, + 64996625, + 65353708, + 65027542, + 64962625, + 67008000, + 65283166, + 64953666, + 64748375, + 67282917, + 64813416, + 64830667, + 64950875, + 64968834, + 66053583, + 66814750, + 65359791, + 64828750, + 65520708, + 66422625, + 66516834, + 66051459, + 64784667, + 64539209, + 66174125, + 65326458, + 69039458, + 66720917, + 66040208, + 66224625, + 66138542, + 66392416, + 66368667, + 66235125, + 64980333, + 66962166, + 66042458, + 66581167, + 65039250, + 69981250, + 67671084, + 67097500, + 66899125, + 66405834, + 67265292, + 68389750, + 68210708, + 68841083, + 68802458, + 67783833, + 67393833, + 67504583, + 70139167, + 88009084, + 65308584, + 71954834, + 64585750, + 65334458, + 66669291, + 67489792, + 65329917, + 65921666, + 65662083, + 64986667, + 63934208, + 64895167, + 63690583, + 64808750, + 63626000, + 62713500, + 66165333, + 67553125, + 66051792, + 65046000, + 65932125, + 61247541, + 63869667, + 63450667, + 66976291, + 65167500, + 67620334, + 66936000, + 66131000, + 62872792, + 62467000, + 62518458 + ], + "batch_medians_ns": [ + 66489271, + 66128916, + 65356749, + 67029833, + 65106750 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 11821917, + "packing_ns": null, + "circuit_parse_ns": 169458, + "scalar_dataset_parse_ns": 11652459, + "legacy_pack_ns": 905292, + "direct_packed_parse_ns": 13173084, + "compilation_ns": 5792, + "one_shot_ns": 77962146, + "scalar_dataset_parse_iterations_ns": [ + 11366958, + 11327541, + 11652459, + 11667875, + 11699333 + ], + "legacy_pack_iterations_ns": [ + 842958, + 868333, + 905292, + 922250, + 920417 + ], + "direct_packed_parse_iterations_ns": [ + 13189708, + 12979792, + 12984125, + 13669750, + 13173084 + ], + "compilation_iterations_ns": [ + 5792, + 3625, + 4917, + 114417, + 15625 + ], + "scalar_dataset_parse": { + "minimum_ns": 11327541, + "mean_ns": 11542833.2, + "median_ns": 11652459, + "p95_ns": 11699333, + "standard_deviation_ns": 160890.19393909624, + "median_absolute_deviation_ns": 46874 + }, + "legacy_pack": { + "minimum_ns": 842958, + "mean_ns": 891850.0, + "median_ns": 905292, + "p95_ns": 922250, + "standard_deviation_ns": 31191.0173158876, + "median_absolute_deviation_ns": 16958 + }, + "direct_packed_parse": { + "minimum_ns": 12979792, + "mean_ns": 13199291.8, + "median_ns": 13173084, + "p95_ns": 13669750, + "standard_deviation_ns": 251629.30273431988, + "median_absolute_deviation_ns": 188959 + }, + "compilation": { + "minimum_ns": 3625, + "mean_ns": 28875.2, + "median_ns": 5792, + "p95_ns": 114417, + "standard_deviation_ns": 42982.25079448493, + "median_absolute_deviation_ns": 2167 + }, + "evaluation": { + "minimum_ns": 61247541, + "mean_ns": 66696382.52666666, + "median_ns": 66140229, + "p95_ns": 70139167, + "standard_deviation_ns": 3230651.0082488256, + "median_absolute_deviation_ns": 920333 + }, + "samples_per_second_at_median": 1511939.125581195, + "gate_evaluations_per_second_at_median": 193528208.07439297, + "exact_matches": 100000, + "correct_bits": 800000, + "total_bits": 800000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-packed.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-packed.json new file mode 100644 index 000000000..4cab51682 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-packed.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "packed", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 3834, + 3792, + 3875, + 3834, + 3792, + 3833, + 3791, + 3792, + 3834, + 3792, + 3833, + 3791, + 3833, + 3750, + 3833, + 3750, + 3834, + 3792, + 3791, + 3792, + 3792, + 3791, + 3833, + 3792, + 3792, + 3791, + 3833, + 3792, + 3750, + 3791, + 3792, + 3834, + 3875, + 3875, + 3833, + 3750, + 3792, + 3875, + 3792, + 3791, + 3750, + 3833, + 3791, + 3792, + 3833, + 3875, + 3792, + 3791, + 3792, + 3792, + 3791, + 3750, + 3833, + 3791, + 3833, + 3792, + 3834, + 3875, + 3750, + 3791, + 3750, + 3792, + 3791, + 3833, + 3834, + 3792, + 3833, + 3875, + 3792, + 3833, + 3791, + 3875, + 3791, + 3750, + 3833, + 3750, + 3834, + 3792, + 3791, + 3792, + 3792, + 3791, + 3833, + 3875, + 3833, + 3833, + 3791, + 3792, + 3750, + 3792, + 3792, + 3750, + 3833, + 3791, + 3792, + 3792, + 3833, + 3791, + 3833, + 3750, + 3791, + 3792, + 3834, + 3834, + 3792, + 3791, + 3792, + 3834, + 3834, + 3792, + 3791, + 3833, + 3792, + 3792, + 3833, + 3791, + 3792, + 3792, + 3833, + 3792, + 3875, + 3875, + 3791, + 3833, + 3833, + 3750, + 3792, + 3791, + 3833, + 3833, + 3833, + 3833, + 3792, + 3792, + 3791, + 3792, + 3834, + 3792, + 3791, + 3792, + 3792, + 3791, + 3792, + 3834, + 3792, + 3750, + 3791, + 3792, + 3792, + 3791 + ], + "batch_medians_ns": [ + 3792, + 3792, + 3792, + 3792, + 3792 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 564083, + "packing_ns": 426958, + "circuit_parse_ns": 139792, + "scalar_dataset_parse_ns": 348291, + "legacy_pack_ns": 44834, + "direct_packed_parse_ns": 424291, + "compilation_ns": 2667, + "one_shot_ns": 570542, + "scalar_dataset_parse_iterations_ns": [ + 348291, + 354542, + 354542, + 340542, + 335833 + ], + "legacy_pack_iterations_ns": [ + 45708, + 48291, + 44542, + 44834, + 44166 + ], + "direct_packed_parse_iterations_ns": [ + 431042, + 424000, + 424291, + 426000, + 423625 + ], + "compilation_iterations_ns": [ + 2917, + 2750, + 2667, + 1333, + 1333 + ], + "scalar_dataset_parse": { + "minimum_ns": 335833, + "mean_ns": 346750.0, + "median_ns": 348291, + "p95_ns": 354542, + "standard_deviation_ns": 7503.670595115434, + "median_absolute_deviation_ns": 6251 + }, + "legacy_pack": { + "minimum_ns": 44166, + "mean_ns": 45508.2, + "median_ns": 44834, + "p95_ns": 48291, + "standard_deviation_ns": 1481.4509644264301, + "median_absolute_deviation_ns": 668 + }, + "direct_packed_parse": { + "minimum_ns": 423625, + "mean_ns": 425791.6, + "median_ns": 424291, + "p95_ns": 431042, + "standard_deviation_ns": 2748.3055579756774, + "median_absolute_deviation_ns": 666 + }, + "compilation": { + "minimum_ns": 1333, + "mean_ns": 2200.0, + "median_ns": 2667, + "p95_ns": 2917, + "standard_deviation_ns": 712.4683852635147, + "median_absolute_deviation_ns": 250 + }, + "evaluation": { + "minimum_ns": 3750, + "mean_ns": 3805.8, + "median_ns": 3792, + "p95_ns": 3875, + "standard_deviation_ns": 31.49920633920799, + "median_absolute_deviation_ns": 1 + }, + "samples_per_second_at_median": 527426160.3375528, + "gate_evaluations_per_second_at_median": 19514767932.489452, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +} diff --git a/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-scalar.json b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-scalar.json new file mode 100644 index 000000000..ffa134c73 --- /dev/null +++ b/tracks/agent-kb/solutions/RIIR-occam-rust-port/public-source/benchmarks/results/official-add-8-scalar.json @@ -0,0 +1,257 @@ +{ + "schema_version": 3, + "backend": "scalar", + "circuit_path": "vendor/occam-circuit/adder8.txt", + "dataset_path": "vendor/occam-circuit/datasets/mystery-A/train.csv", + "samples": 2000, + "gates": 37, + "input_width": 16, + "output_width": 9, + "warmup_iterations": 5, + "measured_iterations": 30, + "batch_count": 5, + "raw_iterations_ns": [ + 574584, + 577000, + 570875, + 574875, + 571500, + 643875, + 664333, + 663041, + 666458, + 665125, + 681500, + 672375, + 663667, + 662917, + 662791, + 664333, + 662375, + 662291, + 663708, + 664666, + 662417, + 661959, + 662417, + 664833, + 666791, + 665958, + 662750, + 689250, + 663084, + 662709, + 682375, + 678917, + 677292, + 718375, + 682291, + 684125, + 680333, + 680416, + 680417, + 680334, + 680250, + 679625, + 686458, + 2668208, + 545708, + 572167, + 544209, + 544666, + 545667, + 545500, + 546625, + 566500, + 545375, + 549750, + 551667, + 550125, + 540708, + 581917, + 627250, + 626917, + 631417, + 633667, + 631208, + 631083, + 631708, + 631791, + 777333, + 681750, + 689833, + 724583, + 672250, + 673708, + 672208, + 673458, + 688041, + 673291, + 671875, + 672541, + 672292, + 676041, + 719584, + 654667, + 641208, + 639625, + 640875, + 641708, + 640625, + 640958, + 643583, + 642708, + 634750, + 1496584, + 675875, + 674625, + 673833, + 708042, + 682833, + 685208, + 678667, + 683458, + 678709, + 678375, + 681292, + 678750, + 678750, + 678542, + 709375, + 628000, + 641375, + 629542, + 629709, + 628959, + 630000, + 628458, + 628583, + 628458, + 628125, + 628625, + 628459, + 628584, + 544709, + 558667, + 552375, + 543959, + 543584, + 544000, + 548250, + 547541, + 547834, + 546959, + 552666, + 548042, + 546084, + 546417, + 544291, + 548625, + 543000, + 545125, + 544458, + 544542, + 559834, + 659042, + 636833, + 635583, + 634041, + 632833, + 633042, + 632667, + 634958, + 640625 + ], + "batch_medians_ns": [ + 662979, + 627083, + 663271, + 674229, + 548146 + ], + "measurement_order": "backend-isolated; invocation order controlled by external driver", + "parse_ns": 665918, + "packing_ns": null, + "circuit_parse_ns": 385959, + "scalar_dataset_parse_ns": 279959, + "legacy_pack_ns": 106458, + "direct_packed_parse_ns": 353667, + "compilation_ns": 1250, + "one_shot_ns": 1307459, + "scalar_dataset_parse_iterations_ns": [ + 296583, + 276375, + 293250, + 279959, + 272125 + ], + "legacy_pack_iterations_ns": [ + 110250, + 106458, + 105667, + 105542, + 107458 + ], + "direct_packed_parse_iterations_ns": [ + 347041, + 362208, + 360125, + 345167, + 353667 + ], + "compilation_iterations_ns": [ + 2916, + 1625, + 1250, + 1000, + 1125 + ], + "scalar_dataset_parse": { + "minimum_ns": 272125, + "mean_ns": 283658.4, + "median_ns": 279959, + "p95_ns": 296583, + "standard_deviation_ns": 9579.111307423042, + "median_absolute_deviation_ns": 7834 + }, + "legacy_pack": { + "minimum_ns": 105542, + "mean_ns": 107075.0, + "median_ns": 106458, + "p95_ns": 110250, + "standard_deviation_ns": 1728.6153996768628, + "median_absolute_deviation_ns": 916 + }, + "direct_packed_parse": { + "minimum_ns": 345167, + "mean_ns": 353641.6, + "median_ns": 353667, + "p95_ns": 362208, + "standard_deviation_ns": 6794.19009448514, + "median_absolute_deviation_ns": 6626 + }, + "compilation": { + "minimum_ns": 1000, + "mean_ns": 1583.2, + "median_ns": 1250, + "p95_ns": 2916, + "standard_deviation_ns": 698.4546943073688, + "median_absolute_deviation_ns": 250 + }, + "evaluation": { + "minimum_ns": 540708, + "mean_ns": 651729.16, + "median_ns": 641541, + "p95_ns": 708042, + "standard_deviation_ns": 187314.2385509114, + "median_absolute_deviation_ns": 35125 + }, + "samples_per_second_at_median": 3117493.6597972694, + "gate_evaluations_per_second_at_median": 115347265.41249897, + "exact_matches": 2000, + "correct_bits": 18000, + "total_bits": 18000, + "rustc": "rustc 1.95.0 (59807616e 2026-04-14) (Homebrew)", + "operating_system": "macOS 15.6", + "architecture": "aarch64" +}