pygsti.extras.idletomography.idtcore

Core Idle Tomography routines

Module Contents

Functions

hamiltonian_jac_element(prep, error, observable)

Computes the Jacobian matrix element for a Hamiltonian error: how the

stochastic_outcome(prep, error, meas)

Computes the "expected" outcome when the stochastic error error

stochastic_jac_element(prep, error, meas, outcome)

Computes the Jacobian matrix element for a Stochastic error: how the

affine_jac_element(prep, error, meas, outcome)

Computes the Jacobian matrix element for a Affine error: how the

affine_jac_obs_element(prep, error, observable)

Computes the Jacobian matrix element for a Affine error: how the

idle_tomography_fidpairs(nqubits[, maxweight, ...])

Construct a list of Pauli-basis fiducial pairs for idle tomography.

preferred_signs_from_paulidict(pauli_basis_dict)

Infers what the preferred basis signs are based on the length of gate-name

fidpairs_to_pauli_fidpairs(fidpairs_list, ...)

Translate GatesString-type fiducial pairs to

determine_paulidicts(model)

Intelligently determine preparation and measurement Pauli basis

make_idle_tomography_list(nqubits, max_lengths, ...[, ...])

Construct the list of experiments needed to perform idle tomography.

make_idle_tomography_lists(nqubits, max_lengths, ...)

Construct lists of experiments, one for each maximum-length value, needed

compute_observed_samebasis_err_rate(dataset, ...[, ...])

Extract the observed error rate from a series of experiments which prepares

compute_observed_diffbasis_err_rate(dataset, ...[, ...])

Extract the observed error rate from a series of experiments which prepares

do_idle_tomography(nqubits, dataset, max_lengths, ...)

Analyze dataset using the idle tomography protocol to characterize

pygsti.extras.idletomography.idtcore.hamiltonian_jac_element(prep, error, observable)

Computes the Jacobian matrix element for a Hamiltonian error: how the expectation value of observable in state prep changes due to Hamiltonian error.

Parameters

prepNQPauliState

The state that is prepared.

errorNQPauliOp

The type (as a pauli operator) of Hamiltonian error.

observableNQPauliOp

The observable whose expectation value is measured. Note: giving a NQPauliState will be treated as an N-qubit Pauli operator whose sign is the product of the signs of the NQPauliState’s per-qubit basis signs.

Returns

float

pygsti.extras.idletomography.idtcore.stochastic_outcome(prep, error, meas)

Computes the “expected” outcome when the stochastic error error occurs between preparing in prep and measuring in basis meas.

Note: currently, the preparation and measurement bases must be the same (up to signs) or an AssertionError is raised. (If they’re not, there isn’t a single expected outcome).

Parameters

prepNQPauliState

The state that is prepared.

errorNQPauliOp

The type (as a pauli operator) of Stochastic error.

measNQPauliState

The basis which is measured. The ‘signs’ of the basis Paulis determine which state is measured as a ‘0’ vs. a ‘1’. (essentially the POVM.)

Returns

NQOutcome

pygsti.extras.idletomography.idtcore.stochastic_jac_element(prep, error, meas, outcome)

Computes the Jacobian matrix element for a Stochastic error: how the probability of outcome changes with respect to the rate of error when preparing state prep and measuring in basis meas.

Parameters

prepNQPauliState

The state that is prepared.

errorNQPauliOp

The type (as a pauli operator) of Stochastic error.

measNQPauliState

The basis that is measured (essentially the POVM).

outcomeNQOutcome

The measurement outcome that is considered.

Returns

float

pygsti.extras.idletomography.idtcore.affine_jac_element(prep, error, meas, outcome)

Computes the Jacobian matrix element for a Affine error: how the probability of outcome changes with respect to the rate of error when preparing state prep and measuring in basis meas.

Note: Affine error maps leave qubits corresponging to I’s in error alone. An affine error is defined as replacing portions of the density matrix corresponding to non-trivial Pauli operators with those operators.

Parameters

prepNQPauliState

The state that is prepared.

errorNQPauliOp

The type (as a pauli operator) of Affine error.

measNQPauliState

The basis that is measured (essentially the POVM).

outcomeNQOutcome

The measurement outcome that is considered.

Returns

float

pygsti.extras.idletomography.idtcore.affine_jac_obs_element(prep, error, observable)

Computes the Jacobian matrix element for a Affine error: how the expectation value of observable changes with respect to the rate of error when preparing state prep.

Note: Affine error maps leave qubits corresponging to I’s in error alone. An affine error is defined as replacing portions of the density matrix corresponding to non-trivial Pauli operators with those operators.

Parameters

prepNQPauliState

The state that is prepared.

errorNQPauliOp

The type (as a pauli operator) of Affine error.

observableNQPauliOp

The observable whose expectation value is measured.

Returns

float

pygsti.extras.idletomography.idtcore.idle_tomography_fidpairs(nqubits, maxweight=2, include_hamiltonian=True, include_stochastic=True, include_affine=True, ham_tmpl='auto', preferred_prep_basis_signs=('+', '+', '+'), preferred_meas_basis_signs=('+', '+', '+'))

Construct a list of Pauli-basis fiducial pairs for idle tomography.

This function constructs the “standard” set of fiducial pairs used to generate idle tomography sequences which probe Hamiltonian, Stochastic, and/or Affine errors in an idle gate.

Parameters

nqubitsint

The number of qubits.

maxweightint, optional

The maximum weight of errors to consider.

include_hamiltonian, include_stochastic, include_affinebool, optional

Whether to include fiducial pairs for finding Hamiltonian-, Stochastic-, and Affine-type errors.

ham_tmpltuple, optional

A tuple of length-maxweight Pauli strings (i.e. string w/letters “X”, “Y”, or “Z”), describing how to construct the fiducial pairs used to detect Hamiltonian errors. The special (and default) value “auto” uses (“X”,”Y”,”Z”) and (“ZY”,”ZX”,”XZ”,”YZ”,”YX”,”XY”) for maxweight equal to 1 and 2, repectively, and will generate an error if maxweight > 2.

preferred_prep_basis_signs, preferred_meas_basis_signs: tuple, optional

A 3-tuple of “+” or “-” strings indicating which sign for preparing or measuring in the X, Y, and Z bases is preferable. Usually one orientation if preferred because it’s easier to achieve using the native model.

Returns

list

a list of (prep,meas) 2-tuples of NQPauliState objects, each of length nqubits, representing the fiducial pairs.

pygsti.extras.idletomography.idtcore.preferred_signs_from_paulidict(pauli_basis_dict)

Infers what the preferred basis signs are based on the length of gate-name strings in pauli_basis_dict (shorter strings are preferred).

Parameters

pauli_basis_dictdict

A dictionary w/keys like “+X” or “-Y” and values that are tuples of gate names (not labels, which include qubit or other state-space designations), e.g. (“Gx”,”Gx”).

Returns

tuple

A 3-tuple of elements in {“+”, “-“}, exactly the format expected by preferred_*_basis_signs arguments of idle_tomography_fidpairs().

pygsti.extras.idletomography.idtcore.fidpairs_to_pauli_fidpairs(fidpairs_list, pauli_basis_dicts, nqubits)

Translate GatesString-type fiducial pairs to NQPauliState-type “Pauli fiducial pairs” using pauli_basis_dicts.

Parameters

fidpairs_listlist

A list whose elements are 2-tuples of Circuit objects.

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

nqubitsint

The number of qubits. Needed because Circuit objects don’t contain this information.

Returns

list

A list of 2-tuples of NQPauliState objects.

pygsti.extras.idletomography.idtcore.determine_paulidicts(model)

Intelligently determine preparation and measurement Pauli basis dictionaries from a Model.

The returned dictionaries are required for various parts of idle tomography, as they bridge the native model’s gates to the “Pauli basis language” used in idle tomography.

Parameters

modelModel

The model which defines the available preparation, measurement, and operations. It is assumed that model’s operation are expressed in a Pauli-product basis.

Returns

pauli_basis_dicts or None

If successful, a (prepDict,measureDict) 2-tuple of Pauli basis dictionaries. If unsuccessful, None.

pygsti.extras.idletomography.idtcore.make_idle_tomography_list(nqubits, max_lengths, pauli_basis_dicts, maxweight=2, idle_string=((),), include_hamiltonian=True, include_stochastic=True, include_affine=True, ham_tmpl='auto', preferred_prep_basis_signs='auto', preferred_meas_basis_signs='auto')

Construct the list of experiments needed to perform idle tomography.

Parameters

nqubitsint

The number of qubits.

max_lengthslist

A list of maximum germ-power lengths. Each specifies a number many times to repeat the idle gate, and typically this is a list of the powers of 2 preceded by zero, e.g. [0,1,2,4,16]. The largest value in this list should be chosen to be the maximum number of idle gates you want to perform in a row (typically limited by performance or time constraints).

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

maxweightint, optional

The maximum weight of errors to consider.

idle_stringCircuit-like, optional

A Circuit or tuple of operation labels that represents the idle gate being characterized by idle tomography.

include_hamiltonian, include_stochastic, include_affinebool, optional

Whether to include fiducial pairs for finding Hamiltonian-, Stochastic-, and Affine-type errors.

ham_tmpltuple, optional

A tuple of length-maxweight Pauli strings (i.e. string w/letters “X”, “Y”, or “Z”), describing how to construct the fiducial pairs used to detect Hamiltonian errors. The special (and default) value “auto” uses (“X”,”Y”,”Z”) and (“ZY”,”ZX”,”XZ”,”YZ”,”YX”,”XY”) for maxweight equal to 1 and 2, repectively, and will generate an error if maxweight > 2.

preferred_prep_basis_signs, preferred_meas_basis_signs: tuple, optional

A 3-tuple of “+” or “-” strings indicating which sign for preparing or measuring in the X, Y, and Z bases is preferable. Usually one orientation if preferred because it’s easier to achieve using the native model. Additionally, the special (and default) value “auto” may be used, in which case preferred_signs_from_paulidict() is used to choose preferred signs based on pauli_basis_dicts.

Returns

list

A list of Circuit objects.

pygsti.extras.idletomography.idtcore.make_idle_tomography_lists(nqubits, max_lengths, pauli_basis_dicts, maxweight=2, idle_string=((),), include_hamiltonian=True, include_stochastic=True, include_affine=True, ham_tmpl='auto', preferred_prep_basis_signs='auto', preferred_meas_basis_signs='auto')

Construct lists of experiments, one for each maximum-length value, needed to perform idle tomography. This is potentiall useful for running GST on idle tomography data.

Parameters

nqubitsint

The number of qubits.

max_lengthslist

A list of maximum germ-power lengths. Each specifies a number many times to repeat the idle gate, and typically this is a list of the powers of 2 preceded by zero, e.g. [0,1,2,4,16]. The largest value in this list should be chosen to be the maximum number of idle gates you want to perform in a row (typically limited by performance or time constraints).

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

maxweightint, optional

The maximum weight of errors to consider.

idle_stringCircuit-like, optional

A Circuit or tuple of operation labels that represents the idle gate being characterized by idle tomography.

include_hamiltonian, include_stochastic, include_affinebool, optional

Whether to include fiducial pairs for finding Hamiltonian-, Stochastic-, and Affine-type errors.

ham_tmpltuple, optional

A tuple of length-maxweight Pauli strings (i.e. string w/letters “X”, “Y”, or “Z”), describing how to construct the fiducial pairs used to detect Hamiltonian errors. The special (and default) value “auto” uses (“X”,”Y”,”Z”) and (“ZY”,”ZX”,”XZ”,”YZ”,”YX”,”XY”) for maxweight equal to 1 and 2, repectively, and will generate an error if maxweight > 2.

preferred_prep_basis_signs, preferred_meas_basis_signs: tuple, optional

A 3-tuple of “+” or “-” strings indicating which sign for preparing or measuring in the X, Y, and Z bases is preferable. Usually one orientation if preferred because it’s easier to achieve using the native model. Additionally, the special (and default) value “auto” may be used, in which case preferred_signs_from_paulidict() is used to choose preferred signs based on pauli_basis_dicts.

Returns

list

A list of lists of Circuit objects, one list per max-L value.

pygsti.extras.idletomography.idtcore.compute_observed_samebasis_err_rate(dataset, pauli_fidpair, pauli_basis_dicts, idle_string, outcome, max_lengths, fit_order=1)

Extract the observed error rate from a series of experiments which prepares and measures in the same Pauli basis and tracks a particular outcome.

Parameters

datasetDataSet

The set of data counts (observations) to use.

pauli_fidpairtuple

A (prep,measure) 2-tuple of NQPauliState objects specifying the prepation state and measurement basis.

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

idle_stringCircuit

The Circuit representing the idle operation being characterized.

outcomeNQOutcome

The outcome being tracked.

max_lengthslist

A list of maximum germ-power lengths. The seriese of sequences considered is prepFiducial + idle_string^L + measFiducial, where L ranges over the values in max_lengths.

fit_orderint, optional

The polynomial order used to fit the observed data probabilities.

Returns

dict

A dictionary of information about the fit, including the observed error rate and the data points that were fit.

pygsti.extras.idletomography.idtcore.compute_observed_diffbasis_err_rate(dataset, pauli_fidpair, pauli_basis_dicts, idle_string, observable, max_lengths, fit_order=1)

Extract the observed error rate from a series of experiments which prepares and measures in different Pauli basis and tracks the expectation value of a particular observable.

Parameters

datasetDataSet

The set of data counts (observations) to use.

pauli_fidpairtuple

A (prep,measure) 2-tuple of NQPauliState objects specifying the prepation state and measurement basis.

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

idle_stringCircuit

The Circuit representing the idle operation being characterized.

observableNQPauliOp

The observable whose expectation value is being tracked.

max_lengthslist

A list of maximum germ-power lengths. The seriese of sequences considered is prepFiducial + idle_string^L + measFiducial, where L ranges over the values in max_lengths.

fit_orderint, optional

The polynomial order used to fit the observed data probabilities.

Returns

dict

A dictionary of information about the fit, including the observed error rate and the data points that were fit.

pygsti.extras.idletomography.idtcore.do_idle_tomography(nqubits, dataset, max_lengths, pauli_basis_dicts, maxweight=2, idle_string=((),), include_hamiltonian='auto', include_stochastic='auto', include_affine='auto', advanced_options=None, verbosity=0, comm=None)

Analyze dataset using the idle tomography protocol to characterize idle_string.

Parameters

nqubitsint

The number of qubits.

datasetDataSet

The set of data counts (observations) to use.

max_lengthslist

A list of maximum germ-power lengths. Each specifies a number many times to repeat the idle gate, and typically this is a list of the powers of 2 preceded by zero, e.g. [0,1,2,4,16]. The largest value in this list should be chosen to be the maximum number of idle gates you want to perform in a row (typically limited by performance or time constraints).

pauli_basis_dictstuple

A (prepPauliBasisDict,measPauliBasisDict) tuple of dictionaries specifying the way to prepare and measure in Pauli bases. See preferred_signs_from_paulidict() for details on each dictionary’s format.

maxweightint, optional

The maximum weight of errors to consider.

idle_stringCircuit-like, optional

A Circuit or tuple of operation labels that represents the idle gate being characterized by idle tomography.

include_hamiltonian, include_stochastic, include_affine{True,False,”auto”}

Whether to extract Hamiltonian-, Stochastic-, and Affine-type intrinsic errors. If “auto” is specified, then the corresponding error-type is extracted only if there is enough data to reliably infer them (i.e. enough data to construct “full rank” Jacobian matrices).

advanced_optionsdict, optional

A dictionary of optional advanced arguments which influence the way idle tomography is performed. Allowed keys are:

  • “jacobian mode”: {“separate”,”together”} how to evaluate jacobians

  • “preferred_prep_basis_signs” : 3-tuple of “+”/”-” or default=”auto”

  • “preferred_meas_basis_signs” : 3-tuple of “+”/”-” or default=”auto”

  • “pauli_fidpairs”: alternate list of pauli fiducial pairs to use

  • “fit order” : integer order for polynomial fits to data

  • “ham_tmpl” : see make_idle_tomography_list()

verbosityint, optional

How much detail to send to stdout.

commmpi4py.MPI.Comm, optional

When not None, an MPI communicator for distributing the computation across multiple processors.

Returns

IdleTomographyResults