<?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_dis_corpus.py</id>
	<title>The Principia Machina/TPC-PY/gen dis 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_dis_corpus.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_dis_corpus.py&amp;action=history"/>
	<updated>2026-10-21T08:24:33Z</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_dis_corpus.py&amp;diff=5259&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_dis_corpus.py&amp;diff=5259&amp;oldid=prev"/>
		<updated>2026-09-30T13:34:09Z</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 13:34, 30 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-5258:rev-5259 --&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_dis_corpus.py&amp;diff=5258&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_dis_corpus.py (0.2.0), SHA-256 1def05bafa809a45; conformed TPS 0.5.0; PROPOSED, not declared (TPC-PY 0.3.0)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_dis_corpus.py&amp;diff=5258&amp;oldid=prev"/>
		<updated>2026-09-30T13:34:05Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_dis_corpus.py (0.2.0), SHA-256 1def05bafa809a45; conformed TPS 0.5.0; PROPOSED, not declared (TPC-PY 0.3.0)&lt;/p&gt;
&lt;a href=&quot;https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_dis_corpus.py&amp;amp;diff=5258&amp;amp;oldid=4823&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_dis_corpus.py&amp;diff=4823&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_dis_corpus.py&amp;diff=4823&amp;oldid=prev"/>
		<updated>2026-09-30T02:11:02Z</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 02:11, 30 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-4822:rev-4823 --&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_dis_corpus.py&amp;diff=4822&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_dis_corpus.py (0.1.0), SHA-256 b6ee0e453a2bca3e; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_dis_corpus.py&amp;diff=4822&amp;oldid=prev"/>
		<updated>2026-09-30T02:10:58Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_dis_corpus.py (0.1.0), SHA-256 b6ee0e453a2bca3e; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;gen_dis_corpus 0.1.0: writes vectors/dis_corpus.json, the vectors of&lt;br /&gt;
tpc_digest 0.2.0&amp;#039;s three functions for the TPS digest and the instruction&lt;br /&gt;
set digest (D203.1, taken 2026-09-28: tpm_post_tpcpy_pause 0.1.0, D203&lt;br /&gt;
Option 1 (a) and (b); tpm_tps_digest_spec 0.1.0):&lt;br /&gt;
&lt;br /&gt;
  pre_texts(wikitext)             the &amp;lt;pre&amp;gt; contents of one page, in order&lt;br /&gt;
  d_tps(version, pages)           D(TPS) over the pages of the TPS tree&lt;br /&gt;
  d_is(version, d_tps, members)   D(IS) over D(TPS) and the other members&lt;br /&gt;
                                  of the index&amp;#039;s instruction-artifact class&lt;br /&gt;
&lt;br /&gt;
A corpus of its own beside digest_corpus.json, which is written by hand&lt;br /&gt;
and stays byte-identical at its tpc_digest 0.1.0 label (sr3_scope&amp;#039;s&lt;br /&gt;
precedent). BASE form: {&amp;quot;id&amp;quot;, &amp;quot;fn&amp;quot;, &amp;quot;input&amp;quot;, &amp;quot;expect&amp;quot;}, the result being&lt;br /&gt;
canon() of the function&amp;#039;s answer; digest cases also carry &amp;quot;preimage&amp;quot;, the&lt;br /&gt;
exact bytes hashed (ASCII here), so a reader can check any of them with&lt;br /&gt;
printf %s &amp;lt;preimage&amp;gt; | sha256sum.&lt;br /&gt;
&lt;br /&gt;
VECTORS FIRST. Every expectation below is HAND-DERIVED: refusals written&lt;br /&gt;
literally; each digest from a field list written literally below, the&lt;br /&gt;
page hashes and the netstring built by this file&amp;#039;s own code (sha256_hex,&lt;br /&gt;
netstring), apart from tpc_digest. The generator refuses to write the&lt;br /&gt;
corpus if tpc_digest disagrees with any expectation. The page sets are&lt;br /&gt;
synthetic: the real TPS 0.3.0 page set is a fixture outside tpc/ (ruling&lt;br /&gt;
S97; dis_fixtures/ at the tree root, not published with TPC-PY).&lt;br /&gt;
&lt;br /&gt;
canon() renders a string as itself, so a pre_texts answer whose blocks&lt;br /&gt;
hold &amp;quot;,&amp;quot; or &amp;quot;]&amp;quot; would read ambiguously; the pre_texts vectors keep such&lt;br /&gt;
characters out of their blocks, and the d_tps vectors pin what the&lt;br /&gt;
blocks hash to. Deterministic; standard library only; Python 3.8+.&lt;br /&gt;
Run: cd tpc &amp;amp;&amp;amp; python3 gen_dis_corpus.py (Windows: py -3 gen_dis_corpus.py).&lt;br /&gt;
&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;
sys.dont_write_bytecode = True&lt;br /&gt;
import tpc_strike as S   # noqa: E402  canon()&lt;br /&gt;
import tpc_digest as G   # noqa: E402&lt;br /&gt;
&lt;br /&gt;
GEN_VERSION = &amp;quot;0.1.0&amp;quot;&lt;br /&gt;
R = &amp;quot;The Principia Machina/TPS&amp;quot;          # the tree&amp;#039;s root title (D34.1)&lt;br /&gt;
HEX_A = &amp;quot;a&amp;quot; * 64&lt;br /&gt;
HEX_B = &amp;quot;0123456789abcdef&amp;quot; * 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sha256_hex(text):&lt;br /&gt;
    return hashlib.sha256(text.encode(&amp;quot;utf-8&amp;quot;)).hexdigest()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def netstring(fields):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;D97&amp;#039;s encoding, built here apart from tpc_digest: each field its&lt;br /&gt;
    UTF-8 byte length in decimal, &amp;quot;:&amp;quot;, its bytes; an int in base 10.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    out = []&lt;br /&gt;
    for f in fields:&lt;br /&gt;
        s = str(f) if type(f) is int else f&lt;br /&gt;
        out.append(&amp;quot;%d:%s&amp;quot; % (len(s.encode(&amp;quot;utf-8&amp;quot;)), s))&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(out)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cases = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def case(cid, fn, inp, expect, preimage=None):&lt;br /&gt;
    c = {&amp;quot;id&amp;quot;: cid, &amp;quot;fn&amp;quot;: fn, &amp;quot;input&amp;quot;: inp}&lt;br /&gt;
    if preimage is not None:&lt;br /&gt;
        c[&amp;quot;preimage&amp;quot;] = preimage&lt;br /&gt;
    c[&amp;quot;expect&amp;quot;] = expect&lt;br /&gt;
    cases.append(c)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def ok_digest(preimage):&lt;br /&gt;
    return &amp;quot;[OK,%s]&amp;quot; % sha256_hex(preimage)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------ pre_texts&lt;br /&gt;
P = &amp;quot;pre_texts&amp;quot;&lt;br /&gt;
REF_PRE = &amp;quot;[REFUSED,pre]&amp;quot;&lt;br /&gt;
case(&amp;quot;pre/one-block&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;#039;&amp;#039;banner&amp;#039;&amp;#039;\n\n&amp;lt;pre&amp;gt;\nA\nB\n&amp;lt;/pre&amp;gt;\n\n[[Category:X]]\n&amp;quot;},&lt;br /&gt;
     &amp;quot;[OK,[A\nB\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/two-blocks&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nX\n&amp;lt;/pre&amp;gt;\nbetween\n&amp;lt;pre&amp;gt;\nY\n&amp;lt;/pre&amp;gt;\n&amp;quot;},&lt;br /&gt;
     &amp;quot;[OK,[X\n,Y\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/no-block&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;just text\n&amp;quot;}, &amp;quot;[OK,[]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/empty-text&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;quot;}, &amp;quot;[OK,[]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/empty-block (canon writes [] as for no block; d_tps pins the difference)&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\n&amp;lt;/pre&amp;gt;&amp;quot;}, &amp;quot;[OK,[]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/text-after-closing-ignored&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;lt;/pre&amp;gt;tail &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;\n&amp;quot;}, &amp;quot;[OK,[A\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/prefix-inside-is-text (TPS 0.3.0 writes &amp;lt;prefix&amp;gt;-n)&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\n&amp;lt;prefix&amp;gt;-n and &amp;lt;/prefix&amp;gt; x\n&amp;lt;/pre&amp;gt;\n&amp;quot;},&lt;br /&gt;
     &amp;quot;[OK,[&amp;lt;prefix&amp;gt;-n and &amp;lt;/prefix&amp;gt; x\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/pretty-and-preamble-outside-are-text&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pretty&amp;gt; &amp;lt;/preamble&amp;gt;\n&amp;lt;pre&amp;gt;\nA\n&amp;lt;/pre&amp;gt;\n&amp;lt;presence/&amp;gt;\n&amp;quot;}, &amp;quot;[OK,[A\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/non-ascii&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\ncaf\u00e9 \u2014 \u00b5 \U0001f600\n&amp;lt;/pre&amp;gt;\n&amp;quot;},&lt;br /&gt;
     &amp;quot;[OK,[caf\u00e9 \u2014 \u00b5 \U0001f600\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/crlf-inside-kept-as-is&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\r\nB\n&amp;lt;/pre&amp;gt;&amp;quot;}, &amp;quot;[OK,[A\r\nB\n]]&amp;quot;)&lt;br /&gt;
case(&amp;quot;pre/opening-without-lf&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;A\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/opening-then-cr&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\r\nA\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/unclosed&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/closing-before-opening&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;/pre&amp;gt;\n&amp;lt;pre&amp;gt;\nA\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/second-opening-inside&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;lt;pre&amp;gt;\nB\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/upper-case-tags&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;PRE&amp;gt;\nA\n&amp;lt;/PRE&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/mixed-case-opening&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;Pre&amp;gt;\nA\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/attribute&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre class=\&amp;quot;x\&amp;quot;&amp;gt;\nA\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/self-closing&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre /&amp;gt;\n&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/self-closing-no-space&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre/&amp;gt;\n&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/tab-in-opening&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre\t&amp;gt;\nA\n&amp;lt;/pre&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/space-in-closing&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;lt;/pre &amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/upper-case-closing&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;lt;/PRE&amp;gt;&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/tag-name-at-end-of-text&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;x &amp;lt;pre&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/closing-name-at-end-of-text&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;pre&amp;gt;\nA\n&amp;lt;/pre&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/tag-in-comment-is-read-as-tag (named limit)&amp;quot;, P,&lt;br /&gt;
     {&amp;quot;wikitext&amp;quot;: &amp;quot;&amp;lt;!-- &amp;lt;pre&amp;gt; --&amp;gt;\nx\n&amp;quot;}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/not-a-string&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: 5}, REF_PRE)&lt;br /&gt;
case(&amp;quot;pre/null&amp;quot;, P, {&amp;quot;wikitext&amp;quot;: None}, REF_PRE)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------ d_tps&lt;br /&gt;
T = &amp;quot;d_tps&amp;quot;&lt;br /&gt;
ROOT_TEXT = &amp;quot;&amp;#039;&amp;#039;root banner&amp;#039;&amp;#039;\n&amp;lt;pre&amp;gt;\nROOT ONE\n&amp;lt;/pre&amp;gt;\nmiddle\n&amp;lt;pre&amp;gt;\nROOT TWO\n&amp;lt;/pre&amp;gt;\n&amp;quot;&lt;br /&gt;
ROOT_TEXT_B = &amp;quot;&amp;#039;&amp;#039;another banner, [[a link]]&amp;#039;&amp;#039;\n\n&amp;lt;pre&amp;gt;\nROOT ONE\n&amp;lt;/pre&amp;gt;\n&amp;lt;pre&amp;gt;\nROOT TWO\n&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
S01 = R + &amp;quot;/0.1 Front&amp;quot;&lt;br /&gt;
S59 = R + &amp;quot;/5.9 Nine&amp;quot;&lt;br /&gt;
S510 = R + &amp;quot;/5.10 Ten&amp;quot;&lt;br /&gt;
CT = R + &amp;quot;/Contents&amp;quot;&lt;br /&gt;
P_ROOT = [R, ROOT_TEXT]&lt;br /&gt;
P_01 = [S01, &amp;quot;&amp;lt;pre&amp;gt;\nFRONT\n&amp;lt;/pre&amp;gt;&amp;quot;]&lt;br /&gt;
P_59 = [S59, &amp;quot;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;\n&amp;lt;pre&amp;gt;\nSECTION 5.9\n&amp;lt;/pre&amp;gt;\n&amp;quot;]&lt;br /&gt;
P_510 = [S510, &amp;quot;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;\n&amp;lt;pre&amp;gt;\nSECTION 5.10\n&amp;lt;/pre&amp;gt;\n&amp;quot;]&lt;br /&gt;
H_ROOT = sha256_hex(&amp;quot;ROOT ONE\n&amp;quot; + &amp;quot;\n&amp;quot; + &amp;quot;ROOT TWO\n&amp;quot;)   # blocks joined by one LF&lt;br /&gt;
H_01 = sha256_hex(&amp;quot;FRONT\n&amp;quot;)&lt;br /&gt;
H_59 = sha256_hex(&amp;quot;SECTION 5.9\n&amp;quot;)&lt;br /&gt;
H_510 = sha256_hex(&amp;quot;SECTION 5.10\n&amp;quot;)&lt;br /&gt;
BASE_PAGES = [P_510, P_ROOT, P_59, P_01]&lt;br /&gt;
BASE_FIELDS = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 4, R, H_ROOT, S01, H_01, S59, H_59, S510, H_510]&lt;br /&gt;
BASE_PRE = netstring(BASE_FIELDS)&lt;br /&gt;
BASE_EXPECT = ok_digest(BASE_PRE)&lt;br /&gt;
D_TPS_BASE = sha256_hex(BASE_PRE)&lt;br /&gt;
&lt;br /&gt;
case(&amp;quot;tps/root-and-sections-out-of-order: 0.1 &amp;lt; 5.9 &amp;lt; 5.10 as integers&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES}, BASE_EXPECT, BASE_PRE)&lt;br /&gt;
case(&amp;quot;tps/input-order-reversed: equal&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: list(reversed(BASE_PAGES))}, BASE_EXPECT, BASE_PRE)&lt;br /&gt;
case(&amp;quot;tps/banners-changed: equal&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[S510, &amp;quot;&amp;lt;pre&amp;gt;\nSECTION 5.10\n&amp;lt;/pre&amp;gt;&amp;quot;], [R, ROOT_TEXT_B],&lt;br /&gt;
                                    [S59, &amp;quot;new banner\n&amp;lt;pre&amp;gt;\nSECTION 5.9\n&amp;lt;/pre&amp;gt;\n\n[[Category:Y]]&amp;quot;],&lt;br /&gt;
                                    [S01, &amp;quot;x\n&amp;lt;pre&amp;gt;\nFRONT\n&amp;lt;/pre&amp;gt;\ny&amp;quot;]]},&lt;br /&gt;
     BASE_EXPECT, BASE_PRE)&lt;br /&gt;
case(&amp;quot;tps/contents-without-block: left out, equal&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[CT, &amp;quot;== Parts ==\n* a list\n&amp;quot;]]},&lt;br /&gt;
     BASE_EXPECT, BASE_PRE)&lt;br /&gt;
case(&amp;quot;tps/contents-with-a-block: left out by title, equal&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[CT, &amp;quot;&amp;lt;pre&amp;gt;\nNOT RULE TEXT\n&amp;lt;/pre&amp;gt;\n&amp;quot;]]},&lt;br /&gt;
     BASE_EXPECT, BASE_PRE)&lt;br /&gt;
case(&amp;quot;tps/section-without-block: left out, equal&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[R + &amp;quot;/6.1 Empty&amp;quot;, &amp;quot;no block here\n&amp;quot;]]},&lt;br /&gt;
     BASE_EXPECT, BASE_PRE)&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 4, R, H_ROOT, S01, H_01, S59, sha256_hex(&amp;quot;SECTION 5.8\n&amp;quot;), S510, H_510]&lt;br /&gt;
case(&amp;quot;tps/one-character-inside-a-block-changed: moves&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [P_510, P_ROOT, [S59, &amp;quot;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;\n&amp;lt;pre&amp;gt;\nSECTION 5.8\n&amp;lt;/pre&amp;gt;\n&amp;quot;], P_01]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 4, R, H_ROOT, S01, H_01, S59, H_510, S510, H_59]&lt;br /&gt;
case(&amp;quot;tps/two-pages-contents-swapped-between-titles: moves&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[S510, P_59[1]], P_ROOT, [S59, P_510[1]], P_01]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 5, R, H_ROOT, S01, H_01, S59, H_59, S510, H_510,&lt;br /&gt;
     R + &amp;quot;/6.1 Empty&amp;quot;, sha256_hex(&amp;quot;&amp;quot;)]&lt;br /&gt;
case(&amp;quot;tps/section-with-an-empty-block: kept, n = 5&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[R + &amp;quot;/6.1 Empty&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\n&amp;lt;/pre&amp;gt;\n&amp;quot;]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.1&amp;quot;, 4, R, H_ROOT, S01, H_01, S59, H_59, S510, H_510]&lt;br /&gt;
case(&amp;quot;tps/version-inside: 0.3.1 over the same pages moves&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.1&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES}, ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;10.20.30&amp;quot;, 4, R, H_ROOT, S01, H_01, S59, H_59, S510, H_510]&lt;br /&gt;
case(&amp;quot;tps/version-with-several-digits&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;10.20.30&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES}, ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
A51, A512, A52 = R + &amp;quot;/5.1 A&amp;quot;, R + &amp;quot;/5.1.2 B&amp;quot;, R + &amp;quot;/5.2 C&amp;quot;&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.4.0&amp;quot;, 4, R, H_ROOT, A51, sha256_hex(&amp;quot;a\n&amp;quot;), A512, sha256_hex(&amp;quot;b\n&amp;quot;),&lt;br /&gt;
     A52, sha256_hex(&amp;quot;c\n&amp;quot;)]&lt;br /&gt;
case(&amp;quot;tps/three-part-numbers: 5.1 &amp;lt; 5.1.2 &amp;lt; 5.2&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.4.0&amp;quot;, &amp;quot;pages&amp;quot;: [[A52, &amp;quot;&amp;lt;pre&amp;gt;\nc\n&amp;lt;/pre&amp;gt;&amp;quot;], [A512, &amp;quot;&amp;lt;pre&amp;gt;\nb\n&amp;lt;/pre&amp;gt;&amp;quot;], P_ROOT,&lt;br /&gt;
                                    [A51, &amp;quot;&amp;lt;pre&amp;gt;\na\n&amp;lt;/pre&amp;gt;&amp;quot;]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 1, R, H_ROOT]&lt;br /&gt;
case(&amp;quot;tps/root-only: n = 1&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [P_ROOT]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 1, S59, H_59]&lt;br /&gt;
case(&amp;quot;tps/root-without-block: left out, n = 1&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R, &amp;quot;no block\n&amp;quot;], P_59]}, ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 2, R, H_ROOT, R + &amp;quot;/9999.9999 Last&amp;quot;, sha256_hex(&amp;quot;z\n&amp;quot;)]&lt;br /&gt;
case(&amp;quot;tps/four-digit-parts&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R + &amp;quot;/9999.9999 Last&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nz\n&amp;lt;/pre&amp;gt;&amp;quot;], P_ROOT]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 2, R, H_ROOT, R + &amp;quot;/0.0 Zero&amp;quot;, sha256_hex(&amp;quot;0\n&amp;quot;)]&lt;br /&gt;
case(&amp;quot;tps/zero-parts&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [P_ROOT, [R + &amp;quot;/0.0 Zero&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\n0\n&amp;lt;/pre&amp;gt;&amp;quot;]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
NU = R + &amp;quot;/2.1 Caf\u00e9 and more&amp;quot;&lt;br /&gt;
f = [&amp;quot;TPC-TPS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, 2, R, H_ROOT, NU, sha256_hex(&amp;quot;\u00e9\n&amp;quot;)]&lt;br /&gt;
case(&amp;quot;tps/non-ascii-title-and-text&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[NU, &amp;quot;&amp;lt;pre&amp;gt;\n\u00e9\n&amp;lt;/pre&amp;gt;&amp;quot;], P_ROOT]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
# refusals, in the reasons&amp;#039; order: version, pages, title, root, pre&lt;br /&gt;
for cid, v in ((&amp;quot;tps/version-two-parts&amp;quot;, &amp;quot;0.3&amp;quot;), (&amp;quot;tps/version-prefixed&amp;quot;, &amp;quot;v0.3.0&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/version-leading-zero&amp;quot;, &amp;quot;0.03.0&amp;quot;), (&amp;quot;tps/version-suffix&amp;quot;, &amp;quot;0.3.0-rc1&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/version-trailing-lf&amp;quot;, &amp;quot;0.3.0\n&amp;quot;), (&amp;quot;tps/version-empty&amp;quot;, &amp;quot;&amp;quot;)):&lt;br /&gt;
    case(cid, T, {&amp;quot;version&amp;quot;: v, &amp;quot;pages&amp;quot;: BASE_PAGES}, &amp;quot;[REFUSED,version]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/version-not-a-string&amp;quot;, T, {&amp;quot;version&amp;quot;: 3, &amp;quot;pages&amp;quot;: BASE_PAGES}, &amp;quot;[REFUSED,version]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/version-checked-before-pages&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;pages&amp;quot;: {}}, &amp;quot;[REFUSED,version]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/pages-an-object&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: {}}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/pages-a-string&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: &amp;quot;x&amp;quot;}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/page-not-a-pair&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R]]}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/page-of-three&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;]]}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/page-text-not-a-string&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R, 5]]}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/page-as-an-object&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [{&amp;quot;title&amp;quot;: R, &amp;quot;text&amp;quot;: ROOT_TEXT}]}, &amp;quot;[REFUSED,pages]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/duplicate-title&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [P_59]}, &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/duplicate-section-number&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[R + &amp;quot;/5.9 Other&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nq\n&amp;lt;/pre&amp;gt;&amp;quot;]]},&lt;br /&gt;
     &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/duplicate-root&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [P_ROOT, [R, &amp;quot;&amp;lt;pre&amp;gt;\nq\n&amp;lt;/pre&amp;gt;&amp;quot;]]},&lt;br /&gt;
     &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
for cid, t in ((&amp;quot;tps/title-outside-the-tree&amp;quot;, &amp;quot;Main Page&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/title-with-underscores&amp;quot;, &amp;quot;The_Principia_Machina/TPS&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-with-underscore&amp;quot;, R + &amp;quot;/5.9_Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-leading-zero&amp;quot;, R + &amp;quot;/05.9 Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-one-part&amp;quot;, R + &amp;quot;/5 Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-without-name&amp;quot;, R + &amp;quot;/5.9&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-five-digit-part&amp;quot;, R + &amp;quot;/5.10000 Big&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-subpage&amp;quot;, R + &amp;quot;/5.9 Nine/sub&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-two-spaces&amp;quot;, R + &amp;quot;/5.9  Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-trailing-space&amp;quot;, R + &amp;quot;/5.9 Nine &amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-trailing-dot&amp;quot;, R + &amp;quot;/5.9. Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/contents-in-lower-case&amp;quot;, R + &amp;quot;/contents&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/root-with-trailing-slash&amp;quot;, R + &amp;quot;/&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/title-with-lf&amp;quot;, R + &amp;quot;\n&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/section-unicode-digit&amp;quot;, R + &amp;quot;/5.\u0669 Nine&amp;quot;),&lt;br /&gt;
               (&amp;quot;tps/title-empty&amp;quot;, &amp;quot;&amp;quot;)):&lt;br /&gt;
    case(cid, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[t, &amp;quot;&amp;lt;pre&amp;gt;\nq\n&amp;lt;/pre&amp;gt;&amp;quot;]]},&lt;br /&gt;
         &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/root-absent&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [P_59, P_510]}, &amp;quot;[REFUSED,root]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/no-page&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: []}, &amp;quot;[REFUSED,root]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/root-absent-contents-present&amp;quot;, T, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[CT, &amp;quot;x&amp;quot;], P_59]},&lt;br /&gt;
     &amp;quot;[REFUSED,root]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/a-page-pre-refused&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[R + &amp;quot;/6.1 Bad&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nunclosed\n&amp;quot;]]},&lt;br /&gt;
     &amp;quot;[REFUSED,pre]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/contents-pre-refused-too&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: BASE_PAGES + [[CT, &amp;quot;&amp;lt;PRE&amp;gt;x&amp;lt;/PRE&amp;gt;&amp;quot;]]}, &amp;quot;[REFUSED,pre]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/title-reason-before-pre, bad title last&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R + &amp;quot;/6.1 Bad&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nx\n&amp;quot;], P_ROOT, [&amp;quot;Main Page&amp;quot;, &amp;quot;x&amp;quot;]]},&lt;br /&gt;
     &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/title-reason-before-pre, bad title first&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[&amp;quot;Main Page&amp;quot;, &amp;quot;x&amp;quot;], P_ROOT, [R + &amp;quot;/6.1 Bad&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nx\n&amp;quot;]]},&lt;br /&gt;
     &amp;quot;[REFUSED,title]&amp;quot;)&lt;br /&gt;
case(&amp;quot;tps/root-reason-before-pre&amp;quot;, T,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;pages&amp;quot;: [[R + &amp;quot;/6.1 Bad&amp;quot;, &amp;quot;&amp;lt;pre&amp;gt;\nx\n&amp;quot;]]}, &amp;quot;[REFUSED,root]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# ------------------------------------------------------------ d_is&lt;br /&gt;
I = &amp;quot;d_is&amp;quot;&lt;br /&gt;
f = [&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, D_TPS_BASE, 0]&lt;br /&gt;
case(&amp;quot;dis/m-0 over tps/root-and-sections-out-of-order&amp;quot;, I,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: []}, ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, D_TPS_BASE, 1, &amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A]&lt;br /&gt;
case(&amp;quot;dis/m-1&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE,&lt;br /&gt;
                    &amp;quot;members&amp;quot;: [[&amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, D_TPS_BASE, 2, &amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A,&lt;br /&gt;
     &amp;quot;The Principia Machina/Member B&amp;quot;, HEX_B]&lt;br /&gt;
case(&amp;quot;dis/m-2 in index order&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE,&lt;br /&gt;
                                   &amp;quot;members&amp;quot;: [[&amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A],&lt;br /&gt;
                                               [&amp;quot;The Principia Machina/Member B&amp;quot;, HEX_B]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, D_TPS_BASE, 2, &amp;quot;The Principia Machina/Member B&amp;quot;, HEX_B,&lt;br /&gt;
     &amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A]&lt;br /&gt;
case(&amp;quot;dis/m-2 the other order: moves (the caller&amp;#039;s order is kept)&amp;quot;, I,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE,&lt;br /&gt;
      &amp;quot;members&amp;quot;: [[&amp;quot;The Principia Machina/Member B&amp;quot;, HEX_B],&lt;br /&gt;
                  [&amp;quot;The Principia Machina/Member A&amp;quot;, HEX_A]]},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
f = [&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.4.0&amp;quot;, D_TPS_BASE, 0]&lt;br /&gt;
case(&amp;quot;dis/version-inside&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.4.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: []},&lt;br /&gt;
     ok_digest(netstring(f)), netstring(f))&lt;br /&gt;
case(&amp;quot;dis/version-bad&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.4&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: []},&lt;br /&gt;
     &amp;quot;[REFUSED,version]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/d_tps-upper-case&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE.upper(), &amp;quot;members&amp;quot;: []},&lt;br /&gt;
     &amp;quot;[REFUSED,digest]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/d_tps-63-characters&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE[:63], &amp;quot;members&amp;quot;: []},&lt;br /&gt;
     &amp;quot;[REFUSED,digest]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/d_tps-not-a-string&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: 0, &amp;quot;members&amp;quot;: []},&lt;br /&gt;
     &amp;quot;[REFUSED,digest]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/members-an-object&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: {}},&lt;br /&gt;
     &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/member-not-a-pair&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: [[HEX_A]]},&lt;br /&gt;
     &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/member-hash-upper-case&amp;quot;, I,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: [[&amp;quot;M&amp;quot;, HEX_A.upper()]]},&lt;br /&gt;
     &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/member-title-empty&amp;quot;, I, {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: [[&amp;quot;&amp;quot;, HEX_A]]},&lt;br /&gt;
     &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/member-title-not-a-string&amp;quot;, I,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: [[7, HEX_A]]}, &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
case(&amp;quot;dis/member-titles-duplicate&amp;quot;, I,&lt;br /&gt;
     {&amp;quot;version&amp;quot;: &amp;quot;0.3.0&amp;quot;, &amp;quot;d_tps&amp;quot;: D_TPS_BASE, &amp;quot;members&amp;quot;: [[&amp;quot;M&amp;quot;, HEX_A], [&amp;quot;M&amp;quot;, HEX_B]]},&lt;br /&gt;
     &amp;quot;[REFUSED,members]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# spot check of the hand netstring against a preimage written out in full&lt;br /&gt;
assert netstring([&amp;quot;TPC-DIS&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;0.3.0&amp;quot;, HEX_A, 0]) == (&lt;br /&gt;
    &amp;quot;7:TPC-DIS1:15:0.3.064:&amp;quot; + HEX_A + &amp;quot;1:0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dispatch(fn, inp):&lt;br /&gt;
    if fn == &amp;quot;pre_texts&amp;quot;:&lt;br /&gt;
        return G.pre_texts(inp[&amp;quot;wikitext&amp;quot;])&lt;br /&gt;
    if fn == &amp;quot;d_tps&amp;quot;:&lt;br /&gt;
        return G.d_tps(inp[&amp;quot;version&amp;quot;], inp[&amp;quot;pages&amp;quot;])&lt;br /&gt;
    if fn == &amp;quot;d_is&amp;quot;:&lt;br /&gt;
        return G.d_is(inp[&amp;quot;version&amp;quot;], inp[&amp;quot;d_tps&amp;quot;], inp[&amp;quot;members&amp;quot;])&lt;br /&gt;
    raise KeyError(fn)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    bad = 0&lt;br /&gt;
    ids = [c[&amp;quot;id&amp;quot;] for c in cases]&lt;br /&gt;
    assert len(set(ids)) == len(ids), &amp;quot;duplicate ids&amp;quot;&lt;br /&gt;
    for c in cases:&lt;br /&gt;
        got = S.canon(dispatch(c[&amp;quot;fn&amp;quot;], c[&amp;quot;input&amp;quot;]))&lt;br /&gt;
        if got != c[&amp;quot;expect&amp;quot;]:&lt;br /&gt;
            bad += 1&lt;br /&gt;
            print(&amp;quot;MISMATCH %s\n  expect %r\n  got    %r&amp;quot; % (c[&amp;quot;id&amp;quot;], c[&amp;quot;expect&amp;quot;], got))&lt;br /&gt;
    if bad:&lt;br /&gt;
        print(&amp;quot;refusing to write: %d of %d cases disagree with their hand-derived expectations&amp;quot;&lt;br /&gt;
              % (bad, len(cases)))&lt;br /&gt;
        return 1&lt;br /&gt;
    corpus = {&lt;br /&gt;
        &amp;quot;meta&amp;quot;: {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;tpc_dis_corpus&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;,&lt;br /&gt;
            &amp;quot;status&amp;quot;: &amp;quot;PROPOSED 2026-09-28 (D203.1, taken 2026-09-28; tpm_post_tpcpy_pause 0.1.0 D203 &amp;quot;&lt;br /&gt;
                      &amp;quot;Option 1); not declared&amp;quot;,&lt;br /&gt;
            &amp;quot;conforms_tps&amp;quot;: &amp;quot;0.4.0 (proposed; revision 7 states D203.1)&amp;quot;,&lt;br /&gt;
            &amp;quot;module&amp;quot;: &amp;quot;tpc_digest 0.2.0 (proposed with TPC-PY 0.2.0)&amp;quot;,&lt;br /&gt;
            &amp;quot;spec&amp;quot;: &amp;quot;tpm_tps_digest_spec 0.1.0&amp;quot;,&lt;br /&gt;
            &amp;quot;note&amp;quot;: (&amp;quot;Every expectation is hand-derived: refusals written literally, each digest from a field &amp;quot;&lt;br /&gt;
                     &amp;quot;list written in gen_dis_corpus.py and hashed apart from tpc_digest; &amp;#039;preimage&amp;#039; is the &amp;quot;&lt;br /&gt;
                     &amp;quot;exact bytes hashed. The page sets are synthetic; the real TPS 0.3.0 page set is a &amp;quot;&lt;br /&gt;
                     &amp;quot;fixture outside tpc/ (S97). Both residences MUST reproduce every expect.&amp;quot;)&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;cases&amp;quot;: cases,&lt;br /&gt;
    }&lt;br /&gt;
    with open(os.path.join(HERE, &amp;quot;vectors&amp;quot;, &amp;quot;dis_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 fh:&lt;br /&gt;
        fh.write(json.dumps(corpus, indent=1, ensure_ascii=True) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    print(&amp;quot;wrote&amp;quot;, len(cases), &amp;quot;dis cases; all match hand-derived expectations&amp;quot;)&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sys.exit(main())&lt;br /&gt;
&lt;br /&gt;
# END OF ARTIFACT --- gen_dis_corpus 0.1.0&lt;br /&gt;
# If this line is absent, the payload arrived truncated.&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>