Source code for mitiq.experimental.pea.scale_amplifications

# Copyright (C) Unitary Foundation
#
# This source code is licensed under the GPL license (v3) found in the
# LICENSE file in the root directory of this source tree.

"""Tools for constructing the noise-amplified representations of ideal
operations.
"""

from collections.abc import Sequence

from cirq import Circuit

from mitiq.experimental.pea.amplifications.amplify_depolarizing import (
    amplify_noisy_ops_in_circuit_with_global_depolarizing_noise,
    amplify_noisy_ops_in_circuit_with_local_depolarizing_noise,
)
from mitiq.pec import OperationRepresentation


[docs] def scale_circuit_amplifications( ideal_circuit: Circuit, scale_factor: float, noise_model: str, epsilon: float, ) -> Sequence[OperationRepresentation]: r"""Generates a list of implementable sequences from the noise-amplified representation of the input ideal circuit based on the input noise model and baseline noise level. Args: ideal_circuit: The ideal circuit from which an implementable sequence is sampled. scale_factor: A (positive) number by which the baseline noise level is to be amplified. noise_model: A string describing the noise model to be used for the noise-scaled representations, e.g. "local_depolarizing" or "global_depolarizing". epsilon: Baseline noise level. Returns: A list of noise-amplified circuits, corresponding to each scale factor multiplied by the baseline noise level.""" if noise_model == "local_depolarizing": amp_fn = amplify_noisy_ops_in_circuit_with_local_depolarizing_noise # TODO add other existing noise models from Mitiq elif noise_model == "global_depolarizing": amp_fn = amplify_noisy_ops_in_circuit_with_global_depolarizing_noise else: raise ValueError("Noise model not supported") # TODO allow use of custom noise model return amp_fn(ideal_circuit, scale_factor * epsilon)