pygsti.modelmembers.operations.embeddederrorgen

The EmbeddedErrorgen class and supporting functionality.

Module Contents

Classes

EmbeddedErrorgen

An error generator containing a single lower (or equal) dimensional operation within it.

class pygsti.modelmembers.operations.embeddederrorgen.EmbeddedErrorgen(state_space, target_labels, errgen_to_embed)

Bases: pygsti.modelmembers.operations.embeddedop.EmbeddedOp

An error generator containing a single lower (or equal) dimensional operation within it.

An EmbeddedErrorGen acts as the null map (zero) on all of its domain except the subspace of its contained error generator, where it acts as the contained item does.

Parameters

state_spaceStateSpace

Specifies the density matrix space upon which this operation acts.

target_labelslist of strs

The labels contained in state_space which demarcate the portions of the state space acted on by errgen_to_embed (the “contained” error generator).

errgen_to_embedLinearOperator

The error generator object that is to be contained within this error generator, and that specifies the only non-trivial action of the EmbeddedErrorgen.

Initialize a new LinearOperator

from_vector(v, close=False, dirty_value=True)

Initialize the operation using a vector of parameters.

Parameters
vnumpy array

The 1D vector of operation parameters. Length must == num_params()

closebool, optional

Whether v is close to this operation’s current set of parameters. Under some circumstances, when this is true this call can be completed more quickly.

dirty_valuebool, optional

The value to set this object’s “dirty flag” to before exiting this call. This is passed as an argument so it can be updated recursively. Leave this set to True unless you know what you’re doing.

Returns

None

coefficients(return_basis=False, logscale_nonham=False)

Constructs a dictionary of the Lindblad-error-generator coefficients of this operation.

Note that these are not necessarily the parameter values, as these coefficients are generally functions of the parameters (so as to keep the coefficients positive, for instance).

Parameters
return_basisbool

Whether to also return a Basis containing the elements with which the error generator terms were constructed.

logscale_nonhambool, optional

Whether or not the non-hamiltonian error generator coefficients should be scaled so that the returned dict contains: (1 - exp(-d^2 * coeff)) / d^2 instead of coeff. This essentially converts the coefficient into a rate that is the contribution this term would have within a depolarizing channel where all stochastic generators had this same coefficient. This is the value returned by error_rates().

Returns
Ltermdictdict

Keys are (termType, basisLabel1, <basisLabel2>) tuples, where termType is “H” (Hamiltonian), “S” (Stochastic), or “A” (Affine). Hamiltonian and Affine terms always have a single basis label (so key is a 2-tuple) whereas Stochastic tuples have 1 basis label to indicate a diagonal term and otherwise have 2 basis labels to specify off-diagonal non-Hamiltonian Lindblad terms. Basis labels are integers starting at 0. Values are complex coefficients.

basisBasis

A Basis mapping the basis labels used in the keys of Ltermdict to basis matrices.

coefficient_labels()

The elementary error-generator labels corresponding to the elements of coefficients_array().

Returns
tuple

A tuple of (<type>, <basisEl1> [,<basisEl2]) elements identifying the elementary error generators of this gate.

coefficients_array()

The weighted coefficients of this error generator in terms of “standard” error generators.

Constructs a 1D array of all the coefficients returned by coefficients(), weighted so that different error generators can be weighted differently when a errorgen_penalty_factor is used in an objective function.

Returns
numpy.ndarray

A 1D array of length equal to the number of coefficients in the linear combination of standard error generators that is this error generator.

coefficients_array_deriv_wrt_params()

The jacobian of coefficients_array() with respect to this error generator’s parameters.

Returns
numpy.ndarray

A 2D array of shape (num_coeffs, num_params) where num_coeffs is the number of coefficients in the linear combination of standard error generators that is this error generator, and num_params is this error generator’s number of parameters.

error_rates()

Constructs a dictionary of the error rates associated with this error generator.

These error rates pertain to the channel formed by exponentiating this object.

The “error rate” for an individual Hamiltonian error is the angle about the “axis” (generalized in the multi-qubit case) corresponding to a particular basis element, i.e. theta in the unitary channel U = exp(i * theta/2 * BasisElement).

The “error rate” for an individual Stochastic error is the contribution that basis element’s term would have to the error rate of a depolarization channel. For example, if the rate corresponding to the term (‘S’,’X’) is 0.01 this means that the coefficient of the rho -> X*rho*X-rho error generator is set such that if this coefficient were used for all 3 (X,Y, and Z) terms the resulting depolarizing channel would have error rate 3*0.01 = 0.03.

Note that because error generator terms do not necessarily commute with one another, the sum of the returned error rates is not necessarily the error rate of the overall channel.

Returns
lindblad_term_dictdict

Keys are (termType, basisLabel1, <basisLabel2>) tuples, where termType is “H” (Hamiltonian), “S” (Stochastic), or “A” (Affine). Hamiltonian and Affine terms always have a single basis label (so key is a 2-tuple) whereas Stochastic tuples have 1 basis label to indicate a diagonal term and otherwise have 2 basis labels to specify off-diagonal non-Hamiltonian Lindblad terms. Values are real error rates except for the 2-basis-label case.

set_coefficients(lindblad_term_dict, action='update', logscale_nonham=False, truncate=True)

Sets the coefficients of terms in this error generator.

The dictionary lindblad_term_dict has tuple-keys describing the type of term and the basis elements used to construct it, e.g. (‘H’,’X’).

Parameters
lindblad_term_dictdict

Keys are (termType, basisLabel1, <basisLabel2>) tuples, where termType is “H” (Hamiltonian), “S” (Stochastic), or “A” (Affine). Hamiltonian and Affine terms always have a single basis label (so key is a 2-tuple) whereas Stochastic tuples have 1 basis label to indicate a diagonal term and otherwise have 2 basis labels to specify off-diagonal non-Hamiltonian Lindblad terms. Values are the coefficients of these error generators, and should be real except for the 2-basis-label case.

action{“update”,”add”,”reset”}

How the values in lindblad_term_dict should be combined with existing error-generator coefficients.

logscale_nonhambool, optional

Whether or not the values in lindblad_term_dict for non-hamiltonian error generators should be interpreted as error rates (of an “equivalent” depolarizing channel, see errorgen_coefficients()) instead of raw coefficients. If True, then the non-hamiltonian coefficients are set to -log(1 - d^2*rate)/d^2, where rate is the corresponding value given in lindblad_term_dict. This is what is performed by the function set_error_rates().

truncatebool, optional

Whether to truncate the projections onto the Lindblad terms in order to meet constraints (e.g. to preserve CPTP) when necessary. If False, then an error is thrown when the given coefficients cannot be parameterized as specified.

Returns

None

set_error_rates(lindblad_term_dict, action='update')

Sets the coeffcients of terms in this error generator.

Coefficients are set so that the contributions of the resulting channel’s error rate are given by the values in lindblad_term_dict. See error_rates() for more details.

Parameters
lindblad_term_dictdict

Keys are (termType, basisLabel1, <basisLabel2>) tuples, where termType is “H” (Hamiltonian), “S” (Stochastic), or “A” (Affine). Hamiltonian and Affine terms always have a single basis label (so key is a 2-tuple) whereas Stochastic tuples have 1 basis label to indicate a diagonal term and otherwise have 2 basis labels to specify off-diagonal non-Hamiltonian Lindblad terms. Values are real error rates except for the 2-basis-label case, when they may be complex.

action{“update”,”add”,”reset”}

How the values in lindblad_term_dict should be combined with existing error rates.

Returns

None

deriv_wrt_params(wrt_filter=None)

The element-wise derivative this operation.

Construct a matrix whose columns are the vectorized derivatives of the flattened error generator matrix with respect to a single operator parameter. Thus, each column is of length op_dim^2 and there is one column per operation parameter.

Parameters
wrt_filterlist or numpy.ndarray

List of parameter indices to take derivative with respect to. (None means to use all the this operation’s parameters.)

Returns
numpy array

Array of derivatives, shape == (dimension^2, num_params)

hessian_wrt_params(wrt_filter1=None, wrt_filter2=None)

Construct the Hessian of this error generator with respect to its parameters.

This function returns a tensor whose first axis corresponds to the flattened operation matrix and whose 2nd and 3rd axes correspond to the parameters that are differentiated with respect to.

Parameters
wrt_filter1list or numpy.ndarray

List of parameter indices to take 1st derivatives with respect to. (None means to use all the this operation’s parameters.)

wrt_filter2list or numpy.ndarray

List of parameter indices to take 2nd derivatives with respect to. (None means to use all the this operation’s parameters.)

Returns
numpy array

Hessian with shape (dimension^2, num_params1, num_params2)

onenorm_upperbound()

Returns an upper bound on the 1-norm for this error generator (viewed as a matrix).

Returns

float