<?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_biblio.py</id>
	<title>The Principia Machina/TPC-PY/diff biblio.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_biblio.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/diff_biblio.py&amp;action=history"/>
	<updated>2026-10-21T13:46:47Z</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_biblio.py&amp;diff=4807&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_biblio.py&amp;diff=4807&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;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 02:11, 30 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_biblio.py&amp;diff=4806&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source diff_biblio.py (0.1.0), SHA-256 58976011ebffb18c; 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/diff_biblio.py&amp;diff=4806&amp;oldid=prev"/>
		<updated>2026-09-30T02:10:58Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source diff_biblio.py (0.1.0), SHA-256 58976011ebffb18c; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)&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:10, 30 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Line 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;earlier, so Python 3.10&amp;#039;s unicodedata, Python 3.13&amp;#039;s and ICU classify&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;earlier, so Python 3.10&amp;#039;s unicodedata, Python 3.13&amp;#039;s and ICU classify&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;them alike (the key form&amp;#039;s classes come from the pinned table in any&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;them alike (the key form&amp;#039;s classes come from the pinned table in any&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;case; NFC, NFD and the zone&#039;s text safety come from the interpreter).&quot;&quot;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;case; NFC, NFD and the zone&#039;s text safety come from the interpreter)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Increment 12 (tpc_biblio 0.2.0): view&#039;s statuses are drawn from the six&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;status words, STRUCK and &quot;&quot; (now refused) replaced by WITHDRAWN and NOT&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;GRADED&lt;/ins&gt;.&quot;&quot;&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import json&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import json&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import os&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import os&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l513&quot;&gt;Line 513:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 516:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             lit.append(lit[0])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;             lit.append(lit[0])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         recs.append({&amp;quot;id&amp;quot;: pick([&amp;quot;RR-%d&amp;quot; % i, &amp;quot;RR-%d&amp;quot; % (i + 20), &amp;quot;RR-%d&amp;quot; % (i + 30)] * 4 + [&amp;quot;RR-1&amp;quot;, &amp;quot;RR-10&amp;quot;, &amp;quot;RR-2&amp;quot;, &amp;quot;RR-7&amp;quot;]),&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         recs.append({&amp;quot;id&amp;quot;: pick([&amp;quot;RR-%d&amp;quot; % i, &amp;quot;RR-%d&amp;quot; % (i + 20), &amp;quot;RR-%d&amp;quot; % (i + 30)] * 4 + [&amp;quot;RR-1&amp;quot;, &amp;quot;RR-10&amp;quot;, &amp;quot;RR-2&amp;quot;, &amp;quot;RR-7&amp;quot;]),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                      &quot;status&quot;: pick([&quot;PROVISIONAL&quot;] * 6 + [&quot;ESTABLISHED&quot;] * 3 + [&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;STRUCK&lt;/del&gt;&quot;, &quot;HELD&quot;, &quot;REFUTED&quot;, &quot;&quot;]),&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                      &quot;status&quot;: pick([&quot;PROVISIONAL&quot;] * 6 + [&quot;ESTABLISHED&quot;] * 3 + [&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;WITHDRAWN&lt;/ins&gt;&quot;, &quot;HELD&quot;, &quot;REFUTED&quot;, &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NOT GRADED&lt;/ins&gt;&quot;]),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                      &amp;quot;literature&amp;quot;: lit})&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                      &amp;quot;literature&amp;quot;: lit})&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if rnd.random() &amp;lt; 0.015:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if rnd.random() &amp;lt; 0.015:&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_biblio.py&amp;diff=4037&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_biblio.py&amp;diff=4037&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_biblio.py&amp;diff=4036&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source diff_biblio.py (0.1.0), SHA-256 066959936e73c18e; 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_biblio.py&amp;diff=4036&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source diff_biblio.py (0.1.0), SHA-256 066959936e73c18e; 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_biblio 0.1.0: random differential run of tpc_biblio, Python against&lt;br /&gt;
PHP. Usage: python3 diff_biblio.py &amp;lt;seed&amp;gt; [count]. Writes its cases to a&lt;br /&gt;
temporary file outside the tree (kept where TPC_DIFF_CASES names it)&lt;br /&gt;
(count cases per function: doi, shape, arxiv, isbn, issn, pmid, pmcid,&lt;br /&gt;
key, dupe, check, canon, preimage, url, compare, withdrawn, view,&lt;br /&gt;
holdlist), runs diff_biblio.php over it and compares every render byte&lt;br /&gt;
for byte. The alphabet holds code points assigned at Unicode 13.0 or&lt;br /&gt;
earlier, so Python 3.10&amp;#039;s unicodedata, Python 3.13&amp;#039;s and ICU classify&lt;br /&gt;
them alike (the key form&amp;#039;s classes come from the pinned table in any&lt;br /&gt;
case; NFC, NFD and the zone&amp;#039;s text safety come from the interpreter).&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_biblio import run_case, CSL_KEYS, CSL_TYPES, NAME_KEYS, RESULTS, DECL_KINDS&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 3000&lt;br /&gt;
rnd = random.Random(seed)&lt;br /&gt;
&lt;br /&gt;
TEXT = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;x&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;  &amp;quot;, &amp;quot;\t&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;\r\n&amp;quot;, &amp;quot;e\u0301&amp;quot;, &amp;quot;\u00e9&amp;quot;,&lt;br /&gt;
        &amp;quot;\u00c9&amp;quot;, &amp;quot;\u212b&amp;quot;, &amp;quot;\u00c5&amp;quot;, &amp;quot;\u1100\u1161&amp;quot;, &amp;quot;\uac00&amp;quot;, &amp;quot;\u00a0&amp;quot;,&lt;br /&gt;
        &amp;quot;\u2003&amp;quot;, &amp;quot;\u3000&amp;quot;, &amp;quot;|&amp;quot;, &amp;quot;\\&amp;quot;, &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;&amp;#039;&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;\u2010&amp;quot;, &amp;quot;\u2014&amp;quot;,&lt;br /&gt;
        &amp;quot;\u2019&amp;quot;, &amp;quot;.&amp;quot;, &amp;quot;,&amp;quot;, &amp;quot;;&amp;quot;, &amp;quot;:&amp;quot;, &amp;quot;(&amp;quot;, &amp;quot;)&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;amp;&amp;quot;, &amp;quot;#&amp;quot;, &amp;quot;%&amp;quot;,&lt;br /&gt;
        &amp;quot;$&amp;quot;, &amp;quot;+&amp;quot;, &amp;quot;=&amp;quot;, &amp;quot;^&amp;quot;, &amp;quot;~&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;/&amp;quot;, &amp;quot;\u00fc&amp;quot;, &amp;quot;u\u0308&amp;quot;, &amp;quot;\u00d8&amp;quot;,&lt;br /&gt;
        &amp;quot;\u00df&amp;quot;, &amp;quot;\u03a9&amp;quot;, &amp;quot;\u03c9&amp;quot;, &amp;quot;\u0301&amp;quot;, &amp;quot;\ufb01&amp;quot;, &amp;quot;\u91cf&amp;quot;, &amp;quot;\u0663&amp;quot;,&lt;br /&gt;
        &amp;quot;5&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;\u200b&amp;quot;, &amp;quot;\u00ad&amp;quot;, &amp;quot;\u202e&amp;quot;, &amp;quot;\u0001&amp;quot;, &amp;quot;\u007f&amp;quot;,&lt;br /&gt;
        &amp;quot;\u2028&amp;quot;, &amp;quot;\u00b0&amp;quot;, &amp;quot;\u2030&amp;quot;, &amp;quot;\u00d7&amp;quot;, &amp;quot;\u00bd&amp;quot;, &amp;quot;\u2044&amp;quot;,&lt;br /&gt;
        &amp;quot;&amp;lt;i&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/i&amp;gt;&amp;quot;, &amp;quot;&amp;lt;sup&amp;gt;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;lt;&amp;quot;, &amp;quot;&amp;amp;#8217;&amp;quot;, &amp;quot;&amp;amp;#x2019;&amp;quot;,&lt;br /&gt;
        &amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot;&amp;amp;#0;&amp;quot;, &amp;quot;RETRACTED:&amp;quot;, &amp;quot;Retracted: &amp;quot;, &amp;quot;WITHDRAWN ARTICLE:&amp;quot;,&lt;br /&gt;
        &amp;quot;withdrawn&amp;quot;, &amp;quot;WITHDRAWN&amp;quot;, &amp;quot;Withdrawn.&amp;quot;, &amp;quot;unwithdrawn&amp;quot;]&lt;br /&gt;
SAFE = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;Z&amp;quot;, &amp;quot;x&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;e\u0301&amp;quot;, &amp;quot;\u00e9&amp;quot;, &amp;quot;\u00c9&amp;quot;, &amp;quot;\u212b&amp;quot;,&lt;br /&gt;
        &amp;quot;\u1100\u1161&amp;quot;, &amp;quot;\u00fc&amp;quot;, &amp;quot;\u00d8&amp;quot;, &amp;quot;\u03a9&amp;quot;, &amp;quot;\u91cf&amp;quot;, &amp;quot;5&amp;quot;, &amp;quot;-&amp;quot;,&lt;br /&gt;
        &amp;quot;.&amp;quot;, &amp;quot;,&amp;quot;, &amp;quot;(&amp;quot;, &amp;quot;)&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;amp;&amp;quot;, &amp;quot;%&amp;quot;, &amp;quot;&amp;#039;&amp;quot;, &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;\\&amp;quot;, &amp;quot;|&amp;quot;,&lt;br /&gt;
        &amp;quot;\t&amp;quot;, &amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;i&amp;gt;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;#8217;&amp;quot;, &amp;quot;RETRACTED: &amp;quot;]&lt;br /&gt;
DOI_SUF = [&amp;quot;a&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;z&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;9&amp;quot;, &amp;quot;.&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;(&amp;quot;, &amp;quot;)&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot;, &amp;quot;;&amp;quot;,&lt;br /&gt;
           &amp;quot;:&amp;quot;, &amp;quot;/&amp;quot;, &amp;quot;%&amp;quot;, &amp;quot;%3C&amp;quot;, &amp;quot;%3E&amp;quot;, &amp;quot;%zz&amp;quot;, &amp;quot;%C0%AE&amp;quot;, &amp;quot;%25&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;\t&amp;quot;,&lt;br /&gt;
           &amp;quot;\u00e9&amp;quot;, &amp;quot;e\u0301&amp;quot;, &amp;quot;\u200b&amp;quot;, &amp;quot;\u202e&amp;quot;, &amp;quot;\u00a0&amp;quot;, &amp;quot;\u03a9&amp;quot;, &amp;quot;~&amp;quot;,&lt;br /&gt;
           &amp;quot;#&amp;quot;, &amp;quot;?&amp;quot;, &amp;quot;&amp;amp;&amp;quot;, &amp;quot;=&amp;quot;, &amp;quot;+&amp;quot;]&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 r_text(alpha=TEXT, lo=0, hi=8, bad=0.04):&lt;br /&gt;
    if rnd.random() &amp;lt; bad:&lt;br /&gt;
        return pick([5, None, True, 1.5, [&amp;quot;a&amp;quot;], {&amp;quot;a&amp;quot;: 1}])&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(pick(alpha) for _ in range(rnd.randint(lo, hi)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_safe(lo=1, hi=6):&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(pick(SAFE) for _ in range(rnd.randint(lo, hi)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_digits(lo, hi):&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(pick(&amp;quot;0123456789&amp;quot;) for _ in range(rnd.randint(lo, hi)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_yymm():&lt;br /&gt;
    r = rnd.random()&lt;br /&gt;
    if r &amp;lt; 0.5:&lt;br /&gt;
        return pick([&amp;quot;0704&amp;quot;, &amp;quot;0705&amp;quot;, &amp;quot;1412&amp;quot;, &amp;quot;1501&amp;quot;, &amp;quot;2601&amp;quot;, &amp;quot;9912&amp;quot;, &amp;quot;0703&amp;quot;,&lt;br /&gt;
                     &amp;quot;1500&amp;quot;, &amp;quot;1413&amp;quot;, &amp;quot;0700&amp;quot;, &amp;quot;2613&amp;quot;, &amp;quot;9108&amp;quot;, &amp;quot;0000&amp;quot;])&lt;br /&gt;
    return r_digits(4, 4)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_version():&lt;br /&gt;
    return pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;v1&amp;quot;, &amp;quot;v2&amp;quot;, &amp;quot;v10&amp;quot;, &amp;quot;v0&amp;quot;, &amp;quot;v01&amp;quot;, &amp;quot;V1&amp;quot;, &amp;quot;v&amp;quot;, &amp;quot;v1v2&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_arxiv_id():&lt;br /&gt;
    r = rnd.random()&lt;br /&gt;
    if r &amp;lt; 0.45:&lt;br /&gt;
        return r_yymm() + &amp;quot;.&amp;quot; + r_digits(3, 6) + r_version()&lt;br /&gt;
    if r &amp;lt; 0.9:&lt;br /&gt;
        arch = pick([&amp;quot;hep-th&amp;quot;, &amp;quot;math&amp;quot;, &amp;quot;cond-mat&amp;quot;, &amp;quot;astro-ph&amp;quot;, &amp;quot;cs&amp;quot;, &amp;quot;q-bio&amp;quot;,&lt;br /&gt;
                     &amp;quot;a&amp;quot;, &amp;quot;HEP-TH&amp;quot;, &amp;quot;hep_th&amp;quot;, &amp;quot;physics&amp;quot;, &amp;quot;x&amp;quot; * 16, &amp;quot;x&amp;quot; * 17])&lt;br /&gt;
        sc = pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;.GT&amp;quot;, &amp;quot;.AG&amp;quot;, &amp;quot;.mes-hall&amp;quot;, &amp;quot;.G&amp;quot;, &amp;quot;.GTX&amp;quot;, &amp;quot;.gt&amp;quot;])&lt;br /&gt;
        return arch + sc + &amp;quot;/&amp;quot; + r_yymm() + r_digits(2, 4) + r_version()&lt;br /&gt;
    return r_text(lo=0, hi=12, bad=0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_arxiv():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.03:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    v = r_arxiv_id()&lt;br /&gt;
    return pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;arXiv:&amp;quot;, &amp;quot;ARXIV:&amp;quot;, &amp;quot;https://arxiv.org/abs/&amp;quot;,&lt;br /&gt;
                 &amp;quot;http://ARXIV.org/abs/&amp;quot;, &amp;quot;arxiv.org/abs/&amp;quot;, &amp;quot;arXiv: &amp;quot;]) + v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_doi_core():&lt;br /&gt;
    r = rnd.random()&lt;br /&gt;
    if r &amp;lt; 0.15:&lt;br /&gt;
        return &amp;quot;10.48550/&amp;quot; + pick([&amp;quot;arXiv.&amp;quot;, &amp;quot;arxiv.&amp;quot;, &amp;quot;ARXIV.&amp;quot;, &amp;quot;other.&amp;quot;, &amp;quot;&amp;quot;]) + r_arxiv_id()&lt;br /&gt;
    pre = pick([&amp;quot;10.&amp;quot;, &amp;quot;10.&amp;quot;, &amp;quot;10.&amp;quot;, &amp;quot;11.&amp;quot;, &amp;quot;10&amp;quot;, &amp;quot;1.&amp;quot;, &amp;quot;10..&amp;quot;, &amp;quot;10.1000.10&amp;quot;]) + \&lt;br /&gt;
        (r_digits(0, 5) if rnd.random() &amp;lt; 0.8 else &amp;quot;&amp;quot;)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.9:&lt;br /&gt;
        pre += &amp;quot;/&amp;quot;&lt;br /&gt;
    suf = &amp;quot;&amp;quot;.join(pick(DOI_SUF) for _ in range(rnd.randint(0, 8)))&lt;br /&gt;
    return pre + suf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_doi():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    core = r_doi_core()&lt;br /&gt;
    return pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;doi:&amp;quot;, &amp;quot;DOI:&amp;quot;, &amp;quot;Doi:&amp;quot;, &amp;quot;https://doi.org/&amp;quot;,&lt;br /&gt;
                 &amp;quot;http://dx.doi.org/&amp;quot;, &amp;quot;HTTPS://DOI.ORG/&amp;quot;, &amp;quot;https://example.org/&amp;quot;,&lt;br /&gt;
                 &amp;quot;doi: &amp;quot;]) + core&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def isbn10_check(nine):&lt;br /&gt;
    t = sum((10 - i) * int(nine[i]) for i in range(9))&lt;br /&gt;
    c = (11 - t % 11) % 11&lt;br /&gt;
    return &amp;quot;X&amp;quot; if c == 10 else str(c)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def isbn13_check(twelve):&lt;br /&gt;
    t = sum((1 if i % 2 == 0 else 3) * int(twelve[i]) for i in range(12))&lt;br /&gt;
    return str((10 - t % 10) % 10)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def hyphenate(s):&lt;br /&gt;
    out = &amp;quot;&amp;quot;&lt;br /&gt;
    for ch in s:&lt;br /&gt;
        out += ch&lt;br /&gt;
        if rnd.random() &amp;lt; 0.15:&lt;br /&gt;
            out += pick([&amp;quot;-&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;\u2010&amp;quot;, &amp;quot;&amp;quot;])&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_isbn():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    r = rnd.random()&lt;br /&gt;
    if r &amp;lt; 0.4:&lt;br /&gt;
        nine = r_digits(9, 9)&lt;br /&gt;
        c = isbn10_check(nine) if rnd.random() &amp;lt; 0.7 else pick(&amp;quot;0123456789Xx&amp;quot;)&lt;br /&gt;
        if rnd.random() &amp;lt; 0.3 and c == &amp;quot;X&amp;quot;:&lt;br /&gt;
            c = &amp;quot;x&amp;quot;&lt;br /&gt;
        return hyphenate(nine + c)&lt;br /&gt;
    if r &amp;lt; 0.8:&lt;br /&gt;
        tw = (pick([&amp;quot;978&amp;quot;, &amp;quot;979&amp;quot;, &amp;quot;977&amp;quot;, &amp;quot;97&amp;quot;]) + r_digits(9, 10))[:12]&lt;br /&gt;
        c = isbn13_check(tw) if len(tw) == 12 and rnd.random() &amp;lt; 0.7 else pick(&amp;quot;0123456789X&amp;quot;)&lt;br /&gt;
        return hyphenate(tw + c)&lt;br /&gt;
    return hyphenate(r_digits(8, 14))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_issn():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    seven = r_digits(7, 7)&lt;br /&gt;
    t = sum((8 - i) * int(seven[i]) for i in range(7))&lt;br /&gt;
    r = t % 11&lt;br /&gt;
    c = 0 if r == 0 else 11 - r&lt;br /&gt;
    good = &amp;quot;X&amp;quot; if c == 10 else str(c)&lt;br /&gt;
    c = good if rnd.random() &amp;lt; 0.7 else pick(&amp;quot;0123456789Xx&amp;quot;)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.3 and c == &amp;quot;X&amp;quot;:&lt;br /&gt;
        c = &amp;quot;x&amp;quot;&lt;br /&gt;
    s = seven[:4] + pick([&amp;quot;-&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;]) + seven[4:] + c&lt;br /&gt;
    return pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;ISSN &amp;quot;]) + s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_pmid():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    return pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;PMID:&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot; &amp;quot;]) + r_digits(0, 12) + pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;, &amp;quot;\u200b&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_pmcid():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        return r_text()&lt;br /&gt;
    return pick([&amp;quot;PMC&amp;quot;, &amp;quot;PMC&amp;quot;, &amp;quot;pmc&amp;quot;, &amp;quot;PmC&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;PMCID:&amp;quot;]) + r_digits(0, 9) + pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;v1&amp;quot;, &amp;quot; &amp;quot;])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GOOD_DOI = [&amp;quot;10.1016/S0140-6736(97)11096-0&amp;quot;, &amp;quot;10.1016/s0140-6736(97)11096-0&amp;quot;, &amp;quot;10.1000/x&amp;quot;, &amp;quot;10.1000/X&amp;quot;,&lt;br /&gt;
            &amp;quot;10.1002/(SICI)1097-0266(199708)18:7&amp;lt;509::AID-SMJ882&amp;gt;3.0.CO;2-Z&amp;quot;, &amp;quot;10.5281/zenodo.1234567&amp;quot;,&lt;br /&gt;
            &amp;quot;10.1103/FixRevD.113.012345&amp;quot;, &amp;quot;10.1000/\u00e9&amp;quot;, &amp;quot;10.1000.10/abc&amp;quot;]&lt;br /&gt;
GOOD_ARXIV = [&amp;quot;2601.12345&amp;quot;, &amp;quot;2601.12345v2&amp;quot;, &amp;quot;2601.12345v3&amp;quot;, &amp;quot;hep-th/0701999&amp;quot;, &amp;quot;math.GT/0309136v1&amp;quot;, &amp;quot;0704.0001&amp;quot;]&lt;br /&gt;
GOOD_ISBN = [&amp;quot;0-306-40615-2&amp;quot;, &amp;quot;9780306406157&amp;quot;, &amp;quot;978-0-306-40615-7&amp;quot;, &amp;quot;080442957X&amp;quot;, &amp;quot;979-10-90636-07-1&amp;quot;]&lt;br /&gt;
GOOD_ISSN = [&amp;quot;0140-6736&amp;quot;, &amp;quot;1474-547X&amp;quot;, &amp;quot;0378-5955&amp;quot;, &amp;quot;2470-0010&amp;quot;, &amp;quot;1097-0266&amp;quot;]&lt;br /&gt;
GOOD_PMID = [&amp;quot;9500320&amp;quot;, &amp;quot;1&amp;quot;, &amp;quot;20137807&amp;quot;]&lt;br /&gt;
GOOD_PMCID = [&amp;quot;PMC1&amp;quot;, &amp;quot;PMC8243230&amp;quot;, &amp;quot;pmc1&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gv(good, wild, p=0.85):&lt;br /&gt;
    return pick(good) if rnd.random() &amp;lt; p else wild()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_key():&lt;br /&gt;
    return {&amp;quot;text&amp;quot;: r_text(lo=0, hi=14), &amp;quot;kind&amp;quot;: pick([&amp;quot;title&amp;quot;, &amp;quot;title&amp;quot;, &amp;quot;name&amp;quot;, &amp;quot;TITLE&amp;quot;, 5])}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_ids(valid=False):&lt;br /&gt;
    o = {}&lt;br /&gt;
    for k, gd, wl in ((&amp;quot;DOI&amp;quot;, GOOD_DOI, r_doi), (&amp;quot;ARXIV&amp;quot;, GOOD_ARXIV, r_arxiv), (&amp;quot;ISBN&amp;quot;, GOOD_ISBN, r_isbn),&lt;br /&gt;
                      (&amp;quot;ISSN&amp;quot;, GOOD_ISSN, r_issn), (&amp;quot;PMID&amp;quot;, GOOD_PMID, r_pmid), (&amp;quot;PMCID&amp;quot;, GOOD_PMCID, r_pmcid)):&lt;br /&gt;
        if rnd.random() &amp;lt; 0.35:&lt;br /&gt;
            o[k] = gv(gd, wl, 0.9 if valid else 0.5)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        o[pick([&amp;quot;ORCID&amp;quot;, &amp;quot;doi&amp;quot;, &amp;quot;URL&amp;quot;])] = &amp;quot;x&amp;quot;&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        return pick([[], &amp;quot;x&amp;quot;, None])&lt;br /&gt;
    return o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_name():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        return pick([&amp;quot;x&amp;quot;, 5, {}, {&amp;quot;given&amp;quot;: &amp;quot;A&amp;quot;}, {&amp;quot;family&amp;quot;: &amp;quot;&amp;quot;}, {&amp;quot;family&amp;quot;: &amp;quot;A&amp;quot;, &amp;quot;comma-suffix&amp;quot;: True}])&lt;br /&gt;
    o = {&amp;quot;family&amp;quot;: pick([&amp;quot;Wakefield&amp;quot;, &amp;quot;Santos&amp;quot;, &amp;quot;M\u00fcller&amp;quot;, &amp;quot;Muller&amp;quot;, &amp;quot;\u00d8st&amp;quot;, &amp;quot;Editor&amp;quot;, r_safe(1, 4)])}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.15:&lt;br /&gt;
        del o[&amp;quot;family&amp;quot;]&lt;br /&gt;
        o[&amp;quot;literal&amp;quot;] = pick([&amp;quot;Fixture Collaboration&amp;quot;, r_safe(1, 4)])&lt;br /&gt;
    for k in (&amp;quot;given&amp;quot;, &amp;quot;dropping-particle&amp;quot;, &amp;quot;non-dropping-particle&amp;quot;, &amp;quot;suffix&amp;quot;):&lt;br /&gt;
        if rnd.random() &amp;lt; (0.5 if k == &amp;quot;given&amp;quot; else 0.08):&lt;br /&gt;
            o[k] = r_safe(1, 4) if rnd.random() &amp;lt; 0.98 else r_text(lo=0, hi=3)&lt;br /&gt;
    return o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_date():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        return pick([{&amp;quot;raw&amp;quot;: &amp;quot;1998&amp;quot;}, {&amp;quot;date-parts&amp;quot;: [[&amp;quot;1998&amp;quot;]]}, {&amp;quot;date-parts&amp;quot;: []}, &amp;quot;1998&amp;quot;,&lt;br /&gt;
                     {&amp;quot;date-parts&amp;quot;: [[1998]], &amp;quot;circa&amp;quot;: &amp;quot;yes&amp;quot;}, {&amp;quot;date-parts&amp;quot;: [[1998, 13]]},&lt;br /&gt;
                     {&amp;quot;date-parts&amp;quot;: [[True]]}, {&amp;quot;date-parts&amp;quot;: [[1998], [1999], [2000]]}])&lt;br /&gt;
    parts = []&lt;br /&gt;
    for _ in range(pick([1, 1, 1, 2])):&lt;br /&gt;
        p = [pick([1998, 2026, 2022, 2020, 2026, 1998, 2019, 2001, 1998, 2026, 2022, 2020, -500, 0, 9999] * 6 + [10000, -10000])]&lt;br /&gt;
        if rnd.random() &amp;lt; 0.6:&lt;br /&gt;
            p.append(pick([1, 2, 12, 6, 8, 2, 1, 12, 3, 4, 5, 7, 9, 10, 11, 6, 8, 2] * 3 + [13, 0]))&lt;br /&gt;
            if rnd.random() &amp;lt; 0.5:&lt;br /&gt;
                p.append(pick([1, 28, 31, 26, 28, 1, 31, 26, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] * 3 + [32]))&lt;br /&gt;
        parts.append(p)&lt;br /&gt;
    o = {&amp;quot;date-parts&amp;quot;: parts}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.2:&lt;br /&gt;
        o[&amp;quot;circa&amp;quot;] = pick([True, False])&lt;br /&gt;
    return o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_item(good=0.7):&lt;br /&gt;
    o = {}&lt;br /&gt;
    for k in CSL_KEYS:&lt;br /&gt;
        base = 0.97 if k in (&amp;quot;type&amp;quot;, &amp;quot;title&amp;quot;, &amp;quot;author&amp;quot;, &amp;quot;issued&amp;quot;) else 0.15&lt;br /&gt;
        if rnd.random() &amp;gt;= base:&lt;br /&gt;
            continue&lt;br /&gt;
        if k == &amp;quot;type&amp;quot;:&lt;br /&gt;
            o[k] = pick(CSL_TYPES) if rnd.random() &amp;lt; 0.97 else pick([&amp;quot;preprint&amp;quot;, 5, &amp;quot;&amp;quot;])&lt;br /&gt;
        elif k in (&amp;quot;author&amp;quot;, &amp;quot;editor&amp;quot;, &amp;quot;translator&amp;quot;, &amp;quot;container-author&amp;quot;, &amp;quot;collection-editor&amp;quot;):&lt;br /&gt;
            o[k] = [r_name() for _ in range(rnd.randint(1 if k == &amp;quot;author&amp;quot; else 0, 3))] if rnd.random() &amp;lt; 0.98 else {&amp;quot;family&amp;quot;: &amp;quot;x&amp;quot;}&lt;br /&gt;
        elif k in (&amp;quot;issued&amp;quot;, &amp;quot;accessed&amp;quot;, &amp;quot;original-date&amp;quot;):&lt;br /&gt;
            o[k] = r_date()&lt;br /&gt;
        elif k == &amp;quot;DOI&amp;quot;:&lt;br /&gt;
            o[k] = gv(GOOD_DOI + [&amp;quot;10.48550/arXiv.2601.12345&amp;quot;, &amp;quot;https://doi.org/10.1000/x&amp;quot;, &amp;quot;doi:10.1000/X&amp;quot;], r_doi)&lt;br /&gt;
        elif k == &amp;quot;ISBN&amp;quot;:&lt;br /&gt;
            o[k] = gv(GOOD_ISBN, r_isbn)&lt;br /&gt;
        elif k == &amp;quot;ISSN&amp;quot;:&lt;br /&gt;
            o[k] = gv(GOOD_ISSN, r_issn)&lt;br /&gt;
        elif k == &amp;quot;PMID&amp;quot;:&lt;br /&gt;
            o[k] = gv(GOOD_PMID, r_pmid)&lt;br /&gt;
        elif k == &amp;quot;PMCID&amp;quot;:&lt;br /&gt;
            o[k] = gv(GOOD_PMCID, r_pmcid)&lt;br /&gt;
        elif k == &amp;quot;URL&amp;quot;:&lt;br /&gt;
            o[k] = &amp;quot;https://example.org/&amp;quot; + r_safe(0, 4)&lt;br /&gt;
        elif k == &amp;quot;title&amp;quot;:&lt;br /&gt;
            o[k] = pick([&amp;quot;Ileal-lymphoid-nodular hyperplasia, non-specific colitis, and pervasive developmental disorder in children&amp;quot;,&lt;br /&gt;
                         &amp;quot;Vacuum structure of a fixture field&amp;quot;, &amp;quot;Fixture Handbook&amp;quot;, &amp;quot;Dynamic capabilities: and strategic management&amp;quot;,&lt;br /&gt;
                         &amp;quot;The E. coli genome &amp;amp; its structure&amp;quot;, r_safe(1, 12), r_safe(1, 12)])&lt;br /&gt;
        else:&lt;br /&gt;
            o[k] = r_safe(1, 12) if rnd.random() &amp;lt; 0.97 else r_text(lo=0, hi=4)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.03:&lt;br /&gt;
        o[pick([&amp;quot;abstract&amp;quot;, &amp;quot;note&amp;quot;, &amp;quot;custom&amp;quot;, &amp;quot;keyword&amp;quot;, &amp;quot;references&amp;quot;])] = &amp;quot;x&amp;quot;&lt;br /&gt;
    if rnd.random() &amp;lt; 0.01:&lt;br /&gt;
        return pick([[], &amp;quot;x&amp;quot;, None])&lt;br /&gt;
    return o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_caps():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        return pick([{}, {&amp;quot;entry_max&amp;quot;: 1}, {&amp;quot;entry_max&amp;quot;: 16384, &amp;quot;title&amp;quot;: 0, &amp;quot;text&amp;quot;: 500, &amp;quot;name&amp;quot;: 200, &amp;quot;url&amp;quot;: 2000, &amp;quot;names&amp;quot;: 100},&lt;br /&gt;
                     {&amp;quot;entry_max&amp;quot;: 16384, &amp;quot;title&amp;quot;: 1000, &amp;quot;text&amp;quot;: 500, &amp;quot;name&amp;quot;: 200, &amp;quot;url&amp;quot;: 2000, &amp;quot;names&amp;quot;: 100, &amp;quot;x&amp;quot;: 1}])&lt;br /&gt;
    return {&amp;quot;entry_max&amp;quot;: pick([16384] * 30 + [300, 100]), &amp;quot;title&amp;quot;: pick([1000] * 30 + [8, 3]),&lt;br /&gt;
            &amp;quot;text&amp;quot;: pick([500] * 30 + [8, 3]), &amp;quot;name&amp;quot;: pick([200] * 30 + [4, 1]), &amp;quot;url&amp;quot;: pick([2000] * 30 + [30]),&lt;br /&gt;
            &amp;quot;names&amp;quot;: pick([100] * 30 + [2, 1])}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_existing():&lt;br /&gt;
    out = []&lt;br /&gt;
    for _ in range(rnd.randint(0, 3)):&lt;br /&gt;
        out.append([pick([&amp;quot;DOI&amp;quot;, &amp;quot;ARXIV&amp;quot;, &amp;quot;ISBN&amp;quot;]), pick([&amp;quot;10.1000/x&amp;quot;, &amp;quot;10.1016/s0140-6736(97)11096-0&amp;quot;,&lt;br /&gt;
                                                          &amp;quot;2601.12345&amp;quot;, &amp;quot;9780306406157&amp;quot;, r_safe()]),&lt;br /&gt;
                    pick([&amp;quot;RR-BIB1&amp;quot;, &amp;quot;RR-BIB2&amp;quot;, &amp;quot;RR-BIB3&amp;quot;])])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.015:&lt;br /&gt;
        out.append(pick([[&amp;quot;DOI&amp;quot;, &amp;quot;x&amp;quot;], [&amp;quot;ISSN&amp;quot;, &amp;quot;x&amp;quot;, &amp;quot;RR-BIB1&amp;quot;], &amp;quot;x&amp;quot;]))&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_entry_ids(item):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;identifiers likely to match the item&amp;#039;s fields.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if type(item) is not dict or rnd.random() &amp;lt; 0.15:&lt;br /&gt;
        return r_ids(True)&lt;br /&gt;
    o = {}&lt;br /&gt;
    for k in (&amp;quot;DOI&amp;quot;, &amp;quot;ISBN&amp;quot;, &amp;quot;ISSN&amp;quot;, &amp;quot;PMID&amp;quot;, &amp;quot;PMCID&amp;quot;):&lt;br /&gt;
        if k in item and rnd.random() &amp;lt; 0.9:&lt;br /&gt;
            o[k] = item[k]&lt;br /&gt;
            if k == &amp;quot;DOI&amp;quot; and type(o[k]) is str and rnd.random() &amp;lt; 0.3:&lt;br /&gt;
                o[k] = o[k].lower()&lt;br /&gt;
    if &amp;quot;DOI&amp;quot; in o and type(o[&amp;quot;DOI&amp;quot;]) is str and o[&amp;quot;DOI&amp;quot;][:8] == &amp;quot;10.48550&amp;quot;:&lt;br /&gt;
        del o[&amp;quot;DOI&amp;quot;]&lt;br /&gt;
        o[&amp;quot;ARXIV&amp;quot;] = pick([&amp;quot;2601.12345&amp;quot;, &amp;quot;2601.12345v2&amp;quot;, &amp;quot;2601.12345v3&amp;quot;, &amp;quot;2601.99999&amp;quot;])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.3:&lt;br /&gt;
        o[&amp;quot;ARXIV&amp;quot;] = gv(GOOD_ARXIV, r_arxiv)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        o[pick([&amp;quot;DOI&amp;quot;, &amp;quot;ISSN&amp;quot;, &amp;quot;ISBN&amp;quot;])] = pick([&amp;quot;10.1000/x&amp;quot;, &amp;quot;0140-6736&amp;quot;, &amp;quot;0-306-40615-2&amp;quot;])&lt;br /&gt;
    return o&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_check():&lt;br /&gt;
    item = r_item()&lt;br /&gt;
    sup = pick([None] * 30 + [&amp;quot;RR-BIB1&amp;quot;, &amp;quot;RR-BIB3&amp;quot;, &amp;quot;RR-BIB1&amp;quot;, &amp;quot;RR-BIB3&amp;quot;, &amp;quot;&amp;quot;, 5])&lt;br /&gt;
    e = {&amp;quot;item&amp;quot;: item, &amp;quot;identifiers&amp;quot;: r_entry_ids(item), &amp;quot;supersedes&amp;quot;: sup}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.015:&lt;br /&gt;
        e = pick([{&amp;quot;item&amp;quot;: item, &amp;quot;identifiers&amp;quot;: {}}, {&amp;quot;item&amp;quot;: item, &amp;quot;identifiers&amp;quot;: {}, &amp;quot;supersedes&amp;quot;: None, &amp;quot;x&amp;quot;: 1}, &amp;quot;x&amp;quot;])&lt;br /&gt;
    return {&amp;quot;entry&amp;quot;: e, &amp;quot;existing&amp;quot;: r_existing(), &amp;quot;caps&amp;quot;: r_caps()}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_canon():&lt;br /&gt;
    item = r_item()&lt;br /&gt;
    if type(item) is dict and rnd.random() &amp;lt; 0.2:&lt;br /&gt;
        item[&amp;quot;id&amp;quot;] = pick([&amp;quot;RR-BIB1&amp;quot;, &amp;quot;RR-BIB2&amp;quot;])&lt;br /&gt;
    return {&amp;quot;bib_id&amp;quot;: pick([&amp;quot;RR-BIB1&amp;quot;] * 20 + [&amp;quot;RR-BIB2&amp;quot;] * 10 + [&amp;quot;&amp;quot;, 5, &amp;quot;x\u200b&amp;quot;]),&lt;br /&gt;
            &amp;quot;proposed_by&amp;quot;: pick([&amp;quot;DeltaS Zero&amp;quot;] * 20 + [&amp;quot;acct&amp;quot;] * 10 + [&amp;quot;&amp;quot;, None]),&lt;br /&gt;
            &amp;quot;landed_by&amp;quot;: pick([&amp;quot;Prime AI&amp;quot;] * 20 + [&amp;quot;acct&amp;quot;] * 10 + [5]),&lt;br /&gt;
            &amp;quot;landed&amp;quot;: pick([&amp;quot;2026-09-26T12:00:00Z&amp;quot;] * 40 + [&amp;quot;now&amp;quot;, &amp;quot;&amp;quot;, 1]),&lt;br /&gt;
            &amp;quot;supersedes&amp;quot;: pick([None] * 30 + [&amp;quot;RR-BIB1&amp;quot;] * 10 + [5, &amp;quot;&amp;quot;]),&lt;br /&gt;
            &amp;quot;identifiers&amp;quot;: r_entry_ids(item), &amp;quot;item&amp;quot;: item}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_url():&lt;br /&gt;
    tmpl = pick([&amp;quot;https://doi.org/ra/{ID}&amp;quot;, &amp;quot;https://api.crossref.org/v1/works/{ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;https://api.datacite.org/dois/{ID}&amp;quot;, &amp;quot;https://export.arxiv.org/api/query?id_list={ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&amp;amp;retmode=json&amp;amp;id={ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;https://pmc.ncbi.nlm.nih.gov/tools/idconv/api/v1/articles/?format=json&amp;amp;ids={ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;http://doi.org/ra/{ID}&amp;quot;, &amp;quot;https://doi.org/ra/&amp;quot;, &amp;quot;https://doi.org/{ID}/{ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;https://doi.org/ra/{ID}#x&amp;quot;, &amp;quot;https://{ID}.doi.org/&amp;quot;, &amp;quot;https://doi.org/{id}/{ID}&amp;quot;,&lt;br /&gt;
                 &amp;quot;https://doi.org:8443/ra/{ID}&amp;quot;, &amp;quot;https://doi.org/ra /{ID}&amp;quot;, &amp;quot;https://doi.org{ID}&amp;quot;, 5,&lt;br /&gt;
                 &amp;quot;https://d\u00f6i.org/ra/{ID}&amp;quot;, &amp;quot;https://-doi.org/ra/{ID}&amp;quot;])&lt;br /&gt;
    d = {&amp;quot;kind&amp;quot;: pick(DECL_KINDS + (&amp;quot;OPENALEX&amp;quot;, &amp;quot;DOI&amp;quot;)), &amp;quot;template&amp;quot;: tmpl}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.2:&lt;br /&gt;
        d[&amp;quot;name&amp;quot;] = pick([&amp;quot;lookup&amp;quot;, &amp;quot;&amp;quot;, 5])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        d = pick([{&amp;quot;kind&amp;quot;: &amp;quot;DOI-RA&amp;quot;}, {&amp;quot;template&amp;quot;: tmpl}, dict(d, pacing=3), &amp;quot;x&amp;quot;])&lt;br /&gt;
    k = d.get(&amp;quot;kind&amp;quot;) if type(d) is dict else None&lt;br /&gt;
    ident = (r_doi() if k in (&amp;quot;DOI-RA&amp;quot;, &amp;quot;DOI-CROSSREF&amp;quot;, &amp;quot;DOI-DATACITE&amp;quot;) else r_arxiv() if k == &amp;quot;ARXIV&amp;quot;&lt;br /&gt;
             else r_pmid() if k == &amp;quot;PMID&amp;quot; else r_pmcid())&lt;br /&gt;
    if rnd.random() &amp;lt; 0.15:&lt;br /&gt;
        ident = pick([r_doi(), r_arxiv(), r_pmid(), r_pmcid()])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.4:&lt;br /&gt;
        ident = pick(GOOD_DOI if k in (&amp;quot;DOI-RA&amp;quot;, &amp;quot;DOI-CROSSREF&amp;quot;, &amp;quot;DOI-DATACITE&amp;quot;) else GOOD_ARXIV if k == &amp;quot;ARXIV&amp;quot;&lt;br /&gt;
                     else GOOD_PMID if k == &amp;quot;PMID&amp;quot; else GOOD_PMCID)&lt;br /&gt;
    return {&amp;quot;declaration&amp;quot;: d, &amp;quot;identifier&amp;quot;: ident}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_fields(item, ids, kind):&lt;br /&gt;
    f = {&amp;quot;year&amp;quot;: None, &amp;quot;title&amp;quot;: None, &amp;quot;subtitle&amp;quot;: None, &amp;quot;family&amp;quot;: None, &amp;quot;name_form&amp;quot;: None, &amp;quot;doi&amp;quot;: None,&lt;br /&gt;
         &amp;quot;issn&amp;quot;: [], &amp;quot;isbn&amp;quot;: [], &amp;quot;arxiv_doi&amp;quot;: None, &amp;quot;arxiv_id&amp;quot;: None}&lt;br /&gt;
    if type(item) is dict:&lt;br /&gt;
        if rnd.random() &amp;lt; 0.8 and type(item.get(&amp;quot;issued&amp;quot;)) is dict:&lt;br /&gt;
            try:&lt;br /&gt;
                f[&amp;quot;year&amp;quot;] = item[&amp;quot;issued&amp;quot;][&amp;quot;date-parts&amp;quot;][0][0] + pick([0, 0, 0, 1])&lt;br /&gt;
            except (KeyError, IndexError, TypeError):&lt;br /&gt;
                f[&amp;quot;year&amp;quot;] = 1998&lt;br /&gt;
        if rnd.random() &amp;lt; 0.85 and type(item.get(&amp;quot;title&amp;quot;)) is str:&lt;br /&gt;
            t = item[&amp;quot;title&amp;quot;]&lt;br /&gt;
            f[&amp;quot;title&amp;quot;] = pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;RETRACTED: &amp;quot;, &amp;quot;&amp;lt;i&amp;gt;&amp;quot;]) + t + pick([&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;.&amp;quot;, &amp;quot; x&amp;quot;])&lt;br /&gt;
            if rnd.random() &amp;lt; 0.2 and &amp;quot;:&amp;quot; in t:&lt;br /&gt;
                a, b = t.split(&amp;quot;:&amp;quot;, 1)&lt;br /&gt;
                f[&amp;quot;title&amp;quot;], f[&amp;quot;subtitle&amp;quot;] = a, b&lt;br /&gt;
        names = item.get(&amp;quot;author&amp;quot;) or item.get(&amp;quot;editor&amp;quot;)&lt;br /&gt;
        if rnd.random() &amp;lt; 0.85 and type(names) is list and names and type(names[0]) is dict:&lt;br /&gt;
            nm = names[0]&lt;br /&gt;
            fam = nm.get(&amp;quot;family&amp;quot;) or nm.get(&amp;quot;literal&amp;quot;) or &amp;quot;&amp;quot;&lt;br /&gt;
            form = pick([&amp;quot;FAMILY&amp;quot;, &amp;quot;GIVEN FAMILY&amp;quot;, &amp;quot;FAMILY INITIALS&amp;quot;])&lt;br /&gt;
            if kind == &amp;quot;ARXIV&amp;quot;:&lt;br /&gt;
                form = &amp;quot;GIVEN FAMILY&amp;quot;&lt;br /&gt;
            if kind in (&amp;quot;PMID&amp;quot;, &amp;quot;PMCID&amp;quot;):&lt;br /&gt;
                form = &amp;quot;FAMILY INITIALS&amp;quot;&lt;br /&gt;
            fam = fam if type(fam) is str else &amp;quot;x&amp;quot;&lt;br /&gt;
            f[&amp;quot;family&amp;quot;] = (fam if form == &amp;quot;FAMILY&amp;quot; else&lt;br /&gt;
                           pick([&amp;quot;Sara &amp;quot;, &amp;quot;&amp;quot;, &amp;quot;x&amp;quot;]) + fam if form == &amp;quot;GIVEN FAMILY&amp;quot; else&lt;br /&gt;
                           fam + pick([&amp;quot; AJ&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;x&amp;quot;]))&lt;br /&gt;
            f[&amp;quot;name_form&amp;quot;] = form&lt;br /&gt;
    if rnd.random() &amp;lt; 0.7 and &amp;quot;DOI&amp;quot; in ids:&lt;br /&gt;
        f[&amp;quot;doi&amp;quot;] = ids[&amp;quot;DOI&amp;quot;] if rnd.random() &amp;lt; 0.8 else r_doi()&lt;br /&gt;
        if type(f[&amp;quot;doi&amp;quot;]) is str and rnd.random() &amp;lt; 0.5:&lt;br /&gt;
            f[&amp;quot;doi&amp;quot;] = f[&amp;quot;doi&amp;quot;].lower()&lt;br /&gt;
    if rnd.random() &amp;lt; 0.3 and &amp;quot;ISSN&amp;quot; in ids:&lt;br /&gt;
        f[&amp;quot;issn&amp;quot;] = [ids[&amp;quot;ISSN&amp;quot;]] + ([r_issn()] if rnd.random() &amp;lt; 0.5 else [])&lt;br /&gt;
    elif rnd.random() &amp;lt; 0.2:&lt;br /&gt;
        f[&amp;quot;issn&amp;quot;] = [r_issn()]&lt;br /&gt;
    if rnd.random() &amp;lt; 0.3 and &amp;quot;ISBN&amp;quot; in ids:&lt;br /&gt;
        f[&amp;quot;isbn&amp;quot;] = [ids[&amp;quot;ISBN&amp;quot;]]&lt;br /&gt;
    if kind == &amp;quot;ARXIV&amp;quot; and rnd.random() &amp;lt; 0.5:&lt;br /&gt;
        v = ids.get(&amp;quot;DOI&amp;quot;) if &amp;quot;DOI&amp;quot; in ids and rnd.random() &amp;lt; 0.7 else r_doi()&lt;br /&gt;
        f[&amp;quot;arxiv_doi&amp;quot;] = (pick([&amp;quot;https://doi.org/&amp;quot;, &amp;quot;&amp;quot;]) + v) if type(v) is str else v&lt;br /&gt;
    if kind == &amp;quot;DOI&amp;quot; and rnd.random() &amp;lt; 0.4:&lt;br /&gt;
        f[&amp;quot;arxiv_id&amp;quot;] = ids.get(&amp;quot;ARXIV&amp;quot;, pick(GOOD_ARXIV)) if rnd.random() &amp;lt; 0.7 else r_arxiv()&lt;br /&gt;
    for k in (&amp;quot;issn&amp;quot;, &amp;quot;isbn&amp;quot;):&lt;br /&gt;
        f[k] = [x for x in f[k] if type(x) is str and x != &amp;quot;&amp;quot;]&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        f[pick([&amp;quot;year&amp;quot;, &amp;quot;title&amp;quot;, &amp;quot;family&amp;quot;, &amp;quot;name_form&amp;quot;])] = pick([5, &amp;quot;x&amp;quot;, None, True])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.01:&lt;br /&gt;
        del f[pick(list(f))]&lt;br /&gt;
    return f&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_notice():&lt;br /&gt;
    if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
        return pick([{&amp;quot;type&amp;quot;: &amp;quot;x&amp;quot;}, {&amp;quot;type&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;identifier&amp;quot;: None, &amp;quot;date&amp;quot;: None, &amp;quot;source&amp;quot;: &amp;quot;x&amp;quot;}, &amp;quot;x&amp;quot;,&lt;br /&gt;
                     {&amp;quot;type&amp;quot;: &amp;quot;retraction&amp;quot;, &amp;quot;identifier&amp;quot;: &amp;quot;a b&amp;quot;, &amp;quot;date&amp;quot;: None, &amp;quot;source&amp;quot;: &amp;quot;x&amp;quot;},&lt;br /&gt;
                     {&amp;quot;type&amp;quot;: &amp;quot;retraction&amp;quot;, &amp;quot;identifier&amp;quot;: &amp;quot;-&amp;quot;, &amp;quot;date&amp;quot;: None, &amp;quot;source&amp;quot;: &amp;quot;x&amp;quot;},&lt;br /&gt;
                     {&amp;quot;type&amp;quot;: &amp;quot;retraction&amp;quot;, &amp;quot;identifier&amp;quot;: None, &amp;quot;date&amp;quot;: &amp;quot;2010-02-30&amp;quot;, &amp;quot;source&amp;quot;: &amp;quot;x&amp;quot;}])&lt;br /&gt;
    return {&amp;quot;type&amp;quot;: pick([&amp;quot;retraction&amp;quot;, &amp;quot;correction&amp;quot;, &amp;quot;expression_of_concern&amp;quot;, &amp;quot;Reinstatement&amp;quot;,&lt;br /&gt;
                          &amp;quot;Retracted Publication&amp;quot;, &amp;quot;Retraction in&amp;quot;, &amp;quot;withdrawn&amp;quot;, &amp;quot;Partial-Retraction&amp;quot;, r_safe()]),&lt;br /&gt;
            &amp;quot;identifier&amp;quot;: pick([None, &amp;quot;10.1016/s0140-6736(10)60175-4&amp;quot;, &amp;quot;20137807&amp;quot;, &amp;quot;10.1/X&amp;quot;]),&lt;br /&gt;
            &amp;quot;date&amp;quot;: pick([None, &amp;quot;2010-02-06&amp;quot;, &amp;quot;2026-03-01&amp;quot;, &amp;quot;2024-02-29&amp;quot;]),&lt;br /&gt;
            &amp;quot;source&amp;quot;: pick([&amp;quot;retraction-watch&amp;quot;, &amp;quot;publisher&amp;quot;, &amp;quot;pubmed&amp;quot;, &amp;quot;arxiv&amp;quot;])}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def r_record(kind, item, ids):&lt;br /&gt;
    ident = ids.get(kind, &amp;quot;x&amp;quot;)&lt;br /&gt;
    if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
        ident = pick([r_doi(), r_arxiv(), r_pmid(), r_pmcid(), ident.lower() if type(ident) is str else ident])&lt;br /&gt;
    st = pick([&amp;quot;FOUND&amp;quot;] * 8 + [&amp;quot;NOT FOUND&amp;quot;, &amp;quot;NOT FOUND&amp;quot;, &amp;quot;FAILED&amp;quot;, &amp;quot;FAILED&amp;quot;, None, &amp;quot;OK&amp;quot;])&lt;br /&gt;
    r = {&amp;quot;kind&amp;quot;: kind, &amp;quot;identifier&amp;quot;: ident}&lt;br /&gt;
    if kind == &amp;quot;DOI&amp;quot;:&lt;br /&gt;
        ra = pick([{&amp;quot;status&amp;quot;: &amp;quot;FOUND&amp;quot;, &amp;quot;ra&amp;quot;: &amp;quot;Crossref&amp;quot;}] * 6 + [{&amp;quot;status&amp;quot;: &amp;quot;FOUND&amp;quot;, &amp;quot;ra&amp;quot;: &amp;quot;DataCite&amp;quot;}] * 3&lt;br /&gt;
                  + [{&amp;quot;status&amp;quot;: &amp;quot;FOUND&amp;quot;, &amp;quot;ra&amp;quot;: &amp;quot;mEDRA&amp;quot;}] * 2 + [{&amp;quot;status&amp;quot;: &amp;quot;NOT FOUND&amp;quot;, &amp;quot;ra&amp;quot;: None}] * 2&lt;br /&gt;
                  + [{&amp;quot;status&amp;quot;: &amp;quot;FAILED&amp;quot;, &amp;quot;ra&amp;quot;: None}, {&amp;quot;status&amp;quot;: &amp;quot;FOUND&amp;quot;, &amp;quot;ra&amp;quot;: None},&lt;br /&gt;
                     {&amp;quot;status&amp;quot;: &amp;quot;NOT FOUND&amp;quot;, &amp;quot;ra&amp;quot;: &amp;quot;Crossref&amp;quot;}, &amp;quot;x&amp;quot;])&lt;br /&gt;
        r[&amp;quot;ra&amp;quot;] = ra&lt;br /&gt;
        reg = None&lt;br /&gt;
        if type(ra) is dict and ra[&amp;quot;status&amp;quot;] == &amp;quot;FOUND&amp;quot;:&lt;br /&gt;
            reg = {&amp;quot;Crossref&amp;quot;: &amp;quot;crossref&amp;quot;, &amp;quot;DataCite&amp;quot;: &amp;quot;datacite&amp;quot;}.get(ra[&amp;quot;ra&amp;quot;], pick([None, &amp;quot;generic&amp;quot;]))&lt;br /&gt;
        if rnd.random() &amp;lt; 0.02:&lt;br /&gt;
            reg = pick([&amp;quot;crossref&amp;quot;, &amp;quot;datacite&amp;quot;, &amp;quot;generic&amp;quot;, None, &amp;quot;arxiv&amp;quot;])&lt;br /&gt;
        r[&amp;quot;registry&amp;quot;] = reg&lt;br /&gt;
        r[&amp;quot;status&amp;quot;] = st if reg is not None else (None if rnd.random() &amp;lt; 0.9 else st)&lt;br /&gt;
    else:&lt;br /&gt;
        r[&amp;quot;registry&amp;quot;] = (&amp;quot;arxiv&amp;quot; if kind == &amp;quot;ARXIV&amp;quot; else &amp;quot;pubmed&amp;quot;) if rnd.random() &amp;lt; 0.98 else pick([&amp;quot;crossref&amp;quot;, None])&lt;br /&gt;
        r[&amp;quot;status&amp;quot;] = st&lt;br /&gt;
    if r[&amp;quot;status&amp;quot;] == &amp;quot;FOUND&amp;quot;:&lt;br /&gt;
        r[&amp;quot;fields&amp;quot;] = r_fields(item, ids, kind)&lt;br /&gt;
        r[&amp;quot;notices&amp;quot;] = [r_notice() for _ in range(rnd.randint(0, 3))]&lt;br /&gt;
    else:&lt;br /&gt;
        r[&amp;quot;fields&amp;quot;] = None if rnd.random() &amp;lt; 0.95 else r_fields(item, ids, kind)&lt;br /&gt;
        r[&amp;quot;notices&amp;quot;] = [] if rnd.random() &amp;lt; 0.95 else [r_notice()]&lt;br /&gt;
    if rnd.random() &amp;lt; 0.01:&lt;br /&gt;
        del r[pick(list(r))]&lt;br /&gt;
    return r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_compare():&lt;br /&gt;
    item = r_item()&lt;br /&gt;
    ids = r_entry_ids(item)&lt;br /&gt;
    recs = []&lt;br /&gt;
    if type(ids) is dict:&lt;br /&gt;
        for k in (&amp;quot;DOI&amp;quot;, &amp;quot;ARXIV&amp;quot;, &amp;quot;PMID&amp;quot;, &amp;quot;PMCID&amp;quot;):&lt;br /&gt;
            if k in ids and rnd.random() &amp;lt; 0.85:&lt;br /&gt;
                recs.append(r_record(k, item, ids))&lt;br /&gt;
        if rnd.random() &amp;lt; 0.05:&lt;br /&gt;
            recs.append(r_record(pick([&amp;quot;DOI&amp;quot;, &amp;quot;ARXIV&amp;quot;, &amp;quot;PMID&amp;quot;, &amp;quot;PMCID&amp;quot;]), item, ids))&lt;br /&gt;
    e = {&amp;quot;item&amp;quot;: item, &amp;quot;identifiers&amp;quot;: ids}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.01:&lt;br /&gt;
        e = pick([{&amp;quot;item&amp;quot;: item, &amp;quot;identifiers&amp;quot;: ids, &amp;quot;supersedes&amp;quot;: None}, &amp;quot;x&amp;quot;])&lt;br /&gt;
    if rnd.random() &amp;lt; 0.01:&lt;br /&gt;
        recs = pick([&amp;quot;x&amp;quot;, None])&lt;br /&gt;
    return {&amp;quot;entry&amp;quot;: e, &amp;quot;records&amp;quot;: recs,&lt;br /&gt;
            &amp;quot;date&amp;quot;: pick([&amp;quot;2026-09-26&amp;quot;] * 40 + [&amp;quot;2024-02-29&amp;quot;] * 4 + [&amp;quot;2023-02-29&amp;quot;, &amp;quot;2026-13-01&amp;quot;, &amp;quot;x&amp;quot;, 5])}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_withdrawn():&lt;br /&gt;
    return {&amp;quot;comment&amp;quot;: pick([r_text(lo=0, hi=12), None, &amp;quot;withdrawn&amp;quot;, &amp;quot;This paper has been Withdrawn&amp;quot;,&lt;br /&gt;
                             &amp;quot;unwithdrawn&amp;quot;, &amp;quot;withdrawn5&amp;quot;, &amp;quot;\u00e9withdrawn&amp;quot;])}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BIBS = [&amp;quot;RR-BIB1&amp;quot;, &amp;quot;RR-BIB10&amp;quot;, &amp;quot;RR-BIB2&amp;quot;, &amp;quot;RR-BIB3&amp;quot;, &amp;quot;RR-BIB4&amp;quot;, &amp;quot;RR-BIB5&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_view():&lt;br /&gt;
    ents = []&lt;br /&gt;
    for b in BIBS:&lt;br /&gt;
        if rnd.random() &amp;lt; 0.8:&lt;br /&gt;
            ents.append({&amp;quot;bib_id&amp;quot;: b, &amp;quot;check&amp;quot;: pick(RESULTS * 8 + (&amp;quot;OK&amp;quot;,)) if rnd.random() &amp;lt; 0.995 else 5,&lt;br /&gt;
                         &amp;quot;notices&amp;quot;: pick([0, 0, 0, 0, 1, 2, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0, 1] * 4 + [-1]), &amp;quot;primary&amp;quot;: pick([True, True, False])})&lt;br /&gt;
    if rnd.random() &amp;lt; 0.015:&lt;br /&gt;
        ents.append(dict(ents[0]) if ents else {&amp;quot;bib_id&amp;quot;: &amp;quot;RR-BIB1&amp;quot;})&lt;br /&gt;
    finds = []&lt;br /&gt;
    have = [e[&amp;quot;bib_id&amp;quot;] for e in ents if type(e) is dict and &amp;quot;bib_id&amp;quot; in e] or [&amp;quot;RR-BIB1&amp;quot;]&lt;br /&gt;
    for _ in range(rnd.randint(0, 4)):&lt;br /&gt;
        finds.append({&amp;quot;bib_id&amp;quot;: pick(have * 20 + [&amp;quot;RR-BIB9&amp;quot;]),&lt;br /&gt;
                      &amp;quot;result&amp;quot;: pick(([&amp;quot;SOURCE AGREES&amp;quot;, &amp;quot;SOURCE DIFFERS&amp;quot;] + [&amp;quot;NOT FOUND&amp;quot;] * 12) * 3 + [&amp;quot;x&amp;quot;]),&lt;br /&gt;
                      &amp;quot;agreed&amp;quot;: pick([True, True, False]) if rnd.random() &amp;lt; 0.99 else &amp;quot;yes&amp;quot;})&lt;br /&gt;
    recs = []&lt;br /&gt;
    for i in range(rnd.randint(0, 6)):&lt;br /&gt;
        have = [e[&amp;quot;bib_id&amp;quot;] for e in ents if type(e) is dict and &amp;quot;bib_id&amp;quot; in e]&lt;br /&gt;
        lit = [b for b in (have if rnd.random() &amp;lt; 0.9 else BIBS) if rnd.random() &amp;lt; 0.4] + ([&amp;quot;RR-BIB9&amp;quot;] if rnd.random() &amp;lt; 0.02 else [])&lt;br /&gt;
        if rnd.random() &amp;lt; 0.015 and lit:&lt;br /&gt;
            lit.append(lit[0])&lt;br /&gt;
        recs.append({&amp;quot;id&amp;quot;: pick([&amp;quot;RR-%d&amp;quot; % i, &amp;quot;RR-%d&amp;quot; % (i + 20), &amp;quot;RR-%d&amp;quot; % (i + 30)] * 4 + [&amp;quot;RR-1&amp;quot;, &amp;quot;RR-10&amp;quot;, &amp;quot;RR-2&amp;quot;, &amp;quot;RR-7&amp;quot;]),&lt;br /&gt;
                     &amp;quot;status&amp;quot;: pick([&amp;quot;PROVISIONAL&amp;quot;] * 6 + [&amp;quot;ESTABLISHED&amp;quot;] * 3 + [&amp;quot;STRUCK&amp;quot;, &amp;quot;HELD&amp;quot;, &amp;quot;REFUTED&amp;quot;, &amp;quot;&amp;quot;]),&lt;br /&gt;
                     &amp;quot;literature&amp;quot;: lit})&lt;br /&gt;
    if rnd.random() &amp;lt; 0.015:&lt;br /&gt;
        recs.append(pick([{&amp;quot;id&amp;quot;: &amp;quot;RR-1&amp;quot;, &amp;quot;literature&amp;quot;: []}, &amp;quot;x&amp;quot;]))&lt;br /&gt;
    args = {&amp;quot;records&amp;quot;: recs, &amp;quot;entries&amp;quot;: ents, &amp;quot;findings&amp;quot;: finds}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.015:&lt;br /&gt;
        args[pick(list(args))] = pick([&amp;quot;x&amp;quot;, None, {}])&lt;br /&gt;
    return args&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gen_holdlist():&lt;br /&gt;
    ents = []&lt;br /&gt;
    for b in BIBS:&lt;br /&gt;
        if rnd.random() &amp;lt; 0.8:&lt;br /&gt;
            ents.append({&amp;quot;bib_id&amp;quot;: b, &amp;quot;proposed_by&amp;quot;: pick([&amp;quot;acct&amp;quot;, &amp;quot;other&amp;quot;, &amp;quot;lead&amp;quot;]),&lt;br /&gt;
                         &amp;quot;landed_by&amp;quot;: pick([&amp;quot;acct&amp;quot;, &amp;quot;other&amp;quot;, &amp;quot;lead&amp;quot;]), &amp;quot;block_id&amp;quot;: pick([&amp;quot;B1&amp;quot;, &amp;quot;B2&amp;quot;, &amp;quot;B3&amp;quot;, &amp;quot;B4&amp;quot;])})&lt;br /&gt;
    if rnd.random() &amp;lt; 0.03:&lt;br /&gt;
        ents.append(pick([dict(ents[0]) if ents else {&amp;quot;bib_id&amp;quot;: &amp;quot;x&amp;quot;}, {&amp;quot;bib_id&amp;quot;: &amp;quot;RR-BIB1&amp;quot;, &amp;quot;proposed_by&amp;quot;: &amp;quot;acct&amp;quot;, &amp;quot;block_id&amp;quot;: &amp;quot;B2&amp;quot;}, &amp;quot;x&amp;quot;]))&lt;br /&gt;
    checks = {}&lt;br /&gt;
    for b in BIBS:&lt;br /&gt;
        if rnd.random() &amp;lt; 0.97:&lt;br /&gt;
            checks[b] = pick(RESULTS * 12 + (&amp;quot;OK&amp;quot;,)) if rnd.random() &amp;lt; 0.995 else 5&lt;br /&gt;
    args = {&amp;quot;entries&amp;quot;: ents, &amp;quot;account&amp;quot;: pick([&amp;quot;acct&amp;quot;] * 30 + [&amp;quot;other&amp;quot;, &amp;quot;other&amp;quot;, &amp;quot;nobody&amp;quot;, &amp;quot;&amp;quot;, 5]),&lt;br /&gt;
            &amp;quot;blocks&amp;quot;: [b for b in [&amp;quot;B1&amp;quot;, &amp;quot;B2&amp;quot;, &amp;quot;B3&amp;quot;, &amp;quot;B4&amp;quot;] if rnd.random() &amp;lt; 0.6], &amp;quot;checks&amp;quot;: checks}&lt;br /&gt;
    if rnd.random() &amp;lt; 0.03:&lt;br /&gt;
        args[pick(list(args))] = pick([&amp;quot;x&amp;quot;, None, [], {}])&lt;br /&gt;
    return args&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GEN = [(&amp;quot;doi&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_doi()}), (&amp;quot;shape&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_doi_core() if rnd.random() &amp;lt; 0.9 else r_text()}),&lt;br /&gt;
       (&amp;quot;arxiv&amp;quot;, lambda: {&amp;quot;text&amp;quot;: gv(GOOD_ARXIV, r_arxiv, 0.3)}), (&amp;quot;isbn&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_isbn()}),&lt;br /&gt;
       (&amp;quot;issn&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_issn()}), (&amp;quot;pmid&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_pmid()}),&lt;br /&gt;
       (&amp;quot;pmcid&amp;quot;, lambda: {&amp;quot;text&amp;quot;: r_pmcid()}), (&amp;quot;key&amp;quot;, r_key), (&amp;quot;dupe&amp;quot;, lambda: {&amp;quot;identifiers&amp;quot;: r_ids()}),&lt;br /&gt;
       (&amp;quot;check&amp;quot;, gen_check), (&amp;quot;canon&amp;quot;, gen_canon), (&amp;quot;preimage&amp;quot;, gen_canon), (&amp;quot;url&amp;quot;, gen_url),&lt;br /&gt;
       (&amp;quot;compare&amp;quot;, gen_compare), (&amp;quot;withdrawn&amp;quot;, gen_withdrawn), (&amp;quot;view&amp;quot;, gen_view), (&amp;quot;holdlist&amp;quot;, gen_holdlist)]&lt;br /&gt;
cases = []&lt;br /&gt;
for fn, g in GEN:&lt;br /&gt;
    for _ in range(count):&lt;br /&gt;
        cases.append({&amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: g()})&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)&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_biblio.php&amp;quot;), CASES_PATH], capture_output=True, text=True,&lt;br /&gt;
                                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;
assert len(php) == len(py)&lt;br /&gt;
first = None&lt;br /&gt;
total = 0&lt;br /&gt;
for fn, _ in GEN:&lt;br /&gt;
    idx = [i for i, c in enumerate(cases) if c[&amp;quot;fn&amp;quot;] == fn]&lt;br /&gt;
    diffs = [i for i in idx if py[i] != php[i]]&lt;br /&gt;
    total += len(diffs)&lt;br /&gt;
    cover = {}&lt;br /&gt;
    for i in idx:&lt;br /&gt;
        out = py[i]&lt;br /&gt;
        if out.startswith(&amp;quot;ERROR&amp;quot;):&lt;br /&gt;
            keys = [out[6:].split(&amp;quot;:&amp;quot;)[0] if fn in (&amp;quot;check&amp;quot;, &amp;quot;canon&amp;quot;, &amp;quot;preimage&amp;quot;, &amp;quot;dupe&amp;quot;) else &amp;quot;ERROR&amp;quot;]&lt;br /&gt;
        elif fn == &amp;quot;doi&amp;quot;:&lt;br /&gt;
            keys = [out.split(&amp;quot;|&amp;quot;)[1]]&lt;br /&gt;
        elif fn in (&amp;quot;shape&amp;quot;, &amp;quot;withdrawn&amp;quot;):&lt;br /&gt;
            keys = [out.split(&amp;quot;|&amp;quot;)[1]]&lt;br /&gt;
        elif fn == &amp;quot;arxiv&amp;quot;:&lt;br /&gt;
            keys = [out.split(&amp;quot;|&amp;quot;)[4] + (&amp;quot;+v&amp;quot; if out.split(&amp;quot;|&amp;quot;)[2] != &amp;quot;0&amp;quot; else &amp;quot;&amp;quot;)]&lt;br /&gt;
        elif fn == &amp;quot;isbn&amp;quot;:&lt;br /&gt;
            keys = [&amp;quot;given&amp;quot; + out.split(&amp;quot;|&amp;quot;)[2]]&lt;br /&gt;
        elif fn == &amp;quot;dupe&amp;quot;:&lt;br /&gt;
            keys = [out.split(&amp;quot;|&amp;quot;)[1]]&lt;br /&gt;
        elif fn == &amp;quot;check&amp;quot;:&lt;br /&gt;
            keys = [&amp;quot;OK:&amp;quot; + out.split(&amp;quot;\n&amp;quot;)[0].split(&amp;quot;|&amp;quot;)[2]]&lt;br /&gt;
        elif fn == &amp;quot;compare&amp;quot;:&lt;br /&gt;
            keys = [out.split(&amp;quot;\n&amp;quot;)[0][8:]]&lt;br /&gt;
            keys += sorted({ln.split(&amp;quot;|&amp;quot;)[2] for ln in out.split(&amp;quot;\n&amp;quot;)[1:] if ln[:1] in &amp;quot;DAPI&amp;quot;})&lt;br /&gt;
            keys += [&amp;quot;NOTICES&amp;quot; if &amp;quot;\nnotice|&amp;quot; in out else &amp;quot;no-notice&amp;quot;]&lt;br /&gt;
        elif fn == &amp;quot;view&amp;quot;:&lt;br /&gt;
            keys = [&amp;quot;n&amp;quot; + out.split(&amp;quot;\n&amp;quot;)[0][5:]]&lt;br /&gt;
        elif fn == &amp;quot;holdlist&amp;quot;:&lt;br /&gt;
            keys = [&amp;quot;n&amp;quot; + out.split(&amp;quot;\n&amp;quot;)[0][9:]]&lt;br /&gt;
        else:&lt;br /&gt;
            keys = [&amp;quot;OK&amp;quot;]&lt;br /&gt;
        for k in keys:&lt;br /&gt;
            cover[k] = cover.get(k, 0) + 1&lt;br /&gt;
    print(&amp;quot;seed %d %-9s cases %d differences %d&amp;quot; % (seed, fn, len(idx), len(diffs)))&lt;br /&gt;
    print(&amp;quot;    &amp;quot; + &amp;quot;, &amp;quot;.join(&amp;quot;%s %d&amp;quot; % (k, cover[k]) for k in sorted(cover)))&lt;br /&gt;
    if diffs and first is None:&lt;br /&gt;
        first = diffs[0]&lt;br /&gt;
print(&amp;quot;seed %d total differences %d&amp;quot; % (seed, total))&lt;br /&gt;
if first is not None:&lt;br /&gt;
    print(json.dumps(cases[first], ensure_ascii=True))&lt;br /&gt;
    print(py[first])&lt;br /&gt;
    print(&amp;quot;---&amp;quot;)&lt;br /&gt;
    print(php[first])&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>