-rwxr-xr-x 2150 cryptattacktester-20230614/isdsims.py raw
#!/usr/bin/env python3 import sys import subprocess import multiprocessing NKWlist = [] for N in range(16,130,2): problemparams = subprocess.run(['./problemparams','problem=uniformmatrix','N=%d'%N],capture_output=True,universal_newlines=True,check=True) for line in problemparams.stdout.splitlines(): line = line.split() assert len(line) == 3 assert line[0] == 'problemparams' assert line[1] == 'problem=uniformmatrix' NKW = line[2] NKWlist += [NKW] todo = [] for NKW in NKWlist: for A in ( 'attack=isd0,P=0,L=0,FW=1', 'attack=isd0,L=0,FW=1', 'attack=isd0,FW=1', 'attack=isd1,FW=1', 'attack=isd2,CP=1,CS=0,FW=1', 'attack=isd2,CP=0,CS=1,FW=1', ): for IRE in ('I=1',),('I=2','RE=1'),('I=4','RE=4'): todo += [(NKW,A,IRE)] def handle(task): NKW,A,IRE = task searchparams = subprocess.run(['./searchparams','problem=uniformmatrix',NKW,A]+list(IRE),capture_output=True,universal_newlines=True,check=True) if len(searchparams.stdout) == 0: return task,None bestparams = searchparams.stdout.splitlines()[-1] bestparams = bestparams.split() assert bestparams[0] == 'searchparams' assert bestparams[1] == 'problem=uniformmatrix' assert bestparams[2] == NKW assert bestparams[3] == A.split(',')[0] Q = bestparams[4] result = 'trying %s %s %s\n' % (NKW,A,Q) cost = subprocess.run(['./circuitcost','problem=uniformmatrix',NKW,A,Q],capture_output=True,universal_newlines=True,check=True) result += cost.stdout prob = subprocess.run(['./circuitprob','problem=uniformmatrix',NKW,A,Q,'trialfactor=100000','probfactor=100'],capture_output=True,universal_newlines=True,check=True) result += prob.stdout return task,result results = {} printpos = 0 def maybeprint(): global printpos while printpos < len(todo): task = todo[printpos] if task not in results: break result = results[task] if result is not None: sys.stdout.write(result) sys.stdout.flush() printpos += 1 with multiprocessing.Pool() as p: for task,result in p.imap_unordered(handle,reversed(todo),chunksize=1): results[task] = result maybeprint()