<?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_volunteer.py</id>
	<title>The Principia Machina/TPC-PY/diff volunteer.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_volunteer.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/diff_volunteer.py&amp;action=history"/>
	<updated>2026-10-21T11:13:27Z</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_volunteer.py&amp;diff=4077&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_volunteer.py&amp;diff=4077&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_volunteer.py&amp;diff=4076&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source diff_volunteer.py (0.1.0), SHA-256 34cb5260e9e0fbe0; 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_volunteer.py&amp;diff=4076&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source diff_volunteer.py (0.1.0), SHA-256 34cb5260e9e0fbe0; 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_volunteer 0.1.0: the cross-residence differential for&lt;br /&gt;
tpc_volunteer 0.1.0. Random inputs from a seed over every function&lt;br /&gt;
(random r values, states across every branch of the draw, the params&lt;br /&gt;
fixture varied), both residences on the same inputs, every render&lt;br /&gt;
compared byte for byte; 0 differences is the pass.&lt;br /&gt;
Usage: python3 diff_volunteer.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 params_fixture import FLEET, fleet  # noqa: E402&lt;br /&gt;
from tpc_volunteer import run_case, FNS  # 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;
rnd = random.Random(seed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pick(xs):&lt;br /&gt;
    return xs[rnd.randrange(len(xs))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bad():&lt;br /&gt;
    return rnd.random() &amp;lt; 0.03&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kind(good, more):&lt;br /&gt;
    return pick(more) if bad() else pick(good)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rhex():&lt;br /&gt;
    if bad():&lt;br /&gt;
        return pick([&amp;quot;&amp;quot;, &amp;quot;zz&amp;quot;, &amp;quot;0&amp;quot; * 31, &amp;quot;A&amp;quot; * 32, 5])&lt;br /&gt;
    return &amp;quot;%032x&amp;quot; % rnd.getrandbits(128)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cnt(lo, hi):&lt;br /&gt;
    if bad():&lt;br /&gt;
        return pick([True, None, &amp;quot;5&amp;quot;, 1.5, -1])&lt;br /&gt;
    return rnd.randint(lo, hi)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unit():&lt;br /&gt;
    if bad():&lt;br /&gt;
        return pick([True, None, &amp;quot;0.5&amp;quot;, -0.1, 1.5])&lt;br /&gt;
    return round(rnd.random(), rnd.randint(0, 6))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def flag():&lt;br /&gt;
    return (rnd.random() &amp;lt; 0.5) if not bad() else pick([1, &amp;quot;x&amp;quot;, None])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def params():&lt;br /&gt;
    p = fleet()&lt;br /&gt;
    r = rnd.random()&lt;br /&gt;
    if r &amp;lt; 0.5:&lt;br /&gt;
        return p&lt;br /&gt;
    invalid = r &amp;gt; 0.93&lt;br /&gt;
    for _ in range(rnd.randint(1, 3)):&lt;br /&gt;
        k = pick([&amp;quot;VOLUNTEER TIER&amp;quot;, &amp;quot;VOLUNTEER RATE&amp;quot;, &amp;quot;VOLUNTEER BURST&amp;quot;, &amp;quot;BACKOFF BASE&amp;quot;, &amp;quot;BACKOFF CAP&amp;quot;,&lt;br /&gt;
                  &amp;quot;INTAKE w_q&amp;quot;, &amp;quot;INTAKE MIN&amp;quot;, &amp;quot;INTAKE MAX&amp;quot;, &amp;quot;INTAKE MAX_P&amp;quot;, &amp;quot;P_V BOUNDS&amp;quot;, &amp;quot;P_V ROTATION&amp;quot;,&lt;br /&gt;
                  &amp;quot;EARLY CALL LIMIT&amp;quot;, &amp;quot;VOLUNTEER COOL-OFF&amp;quot;, &amp;quot;CONSISTENCY SHARE&amp;quot;])&lt;br /&gt;
        if k == &amp;quot;VOLUNTEER TIER&amp;quot;:&lt;br /&gt;
            p[k] = pick([&amp;quot;ANY GREEN&amp;quot;, &amp;quot;TRUST TIER&amp;quot;] + ([&amp;quot;TOP&amp;quot;] if invalid else []))&lt;br /&gt;
        elif k == &amp;quot;P_V BOUNDS&amp;quot;:&lt;br /&gt;
            p[k] = pick([[0.25, 0.5], [0.1, 0.2], [0.4, 0.4], [0.01, 0.99]] + ([[0, 0.5], [0.5, 1], [0.5, 0.25]] if invalid else []))&lt;br /&gt;
        elif k in (&amp;quot;VOLUNTEER BURST&amp;quot;, &amp;quot;EARLY CALL LIMIT&amp;quot;, &amp;quot;VOLUNTEER COOL-OFF&amp;quot;):&lt;br /&gt;
            p[k] = pick([1, 2, 3, 5, 10, 200] + ([0, -1, 1.5] if invalid else []) if k != &amp;quot;EARLY CALL LIMIT&amp;quot; else [0, 1, 3, 5] + ([-1, 1.5] if invalid else []))&lt;br /&gt;
        elif k in (&amp;quot;BACKOFF BASE&amp;quot;, &amp;quot;BACKOFF CAP&amp;quot;):&lt;br /&gt;
            p[k] = pick([60, 300, 3600, 14400] + ([0.5, 100000000000000] if invalid else []))&lt;br /&gt;
        elif k == &amp;quot;VOLUNTEER RATE&amp;quot;:&lt;br /&gt;
            p[k] = pick([2, 60, 0.5, 1] + ([0, -1] if invalid else []))&lt;br /&gt;
        else:&lt;br /&gt;
            p[k] = pick([0.1, 0.2, 0.25, 0.5, 0.9, 1, 0] + ([1.5, -0.1, &amp;quot;x&amp;quot;] if invalid else []))&lt;br /&gt;
    if invalid and rnd.random() &amp;lt; 0.3:&lt;br /&gt;
        del p[pick([&amp;quot;VOLUNTEER TIER&amp;quot;, &amp;quot;VOLUNTEER RATE&amp;quot;, &amp;quot;BACKOFF CAP&amp;quot;, &amp;quot;INTAKE MIN&amp;quot;, &amp;quot;P_V BOUNDS&amp;quot;])]&lt;br /&gt;
    return p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def facts():&lt;br /&gt;
    f = {&amp;quot;certificate_current&amp;quot;: rnd.random() &amp;lt; 0.96, &amp;quot;dis_match&amp;quot;: rnd.random() &amp;lt; 0.96,&lt;br /&gt;
         &amp;quot;state&amp;quot;: kind([&amp;quot;GREEN&amp;quot;] * 8 + [&amp;quot;YELLOW&amp;quot;, &amp;quot;ORANGE&amp;quot;, &amp;quot;SUSPENDED&amp;quot;], [&amp;quot;RED&amp;quot;]),&lt;br /&gt;
         &amp;quot;reset_in_force&amp;quot;: rnd.random() &amp;lt; 0.05, &amp;quot;suspended&amp;quot;: rnd.random() &amp;lt; 0.03, &amp;quot;in_tier&amp;quot;: rnd.random() &amp;lt; 0.5}&lt;br /&gt;
    if bad():&lt;br /&gt;
        f[&amp;quot;certificate_current&amp;quot;] = 1&lt;br /&gt;
    if bad():&lt;br /&gt;
        del f[&amp;quot;in_tier&amp;quot;]&lt;br /&gt;
    return f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bucket():&lt;br /&gt;
    return {&amp;quot;tokens&amp;quot;: kind([0, 0.5, 1, 1.75, 2, 3, round(rnd.uniform(0, 3), 4)], [-1, True, &amp;quot;1&amp;quot;]),&lt;br /&gt;
            &amp;quot;updated&amp;quot;: cnt(0, 2000000)}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen(fn):&lt;br /&gt;
    p = params()&lt;br /&gt;
    if fn == &amp;quot;standing&amp;quot;:&lt;br /&gt;
        return {&amp;quot;facts&amp;quot;: facts(), &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;refill&amp;quot;:&lt;br /&gt;
        b = bucket()&lt;br /&gt;
        now = b[&amp;quot;updated&amp;quot;] + rnd.randint(0, 40000) if isinstance(b[&amp;quot;updated&amp;quot;], int) and not bad() else cnt(0, 100)&lt;br /&gt;
        return {&amp;quot;bucket&amp;quot;: b, &amp;quot;now&amp;quot;: now, &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;take&amp;quot;:&lt;br /&gt;
        return {&amp;quot;bucket&amp;quot;: bucket()}&lt;br /&gt;
    if fn == &amp;quot;retry&amp;quot;:&lt;br /&gt;
        return {&amp;quot;attempt&amp;quot;: kind([0, 1, 2, 3, 5, 6, 10, 1023, 1024, 5000], [-1, 1.5]), &amp;quot;r&amp;quot;: rhex(), &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;intake&amp;quot;:&lt;br /&gt;
        landed = cnt(0, 100)&lt;br /&gt;
        vol = rnd.randint(0, landed) if isinstance(landed, int) and landed &amp;gt;= 0 and not bad() else cnt(0, 100)&lt;br /&gt;
        return {&amp;quot;intake&amp;quot;: unit(), &amp;quot;volunteer_blocks&amp;quot;: vol, &amp;quot;landed_blocks&amp;quot;: landed, &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;p_nw&amp;quot;:&lt;br /&gt;
        return {&amp;quot;intake&amp;quot;: kind([0, 0.25, 0.375, 0.5, 0.51, 1, round(rnd.random(), 4)], [-0.1, 1.1]), &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;pv&amp;quot;:&lt;br /&gt;
        return {&amp;quot;state&amp;quot;: {&amp;quot;p_v&amp;quot;: kind([None, 0.3, 0.25, 0.5, round(rnd.random(), 4)], [1.5, &amp;quot;x&amp;quot;])} if not bad() else {},&lt;br /&gt;
                &amp;quot;r&amp;quot;: rhex(), &amp;quot;params&amp;quot;: p}&lt;br /&gt;
    if fn == &amp;quot;share&amp;quot;:&lt;br /&gt;
        return {&amp;quot;window&amp;quot;: [{&amp;quot;volunteer&amp;quot;: flag(), &amp;quot;weight&amp;quot;: kind([0, 0.5, 1, 2, round(rnd.uniform(0, 3), 3)], [-1, &amp;quot;1&amp;quot;])}&lt;br /&gt;
                           for _ in range(rnd.randint(0, 6))] if not bad() else {},&lt;br /&gt;
                &amp;quot;g&amp;quot;: kind([1, 2, 0.5], [0, -1]), &amp;quot;v_max&amp;quot;: kind([0.25, 0.5, 0.1], [0, 1])}&lt;br /&gt;
    now = rnd.randint(2000, 8000)&lt;br /&gt;
    st = {&amp;quot;bucket&amp;quot;: {&amp;quot;tokens&amp;quot;: pick([3, 2, 1.5, 1, 0.9, 0, round(rnd.uniform(0, 3), 3)]), &amp;quot;updated&amp;quot;: now - rnd.randint(0, 5000)},&lt;br /&gt;
          &amp;quot;retry_until&amp;quot;: pick([None] * 6 + [float(now - 10), float(now + 100), float(now), 99999.0, float(rnd.randint(0, 9000))]),&lt;br /&gt;
          &amp;quot;attempt&amp;quot;: rnd.randint(0, 8), &amp;quot;refusals&amp;quot;: rnd.randint(0, 4), &amp;quot;period&amp;quot;: rnd.randint(0, 3),&lt;br /&gt;
          &amp;quot;closed_until&amp;quot;: pick([None] * 6 + [0, 50, 100, 1000]), &amp;quot;intake&amp;quot;: pick([0, 0.1, 0.3, 0.45, 0.6, round(rnd.random(), 3)]),&lt;br /&gt;
          &amp;quot;p_v&amp;quot;: {&amp;quot;p_v&amp;quot;: pick([None, 0.3, 0.999, 0.25, 0.5])}}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        st[pick(list(st.keys()))] = pick([None, -1, &amp;quot;x&amp;quot;, 1.5])&lt;br /&gt;
    per = st[&amp;quot;period&amp;quot;] + rnd.randint(0, 1) if isinstance(st[&amp;quot;period&amp;quot;], int) else 0&lt;br /&gt;
    call = {&amp;quot;now&amp;quot;: now, &amp;quot;block&amp;quot;: rnd.randint(0, 1200), &amp;quot;period&amp;quot;: per, &amp;quot;has_item&amp;quot;: rnd.random() &amp;lt; 0.6, &amp;quot;has_falcon&amp;quot;: rnd.random() &amp;lt; 0.1,&lt;br /&gt;
            &amp;quot;has_own_record&amp;quot;: rnd.random() &amp;lt; 0.5, &amp;quot;ratio_k&amp;quot;: pick([1 / 3, 0.5, 1000, 0.000001, 0.2]), &amp;quot;standing&amp;quot;: facts()}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        call[pick(list(call.keys()))] = pick([None, -1, &amp;quot;x&amp;quot;, 1.5, 0])&lt;br /&gt;
    return {&amp;quot;state&amp;quot;: st, &amp;quot;call&amp;quot;: call, &amp;quot;r&amp;quot;: rhex(), &amp;quot;params&amp;quot;: p}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cases = []&lt;br /&gt;
for _ in range(count):&lt;br /&gt;
    fn = pick(FNS + (&amp;quot;draw&amp;quot;, &amp;quot;draw&amp;quot;, &amp;quot;draw&amp;quot;))&lt;br /&gt;
    cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: gen(fn)})&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_volunteer.php&amp;quot;), CASES_PATH], capture_output=True,&lt;br /&gt;
                                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;
outcomes = {}&lt;br /&gt;
for c, a in zip(cases, py):&lt;br /&gt;
    k = c[&amp;quot;fn&amp;quot;] + (&amp;quot;/ERROR&amp;quot; if a.startswith(&amp;quot;ERROR&amp;quot;) else &amp;quot;&amp;quot;)&lt;br /&gt;
    if c[&amp;quot;fn&amp;quot;] == &amp;quot;draw&amp;quot; and not a.startswith(&amp;quot;ERROR&amp;quot;):&lt;br /&gt;
        k = &amp;quot;draw/&amp;quot; + a.split(&amp;quot;\n&amp;quot;)[0].split(&amp;quot;|&amp;quot;)[1]&lt;br /&gt;
    outcomes[k] = outcomes.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, &amp;quot;php_len&amp;quot;, len(php),&lt;br /&gt;
      json.dumps(outcomes, 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)); print(a); print(&amp;quot;---&amp;quot;); print(b); break&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>