<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_hunk_corpus.py</id>
	<title>The Principia Machina/TPC-PY/gen hunk corpus.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_hunk_corpus.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_hunk_corpus.py&amp;action=history"/>
	<updated>2026-10-21T10:21:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_hunk_corpus.py&amp;diff=4155&amp;oldid=prev</id>
		<title>BFP Rauch: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_hunk_corpus.py&amp;diff=4155&amp;oldid=prev"/>
		<updated>2026-09-28T04:32:53Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:32, 28 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-4154:rev-4155 --&gt;
&lt;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_hunk_corpus.py&amp;diff=4154&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_hunk_corpus.py (0.1.0), SHA-256 4eef7f3bba8ff6a9; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_hunk_corpus.py&amp;diff=4154&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_hunk_corpus.py (0.1.0), SHA-256 4eef7f3bba8ff6a9; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;quot;&amp;quot;&amp;quot;gen_hunk_corpus 0.1.0: builds hunk_corpus.json for tpc_hunk 0.1.0.&lt;br /&gt;
Expectations are computed by tpc_hunk.py and pinned; hand_checked cases&lt;br /&gt;
were worked by hand. Case H30 is landing round 7&amp;#039;s request hunk set&lt;br /&gt;
(SRC/hunks_request.json, 15 hunks): the baseline (request 0.1.8) is&lt;br /&gt;
rebuilt from the delivered 0.1.9 by reverse application and checked&lt;br /&gt;
against the recorded baseline SHA-256, then the forward application must&lt;br /&gt;
give 0.1.9 byte for byte; the case carries the rebuilt baseline as the&lt;br /&gt;
base and 0.1.9 as the expected text (MEASURED). The record and README sets&lt;br /&gt;
are replayed by verify_lr7_hunks.py, too large for the corpus.&lt;br /&gt;
SRC is hunk_inputs/lr7_request beside this file (GEN-PATHS, 2026-09-27):&lt;br /&gt;
hunks_request.json and tpm_tps_thread_request_0_1_9.txt, rebuilt from this&lt;br /&gt;
corpus&amp;#039;s own H30 and checked equal to the reverse application of landing&lt;br /&gt;
round 8&amp;#039;s request hunks to request 0.1.10. The environment variable&lt;br /&gt;
TPM_SRC, when set, names another folder holding the same two files. The&lt;br /&gt;
corpus is refused, not written short, when they are missing.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import hashlib&lt;br /&gt;
import json&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
here = os.path.dirname(os.path.abspath(__file__))&lt;br /&gt;
sys.path.insert(0, here)&lt;br /&gt;
from tpc_hunk import hunk_apply, run_case  # noqa: E402&lt;br /&gt;
&lt;br /&gt;
SRC = os.environ.get(&amp;quot;TPM_SRC&amp;quot;) or os.path.join(here, &amp;quot;hunk_inputs&amp;quot;, &amp;quot;lr7_request&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def H(old, new, **extra):&lt;br /&gt;
    d = {&amp;quot;old&amp;quot;: old, &amp;quot;new&amp;quot;: new}&lt;br /&gt;
    d.update(extra)&lt;br /&gt;
    return d&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
base1 = &amp;quot;The quick brown fox\njumps over the lazy dog.\nEND\n&amp;quot;&lt;br /&gt;
cases = [&lt;br /&gt;
 (&amp;quot;H01 one hunk&amp;quot;, base1, [H(&amp;quot;brown&amp;quot;, &amp;quot;red&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H02 three hunks in position order&amp;quot;, base1, [H(&amp;quot;quick&amp;quot;, &amp;quot;slow&amp;quot;), H(&amp;quot;lazy&amp;quot;, &amp;quot;sleeping&amp;quot;), H(&amp;quot;END&amp;quot;, &amp;quot;FIN&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H03 three hunks listed out of position order: applied by position, the same text&amp;quot;, base1, [H(&amp;quot;END&amp;quot;, &amp;quot;FIN&amp;quot;), H(&amp;quot;quick&amp;quot;, &amp;quot;slow&amp;quot;), H(&amp;quot;lazy&amp;quot;, &amp;quot;sleeping&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H04 an old string absent from the base: ABSENT at hunk 2&amp;quot;, base1, [H(&amp;quot;quick&amp;quot;, &amp;quot;slow&amp;quot;), H(&amp;quot;cat&amp;quot;, &amp;quot;dog&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H05 an old string occurring more than once (\&amp;quot;o\&amp;quot; four times): MULTIPLE&amp;quot;, base1, [H(&amp;quot;o&amp;quot;, &amp;quot;0&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H06 overlapping hunks: OVERLAP at hunk 2&amp;quot;, base1, [H(&amp;quot;brown fox&amp;quot;, &amp;quot;red fox&amp;quot;), H(&amp;quot;fox\njumps&amp;quot;, &amp;quot;fox leaps&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H07 adjacent hunks (one ends where the next begins) do not overlap&amp;quot;, base1, [H(&amp;quot;quick &amp;quot;, &amp;quot;slow &amp;quot;), H(&amp;quot;brown&amp;quot;, &amp;quot;red&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H08 an empty old string: EMPTY&amp;quot;, base1, [H(&amp;quot;&amp;quot;, &amp;quot;x&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H09 an empty hunk list: OK, the base unchanged&amp;quot;, base1, [], True),&lt;br /&gt;
 (&amp;quot;H10 old equal to new: a no-op, applied&amp;quot;, base1, [H(&amp;quot;fox&amp;quot;, &amp;quot;fox&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H11 overlapping occurrences count: \&amp;quot;aa\&amp;quot; in \&amp;quot;aaa\&amp;quot; occurs twice, MULTIPLE&amp;quot;, &amp;quot;xaaay&amp;quot;, [H(&amp;quot;aa&amp;quot;, &amp;quot;b&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H12 a later hunk&amp;#039;s old string found only inside an earlier hunk&amp;#039;s new text: ABSENT (located in the base)&amp;quot;, base1, [H(&amp;quot;brown&amp;quot;, &amp;quot;bright green&amp;quot;), H(&amp;quot;green&amp;quot;, &amp;quot;blue&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H13 a deletion hunk (new empty)&amp;quot;, base1, [H(&amp;quot;quick &amp;quot;, &amp;quot;&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H14 an insertion by anchor&amp;quot;, base1, [H(&amp;quot;END\n&amp;quot;, &amp;quot;END\nAppendix\n&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H15 the old string is the whole base&amp;quot;, base1, [H(base1, &amp;quot;replaced\n&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H16 NFC and NFD spellings are not equal: ABSENT (no normalization)&amp;quot;, &amp;quot;café au lait&amp;quot;, [H(&amp;quot;café&amp;quot;, &amp;quot;thé&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H17 multi-byte text: CJK, an emoji, combining marks&amp;quot;, &amp;quot;模型 \U0001F600 é αβγ&amp;quot;, [H(&amp;quot;\U0001F600&amp;quot;, &amp;quot;\U0001F601\U0001F602&amp;quot;), H(&amp;quot;β&amp;quot;, &amp;quot;ββ&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H18 CRLF against LF: ABSENT&amp;quot;, &amp;quot;a\r\nb\r\n&amp;quot;, [H(&amp;quot;a\nb&amp;quot;, &amp;quot;c&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H19 the render escapes | and backslash; a tab is \\x09&amp;quot;, &amp;quot;x|y\\z\tw&amp;quot;, [H(&amp;quot;|&amp;quot;, &amp;quot;||&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H20 two hunks with one old string: the second overlaps the first&amp;quot;, base1, [H(&amp;quot;fox&amp;quot;, &amp;quot;cat&amp;quot;), H(&amp;quot;fox&amp;quot;, &amp;quot;dog&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H21 optional keys n, anchor and count are accepted&amp;quot;, base1, [H(&amp;quot;fox&amp;quot;, &amp;quot;cat&amp;quot;, n=1, anchor=&amp;quot;animal&amp;quot;, count=1)], True),&lt;br /&gt;
 (&amp;quot;H22 an unknown key is refused&amp;quot;, base1, [H(&amp;quot;fox&amp;quot;, &amp;quot;cat&amp;quot;, extra=1)], True),&lt;br /&gt;
 (&amp;quot;H23 a hunk without new is refused&amp;quot;, base1, [{&amp;quot;old&amp;quot;: &amp;quot;fox&amp;quot;}], True),&lt;br /&gt;
 (&amp;quot;H24 hunks not a list is refused&amp;quot;, base1, {&amp;quot;old&amp;quot;: &amp;quot;fox&amp;quot;, &amp;quot;new&amp;quot;: &amp;quot;cat&amp;quot;}, True),&lt;br /&gt;
 (&amp;quot;H25 a base that is not a string is refused&amp;quot;, 12, [H(&amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H26 an old string that is not a string is refused&amp;quot;, base1, [H(5, &amp;quot;x&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H27 a needle spanning a line end&amp;quot;, base1, [H(&amp;quot;fox\njumps&amp;quot;, &amp;quot;fox leaps&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H28 three hunks, the third out of order and overlapping the first: OVERLAP&amp;quot;, base1, [H(&amp;quot;quick brown&amp;quot;, &amp;quot;slow red&amp;quot;), H(&amp;quot;lazy&amp;quot;, &amp;quot;idle&amp;quot;), H(&amp;quot;brown fox&amp;quot;, &amp;quot;fox&amp;quot;)], True),&lt;br /&gt;
 (&amp;quot;H29 an empty base with an empty hunk list&amp;quot;, &amp;quot;&amp;quot;, [], True),&lt;br /&gt;
]&lt;br /&gt;
out = []&lt;br /&gt;
for name, base, hunks, hand in cases:&lt;br /&gt;
    args = {&amp;quot;base&amp;quot;: base, &amp;quot;hunks&amp;quot;: hunks}&lt;br /&gt;
    out.append({&amp;quot;name&amp;quot;: name, &amp;quot;fn&amp;quot;: &amp;quot;hunk&amp;quot;, &amp;quot;args&amp;quot;: args, &amp;quot;hand_checked&amp;quot;: hand,&lt;br /&gt;
                &amp;quot;expected&amp;quot;: run_case(&amp;quot;hunk&amp;quot;, args)})&lt;br /&gt;
&lt;br /&gt;
# ---- H30: landing round 7&amp;#039;s request hunk set, MEASURED ---------------------&lt;br /&gt;
req = os.path.join(SRC, &amp;quot;hunks_request.json&amp;quot;)&lt;br /&gt;
if os.path.exists(req):&lt;br /&gt;
    d = json.load(open(req, encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
    target = open(os.path.join(SRC, d[&amp;quot;target&amp;quot;]), encoding=&amp;quot;utf-8&amp;quot;,&lt;br /&gt;
                  newline=&amp;quot;&amp;quot;).read()&lt;br /&gt;
    rev = hunk_apply(target, [{&amp;quot;old&amp;quot;: h[&amp;quot;new&amp;quot;], &amp;quot;new&amp;quot;: h[&amp;quot;old&amp;quot;]} for h in d[&amp;quot;hunks&amp;quot;]])&lt;br /&gt;
    assert rev[&amp;quot;status&amp;quot;] == &amp;quot;OK&amp;quot;, rev&lt;br /&gt;
    base = rev[&amp;quot;text&amp;quot;]&lt;br /&gt;
    assert hashlib.sha256(base.encode(&amp;quot;utf-8&amp;quot;)).hexdigest() == d[&amp;quot;baseline_sha256&amp;quot;]&lt;br /&gt;
    fwd = hunk_apply(base, [{&amp;quot;old&amp;quot;: h[&amp;quot;old&amp;quot;], &amp;quot;new&amp;quot;: h[&amp;quot;new&amp;quot;]} for h in d[&amp;quot;hunks&amp;quot;]])&lt;br /&gt;
    assert fwd[&amp;quot;status&amp;quot;] == &amp;quot;OK&amp;quot; and fwd[&amp;quot;text&amp;quot;] == target&lt;br /&gt;
    args = {&amp;quot;base&amp;quot;: base, &amp;quot;hunks&amp;quot;: [{&amp;quot;old&amp;quot;: h[&amp;quot;old&amp;quot;], &amp;quot;new&amp;quot;: h[&amp;quot;new&amp;quot;], &amp;quot;n&amp;quot;: h[&amp;quot;n&amp;quot;], &amp;quot;anchor&amp;quot;: h[&amp;quot;anchor&amp;quot;], &amp;quot;count&amp;quot;: h[&amp;quot;count&amp;quot;]} for h in d[&amp;quot;hunks&amp;quot;]]}&lt;br /&gt;
    out.append({&amp;quot;name&amp;quot;: &amp;quot;H30 landing round 7&amp;#039;s request hunk set (SRC/hunks_request.json, 15 hunks): baseline 0.1.8 rebuilt by reverse application, SHA-256 %s; forward gives request 0.1.9, SHA-256 %s&amp;quot; % (d[&amp;quot;baseline_sha256&amp;quot;][:16], fwd[&amp;quot;sha256&amp;quot;][:16]),&lt;br /&gt;
                &amp;quot;fn&amp;quot;: &amp;quot;hunk&amp;quot;, &amp;quot;args&amp;quot;: args, &amp;quot;hand_checked&amp;quot;: False, &amp;quot;expected&amp;quot;: run_case(&amp;quot;hunk&amp;quot;, args)})&lt;br /&gt;
    print(&amp;quot;H30 request set: baseline sha256 match, forward byte-identical&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    sys.exit(&amp;quot;refusing to write: H30&amp;#039;s inputs not found in %s&amp;quot; % SRC)&lt;br /&gt;
&lt;br /&gt;
with open(os.path.join(here, &amp;quot;hunk_corpus.json&amp;quot;), &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;,&lt;br /&gt;
          newline=&amp;quot;\n&amp;quot;) as f:&lt;br /&gt;
    json.dump({&amp;quot;corpus&amp;quot;: &amp;quot;hunk&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;, &amp;quot;cases&amp;quot;: out}, f,&lt;br /&gt;
              indent=1, sort_keys=True, ensure_ascii=False)&lt;br /&gt;
print(&amp;quot;cases&amp;quot;, len(out))&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>