<?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%2Fdiff_identity.py</id>
	<title>The Principia Machina/TPC-PY/diff identity.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%2Fdiff_identity.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/diff_identity.py&amp;action=history"/>
	<updated>2026-10-21T14:57:53Z</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/diff_identity.py&amp;diff=4057&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/diff_identity.py&amp;diff=4057&amp;oldid=prev"/>
		<updated>2026-09-28T04:32:52Z</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;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&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;2&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;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/diff_identity.py&amp;diff=4056&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source diff_identity.py (0.1.0), SHA-256 4e12aa6b64e9c321; 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/diff_identity.py&amp;diff=4056&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source diff_identity.py (0.1.0), SHA-256 4e12aa6b64e9c321; 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;diff_identity 0.1.0: the cross-residence differential for tpc_identity&lt;br /&gt;
0.1.0. Random JSON texts (valid, with every value kind, escapes, NFC pairs,&lt;br /&gt;
numbers of every shape; and mutated to invalid), random digests, model&lt;br /&gt;
maps and lookups, both residences on the same inputs, 0 differences the&lt;br /&gt;
pass. Usage: python3 diff_identity.py [seed] [cases].&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import json, os, random, subprocess, sys, tempfile&lt;br /&gt;
here = os.path.dirname(os.path.abspath(__file__))&lt;br /&gt;
sys.path.insert(0, here)&lt;br /&gt;
from tpc_identity import run_case&lt;br /&gt;
seed = int(sys.argv[1]) if len(sys.argv) &amp;gt; 1 else 1&lt;br /&gt;
count = int(sys.argv[2]) if len(sys.argv) &amp;gt; 2 else 20000&lt;br /&gt;
random.seed(seed)&lt;br /&gt;
WORDS = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;key&amp;quot;, &amp;quot;é&amp;quot;, &amp;quot;é&amp;quot;, &amp;quot;模型&amp;quot;, &amp;quot;\U0001F600&amp;quot;, &amp;quot;x y&amp;quot;, &amp;quot;tab\tx&amp;quot;, &amp;quot;q\&amp;quot;uote&amp;quot;, &amp;quot;back\\slash&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;10&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;Å&amp;quot;, &amp;quot;Å&amp;quot;]&lt;br /&gt;
def jstr(s):&lt;br /&gt;
    out = &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
    for ch in s:&lt;br /&gt;
        o = ord(ch)&lt;br /&gt;
        r = random.random()&lt;br /&gt;
        if ch == &amp;#039;&amp;quot;&amp;#039;: out += &amp;#039;\\&amp;quot;&amp;#039;&lt;br /&gt;
        elif ch == &amp;quot;\\&amp;quot;: out += &amp;quot;\\\\&amp;quot;&lt;br /&gt;
        elif o &amp;lt; 0x20: out += random.choice([&amp;quot;\\u%04x&amp;quot; % o, &amp;quot;\\t&amp;quot; if ch == &amp;quot;\t&amp;quot; else &amp;quot;\\u%04x&amp;quot; % o])&lt;br /&gt;
        elif o &amp;gt; 0x7f and r &amp;lt; 0.3:&lt;br /&gt;
            if o &amp;gt; 0xffff:&lt;br /&gt;
                o -= 0x10000&lt;br /&gt;
                out += &amp;quot;\\u%04x\\u%04x&amp;quot; % (0xd800 + (o &amp;gt;&amp;gt; 10), 0xdc00 + (o &amp;amp; 0x3ff))&lt;br /&gt;
            else:&lt;br /&gt;
                out += &amp;quot;\\u%04x&amp;quot; % o&lt;br /&gt;
        elif ch == &amp;quot;/&amp;quot; and r &amp;lt; 0.5: out += &amp;quot;\\/&amp;quot;&lt;br /&gt;
        else: out += ch&lt;br /&gt;
    return out + &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
def jnum():&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.3: return str(random.randint(-1000, 1000))&lt;br /&gt;
    if r &amp;lt; 0.6: return &amp;quot;%s%d.%s&amp;quot; % (random.choice([&amp;quot;&amp;quot;, &amp;quot;-&amp;quot;]), random.randint(0, 99), &amp;quot;&amp;quot;.join(random.choice(&amp;quot;0123456789&amp;quot;) for _ in range(random.randint(1, 6))))&lt;br /&gt;
    if r &amp;lt; 0.9: return &amp;quot;%d%s%s%d&amp;quot; % (random.randint(0, 9), random.choice([&amp;quot;e&amp;quot;, &amp;quot;E&amp;quot;]), random.choice([&amp;quot;&amp;quot;, &amp;quot;+&amp;quot;, &amp;quot;-&amp;quot;]), random.randint(0, 20))&lt;br /&gt;
    return random.choice([&amp;quot;0&amp;quot;, &amp;quot;-0&amp;quot;, &amp;quot;0.0&amp;quot;, &amp;quot;1e0&amp;quot;, &amp;quot;123456789012345678901234567890&amp;quot;, &amp;quot;0.000000000000000000001&amp;quot;])&lt;br /&gt;
def jval(depth):&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if depth &amp;gt; 4 or r &amp;lt; 0.35: return random.choice([jstr(random.choice(WORDS)), jnum(), &amp;quot;true&amp;quot;, &amp;quot;false&amp;quot;, &amp;quot;null&amp;quot;])&lt;br /&gt;
    ws = lambda: random.choice([&amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;\t &amp;quot;, &amp;quot;\r\n&amp;quot;])&lt;br /&gt;
    if r &amp;lt; 0.7:&lt;br /&gt;
        items = [jval(depth + 1) for _ in range(random.randint(0, 4))]&lt;br /&gt;
        return &amp;quot;[&amp;quot; + ws() + ((&amp;quot;,&amp;quot; + ws()).join(items)) + ws() + &amp;quot;]&amp;quot;&lt;br /&gt;
    keys = random.sample(WORDS, random.randint(0, 5))&lt;br /&gt;
    members = [jstr(k) + ws() + &amp;quot;:&amp;quot; + ws() + jval(depth + 1) for k in keys]&lt;br /&gt;
    return &amp;quot;{&amp;quot; + ws() + ((&amp;quot;,&amp;quot; + ws()).join(members)) + ws() + &amp;quot;}&amp;quot;&lt;br /&gt;
MAP = [&lt;br /&gt;
    {&amp;quot;name&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Anthropic/Claude&amp;quot;, &amp;quot;open&amp;quot;: False, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None},&lt;br /&gt;
    {&amp;quot;name&amp;quot;: &amp;quot;claude-opus-4&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Anthropic/Claude&amp;quot;, &amp;quot;open&amp;quot;: False, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None},&lt;br /&gt;
    {&amp;quot;name&amp;quot;: &amp;quot;gemini-3-pro&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Google/Gemini&amp;quot;, &amp;quot;open&amp;quot;: False, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None},&lt;br /&gt;
    {&amp;quot;name&amp;quot;: &amp;quot;together/llama-4-70b-fp8&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Meta/Llama-4&amp;quot;, &amp;quot;open&amp;quot;: True, &amp;quot;server&amp;quot;: &amp;quot;together&amp;quot;, &amp;quot;quantization&amp;quot;: &amp;quot;fp8&amp;quot;},&lt;br /&gt;
    {&amp;quot;name&amp;quot;: &amp;quot;modèle&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Maison/Modèle&amp;quot;, &amp;quot;open&amp;quot;: False, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None},&lt;br /&gt;
]&lt;br /&gt;
NAMES = [r[&amp;quot;name&amp;quot;] for r in MAP] + [&amp;quot;gpt-9&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;modèle&amp;quot;, &amp;quot;Claude-Fable-5-1&amp;quot;, &amp;quot;llama-4-70b&amp;quot;]&lt;br /&gt;
KEYS = [&amp;quot;6:CLOSED16:Anthropic/Claude&amp;quot;, &amp;quot;6:CLOSED13:Google/Gemini&amp;quot;, &amp;quot;4:OPEN12:Meta/Llama-48:together3:fp8&amp;quot;, &amp;quot;UNMAPPED&amp;quot;, &amp;quot;6:CLOSED14:Maison/Modèle&amp;quot;]&lt;br /&gt;
VEND = [&amp;quot;Anthropic&amp;quot;, &amp;quot;Google&amp;quot;, &amp;quot;anthropic&amp;quot;, &amp;quot;Société&amp;quot;, &amp;quot;Société&amp;quot;, None, &amp;quot;&amp;quot;]&lt;br /&gt;
cases = []&lt;br /&gt;
for t in range(count):&lt;br /&gt;
    fn = random.choice([&amp;quot;tools&amp;quot;, &amp;quot;tools&amp;quot;, &amp;quot;digest&amp;quot;, &amp;quot;family&amp;quot;, &amp;quot;class&amp;quot;, &amp;quot;compare&amp;quot;])&lt;br /&gt;
    if fn == &amp;quot;tools&amp;quot;:&lt;br /&gt;
        s = jval(0)&lt;br /&gt;
        r = random.random()&lt;br /&gt;
        if r &amp;lt; 0.15 and s:&lt;br /&gt;
            i = random.randrange(len(s))&lt;br /&gt;
            s = s[:i] + random.choice([&amp;quot;&amp;quot;, &amp;quot;,&amp;quot;, &amp;quot;]&amp;quot;, &amp;quot;}&amp;quot;, &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;NaN&amp;quot;, &amp;quot;\\ud800&amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;01&amp;quot;, &amp;quot;1.&amp;quot;, &amp;quot;e5&amp;quot;, &amp;quot;\\x&amp;quot;]) + s[i + 1:]&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: &amp;quot;tools&amp;quot;, &amp;quot;args&amp;quot;: {&amp;quot;json&amp;quot;: s}})&lt;br /&gt;
    elif fn == &amp;quot;digest&amp;quot;:&lt;br /&gt;
        salt = &amp;quot;&amp;quot;.join(random.choice(&amp;quot;0123456789abcdef&amp;quot;) for _ in range(32))&lt;br /&gt;
        if random.random() &amp;lt; 0.1: salt = random.choice([salt.upper(), salt[:31], salt + &amp;quot;0&amp;quot;, 12, &amp;quot;g&amp;quot; * 32])&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: &amp;quot;digest&amp;quot;, &amp;quot;args&amp;quot;: {&amp;quot;family&amp;quot;: random.choice(KEYS + [&amp;quot;&amp;quot;]), &amp;quot;salt&amp;quot;: salt, &amp;quot;template&amp;quot;: random.choice(WORDS) * random.randint(0, 3), &amp;quot;tools&amp;quot;: jval(0) if random.random() &amp;lt; 0.9 else &amp;quot;[1,&amp;quot;}})&lt;br /&gt;
    elif fn == &amp;quot;family&amp;quot;:&lt;br /&gt;
        m = [dict(r) for r in MAP]&lt;br /&gt;
        r = random.random()&lt;br /&gt;
        if r &amp;lt; 0.05: m.append(dict(m[0]))&lt;br /&gt;
        elif r &amp;lt; 0.10: m[3][&amp;quot;server&amp;quot;] = None&lt;br /&gt;
        elif r &amp;lt; 0.15: m[0][&amp;quot;server&amp;quot;] = &amp;quot;s&amp;quot;&lt;br /&gt;
        elif r &amp;lt; 0.18: m[1][&amp;quot;open&amp;quot;] = 1&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: &amp;quot;family&amp;quot;, &amp;quot;args&amp;quot;: {&amp;quot;model&amp;quot;: random.choice(NAMES), &amp;quot;map&amp;quot;: m}})&lt;br /&gt;
    elif fn == &amp;quot;class&amp;quot;:&lt;br /&gt;
        lk = {&amp;quot;family&amp;quot;: random.choice(KEYS), &amp;quot;cluster&amp;quot;: random.choice([&amp;quot;IN&amp;quot;, &amp;quot;CUSP&amp;quot;, &amp;quot;OUT&amp;quot;, &amp;quot;FADING&amp;quot;, &amp;quot;UNLISTED&amp;quot;, &amp;quot;EXCLUDED&amp;quot;, None, None, &amp;quot;X&amp;quot;])}&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: &amp;quot;class&amp;quot;, &amp;quot;args&amp;quot;: {&amp;quot;certified&amp;quot;: random.choice(KEYS[:3] + [&amp;quot;&amp;quot;]), &amp;quot;last&amp;quot;: random.choice(NAMES), &amp;quot;reported&amp;quot;: random.choice(NAMES), &amp;quot;lookup&amp;quot;: lk}})&lt;br /&gt;
    else:&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: &amp;quot;compare&amp;quot;, &amp;quot;args&amp;quot;: {&amp;quot;declared&amp;quot;: random.choice(VEND), &amp;quot;stated&amp;quot;: random.choice(VEND), &amp;quot;relayed&amp;quot;: random.choice(VEND), &amp;quot;inferred&amp;quot;: random.choice(VEND)}})&lt;br /&gt;
CASES_PATH = os.environ.get(&amp;quot;TPC_DIFF_CASES&amp;quot;)  # named: kept, for crosspy.py&lt;br /&gt;
if not CASES_PATH:&lt;br /&gt;
    fd, CASES_PATH = tempfile.mkstemp(prefix=&amp;quot;tpc_diff_&amp;quot;, suffix=&amp;quot;.json&amp;quot;)  # outside the tree&lt;br /&gt;
    os.close(fd)&lt;br /&gt;
with open(CASES_PATH, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
    json.dump(cases, f, ensure_ascii=False)&lt;br /&gt;
py = [run_case(c[&amp;quot;fn&amp;quot;], c[&amp;quot;args&amp;quot;]) for c in cases]&lt;br /&gt;
php = json.loads(subprocess.run([&amp;quot;php&amp;quot;, os.path.join(here, &amp;quot;diff_identity.php&amp;quot;), CASES_PATH], capture_output=True, text=True, check=True).stdout)&lt;br /&gt;
if not os.environ.get(&amp;quot;TPC_DIFF_CASES&amp;quot;):&lt;br /&gt;
    os.remove(CASES_PATH)&lt;br /&gt;
diffs = sum(1 for a, b in zip(py, php) if a != b)&lt;br /&gt;
by = {}&lt;br /&gt;
for c, x in zip(cases, py):&lt;br /&gt;
    k = c[&amp;quot;fn&amp;quot;] + (&amp;quot;/ERROR&amp;quot; if x.startswith(&amp;quot;ERROR&amp;quot;) else &amp;quot;&amp;quot;)&lt;br /&gt;
    by[k] = by.get(k, 0) + 1&lt;br /&gt;
print(&amp;quot;seed&amp;quot;, seed, &amp;quot;cases&amp;quot;, len(cases), &amp;quot;differences&amp;quot;, diffs, json.dumps(by, sort_keys=True))&lt;br /&gt;
for c, a, b in zip(cases, py, php):&lt;br /&gt;
    if a != b:&lt;br /&gt;
        print(json.dumps(c, ensure_ascii=False)[:500]); print(a[:300]); print(&amp;quot;---&amp;quot;); print(b[:300]); break&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>