The code below should be put into a script and run using mpiexec. It's primary function is to pass a MPI Comm object to pygsti.algorithms.germselection.build_up_breadth
.
from __future__ import print_function
import time
import pygsti
import pygsti.construction as pc
from pygsti.construction import std2Q_XYICNOT
from pygsti.algorithms import germselection as germsel
from mpi4py import MPI
comm = MPI.COMM_WORLD
def do_greedy_germsel(gs_target, forced_germs, candidate_counts,
seedStart, outFilename, comm):
#candidate_counts is a dict of keys = germ lengths, values = # of germs at that length
tStart = time.time()
candidate_germs = []
for i,(germLength, count) in enumerate(candidate_counts.items()):
if count == "all upto":
candidate_germs.extend( pc.list_all_gatestrings_without_powers_and_cycles(
gs_target.gates.keys(), maxLength=germLength) )
else:
candidate_germs.extend( pc.list_random_gatestrings_onelen(
gs_target.gates.keys(), germLength, count, seed=seedStart+i))
available_germs = pygsti.tools.remove_duplicates( forced_germs + candidate_germs )
print("%d available germs" % len(available_germs))
germs = germsel.build_up_breadth(gs_target, available_germs,
randomizationStrength=1e-3, numCopies=3, seed=1234,
gatePenalty=10.0, scoreFunc='all', tol=1e-6, threshold=1e5,
pretest=False, force=forced_germs, verbosity=5, comm=comm, memLimit=0.5*(1024**3))
if comm is None or comm.Get_rank() == 0:
print("Germs (%d) = \n" % len(germs), "\n".join(map(str,germs)))
print("Total time = %gs" % (time.time()-tStart))
pickle.dump(germs,open(outFilename,"wb"))
return germs
#2Q case
gs_target = std2Q_XYICNOT.gs_target
forced_germs = pygsti.construction.gatestring_list([(gl,) for gl in gs_target.gates.keys()]) #singletons
candidate_counts = { 3:"all upto", 4:30, 5:20, 6:20, 7:20, 8:20} # germLength:num_candidates
seedStart = 4
do_greedy_germsel(gs_target, forced_germs, candidate_counts,
seedStart, "germs_EXAMPLE.pkl", comm)
201 available germs Starting germ set optimization. Lower score is better. Memory estimate of 13.6 GB (0.5 GB limit) for all-Jac mode. Memory estimate of 0.2 GB (0.5 GB limit) for single-Jac mode. Initial germ set computation Iter 1 of 6 Gii: Initial germ set computation Iter 2 of 6 Gix: Initial germ set computation Iter 3 of 6 Giy: Initial germ set computation Iter 4 of 6 Gxi: Initial germ set computation Iter 5 of 6 Gyi: Initial germ set computation Iter 6 of 6 Gcnot: Outer iteration: 1 of 1282 amplified, 6 germs Inner iter over candidate germs Iter 001 of 195 GiiGix: Score: major=-114.0 minor=275.75502325607494, N: 194 Inner iter over candidate germs Iter 002 of 195 GiiGiy: Score: major=-114.0 minor=275.7522442827056, N: 194 Inner iter over candidate germs Iter 003 of 195 GiiGxi: Score: major=-114.0 minor=303.1298571245537, N: 194 Inner iter over candidate germs Iter 004 of 195 GiiGyi: Score: major=-114.0 minor=359.33009592311197, N: 194 Inner iter over candidate germs Iter 005 of 195 GiiGcnot: Score: major=-114.0 minor=276.2687268384222, N: 194 Inner iter over candidate germs Iter 006 of 195 GixGiy: Score: major=-114.0 minor=257.4426897879849, N: 194 Inner iter over candidate germs Iter 007 of 195 GixGxi: Score: major=-114.0 minor=341.5696468598026, N: 194 Inner iter over candidate germs Iter 008 of 195 GixGyi: Score: major=-114.0 minor=282.33867449240785, N: 194 Inner iter over candidate germs Iter 009 of 195 GixGcnot: Score: major=-114.0 minor=577.5866443200944, N: 194 Inner iter over candidate germs Iter 010 of 195 GiyGxi: Score: major=-114.0 minor=294.8087354034746, N: 194 Inner iter over candidate germs Iter 011 of 195 GiyGyi: Score: major=-114.0 minor=274.01388120453714, N: 194 Inner iter over candidate germs Iter 012 of 195 GiyGcnot: Score: major=-114.0 minor=292.4187770509613, N: 194 Inner iter over candidate germs Iter 013 of 195 GxiGyi: Score: major=-114.0 minor=257.1446980861653, N: 194 Inner iter over candidate germs Iter 014 of 195 GxiGcnot: Score: major=-114.0 minor=295.190147340071, N: 194 Inner iter over candidate germs Iter 015 of 195 GyiGcnot: Score: major=-114.0 minor=262.2444012232519, N: 194 Inner iter over candidate germs Iter 016 of 195 GiiGiiGix: Score: major=-104.0 minor=245.7308844910744, N: 194 Inner iter over candidate germs Iter 017 of 195 GiiGiiGiy: Score: major=-104.0 minor=236.1043493154914, N: 194 Inner iter over candidate germs Iter 018 of 195 GiiGiiGxi: Score: major=-104.0 minor=257.48113898508507, N: 194 Inner iter over candidate germs Iter 019 of 195 GiiGiiGyi: Score: major=-104.0 minor=295.32017448143523, N: 194 Inner iter over candidate germs Iter 020 of 195 GiiGiiGcnot: Score: major=-104.0 minor=274.60740870875173, N: 194 Inner iter over candidate germs Iter 021 of 195 GiiGixGix: Score: major=-104.0 minor=453.2493918611681, N: 194 Inner iter over candidate germs Iter 022 of 195 GiiGixGiy: Score: major=-104.0 minor=275.1564063981896, N: 194 Inner iter over candidate germs Iter 023 of 195 GiiGixGxi: Score: major=-104.0 minor=304.4741877376935, N: 194 Inner iter over candidate germs Iter 024 of 195 GiiGixGyi: Score: major=-104.0 minor=278.4412022818791, N: 194 Inner iter over candidate germs Iter 025 of 195 GiiGixGcnot: Score: major=-104.0 minor=352.17218106799834, N: 194 Inner iter over candidate germs Iter 026 of 195 GiiGiyGix: Score: major=-104.0 minor=266.5702087056302, N: 194 Inner iter over candidate germs Iter 027 of 195 GiiGiyGiy: Score: major=-104.0 minor=448.321047174822, N: 194 Inner iter over candidate germs Iter 028 of 195 GiiGiyGxi: Score: major=-104.0 minor=297.33168248046, N: 194 Inner iter over candidate germs Iter 029 of 195 GiiGiyGyi: Score: major=-104.0 minor=283.54615357575, N: 194 Inner iter over candidate germs Iter 030 of 195 GiiGiyGcnot: Score: major=-104.0 minor=297.12854592193514, N: 194 Inner iter over candidate germs Iter 031 of 195 GiiGxiGix: Score: major=-104.0 minor=307.7119918376172, N: 194 Inner iter over candidate germs Iter 032 of 195 GiiGxiGiy: Score: major=-104.0 minor=307.76748417238804, N: 194 Inner iter over candidate germs Iter 033 of 195 GiiGxiGxi: Score: major=-104.0 minor=410.09882553443776, N: 194 Inner iter over candidate germs Iter 034 of 195 GiiGxiGyi: Score: major=-104.0 minor=284.31530927417265, N: 194 Inner iter over candidate germs Iter 035 of 195 GiiGxiGcnot: Score: major=-104.0 minor=303.8102280854165, N: 194 Inner iter over candidate germs Iter 036 of 195 GiiGyiGix: Score: major=-104.0 minor=283.5892520489328, N: 194 Inner iter over candidate germs Iter 037 of 195 GiiGyiGiy: Score: major=-104.0 minor=283.32262065091936, N: 194 Inner iter over candidate germs Iter 038 of 195 GiiGyiGxi: Score: major=-104.0 minor=273.55049138095467, N: 194 Inner iter over candidate germs Iter 039 of 195 GiiGyiGyi: Score: major=-104.0 minor=563.1049081486992, N: 194 Inner iter over candidate germs Iter 040 of 195 GiiGyiGcnot: Score: major=-104.0 minor=277.18869907206295, N: 194 Inner iter over candidate germs Iter 041 of 195 GiiGcnotGix: Score: major=-104.0 minor=352.331781006329, N: 194 Inner iter over candidate germs Iter 042 of 195 GiiGcnotGiy: Score: major=-104.0 minor=298.101908998134, N: 194 Inner iter over candidate germs Iter 043 of 195 GiiGcnotGxi: Score: major=-104.0 minor=309.67789479015175, N: 194 Inner iter over candidate germs Iter 044 of 195 GiiGcnotGyi: Score: major=-104.0 minor=279.3478112644729, N: 194 Inner iter over candidate germs Iter 045 of 195 GiiGcnotGcnot: Score: major=-104.0 minor=375.65486127821566, N: 194 Inner iter over candidate germs Iter 046 of 195 GixGixGiy: Score: major=-104.0 minor=327.9840714902068, N: 194 Inner iter over candidate germs Iter 047 of 195 GixGixGxi: Score: major=-104.0 minor=755.1272055918554, N: 194 Inner iter over candidate germs Iter 048 of 195 GixGixGyi: Score: major=-104.0 minor=362.97934478595715, N: 194 Inner iter over candidate germs Iter 049 of 195 GixGixGcnot: Score: major=-104.0 minor=532.4198103374513, N: 194 Inner iter over candidate germs Iter 050 of 195 GixGiyGiy: Score: major=-104.0 minor=293.57122809495036, N: 194 Inner iter over candidate germs Iter 051 of 195 GixGiyGxi: Score: major=-104.0 minor=313.0607144010976, N: 194 Inner iter over candidate germs Iter 052 of 195 GixGiyGyi: Score: major=-104.0 minor=291.5047379860357, N: 194 Inner iter over candidate germs Iter 053 of 195 GixGiyGcnot: Score: major=-104.0 minor=284.2173572664506, N: 194 Inner iter over candidate germs Iter 054 of 195 GixGxiGiy: Score: major=-104.0 minor=319.08915176860745, N: 194 Inner iter over candidate germs Iter 055 of 195 GixGxiGxi: Score: major=-104.0 minor=540.3153010508437, N: 194 Inner iter over candidate germs Iter 056 of 195 GixGxiGyi: Score: major=-104.0 minor=336.71570728099914, N: 194 Inner iter over candidate germs Iter 057 of 195 GixGxiGcnot: Score: major=-104.0 minor=372.19137704629856, N: 194 Inner iter over candidate germs Iter 058 of 195 GixGyiGiy: Score: major=-104.0 minor=274.6695769231821, N: 194 Inner iter over candidate germs Iter 059 of 195 GixGyiGxi: Score: major=-104.0 minor=350.2809681409056, N: 194 Inner iter over candidate germs Iter 060 of 195 GixGyiGyi: Score: major=-104.0 minor=383.2242705593424, N: 194 Inner iter over candidate germs Iter 061 of 195 GixGyiGcnot: Score: major=-104.0 minor=321.6587593118411, N: 194 Inner iter over candidate germs Iter 062 of 195 GixGcnotGiy: Score: major=-104.0 minor=290.1508560166761, N: 194 Inner iter over candidate germs Iter 063 of 195 GixGcnotGxi: Score: major=-104.0 minor=360.7166056237833, N: 194 Inner iter over candidate germs Iter 064 of 195 GixGcnotGyi: Score: major=-104.0 minor=308.89004813899265, N: 194 Inner iter over candidate germs Iter 065 of 195 GixGcnotGcnot: Score: major=-104.0 minor=3769.118016249374, N: 194 Inner iter over candidate germs Iter 066 of 195 GiyGiyGxi: Score: major=-104.0 minor=452.76438995248725, N: 194 Inner iter over candidate germs Iter 067 of 195 GiyGiyGyi: Score: major=-104.0 minor=374.97038589170717, N: 194 Inner iter over candidate germs Iter 068 of 195 GiyGiyGcnot: Score: major=-104.0 minor=331.36628515747975, N: 194 Inner iter over candidate germs Iter 069 of 195 GiyGxiGxi: Score: major=-104.0 minor=405.6819678323604, N: 194 Inner iter over candidate germs Iter 070 of 195 GiyGxiGyi: Score: major=-104.0 minor=301.88793301304673, N: 194 Inner iter over candidate germs Iter 071 of 195 GiyGxiGcnot: Score: major=-104.0 minor=263.8903625336477, N: 194 Inner iter over candidate germs Iter 072 of 195 GiyGyiGxi: Score: major=-104.0 minor=294.9421892854786, N: 194 Inner iter over candidate germs Iter 073 of 195 GiyGyiGyi: Score: major=-104.0 minor=375.66995543431125, N: 194 Inner iter over candidate germs Iter 074 of 195 GiyGyiGcnot: Score: major=-104.0 minor=271.07584551340085, N: 194 Inner iter over candidate germs Iter 075 of 195 GiyGcnotGxi: Score: major=-104.0 minor=267.7463780515303, N: 194 Inner iter over candidate germs Iter 076 of 195 GiyGcnotGyi: Score: major=-104.0 minor=262.38089131433804, N: 194 Inner iter over candidate germs Iter 077 of 195 GiyGcnotGcnot: Score: major=-104.0 minor=908.7073076764817, N: 194 Inner iter over candidate germs Iter 078 of 195 GxiGxiGyi: Score: major=-104.0 minor=295.2464245465799, N: 194 Inner iter over candidate germs Iter 079 of 195 GxiGxiGcnot: Score: major=-104.0 minor=362.20948155218684, N: 194 Inner iter over candidate germs Iter 080 of 195 GxiGyiGyi: Score: major=-104.0 minor=308.6963511258918, N: 194 Inner iter over candidate germs Iter 081 of 195 GxiGyiGcnot: Score: major=-104.0 minor=291.89016996833226, N: 194 Inner iter over candidate germs Iter 082 of 195 GxiGcnotGyi: Score: major=-104.0 minor=295.83681734525754, N: 194 Inner iter over candidate germs Iter 083 of 195 GxiGcnotGcnot: Score: major=-104.0 minor=403.68705147623785, N: 194 Inner iter over candidate germs Iter 084 of 195 GyiGyiGcnot: Score: major=-104.0 minor=298.67833058161074, N: 194 Inner iter over candidate germs Iter 085 of 195 GyiGcnotGcnot: Score: major=-104.0 minor=374.60451320307124, N: 194 Inner iter over candidate germs Iter 086 of 195 GixGcnotGixGcnot: Score: major=-94.0 minor=577.586644320097, N: 194 Inner iter over candidate germs Iter 087 of 195 GiyGxiGyiGxi: Score: major=-94.0 minor=308.17699134846896, N: 194 Inner iter over candidate germs Iter 088 of 195 GixGixGiiGyi: Score: major=-94.0 minor=320.525739885235, N: 194 Inner iter over candidate germs Iter 089 of 195 GiyGiiGcnotGix: Score: major=-94.0 minor=316.4687253724784, N: 194 Inner iter over candidate germs Iter 090 of 195 GiyGixGxiGxi: Score: major=-94.0 minor=392.7259192019381, N: 194 Inner iter over candidate germs Iter 091 of 195 GxiGixGixGix: Score: major=-94.0 minor=458.3667868832062, N: 194 Inner iter over candidate germs Iter 092 of 195 GixGiiGiiGcnot: Score: major=-94.0 minor=298.16427513311515, N: 194 Inner iter over candidate germs Iter 093 of 195 GcnotGixGiiGix: Score: major=-94.0 minor=397.3439198571407, N: 194 Inner iter over candidate germs Iter 094 of 195 GyiGyiGiiGxi: Score: major=-94.0 minor=351.3000547622174, N: 194 Inner iter over candidate germs Iter 095 of 195 GiiGxiGxiGcnot: Score: major=-94.0 minor=362.99723348062486, N: 194 Inner iter over candidate germs Iter 096 of 195 GixGyiGcnotGcnot: Score: major=-94.0 minor=349.3918897693632, N: 194 Inner iter over candidate germs Iter 097 of 195 GiiGiyGcnotGiy: Score: major=-94.0 minor=326.8170065637902, N: 194 Inner iter over candidate germs Iter 098 of 195 GyiGxiGyiGiy: Score: major=-94.0 minor=304.41554827778646, N: 194 Inner iter over candidate germs Iter 099 of 195 GiiGiiGiiGix: Score: major=-94.0 minor=238.79309659117382, N: 194 Inner iter over candidate germs Iter 100 of 195 GcnotGxiGyiGxi: Score: major=-94.0 minor=338.5290985545139, N: 194 Inner iter over candidate germs Iter 101 of 195 GxiGyiGcnotGcnot: Score: major=-94.0 minor=318.0378405468149, N: 194 Inner iter over candidate germs Iter 102 of 195 GyiGiiGiyGii: Score: major=-94.0 minor=285.29173900315885, N: 194 Inner iter over candidate germs Iter 103 of 195 GxiGyiGiiGix: Score: major=-94.0 minor=331.8807853566604, N: 194 Inner iter over candidate germs Iter 104 of 195 GiyGixGyiGiy: Score: major=-94.0 minor=284.454259833064, N: 194 Inner iter over candidate germs Iter 105 of 195 GxiGiyGxiGcnot: Score: major=-94.0 minor=309.62766888700475, N: 194 Inner iter over candidate germs Iter 106 of 195 GcnotGiiGcnotGiy: Score: major=-94.0 minor=411.6446140183907, N: 194 Inner iter over candidate germs Iter 107 of 195 GiiGiyGxiGcnot: Score: major=-94.0 minor=295.3713752850506, N: 194 Inner iter over candidate germs Iter 108 of 195 GiyGiiGcnotGii: Score: major=-94.0 minor=284.90493258564084, N: 194 Inner iter over candidate germs Iter 109 of 195 GiyGcnotGxiGiy: Score: major=-94.0 minor=284.634034171586, N: 194 Inner iter over candidate germs Iter 110 of 195 GyiGiiGxiGiy: Score: major=-94.0 minor=314.18422001916576, N: 194 Inner iter over candidate germs Iter 111 of 195 GcnotGyiGiiGix: Score: major=-94.0 minor=327.21751775186937, N: 194 Inner iter over candidate germs Iter 112 of 195 GiyGyiGixGiy: Score: major=-94.0 minor=298.3837522963492, N: 194 Inner iter over candidate germs Iter 113 of 195 GcnotGcnotGiyGcnot: Score: major=-94.0 minor=379.9590118192272, N: 194 Inner iter over candidate germs Iter 114 of 195 GixGiiGxiGxi: Score: major=-94.0 minor=448.9009890713284, N: 194 Inner iter over candidate germs Iter 115 of 195 GcnotGcnotGyiGyi: Score: major=-94.0 minor=443.2615260756885, N: 194 Inner iter over candidate germs Iter 116 of 195 GcnotGixGyiGiiGii: Score: major=-84.0 minor=298.67107136816975, N: 194 Inner iter over candidate germs Iter 117 of 195 GxiGxiGiyGiyGxi: Score: major=-84.0 minor=376.03055161804133, N: 194 Inner iter over candidate germs Iter 118 of 195 GiyGyiGxiGxiGxi: Score: major=-84.0 minor=353.9303258751008, N: 194 Inner iter over candidate germs Iter 119 of 195 GcnotGyiGiyGcnotGyi:
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) <ipython-input-1-490dd8249e43> in <module>() 44 seedStart = 4 45 do_greedy_germsel(gs_target, forced_germs, candidate_counts, ---> 46 seedStart, "germs_EXAMPLE.pkl", comm) <ipython-input-1-490dd8249e43> in do_greedy_germsel(gs_target, forced_germs, candidate_counts, seedStart, outFilename, comm) 30 randomizationStrength=1e-3, numCopies=3, seed=1234, 31 gatePenalty=10.0, scoreFunc='all', tol=1e-6, threshold=1e5, ---> 32 pretest=False, force=forced_germs, verbosity=5, comm=comm, memLimit=0.5*(1024**3)) 33 34 if comm is None or comm.Get_rank() == 0: /Volumes/Research/enielse_research/pyGSTi/packages/pygsti/algorithms/germselection.py in build_up_breadth(gatesetList, germsList, randomize, randomizationStrength, numCopies, seed, gatePenalty, scoreFunc, tol, threshold, check, force, pretest, memLimit, comm, profiler, verbosity) 1307 worstScore = max( worstScore, compute_composite_germ_score( 1308 partialDerivDaggerDeriv=testDDD[None,:,:], initN=initN, -> 1309 **nonAC_kwargs)) 1310 testDDDs.append(testDDD) #save in case this is a keeper 1311 /Volumes/Research/enielse_research/pyGSTi/packages/pygsti/algorithms/germselection.py in compute_composite_germ_score(scoreFn, thresholdAC, initN, partialDerivDaggerDeriv, gateset, partialGermsList, eps, numGaugeParams, gatePenalty, germLengths, l1Penalty) 429 430 combinedDDD = _np.sum(partialDerivDaggerDeriv, axis=0) --> 431 sortedEigenvals = _np.sort(_np.real(_nla.eigvalsh(combinedDDD))) 432 observableEigenvals = sortedEigenvals[numGaugeParams:] 433 N_AC = 0 /usr/local/lib/python3.6/site-packages/numpy/linalg/linalg.py in eigvalsh(a, UPLO) 1126 t, result_t = _commonType(a) 1127 signature = 'D->d' if isComplexType(t) else 'd->d' -> 1128 w = gufunc(a, signature=signature, extobj=extobj) 1129 return w.astype(_realType(result_t), copy=False) 1130 KeyboardInterrupt:
Above is keyboard-interrupted on purpose, as this output was produced with a single processor and it would have taken a very long time.