Parameter Labels#

This tutorials show how model parameters are labelled, and how this can be used to create more complex parameterizations for a model.

import pygsti
import numpy as np
from pygsti.modelpacks import smq1Q_XY as std
from pygsti.baseobjs import Label

mdl1 = std.target_model("H+s")  # choose a H+s model because it has a simple parameterization

Getting parameter labels#

A Model’s parameters have corresponding labels, which can be accessed in a variety of ways. Individual operators also have labeled parameters. An OpModel (e.g. an ExplicitModel or ImplicitModel) sets default parameter labels based on the parameter labels of its contained operators, but the model’s parameters can vary independently.

# print the raw labels, straight up
mdl1.parameter_labels
# model parameters can be set to arbitrary user-defined values
mdl1.set_parameter_label(index=0, label="My favorite parameter")
# Model parameters in a nice format for printing
mdl1.parameter_labels_pretty
# For a single operator: you can get it's "local" parameter labels (in general different from the model's parameter labels)
mdl1.operations[('Gxpi2',0)].parameter_labels
# The parameters of all the operators, with mappings to non-default model parameters 
mdl1.print_parameters_by_op()

Collecting parameters#

You can combined multiple parameters into one using the collect_parameters method. This effectively ties the values for all the original parameters together.

mdl1.collect_parameters([ (('Gxpi2',0), 'X Hamiltonian error coefficient'),
                          (('Gypi2',0), 'Y Hamiltonian error coefficient')],
                        new_param_label='Over-rotation')
# Using "pretty" labels works too:
mdl1.collect_parameters(['Gxpi2:0: Y stochastic coefficient',
                         'Gxpi2:0: Z stochastic coefficient' ],
                        new_param_label='Gxpi2 off-axis stochastic')
# You can also use integer indices, and parameter labels can be tuples too.
mdl1.collect_parameters([3,4,5], new_param_label=("rho0", "common stochastic coefficient"))
# There are now fewer parameters
mdl1.parameter_labels_pretty
# And you can see how they're wired up for each op:
mdl1.print_parameters_by_op()

Un-collecting parameters#

You can also reverse the above process and “un-collect” a parameter so that one parameter gets replaced my multiple independent ones.

mdl1.uncollect_parameters('Gxpi2 off-axis stochastic')
mdl1.print_parameters_by_op()