<?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%2Fcrosspy.py</id>
	<title>The Principia Machina/TPC-PY/crosspy.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%2Fcrosspy.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/crosspy.py&amp;action=history"/>
	<updated>2026-10-21T07:32:29Z</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/crosspy.py&amp;diff=4029&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/crosspy.py&amp;diff=4029&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/crosspy.py&amp;diff=4028&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source crosspy.py (0.1.0), SHA-256 29a46269c301bf24; 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/crosspy.py&amp;diff=4028&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source crosspy.py (0.1.0), SHA-256 29a46269c301bf24; 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;crosspy 0.1.0: runs a module&amp;#039;s run_case over the case file of its&lt;br /&gt;
differential and prints the SHA-256 of the output list, so the same command&lt;br /&gt;
under Python 3.10, 3.11, 3.12 and 3.13 proves the Python residence&lt;br /&gt;
byte-identical across interpreters on the differential&amp;#039;s inputs.&lt;br /&gt;
Usage: python3.X crosspy.py &amp;lt;module dir&amp;gt; &amp;lt;module name&amp;gt; [case file].&lt;br /&gt;
The case file is the one diff_&amp;lt;name&amp;gt;.py kept where the environment variable&lt;br /&gt;
TPC_DIFF_CASES named it (the harnesses write no file in the tree since&lt;br /&gt;
2026-09-27, GEN-PATHS); without the argument, TPC_DIFF_CASES, and without&lt;br /&gt;
that, diff_cases.json in the module dir, as the harnesses left it before.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import hashlib, importlib, json, os, sys&lt;br /&gt;
d = os.path.abspath(sys.argv[1])&lt;br /&gt;
sys.path.insert(0, d)&lt;br /&gt;
m = importlib.import_module(sys.argv[2])&lt;br /&gt;
cf = (sys.argv[3] if len(sys.argv) &amp;gt; 3 else&lt;br /&gt;
      os.environ.get(&amp;quot;TPC_DIFF_CASES&amp;quot;) or os.path.join(d, &amp;quot;diff_cases.json&amp;quot;))&lt;br /&gt;
cases = json.load(open(cf, encoding=&amp;quot;utf-8&amp;quot;))&lt;br /&gt;
if sys.argv[2] == &amp;quot;tpc_cluster&amp;quot;:&lt;br /&gt;
    out = [m.run_case(c) for c in cases]&lt;br /&gt;
else:&lt;br /&gt;
    out = [m.run_case(c[&amp;quot;fn&amp;quot;], c[&amp;quot;args&amp;quot;]) for c in cases]&lt;br /&gt;
h = hashlib.sha256(json.dumps(out, ensure_ascii=False).encode(&amp;quot;utf-8&amp;quot;)).hexdigest()&lt;br /&gt;
print(&amp;quot;%s python %s cases %d sha256 %s&amp;quot; % (sys.argv[2], sys.version.split()[0], len(out), h[:16]))&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>