ZneOptions
class ZneOptions(amplifier=Unset, noise_factors=Unset, extrapolator=Unset, extrapolated_noise_factors=Unset)
Bases: object
Zero noise extrapolation mitigation options. This is only used by the V2 Estimator.
Any V2 estimator is guaranteed to return data fields called evs
and stds
that report the desired expectation value estimates and errors, respectively. When ZNE options are enabled in the runtime estimator, additional data is returned.
In particular, suppose an input pub has observable array shape obs_shape
and parameter values shape par_shape
, with corresponding pub shape shape=np.broadcast_shapes(obs_shape, par_shape)
. Then the corresponding pub result will additionally contain:
-
pub_result.data.evs_extrapolated and pub_result.data.stds_extrapolated,
both with shape
(*shape, num_extrapolators, num_evaluation_points)
, wherenum_extrapolators
is the length of the list ofoptions.resilience.zne.extrapolators
, andnum_evaluation_points
is the length of the listoptions.resilience.extrapolated_noise_factors
. These values provide evaluations of every extrapolator at every specified noise extrapolation value. -
pub_result.data.evs_noise_factors
,pub_result.data.stds_noise_factors
, andensemble_stds_noise_factors
all have shape(*shape, num_noise_factors)
wherenum_noise_factors
is the length ofoptions.resilience.zne.noise_factors
. These values provide evaluations of the best-fit model at each of the noise amplifications. In the case of no twirling, both*stds*
arrays will be equal, otherwise,stds_noise_factors
is derived from the spread over twirling samples, whereasensemble_stds_noise_factors
assumes only shot noise and no drift.
Technical note: for single observables with multiple basis terms it might turn out that multiple extrapolation methods are used in the same expectation value, for example, XX
gets linearly extrapolated but XY
gets exponentially extrapolated in the observable {"XX": 0.5, "XY": 0.5}
. Let’s call this a heterogeneous fit. The data from (2) is evaluated from heterogeneous fits by selecting the best fit for every individual distinct term, whereas data from (1) is evaluated from forced homogenous fits, one for each provided extrapolator. If your work requires a nuanced distinction in this regard, we presently recommend that you use single-term observables in addition to your multi-term observables.
Parameters
-
amplifier (UnsetType | Literal['gate_folding', 'gate_folding_front', 'gate_folding_back', 'pea']) –
Which technique to use for amplifying noise. One of:
-
”gate_folding” (default) uses 2-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are chosen randomly.
-
”gate_folding_front” uses 2-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are selected from the front of the topologically ordered DAG circuit.
-
”gate_folding_back” uses 2-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are selected from the back of the topologically ordered DAG circuit.
-
”pea” uses a technique called Probabilistic Error Amplification (PEA) to amplify noise.
When this option is selected, gate twirling will always be used whether or not it has been enabled in the options.
In this technique, the twirled noise model of each each unique layer of entangling gates in your ISA circuits is learned beforehand, see
LayerNoiseLearningOptions
for relevant learning options. Once complete, your circuits are executed at each noise factor, where every entangling layer of your circuits is amplified by probabilistically injecting single-qubit noise proportional to the corresponding learned noise model.
-
-
noise_factors (UnsetType | Sequence[float]) – Noise factors to use for noise amplification. Default:
(1, 1.5, 2)
for PEA, and(1, 3, 5)
otherwise. -
extrapolated_noise_factors (UnsetType | Sequence[float]) – Noise factors to evaluate the fit extrapolation models at. If unset, this will default to
[0, *noise_factors]
. This option does not affect execution or model fitting in any way, it only determines the points at which theextrapolator
s are evaluated to be returned in the data fields calledevs_extrapolated
andstds_extrapolated
. -
extrapolator (UnsetType | Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback'] | ~typing.Sequence[~typing.Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback']]) –
Extrapolator(s) to try (in order) for extrapolating to zero noise. The available options are:
"exponential"
, which fits the data using an exponential decaying function defined as , where is the value at zero noise () and :math:` au>0` is a positive rate."double_exponential"
, which uses a sum of two exponential as in Ref. 1."polynomial_degree_(1 <= k <= 7)"
, which uses a polynomial function defined as ."linear"
, which is equivalent to"polynomial_degree_1"
."fallback"
, which simply returns the raw data corresponding to the lowest noise factor (typically1
) without performing any sort of extrapolation.
If more than one extrapolator is specified, the
evs
andstds
reported in the result’s data refer to the first one, while the extrapolated values (evs_extrapolated
andstds_extrapolated
) are sorted according to the order of the extrapolators provided.Default:
("exponential", "linear")
.
References
- Z. Cai, Multi-exponential error extrapolation and combining error mitigation techniques for NISQ applications, npj Quantum Inf 7, 80 (2021)
Attributes
amplifier
Type: UnsetType | Literal['gate_folding', 'gate_folding_front', 'gate_folding_back', 'pea']
Default value: Unset
extrapolated_noise_factors
Type: UnsetType | Sequence[float]
Default value: Unset
extrapolator
Type: UnsetType | Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback'] | Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback']]
Default value: Unset
noise_factors
Type: UnsetType | Sequence[float]
Default value: Unset