<?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_lint.py</id>
	<title>The Principia Machina/TPC-PY/diff lint.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_lint.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/diff_lint.py&amp;action=history"/>
	<updated>2026-10-21T13:30:32Z</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_lint.py&amp;diff=4061&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_lint.py&amp;diff=4061&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;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-4060:rev-4061 --&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_lint.py&amp;diff=4060&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source diff_lint.py (0.1.0), SHA-256 56d54421947ff188; 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_lint.py&amp;diff=4060&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source diff_lint.py (0.1.0), SHA-256 56d54421947ff188; 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_lint 0.1.0: the cross-residence differential for tpc_lint 0.1.0.&lt;br /&gt;
Random zones built from the tables&amp;#039; own template expansions (random case,&lt;br /&gt;
white space of every kind, negations before them, stop characters, hidden&lt;br /&gt;
characters inside, letters glued to their edges), credential shapes of&lt;br /&gt;
every PL2 pattern with class runs around their bounds, hidden and&lt;br /&gt;
White_Space code points, combining marks, Hangul jamo (NFC composes),&lt;br /&gt;
CRLF and CR; random tool lists (MCP, Anthropic and OpenAI shapes; known&lt;br /&gt;
and unknown member names; credential-shaped and hidden keys; poisoned&lt;br /&gt;
descriptions; open-ended names in snake, camel and server-prefixed form;&lt;br /&gt;
every JSON escape) and their mutations to invalid JSON or a wrong shape;&lt;br /&gt;
invalid UTF-8 given as hex; caps around the zone&amp;#039;s length and invalid&lt;br /&gt;
caps; counts, counts_of, norm and tokens. Both residences on the same&lt;br /&gt;
inputs; 0 differences is the pass. Every code point drawn is assigned&lt;br /&gt;
(or unassigned) alike from Unicode 13.0 to 15.1, so the run is valid&lt;br /&gt;
under Python 3.10 to 3.13 against PHP&amp;#039;s ICU.&lt;br /&gt;
Usage: python3 diff_lint.py [seed] [cases].&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import json&lt;br /&gt;
import os&lt;br /&gt;
import random&lt;br /&gt;
import subprocess&lt;br /&gt;
import sys&lt;br /&gt;
import tempfile&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_lint import run_case, LINT_TABLES_JSON  # noqa: E402&lt;br /&gt;
&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;
TB = json.loads(LINT_TABLES_JSON)&lt;br /&gt;
CLS = TB[&amp;quot;classes&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
HIDDEN = [0x00, 0x07, 0x1B, 0x7F, 0x84, 0x9F, 0xAD, 0x200B, 0x200C, 0x200D,&lt;br /&gt;
          0x200E, 0x202A, 0x202E, 0x2066, 0x2069, 0x2028, 0x2029, 0xFEFF, 0xE000,&lt;br /&gt;
          0xF8FF, 0x0378, 0xFFFE, 0xFDD0, 0xE0001, 0xE0041, 0xE007F]&lt;br /&gt;
WSP = [0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x20, 0x85, 0xA0, 0x1680, 0x2000, 0x2005,&lt;br /&gt;
       0x200A, 0x202F, 0x205F, 0x3000]&lt;br /&gt;
LETTERS = ([0xE9, 0xC9, 0xDF, 0x130, 0x131, 0x3B1, 0x391, 0x430, 0x410, 0x2019,&lt;br /&gt;
            0x1F600, 0xFF41, 0xFF21, 0x4E2D, 0x6587, 0x5C0F, 0xAC00]&lt;br /&gt;
           + list(range(0x61, 0x7B)) + list(range(0x41, 0x5B)) + list(range(0x30, 0x3A)))&lt;br /&gt;
MARKS = [0x300, 0x301, 0x308, 0x327, 0x345]&lt;br /&gt;
PUNCT = list(&amp;quot;.!?;:,&amp;#039;\&amp;quot;-_/()[]&amp;lt;&amp;gt;|~@=+*&amp;amp;%$#&amp;quot;)&lt;br /&gt;
NEGS = [&amp;quot;do not &amp;quot;, &amp;quot;Do Not &amp;quot;, &amp;quot;never &amp;quot;, &amp;quot;NEVER &amp;quot;, &amp;quot;don&amp;#039;t &amp;quot;, &amp;quot;don\u2019t &amp;quot;, &amp;quot;no &amp;quot;,&lt;br /&gt;
        &amp;quot;cannot &amp;quot;, &amp;quot;not &amp;quot;, &amp;quot;won&amp;#039;t &amp;quot;]&lt;br /&gt;
FILL = [&amp;quot;please&amp;quot;, &amp;quot;the&amp;quot;, &amp;quot;agent&amp;quot;, &amp;quot;and&amp;quot;, &amp;quot;then&amp;quot;, &amp;quot;work&amp;quot;, &amp;quot;register&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;x1&amp;quot;,&lt;br /&gt;
        &amp;quot;Kernel&amp;quot;, &amp;quot;TPM&amp;quot;, &amp;quot;result&amp;quot;, &amp;quot;of&amp;quot;, &amp;quot;in&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rchr(pool):&lt;br /&gt;
    return chr(random.choice(pool))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def recase(s):&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.4:&lt;br /&gt;
        return s&lt;br /&gt;
    if r &amp;lt; 0.6:&lt;br /&gt;
        return s.upper()&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(c.upper() if random.random() &amp;lt; 0.5 else c for c in s)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rspace():&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.6:&lt;br /&gt;
        return &amp;quot; &amp;quot;&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(rchr(WSP) for _ in range(random.randint(1, 3)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def expansion(parts):&lt;br /&gt;
    out = &amp;quot;&amp;quot;.join(random.choice(p) for p in parts)&lt;br /&gt;
    if random.random() &amp;lt; 0.05 and len(out) &amp;gt; 2:&lt;br /&gt;
        i = random.randrange(1, len(out))&lt;br /&gt;
        out = out[:i] + random.choice([&amp;quot;\u200b&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;x&amp;quot;, &amp;quot; &amp;quot;]) + out[i:]&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def phrase():&lt;br /&gt;
    code = random.choice([&amp;quot;PL3&amp;quot;, &amp;quot;PL4&amp;quot;, &amp;quot;PL5&amp;quot;, &amp;quot;PL9&amp;quot;, &amp;quot;PL6&amp;quot;])&lt;br /&gt;
    row = random.choice(TB[code])&lt;br /&gt;
    parts = random.choice(row[1])&lt;br /&gt;
    s = recase(expansion(parts)).replace(&amp;quot; &amp;quot;, &amp;quot;\x00SP\x00&amp;quot;)&lt;br /&gt;
    s = s.replace(&amp;quot;\x00SP\x00&amp;quot;, &amp;quot;\x01&amp;quot;)&lt;br /&gt;
    s = &amp;quot;&amp;quot;.join(rspace() if c == &amp;quot;\x01&amp;quot; else c for c in s)&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.2:&lt;br /&gt;
        s = random.choice(NEGS) + &amp;quot; &amp;quot;.join(random.sample(FILL, random.randint(0, 4))) + &amp;quot; &amp;quot; + s&lt;br /&gt;
    elif r &amp;lt; 0.3:&lt;br /&gt;
        s = random.choice(NEGS) + random.choice([&amp;quot;. &amp;quot;, &amp;quot;; &amp;quot;, &amp;quot;: &amp;quot;, &amp;quot;! &amp;quot;, &amp;quot;, &amp;quot;]) + s&lt;br /&gt;
    elif r &amp;lt; 0.37:&lt;br /&gt;
        s = random.choice([&amp;quot;x&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;.&amp;quot;, &amp;quot;\u00e9&amp;quot;]) + s&lt;br /&gt;
    if random.random() &amp;lt; 0.1:&lt;br /&gt;
        s += random.choice([&amp;quot;x&amp;quot;, &amp;quot;s&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;.&amp;quot;])&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pl7_template():&lt;br /&gt;
    row = random.choice(TB[&amp;quot;PL7&amp;quot;])&lt;br /&gt;
    s = recase(expansion(random.choice(row[2])))&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cred():&lt;br /&gt;
    row = random.choice(TB[&amp;quot;PL2&amp;quot;])&lt;br /&gt;
    pat = random.choice(row[1])&lt;br /&gt;
    out = []&lt;br /&gt;
    for el in pat:&lt;br /&gt;
        if el[0] == &amp;quot;L&amp;quot;:&lt;br /&gt;
            out.append(recase(el[1]))&lt;br /&gt;
        else:&lt;br /&gt;
            chars = CLS[el[1]]&lt;br /&gt;
            lo, hi = el[2], el[3]&lt;br /&gt;
            r = random.random()&lt;br /&gt;
            if r &amp;lt; 0.6:&lt;br /&gt;
                n = random.randint(max(0, lo - 1), min(hi + 1, lo + 3))&lt;br /&gt;
            elif r &amp;lt; 0.9:&lt;br /&gt;
                n = random.randint(max(0, lo), min(hi, lo + 40))&lt;br /&gt;
            else:&lt;br /&gt;
                n = random.randint(max(0, hi - 1), hi + 1) if hi &amp;lt;= 300 else lo&lt;br /&gt;
            s = &amp;quot;&amp;quot;.join(random.choice(chars) for _ in range(n))&lt;br /&gt;
            out.append(recase(s) if el[1] not in (&amp;quot;S&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;Q&amp;quot;) else s)&lt;br /&gt;
    s = &amp;quot;&amp;quot;.join(out)&lt;br /&gt;
    if random.random() &amp;lt; 0.1:&lt;br /&gt;
        s = random.choice([&amp;quot;a&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;.&amp;quot;]) + s&lt;br /&gt;
    if random.random() &amp;lt; 0.1:&lt;br /&gt;
        s += random.choice([&amp;quot;a&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;.&amp;quot;, &amp;quot;&amp;#039;&amp;quot;, &amp;quot;-&amp;quot;])&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def noise():&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.3:&lt;br /&gt;
        return &amp;quot; &amp;quot;.join(random.choice(FILL) for _ in range(random.randint(1, 6)))&lt;br /&gt;
    if r &amp;lt; 0.45:&lt;br /&gt;
        return &amp;quot;&amp;quot;.join(rchr(HIDDEN) for _ in range(random.randint(1, 3)))&lt;br /&gt;
    if r &amp;lt; 0.6:&lt;br /&gt;
        return &amp;quot;&amp;quot;.join(rchr(LETTERS) + (rchr(MARKS) if random.random() &amp;lt; 0.3 else &amp;quot;&amp;quot;)&lt;br /&gt;
                       for _ in range(random.randint(1, 8)))&lt;br /&gt;
    if r &amp;lt; 0.7:&lt;br /&gt;
        return &amp;quot;\u1100\u1161&amp;quot; * random.randint(1, 3) + &amp;quot;e\u0301&amp;quot;&lt;br /&gt;
    if r &amp;lt; 0.8:&lt;br /&gt;
        return random.choice([&amp;quot;\r\n&amp;quot;, &amp;quot;\r&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;\t&amp;quot;]) * random.randint(1, 3)&lt;br /&gt;
    if r &amp;lt; 0.9:&lt;br /&gt;
        return &amp;quot;&amp;quot;.join(random.choice(PUNCT) for _ in range(random.randint(1, 5)))&lt;br /&gt;
    return random.choice([&amp;quot;TPS VERSION: 0.2.0&amp;quot;, &amp;quot;| class: instruction artifact&amp;quot;,&lt;br /&gt;
                          &amp;quot;END OF ARTIFACT --- TPS 0.2.0&amp;quot;, &amp;quot;PART 6  AGENT CONTRACT&amp;quot;,&lt;br /&gt;
                          &amp;quot;AKIAIOSFODNN7EXAMPLE&amp;quot;, &amp;quot;password=hunter2hunter2&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def zone():&lt;br /&gt;
    frags = []&lt;br /&gt;
    for _ in range(random.randint(0, 8)):&lt;br /&gt;
        r = random.random()&lt;br /&gt;
        frags.append(phrase() if r &amp;lt; 0.35 else cred() if r &amp;lt; 0.55 else noise())&lt;br /&gt;
    seps = [&amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;. &amp;quot;, &amp;quot;\r\n&amp;quot;, &amp;quot;; &amp;quot;, rchr(WSP)]&lt;br /&gt;
    z = &amp;quot;&amp;quot;&lt;br /&gt;
    for f in frags:&lt;br /&gt;
        z += random.choice(seps) + f&lt;br /&gt;
    if random.random() &amp;lt; 0.02:&lt;br /&gt;
        z = z * random.randint(50, 400)&lt;br /&gt;
    return z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NAME_TOKENS = [&amp;quot;run&amp;quot;, &amp;quot;shell&amp;quot;, &amp;quot;command&amp;quot;, &amp;quot;bash&amp;quot;, &amp;quot;sh&amp;quot;, &amp;quot;fetch&amp;quot;, &amp;quot;url&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;request&amp;quot;,&lt;br /&gt;
               &amp;quot;get&amp;quot;, &amp;quot;send&amp;quot;, &amp;quot;email&amp;quot;, &amp;quot;message&amp;quot;, &amp;quot;post&amp;quot;, &amp;quot;read&amp;quot;, &amp;quot;page&amp;quot;, &amp;quot;push&amp;quot;, &amp;quot;web&amp;quot;,&lt;br /&gt;
               &amp;quot;code&amp;quot;, &amp;quot;interpreter&amp;quot;, &amp;quot;wget&amp;quot;, &amp;quot;Browser&amp;quot;, &amp;quot;upload&amp;quot;, &amp;quot;tool&amp;quot;, &amp;quot;refresh&amp;quot;, &amp;quot;exec&amp;quot;,&lt;br /&gt;
               &amp;quot;list&amp;quot;, &amp;quot;mcp&amp;quot;, &amp;quot;search&amp;quot;, &amp;quot;memory&amp;quot;, &amp;quot;2&amp;quot;, &amp;quot;x&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def tool_name():&lt;br /&gt;
    toks = random.sample(NAME_TOKENS, random.randint(1, 3))&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.4:&lt;br /&gt;
        return &amp;quot;_&amp;quot;.join(toks)&lt;br /&gt;
    if r &amp;lt; 0.6:&lt;br /&gt;
        return toks[0] + &amp;quot;&amp;quot;.join(t[:1].upper() + t[1:] for t in toks[1:])&lt;br /&gt;
    if r &amp;lt; 0.7:&lt;br /&gt;
        return &amp;quot;mcp__&amp;quot; + &amp;quot;__&amp;quot;.join(toks)&lt;br /&gt;
    if r &amp;lt; 0.8:&lt;br /&gt;
        return &amp;quot;&amp;quot;.join(t.upper() for t in toks)&lt;br /&gt;
    if r &amp;lt; 0.9:&lt;br /&gt;
        return random.choice(toks) + rchr(LETTERS)&lt;br /&gt;
    return recase(&amp;quot;-&amp;quot;.join(toks))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
KEYS = [&amp;quot;name&amp;quot;, &amp;quot;title&amp;quot;, &amp;quot;description&amp;quot;, &amp;quot;type&amp;quot;, &amp;quot;properties&amp;quot;, &amp;quot;items&amp;quot;, &amp;quot;default&amp;quot;,&lt;br /&gt;
        &amp;quot;enum&amp;quot;, &amp;quot;path&amp;quot;, &amp;quot;url&amp;quot;, &amp;quot;query&amp;quot;, &amp;quot;token&amp;quot;, &amp;quot;$schema&amp;quot;, &amp;quot;annotations&amp;quot;, &amp;quot;readOnlyHint&amp;quot;,&lt;br /&gt;
        &amp;quot;p\u200b&amp;quot;, &amp;quot;AKIAIOSFODNN7EXAMPLE&amp;quot;, &amp;quot;\u00e9&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;cache_control&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def desc():&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.35:&lt;br /&gt;
        return phrase()&lt;br /&gt;
    if r &amp;lt; 0.55:&lt;br /&gt;
        return pl7_template() + &amp;quot; &amp;quot; + noise()&lt;br /&gt;
    if r &amp;lt; 0.7:&lt;br /&gt;
        return cred()&lt;br /&gt;
    return noise()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def schema(depth):&lt;br /&gt;
    props = {}&lt;br /&gt;
    for _ in range(random.randint(0, 4)):&lt;br /&gt;
        k = random.choice(KEYS)&lt;br /&gt;
        v = {&amp;quot;type&amp;quot;: random.choice([&amp;quot;string&amp;quot;, &amp;quot;number&amp;quot;, &amp;quot;object&amp;quot;])}&lt;br /&gt;
        if random.random() &amp;lt; 0.6:&lt;br /&gt;
            v[&amp;quot;description&amp;quot;] = desc()&lt;br /&gt;
        if random.random() &amp;lt; 0.3:&lt;br /&gt;
            v[&amp;quot;default&amp;quot;] = desc()&lt;br /&gt;
        if random.random() &amp;lt; 0.2:&lt;br /&gt;
            v[&amp;quot;title&amp;quot;] = desc()&lt;br /&gt;
        if depth &amp;lt; 2 and random.random() &amp;lt; 0.2:&lt;br /&gt;
            v[&amp;quot;properties&amp;quot;] = schema(depth + 1)[&amp;quot;properties&amp;quot;]&lt;br /&gt;
        if random.random() &amp;lt; 0.1:&lt;br /&gt;
            v[&amp;quot;enum&amp;quot;] = [desc(), 1, None, True]&lt;br /&gt;
        props[k] = v&lt;br /&gt;
    s = {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;, &amp;quot;properties&amp;quot;: props}&lt;br /&gt;
    if props and random.random() &amp;lt; 0.5:&lt;br /&gt;
        s[&amp;quot;required&amp;quot;] = random.sample(list(props), random.randint(1, len(props)))&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def tool():&lt;br /&gt;
    shape = random.random()&lt;br /&gt;
    t = {}&lt;br /&gt;
    if random.random() &amp;lt; 0.9:&lt;br /&gt;
        t[&amp;quot;name&amp;quot;] = tool_name() if random.random() &amp;lt; 0.95 else random.choice([5, None, [&amp;quot;x&amp;quot;]])&lt;br /&gt;
    if random.random() &amp;lt; 0.8:&lt;br /&gt;
        t[&amp;quot;description&amp;quot;] = desc()&lt;br /&gt;
    if random.random() &amp;lt; 0.2:&lt;br /&gt;
        t[&amp;quot;title&amp;quot;] = desc()&lt;br /&gt;
    if shape &amp;lt; 0.4:&lt;br /&gt;
        t[&amp;quot;inputSchema&amp;quot;] = schema(0)&lt;br /&gt;
    elif shape &amp;lt; 0.7:&lt;br /&gt;
        t[&amp;quot;input_schema&amp;quot;] = schema(0)&lt;br /&gt;
    elif shape &amp;lt; 0.85:&lt;br /&gt;
        return {&amp;quot;type&amp;quot;: &amp;quot;function&amp;quot;, &amp;quot;function&amp;quot;: dict(t, parameters=schema(0))}&lt;br /&gt;
    if random.random() &amp;lt; 0.1:&lt;br /&gt;
        t[random.choice(KEYS)] = desc()&lt;br /&gt;
    return t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def tools_text():&lt;br /&gt;
    lst = [tool() for _ in range(random.randint(0, 4))]&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    if r &amp;lt; 0.03:&lt;br /&gt;
        lst = {&amp;quot;tools&amp;quot;: lst}&lt;br /&gt;
    elif r &amp;lt; 0.05:&lt;br /&gt;
        lst.append(random.choice([1, &amp;quot;x&amp;quot;, [], None]))&lt;br /&gt;
    s = json.dumps(lst, ensure_ascii=random.random() &amp;lt; 0.5,&lt;br /&gt;
                   indent=random.choice([None, None, 1, 2]),&lt;br /&gt;
                   separators=random.choice([None, (&amp;quot;,&amp;quot;, &amp;quot;:&amp;quot;), (&amp;quot;, &amp;quot;, &amp;quot;: &amp;quot;)]))&lt;br /&gt;
    if random.random() &amp;lt; 0.05 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;\\x&amp;quot;]) + s[i + 1:]&lt;br /&gt;
    if random.random() &amp;lt; 0.03:&lt;br /&gt;
        s = s.replace(&amp;#039;&amp;quot;}&amp;#039;, &amp;#039;&amp;quot;, &amp;quot;a&amp;quot;: 1, &amp;quot;a&amp;quot;: 2}&amp;#039;, 1)&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cap_for(z):&lt;br /&gt;
    r = random.random()&lt;br /&gt;
    n = len(z)&lt;br /&gt;
    if r &amp;lt; 0.4:&lt;br /&gt;
        return 8000&lt;br /&gt;
    if r &amp;lt; 0.8:&lt;br /&gt;
        return max(1, n + random.randint(-2, 2))&lt;br /&gt;
    if r &amp;lt; 0.93:&lt;br /&gt;
        return random.randint(1, 1048576)&lt;br /&gt;
    return random.choice([0, -1, 1048577, 8000.0, True, &amp;quot;8000&amp;quot;, None])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BAD_HEX = [&amp;quot;ff&amp;quot;, &amp;quot;c0af&amp;quot;, &amp;quot;eda080&amp;quot;, &amp;quot;e280&amp;quot;, &amp;quot;f4908080&amp;quot;, &amp;quot;80&amp;quot;, &amp;quot;fe&amp;quot;, &amp;quot;c3&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
cases = []&lt;br /&gt;
for _ in range(count):&lt;br /&gt;
    fn = random.choices([&amp;quot;lint&amp;quot;, &amp;quot;counts&amp;quot;, &amp;quot;counts_of&amp;quot;, &amp;quot;norm&amp;quot;, &amp;quot;tokens&amp;quot;],&lt;br /&gt;
                        weights=[80, 8, 4, 4, 4])[0]&lt;br /&gt;
    if fn in (&amp;quot;lint&amp;quot;, &amp;quot;counts&amp;quot;):&lt;br /&gt;
        z = zone()&lt;br /&gt;
        a = {&amp;quot;tools&amp;quot;: tools_text(), &amp;quot;cap&amp;quot;: cap_for(z)}&lt;br /&gt;
        r = random.random()&lt;br /&gt;
        if r &amp;lt; 0.02:&lt;br /&gt;
            a[&amp;quot;zone_hex&amp;quot;] = (z.encode(&amp;quot;utf-8&amp;quot;) + bytes.fromhex(random.choice(BAD_HEX))).hex()&lt;br /&gt;
        elif r &amp;lt; 0.03:&lt;br /&gt;
            a[&amp;quot;zone&amp;quot;] = random.choice([None, 3, [&amp;quot;x&amp;quot;]])&lt;br /&gt;
        else:&lt;br /&gt;
            a[&amp;quot;zone&amp;quot;] = z&lt;br /&gt;
        if random.random() &amp;lt; 0.02:&lt;br /&gt;
            del a[&amp;quot;tools&amp;quot;]&lt;br /&gt;
            a[&amp;quot;tools_hex&amp;quot;] = bytes.fromhex(random.choice(BAD_HEX)).hex()&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: a})&lt;br /&gt;
    elif fn == &amp;quot;counts_of&amp;quot;:&lt;br /&gt;
        fl = []&lt;br /&gt;
        for _ in range(random.randint(0, 5)):&lt;br /&gt;
            f = {&amp;quot;code&amp;quot;: random.choice([&amp;quot;PL%d&amp;quot; % i for i in range(10)]),&lt;br /&gt;
                 &amp;quot;item&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;locator&amp;quot;: &amp;quot;-&amp;quot;}&lt;br /&gt;
            r = random.random()&lt;br /&gt;
            if r &amp;lt; 0.05:&lt;br /&gt;
                f[&amp;quot;code&amp;quot;] = &amp;quot;PL10&amp;quot;&lt;br /&gt;
            elif r &amp;lt; 0.08:&lt;br /&gt;
                del f[&amp;quot;locator&amp;quot;]&lt;br /&gt;
            elif r &amp;lt; 0.1:&lt;br /&gt;
                f[&amp;quot;extra&amp;quot;] = &amp;quot;y&amp;quot;&lt;br /&gt;
            elif r &amp;lt; 0.12:&lt;br /&gt;
                f[&amp;quot;item&amp;quot;] = 1&lt;br /&gt;
            fl.append(f)&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: {&amp;quot;findings&amp;quot;: fl if random.random() &amp;lt; 0.95 else {&amp;quot;a&amp;quot;: 1}}})&lt;br /&gt;
    elif fn == &amp;quot;norm&amp;quot;:&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: {&amp;quot;text&amp;quot;: zone() if random.random() &amp;lt; 0.95 else 7}})&lt;br /&gt;
    else:&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: {&amp;quot;name&amp;quot;: tool_name() if random.random() &amp;lt; 0.95 else None}})&lt;br /&gt;
&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;
res = subprocess.run([&amp;quot;php&amp;quot;, &amp;quot;-d&amp;quot;, &amp;quot;memory_limit=1G&amp;quot;, os.path.join(here, &amp;quot;diff_lint.php&amp;quot;),&lt;br /&gt;
                      CASES_PATH],&lt;br /&gt;
                     capture_output=True, text=True)&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;
if res.returncode != 0:&lt;br /&gt;
    print(res.stderr[:2000])&lt;br /&gt;
    sys.exit(2)&lt;br /&gt;
php = json.loads(res.stdout)&lt;br /&gt;
diffs = sum(1 for a, b in zip(py, php) if a != b)&lt;br /&gt;
by = {}&lt;br /&gt;
codes = {}&lt;br /&gt;
for c, x in zip(cases, py):&lt;br /&gt;
    bad = x.startswith(&amp;quot;ERROR&amp;quot;) or &amp;#039;&amp;quot;code&amp;quot;:&amp;quot;PL0&amp;quot;&amp;#039; in x or &amp;#039;&amp;quot;PL0&amp;quot;:1&amp;#039; in x&lt;br /&gt;
    k = c[&amp;quot;fn&amp;quot;] + (&amp;quot;/ERROR&amp;quot; if bad else &amp;quot;&amp;quot;)&lt;br /&gt;
    by[k] = by.get(k, 0) + 1&lt;br /&gt;
    if c[&amp;quot;fn&amp;quot;] == &amp;quot;lint&amp;quot;:&lt;br /&gt;
        for i in range(10):&lt;br /&gt;
            codes[&amp;quot;PL%d&amp;quot; % i] = codes.get(&amp;quot;PL%d&amp;quot; % i, 0) + x.count(&amp;#039;&amp;quot;code&amp;quot;:&amp;quot;PL%d&amp;quot;&amp;#039; % i)&lt;br /&gt;
print(&amp;quot;seed&amp;quot;, seed, &amp;quot;cases&amp;quot;, len(cases), &amp;quot;differences&amp;quot;, diffs + abs(len(py) - len(php)),&lt;br /&gt;
      json.dumps(by, sort_keys=True))&lt;br /&gt;
print(&amp;quot;findings by code in lint results:&amp;quot;, json.dumps(codes, 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=True)[:800])&lt;br /&gt;
        print(a[:400])&lt;br /&gt;
        print(&amp;quot;---&amp;quot;)&lt;br /&gt;
        print(b[:400])&lt;br /&gt;
        break&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>