diff options
| author | J08nY | 2025-10-26 15:48:54 +0100 |
|---|---|---|
| committer | J08nY | 2025-10-26 15:48:54 +0100 |
| commit | 38547eab4803c81b51138dc529c7cca562f8dbfd (patch) | |
| tree | 4a353ed47b3546c0773f3f9fc4203bfc226d98d2 | |
| parent | 581253817dc2eabfb88d2d7ca75d2174eafe5c4d (diff) | |
| download | ECTester-38547eab4803c81b51138dc529c7cca562f8dbfd.tar.gz ECTester-38547eab4803c81b51138dc529c7cca562f8dbfd.tar.zst ECTester-38547eab4803c81b51138dc529c7cca562f8dbfd.zip | |
| -rw-r--r-- | analysis/scalarmults/epare/__init__.py | 7 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/simulate.py | 1 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/standalone/README.md (renamed from analysis/scalarmults/standalone/README.md) | 4 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/standalone/__init__.py | 0 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/standalone/make_multiples.py (renamed from analysis/scalarmults/standalone/make_multiples.py) | 8 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/standalone/make_probs.py (renamed from analysis/scalarmults/standalone/make_probs.py) | 17 | ||||
| -rw-r--r-- | analysis/scalarmults/epare/standalone/merge_probs.py (renamed from analysis/scalarmults/standalone/merge_probs.py) | 15 |
7 files changed, 36 insertions, 16 deletions
diff --git a/analysis/scalarmults/epare/__init__.py b/analysis/scalarmults/epare/__init__.py index f6be00a..27cc0e4 100644 --- a/analysis/scalarmults/epare/__init__.py +++ b/analysis/scalarmults/epare/__init__.py @@ -31,6 +31,13 @@ from .config import MultIdent, CountermeasureIdent, Config from .error_model import ErrorModel, checks_add from .mult_results import MultResults from .prob_map import ProbMap +from .simulate import ( + simulate_multiples, + simulate_multiples_direct, + evaluate_multiples, + evaluate_multiples_direct, + evaluate_multiples_compressed +) diff --git a/analysis/scalarmults/epare/simulate.py b/analysis/scalarmults/epare/simulate.py index e4251a6..24e41b6 100644 --- a/analysis/scalarmults/epare/simulate.py +++ b/analysis/scalarmults/epare/simulate.py @@ -1,6 +1,7 @@ import hashlib import random import pickle +import sys from functools import partial diff --git a/analysis/scalarmults/standalone/README.md b/analysis/scalarmults/epare/standalone/README.md index f34187e..7b0b832 100644 --- a/analysis/scalarmults/standalone/README.md +++ b/analysis/scalarmults/epare/standalone/README.md @@ -5,8 +5,8 @@ Pick a random seed (hex) make_multiples (one 70GB file), one job -> multiples_<seed>.zpickle -make_probs (one small file), one job per multiples file - -> probs_<seed>.pickle +make_probs (one smaller file), one job per multiples file + -> probs_<seed>.zpickle merge_probs (one small file), one job for all -> merged.pickle diff --git a/analysis/scalarmults/epare/standalone/__init__.py b/analysis/scalarmults/epare/standalone/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/analysis/scalarmults/epare/standalone/__init__.py diff --git a/analysis/scalarmults/standalone/make_multiples.py b/analysis/scalarmults/epare/standalone/make_multiples.py index d922616..dbc9041 100644 --- a/analysis/scalarmults/standalone/make_multiples.py +++ b/analysis/scalarmults/epare/standalone/make_multiples.py @@ -19,7 +19,7 @@ from tqdm import tqdm from pyecsca.ec.params import get_params from pyecsca.misc.utils import TaskExecutor -from epare import all_configs, simulate_multiples_direct +from .. import all_configs, simulate_multiples_direct if sys.version_info >= (3, 14): @@ -41,8 +41,8 @@ def main(temp, workers, seed, samples): if temp is None: tmp = TemporaryDirectory() - temp = Path(tmp) - atexit.register(tmp.close) + temp = Path(tmp.name) + atexit.register(tmp.cleanup) output = f"multiples_{seed}.zpickle" @@ -64,7 +64,7 @@ def main(temp, workers, seed, samples): h.write(f.read()) fpath.unlink() if (i % 100) == 0: - time.sleep(5) + time.sleep(1) if __name__ == "__main__": diff --git a/analysis/scalarmults/standalone/make_probs.py b/analysis/scalarmults/epare/standalone/make_probs.py index 9228180..b92a215 100644 --- a/analysis/scalarmults/standalone/make_probs.py +++ b/analysis/scalarmults/epare/standalone/make_probs.py @@ -2,10 +2,12 @@ Make the probs file from a given multiples file. """ import atexit +import gc import pickle import sys from pathlib import Path +from tempfile import TemporaryDirectory import click @@ -13,7 +15,7 @@ from tqdm import tqdm from pyecsca.ec.params import get_params from pyecsca.misc.utils import TaskExecutor -from epare import all_error_models, evaluate_multiples_compressed, divisor_map +from .. import all_configs, all_error_models, evaluate_multiples_compressed, divisor_map if sys.version_info >= (3, 14): @@ -34,20 +36,21 @@ def main(temp, workers, seed): if temp is None: tmp = TemporaryDirectory() - temp = Path(tmp) - atexit.register(tmp.close) + temp = Path(tmp.name) + atexit.register(tmp.cleanup) use_init = True use_multiply = True in_path = Path(f"multiples_{seed}.zpickle") - out_path = Path(f"probs_{seed}.pickle") + out_path = Path(f"probs_{seed}.zpickle") - with zstd.open(in_path, "rb") as f, out_path.open("wb") as h: + with zstd.open(in_path, "rb") as f, zstd.open(out_path, "wb") as h, TaskExecutor(max_workers=workers) as pool, tqdm(total=len(all_configs), desc=f"Generating probability maps.", smoothing=0) as bar: while True: try: start = f.tell() - mult, vals = pickle.load(f) + bar.update(1) + mult, _ = pickle.load(f) for error_model in all_error_models: full = mult.with_error_model(error_model) # Pass the file name and offset to speed up computation start. @@ -75,4 +78,4 @@ def main(temp, workers, seed): if __name__ == "__main__": - pass
\ No newline at end of file + main()
\ No newline at end of file diff --git a/analysis/scalarmults/standalone/merge_probs.py b/analysis/scalarmults/epare/standalone/merge_probs.py index 0193382..6748a3d 100644 --- a/analysis/scalarmults/standalone/merge_probs.py +++ b/analysis/scalarmults/epare/standalone/merge_probs.py @@ -3,19 +3,28 @@ Merge all probs files into one. """ import pickle +import sys import click from pathlib import Path -from epare import ProbMap +from tqdm import tqdm + +from .. import ProbMap + + +if sys.version_info >= (3, 14): + from compression import zstd +else: + from backports import zstd @click.command() def main(): maps = {} - for file in Path().glob("probs_*.pickle"): - with file.open("rb") as h: + for file in tqdm(Path().glob("probs_*.zpickle"), desc="Merging probmaps.", smoothing=0): + with zstd.open(file, "rb") as h: while True: try: full, prob_map = pickle.load(h) |
