What additional options are available in PEA?#
execute_with_pea() exposes several optional arguments beyond the required circuit, executor,
scale_factors, noise_model, epsilon, and extrapolation_method.
This page describes each one.
Controlling the sampling budget#
The number of probabilistically sampled circuits per scale factor controls the statistical
uncertainty of the PEA estimate.
By default, this is derived from the precision argument:
where \(\gamma\) is the one-norm of the quasi-probability representation (always 1.0 for PEA).
A smaller precision value gives more samples and a lower-variance estimate, at the cost of
more circuit executions.
mitigated = pea.execute_with_pea(
circuit,
executor,
scale_factors=[1.0, 1.2, 1.6],
noise_model="local_depolarizing",
epsilon=0.005,
extrapolation_method=LinearFactory.extrapolate,
precision=0.05, # smaller precision => more samples
)
If you want to fix the number of samples directly, pass num_samples instead.
When num_samples is provided, precision is ignored:
mitigated = pea.execute_with_pea(
...,
num_samples=500,
)
Reproducibility with random_state#
PEA sampling is stochastic.
Pass an integer seed or a numpy.random.RandomState to make results reproducible:
mitigated = pea.execute_with_pea(
...,
random_state=42,
)
Inspecting raw results with full_output#
Setting full_output=True returns a tuple (pea_value, pea_data) where pea_data is a
dictionary containing the intermediate results from each step:
pea_value, pea_data = pea.execute_with_pea(
...,
full_output=True,
)
pea_data.keys()
# dict_keys(['num_samples', 'precision', 'pea_value',
# 'scaled_expectation_values', 'scaled_sampled_circuits'])
scaled_expectation_values holds the raw executor results for each sampled circuit at each
scale factor, and scaled_sampled_circuits holds the corresponding circuits.
These are useful for debugging or post-processing.
Forcing re-execution of duplicate circuits#
By default, Mitiq deduplicates circuits before execution (i.e. identical circuits are run
once and their results reused). To disable this and force every sampled circuit to be
executed independently pass force_run_all=True:
mitigated = pea.execute_with_pea(
...,
force_run_all=True,
)
Observables and executors#
If you pass an observable to execute_with_pea(), the executor is assumed to return
a MeasurementResult and Mitiq computes the expectation value of the observable for you.
If no observable is provided, the executor must return the expectation value directly.
Supported noise models#
Attention
The only supported noise models are currently "local_depolarizing" and "global_depolarizing".
Please open an issue to request additional noise models.