aboutsummaryrefslogtreecommitdiff
path: root/analysis
diff options
context:
space:
mode:
authorJ08nY2025-08-02 12:08:01 +0200
committerJ08nY2025-08-02 12:08:01 +0200
commit41c1ae528d34493b43f808208aee024ceea052e7 (patch)
treea0ae075e88a84da8df7f481e6e7c653ac554bc16 /analysis
parent47a09e109462a424979230f0cac819124a166682 (diff)
downloadECTester-41c1ae528d34493b43f808208aee024ceea052e7.tar.gz
ECTester-41c1ae528d34493b43f808208aee024ceea052e7.tar.zst
ECTester-41c1ae528d34493b43f808208aee024ceea052e7.zip
Speed up multiples generation.
Make each worker write in a tempfile. Removes the unpickling bottleneck of the parent that is scheduling the workers.
Diffstat (limited to 'analysis')
-rw-r--r--analysis/scalarmults/common.py6
-rw-r--r--analysis/scalarmults/simulate.ipynb559
2 files changed, 540 insertions, 25 deletions
diff --git a/analysis/scalarmults/common.py b/analysis/scalarmults/common.py
index c2369f6..f92aac5 100644
--- a/analysis/scalarmults/common.py
+++ b/analysis/scalarmults/common.py
@@ -176,6 +176,12 @@ class MultIdent:
error_model = f"+{self.error_model}" if self.error_model is not None else ""
return f"{name}{args}{kwargs}{countermeasure}{error_model}"
+ def __getstate__(self):
+ state = self.__dict__.copy()
+ # Remove cached properties
+ state.pop("partial", None)
+ return state
+
def __lt__(self, other):
if not isinstance(other, MultIdent):
return NotImplemented
diff --git a/analysis/scalarmults/simulate.ipynb b/analysis/scalarmults/simulate.ipynb
index 4c06b10..dae8d06 100644
--- a/analysis/scalarmults/simulate.ipynb
+++ b/analysis/scalarmults/simulate.ipynb
@@ -10,7 +10,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"id": "b4386513-cc14-434b-a748-2863f8657452",
"metadata": {},
"outputs": [],
@@ -18,10 +18,11 @@
"import itertools\n",
"import gc\n",
"import glob\n",
+ "import hashlib\n",
"import pickle\n",
"import random\n",
"import re\n",
- "import hashlib\n",
+ "import tempfile\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\n",
@@ -61,7 +62,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "3463a7bd-34d8-458b-8ceb-dddf99de21dc",
"metadata": {},
"outputs": [],
@@ -78,10 +79,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"id": "170c11fc-86cf-4eb1-bf4e-b2e44b2d7ac5",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Scalar multipliers considered: 65\n",
+ "Scalar multipliers (with a single countermeasure) considered: 390\n",
+ "Error models considered: 32\n",
+ "Total configurations considered: 12480\n"
+ ]
+ }
+ ],
"source": [
"nmults = len(all_mults)\n",
"nmults_ctr = len(all_mults_with_ctr)\n",
@@ -104,7 +116,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"id": "4d5c7f10-618f-4612-b594-81d1607b0d1d",
"metadata": {},
"outputs": [],
@@ -115,15 +127,15 @@
"use_init = True\n",
"use_multiply = True\n",
"params = get_params(category, curve, \"projective\")\n",
- "num_workers = 20\n",
+ "num_workers = 30\n",
"bits = params.order.bit_length()\n",
- "samples = 100\n",
+ "samples = 1000\n",
"selected_mults = all_mults"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "07bc266d-35eb-4f6d-bdba-e9f6f66827f1",
"metadata": {},
"outputs": [],
@@ -154,7 +166,42 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
+ "id": "6f3e9ffa-19e8-46b2-a6ad-1d318d5c8e17",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def simulate_multiples_direct(mult: MultIdent,\n",
+ " params: DomainParameters,\n",
+ " bits: int,\n",
+ " fname: str,\n",
+ " samples: int = 100,\n",
+ " use_init: bool = True,\n",
+ " use_multiply: bool = True,\n",
+ " seed: bytes | None = None) -> MultResults:\n",
+ " results = []\n",
+ " if seed is not None:\n",
+ " random.seed(seed)\n",
+ "\n",
+ " # If no countermeasure is used, we have fully random scalars.\n",
+ " # Otherwise, fix one per chunk.\n",
+ " if mult.countermeasure is None:\n",
+ " scalars = [random.randint(1, 2**bits) for _ in range(samples)]\n",
+ " else:\n",
+ " one = random.randint(1, 2**bits)\n",
+ " scalars = [one for _ in range(samples)]\n",
+ "\n",
+ " for scalar in scalars:\n",
+ " results.append(multiple_graph(scalar, params, mult.klass, mult.partial, use_init, use_multiply))\n",
+ " result = MultResults(results, samples)\n",
+ " with open(fname, \"wb\") as f:\n",
+ " pickle.dump((mult, result), f)\n",
+ " return fname"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
"id": "64799c16-8113-4eff-81de-6a3e547eb5c5",
"metadata": {},
"outputs": [],
@@ -181,7 +228,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"id": "ac630a08-4120-41cf-b3bb-1827ef469542",
"metadata": {},
"outputs": [],
@@ -220,28 +267,439 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"id": "84359084-4116-436c-92cd-d43fdfeca842",
- "metadata": {
- "scrolled": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "b7c686d503d14bb69250747a881fe3f4",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Computing multiple graphs.: 0%| | 0/390 [00:00<?, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Got SlidingWindow_w:6,recode:LTR.\n",
+ "Got SlidingWindow_w:5,recode:LTR+bt.\n",
+ "Got SlidingWindow_w:4,recode:LTR.\n",
+ "Got SlidingWindow_w:3,recode:LTR+bt.\n",
+ "Got SlidingWindow_w:5,recode:LTR+multiplicative.\n",
+ "Got SlidingWindow_w:5,recode:LTR+gsr.\n",
+ "Got SlidingWindow_w:4,recode:LTR+multiplicative.\n",
+ "Got SlidingWindow_w:2,recode:LTR.\n",
+ "Got SlidingWindow_w:3,recode:LTR+multiplicative.\n",
+ "Got SlidingWindow_w:4,recode:LTR+gsr.\n",
+ "Got SlidingWindow_w:3,recode:LTR.\n",
+ "Got SlidingWindow_w:2,recode:LTR+bt.\n",
+ "Got SlidingWindow_w:3,recode:LTR+gsr.\n",
+ "Got SlidingWindow_w:6,recode:LTR+gsr.\n",
+ "Got SlidingWindow_w:5,recode:LTR.\n",
+ "Got SlidingWindow_w:4,recode:LTR+bt.\n",
+ "Got SlidingWindow_w:6,recode:LTR+bt.\n",
+ "Got SlidingWindow_w:4,recode:LTR+euclidean.\n",
+ "Got SlidingWindow_w:5,recode:LTR+euclidean.\n",
+ "Got SlidingWindow_w:3,recode:LTR+euclidean.\n",
+ "Got SlidingWindow_w:4,recode:LTR+additive.\n",
+ "Got SlidingWindow_w:2,recode:LTR+multiplicative.\n",
+ "Got SlidingWindow_w:6,recode:LTR+euclidean.\n",
+ "Got SlidingWindow_w:2,recode:LTR+gsr.\n",
+ "Got SlidingWindow_w:6,recode:LTR+multiplicative.\n",
+ "Got SlidingWindow_w:2,recode:RTL.\n",
+ "Got SlidingWindow_w:2,recode:LTR+euclidean.\n",
+ "Got SlidingWindow_w:6,recode:LTR+additive.\n",
+ "Got SlidingWindow_w:5,recode:LTR+additive.\n",
+ "Got SlidingWindow_w:3,recode:LTR+additive.\n",
+ "Got SlidingWindow_w:3,recode:RTL.\n",
+ "Got SlidingWindow_w:2,recode:RTL+gsr.\n",
+ "Got SlidingWindow_w:2,recode:RTL+bt.\n",
+ "Got SlidingWindow_w:3,recode:RTL+multiplicative.\n",
+ "Got SlidingWindow_w:3,recode:RTL+gsr.\n",
+ "Got SlidingWindow_w:3,recode:RTL+bt.\n",
+ "Got SlidingWindow_w:5,recode:RTL.\n",
+ "Got SlidingWindow_w:4,recode:RTL.\n",
+ "Got SlidingWindow_w:2,recode:LTR+additive.\n",
+ "Got SlidingWindow_w:2,recode:RTL+multiplicative.\n",
+ "Got SlidingWindow_w:4,recode:RTL+bt.\n",
+ "Got SlidingWindow_w:4,recode:RTL+gsr.\n",
+ "Got SlidingWindow_w:5,recode:RTL+gsr.\n",
+ "Got SlidingWindow_w:4,recode:RTL+multiplicative.\n",
+ "Got SlidingWindow_w:5,recode:RTL+multiplicative.\n",
+ "Got SlidingWindow_w:3,recode:RTL+euclidean.\n",
+ "Got SlidingWindow_w:6,recode:RTL.\n",
+ "Got SlidingWindow_w:5,recode:RTL+bt.\n",
+ "Got SlidingWindow_w:6,recode:RTL+gsr.\n",
+ "Got SlidingWindow_w:2,recode:RTL+euclidean.\n",
+ "Got SlidingWindow_w:5,recode:RTL+euclidean.\n",
+ "Got SlidingWindow_w:4,recode:RTL+euclidean.\n",
+ "Got SlidingWindow_w:3,recode:RTL+additive.\n",
+ "Got SlidingWindow_w:5,recode:RTL+additive.\n",
+ "Got SlidingWindow_w:6,recode:RTL+bt.\n",
+ "Got SlidingWindow_w:4,recode:RTL+additive.\n",
+ "Got FixedWindowLTR_m:2+gsr.\n",
+ "Got SlidingWindow_w:6,recode:RTL+multiplicative.\n",
+ "Got FixedWindowLTR_m:4.\n",
+ "Got SlidingWindow_w:2,recode:RTL+additive.\n",
+ "Got FixedWindowLTR_m:2.\n",
+ "Got FixedWindowLTR_m:2+bt.\n",
+ "Got SlidingWindow_w:6,recode:RTL+euclidean.\n",
+ "Got FixedWindowLTR_m:8.\n",
+ "Got FixedWindowLTR_m:2+multiplicative.\n",
+ "Got SlidingWindow_w:6,recode:RTL+additive.\n",
+ "Got FixedWindowLTR_m:4+bt.\n",
+ "Got FixedWindowLTR_m:8+bt.\n",
+ "Got FixedWindowLTR_m:4+gsr.\n",
+ "Got FixedWindowLTR_m:4+multiplicative.\n",
+ "Got FixedWindowLTR_m:16.\n",
+ "Got FixedWindowLTR_m:16+gsr.\n",
+ "Got FixedWindowLTR_m:8+gsr.\n",
+ "Got FixedWindowLTR_m:2+euclidean.\n",
+ "Got FixedWindowLTR_m:8+multiplicative.\n",
+ "Got FixedWindowLTR_m:16+multiplicative.\n",
+ "Got FixedWindowLTR_m:4+euclidean.\n",
+ "Got FixedWindowLTR_m:16+bt.\n",
+ "Got FixedWindowLTR_m:32+bt.\n",
+ "Got FixedWindowLTR_m:64.\n",
+ "Got FixedWindowLTR_m:32.\n",
+ "Got FixedWindowLTR_m:8+euclidean.\n",
+ "Got FixedWindowLTR_m:32+gsr.\n",
+ "Got FixedWindowLTR_m:2+additive.\n",
+ "Got FixedWindowLTR_m:32+multiplicative.\n",
+ "Got FixedWindowLTR_m:64+gsr.\n",
+ "Got FixedWindowLTR_m:8+additive.\n",
+ "Got FixedWindowLTR_m:4+additive.\n",
+ "Got FixedWindowLTR_m:16+additive.\n",
+ "Got FixedWindowLTR_m:64+bt.\n",
+ "Got FixedWindowLTR_m:16+euclidean.\n",
+ "Got FixedWindowLTR_m:32+euclidean.\n",
+ "Got FixedWindowLTR_m:64+multiplicative.\n",
+ "Got WindowBooth_w:3.\n",
+ "Got WindowBooth_w:2+gsr.\n",
+ "Got WindowBooth_w:2+bt.\n",
+ "Got WindowBooth_w:2.\n",
+ "Got FixedWindowLTR_m:32+additive.\n",
+ "Got WindowBooth_w:4.\n",
+ "Got WindowBooth_w:3+bt.\n",
+ "Got FixedWindowLTR_m:64+euclidean.\n",
+ "Got WindowBooth_w:3+gsr.\n",
+ "Got FixedWindowLTR_m:64+additive.\n",
+ "Got WindowBooth_w:4+gsr.\n",
+ "Got WindowBooth_w:5.\n",
+ "Got WindowBooth_w:5+gsr.\n",
+ "Got WindowBooth_w:2+multiplicative.\n",
+ "Got WindowBooth_w:6.\n",
+ "Got WindowBooth_w:3+multiplicative.\n",
+ "Got WindowBooth_w:5+bt.\n",
+ "Got WindowBooth_w:4+bt.\n",
+ "Got WindowBooth_w:6+gsr.\n",
+ "Got WindowBooth_w:6+bt.\n",
+ "Got WindowBooth_w:2+additive.\n",
+ "Got WindowNAF_w:2.\n",
+ "Got WindowBooth_w:4+multiplicative.\n",
+ "Got WindowBooth_w:5+multiplicative.\n",
+ "Got WindowBooth_w:3+euclidean.\n",
+ "Got WindowBooth_w:3+additive.\n",
+ "Got WindowBooth_w:4+additive.\n",
+ "Got WindowNAF_w:4.\n",
+ "Got WindowBooth_w:2+euclidean.\n",
+ "Got WindowNAF_w:2+gsr.\n",
+ "Got WindowNAF_w:3.\n",
+ "Got WindowNAF_w:2+multiplicative.\n",
+ "Got WindowBooth_w:5+additive.\n",
+ "Got WindowNAF_w:2+bt.\n",
+ "Got WindowNAF_w:3+bt.\n",
+ "Got WindowBooth_w:6+additive.\n",
+ "Got WindowNAF_w:3+gsr.\n",
+ "Got WindowNAF_w:3+multiplicative.\n",
+ "Got WindowBooth_w:6+multiplicative.\n",
+ "Got WindowNAF_w:4+gsr.\n",
+ "Got WindowNAF_w:4+bt.\n",
+ "Got WindowNAF_w:2+euclidean.\n",
+ "Got WindowBooth_w:4+euclidean.\n",
+ "Got WindowNAF_w:5.\n",
+ "Got WindowNAF_w:4+multiplicative.\n",
+ "Got WindowNAF_w:5+bt.\n",
+ "Got WindowNAF_w:6.\n",
+ "Got WindowNAF_w:6+bt.\n",
+ "Got WindowNAF_w:3+euclidean.\n",
+ "Got WindowNAF_w:5+gsr.\n",
+ "Got WindowBooth_w:5+euclidean.\n",
+ "Got WindowNAF_w:5+multiplicative.\n",
+ "Got WindowBooth_w:6+euclidean.\n",
+ "Got WindowNAF_w:6+gsr.\n",
+ "Got WindowNAF_w:3+additive.\n",
+ "Got WindowNAF_w:5+euclidean.\n",
+ "Got WindowNAF_w:2+additive.\n",
+ "Got BinaryNAF_always:False,dir:LTR+bt.\n",
+ "Got BinaryNAF_always:False,dir:LTR.\n",
+ "Got WindowNAF_w:4+euclidean.\n",
+ "Got BinaryNAF_always:False,dir:LTR+gsr.\n",
+ "Got WindowNAF_w:6+multiplicative.\n",
+ "Got WindowNAF_w:4+additive.\n",
+ "Got BinaryNAF_always:False,dir:RTL.\n",
+ "Got BinaryNAF_always:False,dir:LTR+multiplicative.\n",
+ "Got WindowNAF_w:6+euclidean.\n",
+ "Got WindowNAF_w:5+additive.\n",
+ "Got WindowNAF_w:6+additive.\n",
+ "Got BinaryNAF_always:False,dir:RTL+gsr.\n",
+ "Got BinaryNAF_always:False,dir:RTL+multiplicative.\n",
+ "Got BinaryNAF_always:True,dir:LTR.\n",
+ "Got BinaryNAF_always:False,dir:RTL+bt.\n",
+ "Got BinaryNAF_always:False,dir:LTR+euclidean.\n",
+ "Got BinaryNAF_always:True,dir:LTR+gsr.\n",
+ "Got BinaryNAF_always:False,dir:LTR+additive.\n",
+ "Got BinaryNAF_always:True,dir:LTR+multiplicative.\n",
+ "Got BinaryNAF_always:True,dir:RTL.\n",
+ "Got BinaryNAF_always:False,dir:RTL+euclidean.\n",
+ "Got LTR_always:False,complete:True+bt.\n",
+ "Got BinaryNAF_always:True,dir:LTR+bt.\n",
+ "Got LTR_always:False,complete:True+gsr.\n",
+ "Got LTR_always:False,complete:True.\n",
+ "Got BinaryNAF_always:True,dir:RTL+multiplicative.\n",
+ "Got BinaryNAF_always:True,dir:RTL+gsr.\n",
+ "Got BinaryNAF_always:True,dir:LTR+euclidean.\n",
+ "Got BinaryNAF_always:True,dir:RTL+bt.\n",
+ "Got BinaryNAF_always:False,dir:RTL+additive.\n",
+ "Got LTR_always:False,complete:False.\n",
+ "Got LTR_always:True,complete:True.\n",
+ "Got LTR_always:False,complete:False+gsr.\n",
+ "Got LTR_always:False,complete:True+multiplicative.\n",
+ "Got LTR_always:True,complete:True+gsr.\n",
+ "Got BinaryNAF_always:True,dir:LTR+additive.\n",
+ "Got LTR_always:False,complete:False+multiplicative.\n",
+ "Got LTR_always:False,complete:False+bt.\n",
+ "Got LTR_always:True,complete:True+bt.\n",
+ "Got LTR_always:False,complete:True+additive.\n",
+ "Got BinaryNAF_always:True,dir:RTL+euclidean.\n",
+ "Got BinaryNAF_always:True,dir:RTL+additive.\n",
+ "Got RTL_always:False,complete:True.\n",
+ "Got LTR_always:False,complete:False+euclidean.\n",
+ "Got LTR_always:True,complete:False.\n",
+ "Got LTR_always:True,complete:False+gsr.\n",
+ "Got LTR_always:False,complete:True+euclidean.\n",
+ "Got RTL_always:False,complete:True+bt.\n",
+ "Got RTL_always:False,complete:True+gsr.\n",
+ "Got LTR_always:True,complete:False+bt.\n",
+ "Got LTR_always:False,complete:False+additive.\n",
+ "Got LTR_always:True,complete:False+multiplicative.\n",
+ "Got RTL_always:False,complete:False.\n",
+ "Got LTR_always:True,complete:True+additive.\n",
+ "Got LTR_always:True,complete:True+multiplicative.\n",
+ "Got RTL_always:False,complete:False+gsr.\n",
+ "Got RTL_always:False,complete:True+multiplicative.\n",
+ "Got RTL_always:True,complete:True+gsr.\n",
+ "Got LTR_always:True,complete:False+euclidean.\n",
+ "Got RTL_always:True,complete:True.\n",
+ "Got RTL_always:True,complete:True+bt.\n",
+ "Got RTL_always:False,complete:False+bt.\n",
+ "Got RTL_always:False,complete:False+multiplicative.\n",
+ "Got RTL_always:True,complete:False.\n",
+ "Got RTL_always:False,complete:True+additive.\n",
+ "Got Coron.\n",
+ "Got RTL_always:True,complete:False+gsr.\n",
+ "Got RTL_always:False,complete:False+euclidean.\n",
+ "Got FullPrecomp_always:False,complete:True.\n",
+ "Got RTL_always:True,complete:False+multiplicative.\n",
+ "Got LTR_always:True,complete:False+additive.\n",
+ "Got RTL_always:True,complete:False+bt.\n",
+ "Got RTL_always:False,complete:False+additive.\n",
+ "Got RTL_always:False,complete:True+euclidean.\n",
+ "Got Coron+bt.\n",
+ "Got Coron+gsr.\n",
+ "Got FullPrecomp_always:False,complete:True+bt.\n",
+ "Got FullPrecomp_always:False,complete:True+gsr.\n",
+ "Got Coron+multiplicative.\n",
+ "Got RTL_always:True,complete:False+euclidean.\n",
+ "Got FullPrecomp_always:False,complete:True+additive.\n",
+ "Got FullPrecomp_always:True,complete:True.\n",
+ "Got FullPrecomp_always:True,complete:True+gsr.\n",
+ "Got RTL_always:True,complete:True+multiplicative.\n",
+ "Got RTL_always:True,complete:True+additive.\n",
+ "Got FullPrecomp_always:False,complete:False.\n",
+ "Got FullPrecomp_always:False,complete:False+gsr.\n",
+ "Got FullPrecomp_always:False,complete:True+multiplicative.\n",
+ "Got Coron+euclidean.\n",
+ "Got LTR_always:True,complete:True+euclidean.\n",
+ "Got FullPrecomp_always:False,complete:True+euclidean.\n",
+ "Got FullPrecomp_always:False,complete:False+additive.\n",
+ "Got FullPrecomp_always:True,complete:True+bt.\n",
+ "Got FullPrecomp_always:False,complete:False+bt.\n",
+ "Got RTL_always:True,complete:False+additive.\n",
+ "Got FullPrecomp_always:True,complete:False.\n",
+ "Got RTL_always:True,complete:True+euclidean.\n",
+ "Got Coron+additive.\n",
+ "Got FullPrecomp_always:True,complete:True+additive.\n",
+ "Got FullPrecomp_always:True,complete:False+bt.\n",
+ "Got FullPrecomp_always:False,complete:False+multiplicative.\n",
+ "Got FullPrecomp_always:True,complete:False+gsr.\n",
+ "Got SimpleLadder_complete:True.\n",
+ "Got FullPrecomp_always:False,complete:False+euclidean.\n",
+ "Got SimpleLadder_complete:True+gsr.\n",
+ "Got FullPrecomp_always:True,complete:False+multiplicative.\n",
+ "Got SimpleLadder_complete:False.\n",
+ "Got Comb_w:2,always:True.\n",
+ "Got SimpleLadder_complete:True+bt.\n",
+ "Got FullPrecomp_always:True,complete:False+additive.\n",
+ "Got SimpleLadder_complete:False+gsr.\n",
+ "Got SimpleLadder_complete:False+bt.\n",
+ "Got FullPrecomp_always:True,complete:True+multiplicative.\n",
+ "Got SimpleLadder_complete:False+multiplicative.\n",
+ "Got Comb_w:3,always:True.\n",
+ "Got FullPrecomp_always:True,complete:False+euclidean.\n",
+ "Got Comb_w:2,always:True+gsr.\n",
+ "Got Comb_w:3,always:True+bt.\n",
+ "Got Comb_w:2,always:True+bt.\n",
+ "Got Comb_w:3,always:True+gsr.\n",
+ "Got FullPrecomp_always:True,complete:True+euclidean.\n",
+ "Got Comb_w:4,always:True+gsr.\n",
+ "Got Comb_w:2,always:True+additive.\n",
+ "Got Comb_w:4,always:True.\n",
+ "Got SimpleLadder_complete:True+multiplicative.\n",
+ "Got SimpleLadder_complete:False+euclidean.\n",
+ "Got Comb_w:3,always:True+additive.\n",
+ "Got SimpleLadder_complete:True+additive.\n",
+ "Got Comb_w:4,always:True+bt.\n",
+ "Got Comb_w:2,always:True+multiplicative.\n",
+ "Got Comb_w:5,always:True.\n",
+ "Got Comb_w:5,always:True+gsr.\n",
+ "Got SimpleLadder_complete:False+additive.\n",
+ "Got Comb_w:5,always:True+additive.\n",
+ "Got Comb_w:4,always:True+additive.\n",
+ "Got Comb_w:5,always:True+bt.\n",
+ "Got Comb_w:6,always:True.\n",
+ "Got Comb_w:6,always:True+bt.\n",
+ "Got Comb_w:3,always:True+multiplicative.\n",
+ "Got Comb_w:6,always:True+gsr.\n",
+ "Got Comb_w:4,always:True+multiplicative.\n",
+ "Got Comb_w:2,always:False.\n",
+ "Got Comb_w:6,always:True+additive.\n",
+ "Got Comb_w:3,always:True+euclidean.\n",
+ "Got SimpleLadder_complete:True+euclidean.\n",
+ "Got Comb_w:3,always:False.\n",
+ "Got Comb_w:2,always:False+bt.\n",
+ "Got Comb_w:2,always:False+gsr.\n",
+ "Got Comb_w:3,always:False+gsr.\n",
+ "Got Comb_w:2,always:True+euclidean.\n",
+ "Got Comb_w:3,always:False+bt.\n",
+ "Got Comb_w:5,always:True+multiplicative.\n",
+ "Got Comb_w:4,always:False.\n",
+ "Got Comb_w:3,always:False+additive.\n",
+ "Got Comb_w:4,always:True+euclidean.\n",
+ "Got Comb_w:4,always:False+gsr.\n",
+ "Got Comb_w:5,always:True+euclidean.\n",
+ "Got Comb_w:2,always:False+additive.\n",
+ "Got Comb_w:4,always:False+bt.\n",
+ "Got Comb_w:4,always:False+additive.\n",
+ "Got Comb_w:6,always:True+multiplicative.\n",
+ "Got Comb_w:6,always:True+euclidean.\n",
+ "Got Comb_w:5,always:False+gsr.\n",
+ "Got Comb_w:5,always:False.\n",
+ "Got Comb_w:3,always:False+multiplicative.\n",
+ "Got Comb_w:2,always:False+multiplicative.\n",
+ "Got Comb_w:5,always:False+additive.\n",
+ "Got Comb_w:4,always:False+multiplicative.\n",
+ "Got Comb_w:5,always:False+bt.\n",
+ "Got BGMW_w:2,dir:LTR.\n",
+ "Got Comb_w:2,always:False+euclidean.\n",
+ "Got Comb_w:3,always:False+euclidean.\n",
+ "Got Comb_w:6,always:False+bt.\n",
+ "Got Comb_w:6,always:False.\n",
+ "Got Comb_w:6,always:False+additive.\n",
+ "Got BGMW_w:3,dir:LTR+gsr.\n",
+ "Got BGMW_w:2,dir:LTR+bt.\n",
+ "Got Comb_w:6,always:False+gsr.\n",
+ "Got BGMW_w:3,dir:LTR.\n",
+ "Got Comb_w:4,always:False+euclidean.\n",
+ "Got BGMW_w:2,dir:LTR+gsr.\n",
+ "Got BGMW_w:2,dir:LTR+additive.\n",
+ "Got BGMW_w:3,dir:LTR+bt.\n",
+ "Got Comb_w:5,always:False+multiplicative.\n",
+ "Got BGMW_w:3,dir:LTR+additive.\n",
+ "Got BGMW_w:4,dir:LTR.\n",
+ "Got BGMW_w:4,dir:LTR+gsr.\n",
+ "Got BGMW_w:4,dir:LTR+bt.\n",
+ "Got BGMW_w:5,dir:LTR+gsr.\n",
+ "Got BGMW_w:4,dir:LTR+additive.\n",
+ "Got BGMW_w:2,dir:LTR+multiplicative.\n",
+ "Got BGMW_w:5,dir:LTR.\n",
+ "Got BGMW_w:5,dir:LTR+bt.\n",
+ "Got BGMW_w:3,dir:LTR+multiplicative.\n",
+ "Got BGMW_w:3,dir:LTR+euclidean.\n",
+ "Got Comb_w:5,always:False+euclidean.\n",
+ "Got BGMW_w:2,dir:LTR+euclidean.\n",
+ "Got BGMW_w:6,dir:LTR.\n",
+ "Got BGMW_w:5,dir:LTR+additive.\n",
+ "Got BGMW_w:2,dir:RTL.\n",
+ "Got BGMW_w:4,dir:LTR+multiplicative.\n",
+ "Got BGMW_w:6,dir:LTR+gsr.\n",
+ "Got BGMW_w:2,dir:RTL+gsr.\n",
+ "Got BGMW_w:6,dir:LTR+bt.\n",
+ "Got BGMW_w:6,dir:LTR+additive.\n",
+ "Got Comb_w:6,always:False+multiplicative.\n",
+ "Got Comb_w:6,always:False+euclidean.\n",
+ "Got BGMW_w:2,dir:RTL+bt.\n",
+ "Got BGMW_w:2,dir:RTL+additive.\n",
+ "Got BGMW_w:3,dir:RTL.\n",
+ "Got BGMW_w:5,dir:LTR+multiplicative.\n",
+ "Got BGMW_w:3,dir:RTL+bt.\n",
+ "Got BGMW_w:4,dir:LTR+euclidean.\n",
+ "Got BGMW_w:3,dir:RTL+gsr.\n",
+ "Got BGMW_w:4,dir:RTL.\n",
+ "Got BGMW_w:6,dir:LTR+multiplicative.\n",
+ "Got BGMW_w:2,dir:RTL+multiplicative.\n",
+ "Got BGMW_w:4,dir:RTL+gsr.\n",
+ "Got BGMW_w:5,dir:LTR+euclidean.\n",
+ "Got BGMW_w:4,dir:RTL+bt.\n",
+ "Got BGMW_w:5,dir:RTL.\n",
+ "Got BGMW_w:2,dir:RTL+euclidean.\n",
+ "Got BGMW_w:5,dir:RTL+gsr.\n",
+ "Got BGMW_w:5,dir:RTL+bt.\n",
+ "Got BGMW_w:4,dir:RTL+additive.\n",
+ "Got BGMW_w:6,dir:LTR+euclidean.\n",
+ "Got BGMW_w:3,dir:RTL+additive.\n",
+ "Got BGMW_w:6,dir:RTL.\n",
+ "Got BGMW_w:3,dir:RTL+euclidean.\n",
+ "Got BGMW_w:5,dir:RTL+additive.\n",
+ "Got BGMW_w:4,dir:RTL+euclidean.\n",
+ "Got BGMW_w:3,dir:RTL+multiplicative.\n",
+ "Got BGMW_w:6,dir:RTL+gsr.\n",
+ "Got BGMW_w:4,dir:RTL+multiplicative.\n",
+ "Got BGMW_w:6,dir:RTL+bt.\n",
+ "Got BGMW_w:6,dir:RTL+additive.\n",
+ "Got BGMW_w:5,dir:RTL+euclidean.\n",
+ "Got BGMW_w:5,dir:RTL+multiplicative.\n",
+ "Got BGMW_w:6,dir:RTL+multiplicative.\n",
+ "Got BGMW_w:6,dir:RTL+euclidean.\n"
+ ]
+ }
+ ],
"source": [
"chunk_id = randbytes(4).hex()\n",
- "with TaskExecutor(max_workers=num_workers, initializer=silence) as pool:\n",
- " for mult in all_mults_with_ctr:\n",
+ "with TaskExecutor(max_workers=num_workers, initializer=silence) as pool, tempfile.TemporaryDirectory() as tmp_dirname:\n",
+ " tmp_path = Path(tmp_dirname)\n",
+ " for i, mult in enumerate(all_mults_with_ctr):\n",
" pool.submit_task(mult,\n",
- " simulate_multiples,\n",
- " mult, params, bits, samples, seed=chunk_id, use_init=use_init, use_multiply=use_multiply)\n",
+ " simulate_multiples_direct,\n",
+ " mult, params, bits, tmp_path / f\"{i}.pickle\", samples, seed=chunk_id, use_init=use_init, use_multiply=use_multiply)\n",
" with open(f\"multiples_{bits}_{'init' if use_init else 'noinit'}_{'mult' if use_multiply else 'nomult'}_chunk{chunk_id}.pickle\",\"wb\") as h:\n",
" for mult, future in tqdm(pool.as_completed(), desc=\"Computing multiple graphs.\", total=len(pool.tasks)):\n",
" print(f\"Got {mult}.\")\n",
" if error := future.exception():\n",
" print(\"Error!\", error)\n",
" continue\n",
- " res = future.result()\n",
- " pickle.dump((mult, res), h)\n",
- " gc.collect()"
+ " fpath = future.result()\n",
+ " with fpath.open(\"rb\") as f:\n",
+ " h.write(f.read())\n",
+ " fpath.unlink()"
]
},
{
@@ -257,7 +715,57 @@
"execution_count": null,
"id": "fbab8333-b8f1-4890-b38a-7bb34f5ffb02",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e682673036ab4053a6a2a5fc60194691",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Processing chunks: 0%| | 0/1 [00:00<?, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Processing chunk 66897617, no probmaps found.\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "5d0ac8b447b942f1bb6e31ee9efc9694",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Loading chunk 66897617.: 0%| | 0/390 [00:00<?, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "1dfe709e6f37433aaa4dd6d0c4823373",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Processing 66897617.: 0%| | 0/12480 [00:00<?, ?it/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"with TaskExecutor(max_workers=num_workers, initializer=silence) as pool:\n",
" for in_fname in tqdm(glob.glob(f\"multiples_{bits}_{'init' if use_init else 'noinit'}_{'mult' if use_multiply else 'nomult'}_chunk*.pickle\"), desc=\"Processing chunks\", smoothing=0):\n",
@@ -292,6 +800,7 @@
" f.truncate(last_end)\n",
" if not cfgs_todo:\n",
" print(f\"Chunk complete. Continuing...\")\n",
+ " continue\n",
" else:\n",
" print(f\"Chunk missing {len(cfgs_todo)} probmaps, computing...\")\n",
" else:\n",
@@ -414,7 +923,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.5"
+ "version": "3.12.3"
}
},
"nbformat": 4,