Skip to content

Commit 842ea8f

Browse files
small fogi serialization bugfix, plus lots of code for fogi lattices that is not meant to stay
1 parent 8e60b19 commit 842ea8f

File tree

4 files changed

+53
-37
lines changed

4 files changed

+53
-37
lines changed

pygsti/algorithms/modelselection.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def do_greedy_from_full_fast(target_model, data, er_thresh=2.0, verbosity=2, max
6363
optimizer performance).
6464
6565
recompute_H_thresh_percentage : float
66-
TODO, parameter not implemented yet
66+
TODO,
6767
6868
graph_checkpoint : TODO this will likely get heavily modified
6969
@@ -150,8 +150,7 @@ def create_logl_obj_fn(parent_model, dataset, min_prob_clip = 1e-6, comm = None,
150150
new_checkpoint.x0 = x0
151151
new_checkpoint.save()
152152
print('Checkpoint saved in', new_checkpoint.path)
153-
if rank == 2:
154-
print(x0)
153+
155154
if H is None:
156155
if rank == 0 and verbosity > 0:
157156
print("computing Hessian")
@@ -162,18 +161,32 @@ def create_logl_obj_fn(parent_model, dataset, min_prob_clip = 1e-6, comm = None,
162161
new_checkpoint.H = H
163162
new_checkpoint.save()
164163
print('Checkpoint saved in', new_checkpoint.path)
165-
red_model = target_model.copy()
166-
logl_fn = create_logl_obj_fn(target_model_fit, data.dataset)
167-
original_dlogl = -logl_fn.fn()
168-
print(f'{original_dlogl=}')
169-
expansion_point_logl = pygsti.tools.logl(target_model_fit, data.dataset, poisson_picture=False)
170-
approx_logl_fn = create_approx_logl_fn(H, x0, expansion_point_logl)
171-
prev_logl = original_dlogl
172-
graph_levels.append([[x0,original_dlogl, 0]])
173-
exceeded_threshold = False
174-
red_row_H = H
175-
red_rowandcol_H = H
164+
165+
if False: #checkpoint is not None:
166+
if checkpoint.graph_levels is not None:
167+
if rank == 0 and verbosity > 0:
168+
print(f'Checkpoint contains {len(checkpoint.graph_levels)} levels')
169+
graph_levels = checkpoint.graph_levels
170+
red_model = checkpoint.red_model
171+
172+
173+
#else
174+
if len(graph_levels) == 0:
175+
176+
red_model = target_model.copy()
177+
logl_fn = create_logl_obj_fn(target_model_fit, data.dataset)
178+
original_dlogl = -logl_fn.fn()
179+
print(f'{original_dlogl=}')
180+
expansion_point_logl = pygsti.tools.logl(target_model_fit, data.dataset, poisson_picture=False)
181+
approx_logl_fn = create_approx_logl_fn(H, x0, expansion_point_logl)
182+
prev_logl = original_dlogl
183+
graph_levels.append([[x0,original_dlogl, 0]])
184+
exceeded_threshold = False
185+
red_row_H = H
186+
red_rowandcol_H = H
176187
counter = 0
188+
189+
177190
while not exceeded_threshold:
178191
if rank == 0 and verbosity >1:
179192
print(f'>> Working on level {len(graph_levels)} <<',flush = True)

pygsti/models/fogistore.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ def fogi_errorgen_direction_labels(self, typ='normal'):
484484
""" typ can be 'raw' or 'abbrev' too """
485485
if typ == 'normal': return tuple([meta['name'] for meta in self.fogi_metadata])
486486
elif typ == 'raw': return tuple([meta['raw'] for meta in self.fogi_metadata])
487-
elif typ == 'abrev': return tuple([meta['abbrev'] for meta in self.fogi_metadata])
487+
elif typ == 'abbrev': return tuple([meta['abbrev'] for meta in self.fogi_metadata])
488488
else: raise ValueError("Invalid `typ` argument: %s" % str(typ))
489489

490490
def fogv_errorgen_direction_labels(self, typ='normal'):

pygsti/models/model.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2504,7 +2504,6 @@ def _add_reparameterization(self, primitive_op_labels, fogi_dirs, errgenset_spac
25042504
nOpParams = self.num_params # the number of parameters *before* any reparameterization. TODO: better way?
25052505
errgenset_space_labels_indx = _collections.OrderedDict(
25062506
[(lbl, i) for i, lbl in enumerate(errgenset_space_labels)])
2507-
print(errgenset_space_labels[9])
25082507
invDeriv = _np.zeros((nOpParams, fogi_dirs.shape[0]), 'd')
25092508

25102509
used_param_indices = set()

pygsti/tools/fogitools.py

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ def construct_fogi_quantities(primitive_op_labels, gauge_action_matrices,
347347
348348
349349
"""
350+
print_lattices = True
350351
assert(dependent_fogi_action in ('drop', 'mark'))
351352
orthogonalize_relationals = True
352353
set_size_dims = {}
@@ -483,16 +484,13 @@ def resolve_norm_order(vecs_to_normalize, label_lists, given_norm_order):
483484
ccomms[(op_label,)] = complement
484485
#gauge_action_for_op[op_label] = ga
485486

486-
#print("Commutant:"); _mt.print_mx(commutant)
487-
#print("Names: ", errgen_names)
488-
#print("Complement:"); _mt.print_mx(complement)
489487

490488
smaller_sets = [(op_label,) for op_label in primitive_op_labels]
491489
max_size = len(primitive_op_labels)
492-
490+
493491
for set_size in range(1, max_size):
494492
larger_sets = []
495-
print(f'{set_size=}')
493+
print(set_size)
496494
num_indep_vecs_from_smaller_sets = fogi_dirs.shape[1]
497495
for op_label in primitive_op_labels:
498496
for existing_set in smaller_sets:
@@ -752,6 +750,7 @@ def scipy_pinv(A, rcond):
752750

753751
ccomms[new_set] = union_space
754752
set_size_dims[new_set] = len(new_indep_cols)
753+
755754
#print("Complement:\n"); _mt.print_mx(union_space)
756755

757756
larger_sets.append(new_set)
@@ -769,23 +768,28 @@ def scipy_pinv(A, rcond):
769768
fogi_dirs = fogi_dirs.real
770769
if _spsl.norm(dep_fogi_dirs.imag) < 1e-6:
771770
dep_fogi_dirs = dep_fogi_dirs.real
772-
'''
773-
keys = list(set_size_dims.keys())
774-
gate_abbrevs = {'Gxpi2:0':'X', 'Gypi2:0': 'Y','Gzpi2:0':'Z', 'rho0':'rho', 'Mdefault': 'M'}
775-
key_strings = {}
776-
for key in keys:
777-
key_strings[key] = [gate_abbrevs[label.__str__()] for label in key]
778-
print(list(key_strings.values()))
779-
keys.sort(key = lambda x: -len(x))
780-
curr_length = 1
781-
for key in keys:
782-
if len(key) != curr_length:
783-
print('\n')
784-
curr_length = len(key)
785-
print(key_strings[key], set_size_dims[key], end=' ')
786-
'''
771+
if print_lattices:
772+
keys = list(set_size_dims.keys())
773+
gate_abbrevs = {'Gxpi:0': 'Xpi','Gt:0':'T:0','Gt:1':'T:1','Gh:0':'H:0','Gh:1':'H:1','Gympi2:1':'Ym:1','Gcz:0:1':'CZ','Gxpi2:0':'X:0', 'Gypi2:0': 'Y:0','Gzpi2:0':'Z:0', 'rho0':'rho:0', 'Mdefault': 'M:0', 'Gn:0': 'GN','Gxpi2:1':'X:1', 'Gypi2:1': 'Y:1','Gzpi2:1':'Z:1', 'Gx:0': 'X:0', 'Gx:1': 'X:0', 'Gz:0': 'Z:0', 'Gz:1': 'Z:1', 'Gy:0': 'Y:0'}
774+
key_strings = {}
775+
for key in keys:
776+
key_strings[key] = [gate_abbrevs[label.__str__()] for label in key]
777+
keys.sort(key = lambda x: -len(x))
778+
curr_length = 1
779+
for key in keys:
780+
if len(key) != curr_length:
781+
print('\n')
782+
curr_length = len(key)
783+
if set_size_dims[key] > 0:
784+
print(key_strings[key], set_size_dims[key], end=' ')
785+
787786

788-
787+
for i in range(1, set_size):
788+
summation = 0
789+
for op_set in set_size_dims.keys():
790+
if len(op_set) == i:
791+
summation += set_size_dims[op_set]
792+
print(i, summation)
789793
return (fogi_dirs, fogi_meta, dep_fogi_dirs, dep_fogi_meta)
790794

791795

0 commit comments

Comments
 (0)