From c658697f41d6e71a9b73a41cc99ff528210d1abe Mon Sep 17 00:00:00 2001 From: DreamingOfClouds Date: Fri, 30 Oct 2026 10:45:05 -0500 Subject: [PATCH] research: P104 frontier compression, 22,821 to 18,083 events at unchanged invoice (no new kappa) Co-Authored-By: Claude Opus 5.5 --- research/p104-frontier-compression/NOTICE | 10 ++ research/p104-frontier-compression/README.md | 56 ++++++++ .../p104-frontier-compression/RESULT.json | 53 ++++++++ .../p104-frontier-compression/SOURCES.json | 54 ++++++++ research/p104-frontier-compression/TASK.json | 124 ++++++++++++++++++ .../p104-frontier-compression/VERIFY.json | 37 ++++++ .../p104-frontier-compression/WORD.json.gz | Bin 0 -> 97232 bytes .../p104-frontier-compression/construct.py | 14 ++ .../test_portability.py | 75 +++++++++++ research/p104-frontier-compression/verify.py | 118 +++++++++++++++++ 10 files changed, 541 insertions(+) create mode 100644 research/p104-frontier-compression/NOTICE create mode 100644 research/p104-frontier-compression/README.md create mode 100644 research/p104-frontier-compression/RESULT.json create mode 100644 research/p104-frontier-compression/SOURCES.json create mode 100644 research/p104-frontier-compression/TASK.json create mode 100644 research/p104-frontier-compression/VERIFY.json create mode 100644 research/p104-frontier-compression/WORD.json.gz create mode 100644 research/p104-frontier-compression/construct.py create mode 100644 research/p104-frontier-compression/test_portability.py create mode 100644 research/p104-frontier-compression/verify.py diff --git a/research/p104-frontier-compression/NOTICE b/research/p104-frontier-compression/NOTICE new file mode 100644 index 0000000000..8b0f8a1128 --- /dev/null +++ b/research/p104-frontier-compression/NOTICE @@ -0,0 +1,10 @@ +Frontier compression: DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. +Apache-2.0. + +The word, price and checker chain are PR6167 by Ali Romman (OpenAI Codex assistance), +over PR6144 and PR6143 by DreamingOfClouds, PR5827 and the earlier P104, native, helper, +caller, compiler and BIT work. PR6169 (Ali Romman) is the precedent for a no-kappa +resynthesis package. The gzip portability controls follow the base package. +The full source notices are retained in research/p104-retained-operand-descent/NOTICE +and in its pinned source archive, which this package reads and does not copy. +This package claims no predecessor construction as new. diff --git a/research/p104-frontier-compression/README.md b/research/p104-frontier-compression/README.md new file mode 100644 index 0000000000..a7d02b65a3 --- /dev/null +++ b/research/p104-frontier-compression/README.md @@ -0,0 +1,56 @@ +# Frontier compression: 22,821 to 18,083 events, no new kappa + +This package shortens the merged word of +[PR6167](https://github.com/CrocSwap/integer-mult-bounds/pull/6167) +(conditional kappa 0.003128645) from **22,821 to 18,083 events** (-4,738, -20.8%). +**No kappa is claimed.** The complete invoice (13,444 productive fields, +66,762 paid calls, rank surplus 760), the paid profile, the storage and the raw +crossing (between 0.00312865201590 and 0.00312865201591) are identical to PR6167's. + +## The edit + +Only ADD and SCALE events change: 18,423 to 13,686 ADD and 861 to 860 SCALE. +All 3,449 MOVE events and all INIT, COPY and CLEAR events are kept, in order. + +- **Shared partial sums.** The 104 Y registers each receive about 78 helper terms, and + pairs of rows overlap in about 79 of 85 terms with the same coefficient ratio. A row + that needs many terms that another, already complete row holds now adds that row's + final value and folds the donor's other columns into its own initial-value reads. +- **Window resynthesis.** Within each stretch of ADD and SCALE events between MOVE + events at one frame, the register update is re-solved exactly (Gauss/LU on the + read graph, readers first). A new column is accepted only if it creates no cycle. + +ADD and SCALE events do not enter the price, so the paid profile cannot change. The +event and scalar slack of the word grows (scalar allowance is recomputed in RESULT.json). + +## Evidence + +`verify.py` authenticates PR6167's word, price and the pinned PR5827 checker chain +(read from the merged package `research/p104-retained-operand-descent`, pinned in +[SOURCES.json](SOURCES.json)), checks that only ADD and SCALE events changed, then +replays the compressed word through the unmodified chain: identical productive targets, +paid profile and storage, all 799 input columns with 638,401 coefficients, the 2,922 +native maps, the physical caller and the complete price. [RESULT.json](RESULT.json) +records the outcome. + +```sh +python3.12 -I -O -B research/p104-frontier-compression/test_portability.py +python3.12 -I -B research/p104-frontier-compression/verify.py +python3.12 scripts/research_package.py --package research/p104-frontier-compression +``` + +These are author checks. Independent review is pending and the inherited framework +assumptions remain. + +## Coordination and credit + +Base word and checker: PR6167 by Ali Romman. Precedent: PR6169 (exact multi-gate +resynthesis, no kappa). The compression tool is `tk compress` from PR6170. +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. +See [NOTICE](NOTICE). + +## Open next questions + +- Does an independent reviewer confirm the replay? Start with `verify.py`. +- Can the rewrite be combined with the next merged word? Run it on that word and + compare the replayed price. Details are in [TASK.json](TASK.json). diff --git a/research/p104-frontier-compression/RESULT.json b/research/p104-frontier-compression/RESULT.json new file mode 100644 index 0000000000..a56e551c0d --- /dev/null +++ b/research/p104-frontier-compression/RESULT.json @@ -0,0 +1,53 @@ +{ + "events_after": 18083, + "events_before": 22821, + "paid": { + "1": 41448, + "16": 416, + "2": 8208, + "24": 416, + "3": 8928, + "32": 416, + "4": 1764, + "40": 416, + "48": 416, + "5": 2970, + "56": 416, + "6": 144, + "64": 416, + "7": 162, + "72": 208, + "8": 18 + }, + "raw_root_interval": [ + "31286520159/10000000000000", + "312865201591/100000000000000" + ], + "removed": { + "ADD": 4737, + "SCALE": 1 + }, + "scalar_allowance_after": 134190, + "scalar_allowance_before": 189670, + "status": "PASS_P104_FRONTIER_COMPRESSION_NO_NEW_KAPPA", + "targets": { + "1": 252, + "145": 208, + "17": 416, + "2": 144, + "25": 416, + "3": 72, + "33": 416, + "4": 1926, + "41": 416, + "49": 416, + "5": 252, + "57": 416, + "6": 36, + "65": 416, + "7": 162, + "73": 208, + "8": 342, + "9": 6930 + } +} diff --git a/research/p104-frontier-compression/SOURCES.json b/research/p104-frontier-compression/SOURCES.json new file mode 100644 index 0000000000..d51eab5ddc --- /dev/null +++ b/research/p104-frontier-compression/SOURCES.json @@ -0,0 +1,54 @@ +{ + "schema_version": 1, + "base_commit": "2485805a6d47f36ea83ddde6327d453ac82d44dc", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a", + "sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81" + }, + { + "path": "research/p104-retained-operand-descent/WORD.json.gz", + "usage": "input", + "git_blob": "f2d3f98964f939e5ca652f9b1453a0604f15f829", + "sha256": "68d1ff048bc6d30d85ceaeb38e2557adab87b20a9c67cf73948f95f54104575f" + }, + { + "path": "research/p104-retained-operand-descent/pricing.py", + "usage": "input", + "git_blob": "cd8220ca7a393f03341f08a93b9d1287f0bb3689", + "sha256": "bba1611b05b6cc35279aa1667dcc62ce0e7f27f0ba21f20eb68244fa772e0ae7" + }, + { + "path": "research/p104-retained-operand-descent/sources.py", + "usage": "input", + "git_blob": "bef6542243a082755a881dff42097434e6370609", + "sha256": "a62fefda1709614157ba440d38c164c366a8b3322ab8f866b6b4bd47b9d83dbc" + }, + { + "path": "research/p104-retained-operand-descent/SOURCES.json", + "usage": "input", + "git_blob": "0c574b6026a7239aac7365c433d3760928748edb", + "sha256": "7c7b6fac64005eb8932283a902069d672d98c52bda2b63cc7eaa4a2cac13ce8f" + }, + { + "path": "research/p104-retained-operand-descent/RESULT.json", + "usage": "input", + "git_blob": "9d78529c1ac43faef6b3dff6e4b1262d89a86b40", + "sha256": "cffec38f3a5ab0bf5ee1bcd15b2e7bf8bcfd711b57ee57de8ec0fea0c5a823df" + }, + { + "path": "research/p104-retained-operand-descent/inputs/pr5827-source.tar", + "usage": "input", + "git_blob": "1e10936044959f81a4c5fcd5bdb7b9e4c060ec8e", + "sha256": "7af5908a4d83e83e28f59523fd7494841f669b7295311cfdbc3027fa65c5826d" + } + ] +} diff --git a/research/p104-frontier-compression/TASK.json b/research/p104-frontier-compression/TASK.json new file mode 100644 index 0000000000..cc7b8c9176 --- /dev/null +++ b/research/p104-frontier-compression/TASK.json @@ -0,0 +1,124 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 8, + "base_commit": "2485805a6d47f36ea83ddde6327d453ac82d44dc", + "original_card": { + "id": "p104-side-correction", + "question": "Can joint helper bases and a legal causal split improve the complete P104 productive/paid invoice?", + "starting_points": [ + "docs/research/current-priorities.md", + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "research/p104-helper-subspace-splits/README.md", + "research/dyadic-helper-channel-capacity/README.md" + ], + "methods": [ + "Construct and independently check one source-bound instance of the stated first experiment.", + "Seek an exact counterexample or target-specific complete-budget obstruction to that same proposed change." + ], + "acceptance_gate": "An exact arbitrary-input identity, source/target frame availability and restoration at the chosen cut, plus the complete channel+correction+idle/hosting bill or an explicit favorable bound. The native channel alone is not a supplier. A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read revision 8, the selected review and live exact-source handoffs. Then follow this card's bounded first_experiment.", + "scope": "Source-bound orientation only, not a supplier replay or theorem proof." + }, + "first_experiment": "Start with the selected #5599 emitted word and review pending #5718 distinct input/output bases plus #5717/#5719 coverage before claiming work. Pick one uncovered source word, helper group and cut region. Prove the arbitrary-input relation and legal entry/exit corrections, then compare full target and paid profiles. Reject if completion, owned lifetimes or consumer costs repay the gain. A static pairing rank alone is not a physical split.", + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "allowed_variations": [ + "One exact source head, helper/cut region or quantified proposition and changed hypothesis; check live handoffs first. Different seeds are not different scopes." + ], + "scope_change_triggers": [ + "Changing source head, helper/cut domain, operation alphabet or caller boundary without recording the new scope.", + "Treating an archived proposal or local numerical pass as complete supplier admission." + ], + "overlap_terms": [ + "P104", + "helper basis", + "helper split", + "5718", + "dyadic capacity" + ], + "existing_checks": [ + { + "scope": "PR #4133: literal-slot defect", + "evidence": "research/p104-literal-slot-defect/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4136: uniform commutation gap", + "evidence": "research/p104-uniform-commutation-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4140: uniform encoding gap", + "evidence": "research/p104-uniform-encoding-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "evidence": "research/p104-source-chart-shortcut/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4154: fiber-tag seam mismatch", + "evidence": "research/p104-fiber-tag-seam/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "evidence": "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "remaining": "The next experiment must identify uncovered source-specific work. Successor archive intake does not transfer this admission.", + "status": "reviewed", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Rewrite only the ADD and SCALE events of the merged PR6167 word with shared partial sums across overlapping Y rows and exact window resynthesis, keeping every MOVE, INIT, COPY and CLEAR event, and check that the complete invoice and kappa are unchanged.", + "scope_change_reason": "The current card asks for a helper basis split. This package instead leaves the paid profile fixed and shortens the scalar word; it claims no kappa.", + "bottleneck_link": "None: ADD and SCALE events are not in the price, so the complete invoice, productive targets and paid profile are identical to PR6167. The package only lowers the event and scalar counts.", + "budget_minutes": null, + "stop_rule": "Publish only if the replayed price, native maps, caller and endpoint columns are identical to PR6167 and the event count is strictly lower.", + "outcome": "completed", + "evidence": "WORD.json.gz, verify.py and RESULT.json", + "author": "DreamingOfClouds", + "ai_assistance": "Claude Opus 5.5 (Anthropic), via Claude Code. The base word and checker chain are PR6167 (Ali Romman, OpenAI Codex assistance); PR6169 is the precedent for a no-kappa resynthesis package.", + "open_questions": [ + { + "question": "Can the same shared-partial-sum rewrite be combined with a future paid-profile improvement?", + "why_it_matters": "A shorter scalar word leaves more event and scalar slack for later constructions.", + "first_step": "Run the rewrite on the next merged word and compare the replayed price.", + "blocked_by": "Needs a new merged word; independent review of this package is also pending." + } + ], + "coordination": { + "source_pr": 6167, + "source_commit": "564a076b113621a93edc4e39968ee4e4a8c9caf0", + "precedent_pr": 6169, + "toolkit_pr": 6170, + "local_notes": "Author checks only. No new kappa is claimed." + } +} diff --git a/research/p104-frontier-compression/VERIFY.json b/research/p104-frontier-compression/VERIFY.json new file mode 100644 index 0000000000..72ce3c4b98 --- /dev/null +++ b/research/p104-frontier-compression/VERIFY.json @@ -0,0 +1,37 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-retained-operand-descent/WORD.json.gz", + "research/p104-retained-operand-descent/pricing.py", + "research/p104-retained-operand-descent/sources.py", + "research/p104-retained-operand-descent/SOURCES.json", + "research/p104-retained-operand-descent/RESULT.json", + "research/p104-retained-operand-descent/inputs/pr5827-source.tar" + ], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-O", + "-B", + "{package}/test_portability.py" + ], + "timeout_seconds": 30, + "checks": "Accept changed gzip headers and compression for the generated payload. Reject changed payloads, type substitutions and corrupt containers." + }, + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 500, + "checks": "Authenticate the PR6167 word, price and checker chain by pin; check that only ADD and SCALE events changed, then replay the compressed word: identical productive targets, paid profile, storage, 799 endpoint columns, native maps, physical caller and complete price (same raw crossing as PR6167). No new kappa is claimed." + } + ] +} diff --git a/research/p104-frontier-compression/WORD.json.gz b/research/p104-frontier-compression/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..998ee2b497387a39d63dc7867b9594c8551f5e69 GIT binary patch literal 97232 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

jP;FE9*IxMh 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 Y{qXaD{eJj-^WWe655?i&6p2t205_!2LjV8( literal 0 HcmV?d00001 diff --git a/research/p104-frontier-compression/construct.py b/research/p104-frontier-compression/construct.py new file mode 100644 index 0000000000..24bfc53fbb --- /dev/null +++ b/research/p104-frontier-compression/construct.py @@ -0,0 +1,14 @@ +"""Payload helpers for the compressed word. Apache-2.0. + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. +""" +import gzip +import json + + +def payload(value): + return (json.dumps(value, sort_keys=True, indent=2) + '\n').encode() + + +def matches_shipped(value, compressed): + return gzip.decompress(compressed) == payload(value) diff --git a/research/p104-frontier-compression/test_portability.py b/research/p104-frontier-compression/test_portability.py new file mode 100644 index 0000000000..dd53b6d559 --- /dev/null +++ b/research/p104-frontier-compression/test_portability.py @@ -0,0 +1,75 @@ +"""Regenerated-output portability controls; immutable inputs stay exact. + +Portability controls follow the base package's maintainer repair (see its NOTICE). +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. Apache-2.0. +""" +from copy import deepcopy +import gzip +import io +import json +from pathlib import Path +import sys +import unittest +import zlib + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +from construct import matches_shipped, payload + + +class WordPortabilityTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.shipped = (HERE / 'WORD.json.gz').read_bytes() + cls.word = json.loads(gzip.decompress(cls.shipped)) + + def test_original_word(self): + self.assertTrue(matches_shipped(self.word, self.shipped)) + + def test_os_header_variants(self): + # Byte 9 is gzip's OS field. Neither the payload nor CRC changes. + for code in (0, 3, 19, 255): + changed = bytearray(self.shipped) + changed[9] = code + with self.subTest(os_code=code): + self.assertTrue(matches_shipped(self.word, bytes(changed))) + + def test_compression_timestamp_and_filename(self): + for level in (1, 6, 9): + with self.subTest(level=level): + buffer = io.BytesIO() + with gzip.GzipFile(filename='different-name.json', mode='wb', + compresslevel=level, mtime=1700000000, + fileobj=buffer) as stream: + stream.write(payload(self.word)) + self.assertNotEqual(buffer.getvalue(), self.shipped) + self.assertTrue(matches_shipped(self.word, buffer.getvalue())) + + def test_changed_event_and_unknown_field_rejected(self): + changed = deepcopy(self.word) + changed['program'].pop() + self.assertFalse(matches_shipped(changed, self.shipped)) + changed = deepcopy(self.word) + changed['unexpected_proof_field'] = 1 + self.assertFalse(matches_shipped(changed, self.shipped)) + + def test_boolean_is_not_an_integer(self): + changed = deepcopy(self.word) + move = next(event for event in changed['program'] if event[0] == 'MOVE') + self.assertIs(type(move[4]), bool) + move[4] = int(move[4]) + # Python object equality alone would silently accept this mutation. + self.assertEqual(changed, self.word) + self.assertFalse(matches_shipped(changed, self.shipped)) + + def test_extra_payload_and_corrupt_container_rejected(self): + self.assertFalse(matches_shipped(self.word, gzip.compress(payload(self.word) + b' '))) + self.assertFalse(matches_shipped(self.word, self.shipped + gzip.compress(b'not a word'))) + for bad in (self.shipped[:20], self.shipped[:-8] + b'\0' * 8): + with self.subTest(size=len(bad)): + with self.assertRaises((gzip.BadGzipFile, EOFError, zlib.error)): + matches_shipped(self.word, bad) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/research/p104-frontier-compression/verify.py b/research/p104-frontier-compression/verify.py new file mode 100644 index 0000000000..a1ecf606d3 --- /dev/null +++ b/research/p104-frontier-compression/verify.py @@ -0,0 +1,118 @@ +"""Check that the compressed word is a lossless rewrite of PR6167's word. + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. Apache-2.0. +The word, price and checker chain are PR6167's (Ali Romman) over PR6144 and PR5827; they are read +from the merged package research/p104-retained-operand-descent, authenticated by SOURCES.json pins. +""" +from collections import Counter +from contextlib import ExitStack +from pathlib import Path +import gzip +import json +import sys +import tempfile + +sys.dont_write_bytecode = True +HERE = Path(__file__).resolve().parent +BASE = HERE.parent / 'p104-retained-operand-descent' +sys.path.insert(0, str(HERE)) +from construct import matches_shipped + +STATUS = 'PASS_P104_FRONTIER_COMPRESSION_NO_NEW_KAPPA' + + +def need(ok, message): + if not ok: + raise ValueError(message) + + +def load(path, name): + import importlib.util + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def authenticate(path, pin): + from hashlib import sha1, sha256 + raw = Path(path).read_bytes() + need(sha256(raw).hexdigest() == pin['sha256'], 'Exact SHA256: ' + pin['path']) + need(sha1(b'blob ' + str(len(raw)).encode() + b'\0' + raw).hexdigest() == pin['git_blob'], + 'Exact Git blob: ' + pin['path']) + return raw + + +def run(): + pins = {r['path']: r for r in json.loads((HERE / 'SOURCES.json').read_text())['files']} + root_dir = HERE.parent.parent + for name, pin in pins.items(): + if pin['usage'] == 'input': + authenticate(root_dir / name, pin) + base_raw = (BASE / 'WORD.json.gz').read_bytes() + source = json.loads(gzip.decompress(base_raw)) + shipped = (HERE / 'WORD.json.gz').read_bytes() + word = json.loads(gzip.decompress(shipped)) + need(matches_shipped(word, shipped), 'Canonical payload') + old, new = source['program'], word['program'] + need({k: v for k, v in word.items() if k != 'program'} == {k: v for k, v in source.items() if k != 'program'}, + 'Header unchanged') + need((len(old), len(new)) == (22821, 18083), 'Exact event counts') + for kind in ('MOVE', 'INIT', 'CLEAR', 'COPY'): + need([e for e in old if e[0] == kind] == [e for e in new if e[0] == kind], + kind + ' events unchanged and in order') + need(all(type(e[4]) is bool for e in new if e[0] == 'MOVE'), 'Boolean ownership flags') + print('PASS only ADD and SCALE events changed: 22,821 -> 18,083 events', flush=True) + with ExitStack() as contexts: + S = load(BASE / 'sources.py', 'base_sources') + parent = contexts.enter_context(S.sources()) + cursor = contexts.enter_context(load(parent / 'sources.py', 'base_source_top').sources()) + for depth in range(7): + module = load(cursor / 'sources.py', 'base_source_' + str(depth)) + cursor, root = contexts.enter_context(module.sources()) + L = load(parent / 'local.py', 'local') + L.ROOT = root + baseline, local = L.replay(source), L.replay(word) + for key in ('helpers', 'paid', 'public_inputs', 'owned_fields', 'owned_lifetimes', 'peak_owned_fields'): + need(local[key] == baseline[key], 'Unchanged replay field: ' + key) + print('PASS replay: productive targets, paid profile and storage identical', flush=True) + columns = L.reverse_columns(word) + need(columns == L.reverse_columns(source), 'Identical endpoint columns') + need(columns['columns'] == 799 and columns['coefficients'] == 638401, 'All input columns') + print('PASS separate transpose: 799 columns, 638,401 coefficients identical', flush=True) + native = L.native(word) + C = load(root / 'research/p104-productive-controller/caller.py', 'base_caller') + caller = C.construct() + physical = C.physical(caller, word) + P = load(BASE / 'pricing.py', 'retained_operand_price') + price = P.run(local, native, caller, physical) + ref = json.loads((BASE / 'RESULT.json').read_text()) + need(price['raw_root_interval'] == ref['complete_cost']['raw_root_interval'], 'Same raw crossing') + for key in ('paid', 'targets'): + need(price[key] == ref['complete_cost'][key], 'Same complete invoice: ' + key) + rt = lambda v: json.loads(json.dumps(v)) + need(rt(physical) == ref['physical_caller'], 'Same physical caller') + need(rt(native) == ref['native'], 'Same native maps') + print('PASS native maps, physical caller and complete price identical to PR6167', flush=True) + return dict(status=STATUS, events_before=len(old), events_after=len(new), + removed={k: Counter(e[0] for e in old)[k] - Counter(e[0] for e in new)[k] + for k in ('ADD', 'SCALE')}, + raw_root_interval=price['raw_root_interval'], paid=price['paid'], targets=price['targets'], + scalar_allowance_before=baseline['real_scalar_allowance'], + scalar_allowance_after=local['real_scalar_allowance']) + + +def main(): + with tempfile.TemporaryDirectory(prefix='frontier-compression-') as cache: + sys.pycache_prefix = cache + result = run() + if '--write' in sys.argv: + (HERE / 'RESULT.json').write_text(json.dumps(result, sort_keys=True, indent=2) + '\n') + else: + need(json.loads((HERE / 'RESULT.json').read_text()) == result, 'Exact retained result') + print(STATUS, flush=True) + + +if __name__ == '__main__': + main()