"""Validation classes for Quantinuum Systems noise models."""
from typing import Optional, Tuple, Union
from typing_extensions import Self
from pydantic import AliasChoices, Field, model_validator
from .base import BaseModel
[docs]
class HeliosErrorParams(BaseModel):
"""
Error model configuration for emulation of Quantinuum's Helios System.
parameters:
p_init: Probability of error during preparation. Alias: p_prep.
p_meas_0: Probability of flipping 0 to 1 during measurement.
p_meas_1: Probability of flipping 1 to 0 during measurement.
p1: Probability of error after single-qubit gates.
p2: Probability of error after two-qubit gates.
p1_emission_ratio: Emission ratio for single-qubit gates.
p2_emission_ratio: The proportion of two-qubit errors that are emission faults.
p_prep_leak_ratio: Preparation leakage ratio.
p1_seepage_prob: Probability of a leaked qubit being seeped (released from leakage) for
single-qubit.
p2_seepage_prob: Probability of a leaked qubit being seeped (released from leakage) for
two-qubit.
scale: Overall scaling factor.
memory_scale: Memory scaling factor.
init_scale: Initial scaling factor. Alias: prep_scale.
meas_scale: Measurement scaling factor.
p1_scale: Single-qubit gate scaling factor.
p2_scale: Two-qubit gate scaling factor.
emission_scale: Emission scaling factor.
przz_a: Scaling parameters for RZZ gate error rate - coefficient a.
przz_b: Scaling parameters for RZZ gate error rate - coefficient b.
przz_c: Scaling parameters for RZZ gate error rate - coefficient c.
przz_d: Scaling parameters for RZZ gate error rate - coefficient d.
przz_power: Power parameter for RZZ error scaling.
p_crosstalk_meas: Probability of crosstalk during measurement operations.
Alias: p_meas_crosstalk.
p_crosstalk_init: Probability of crosstalk during initialization operations.
Alias: p_prep_crosstalk.
coherent_dephasing: Whether to include coherent dephasing.
coherent_to_incoherent_factor: Coherent to incoherent conversion factor.
leak2depolar: Replace leakage with general noise.
p_meas_crosstalk_scale: Measurement crosstalk rescale factor.
p_prep_crosstalk_scale: Preparation crosstalk rescale factor.
crosstalk_per_gate: Whether to apply crosstalk on a per-gate basis.
linear_dephasing_rate: Linear rate for idle noise.
Alias: p_idle_linear_rate.
quadratic_dephasing_rate: Quadratic rate for idle noise.
Alias: p_idle_quadratic_rate.
p2_idle: Stochastic idle noise after each two-qubit gate.
"""
p_init: float = Field(
default=0.0,
ge=0.0,
le=1.0,
validation_alias=AliasChoices("p_init", "p_prep"),
serialization_alias="p_prep",
)
p_meas_0: float = Field(default=0.0, ge=0.0, le=1.0)
p_meas_1: float = Field(default=0.0, ge=0.0, le=1.0)
p1: float = Field(default=0.0, ge=0.0, le=1.0)
p2: float = Field(default=0.0, ge=0.0, le=1.0)
p1_emission_ratio: float = Field(default=0.0, ge=0.0, le=1.0)
p2_emission_ratio: float = Field(default=0.0, ge=0.0, le=1.0)
p_prep_leak_ratio: float = Field(default=0.0, ge=0.0, le=1.0)
p1_seepage_prob: float = Field(default=0.0, ge=0.0, le=1.0)
p2_seepage_prob: float = Field(default=0.0, ge=0.0, le=1.0)
scale: float = Field(default=1.0, ge=0.0)
memory_scale: float = Field(default=1.0, ge=0.0)
init_scale: float = Field(
default=1.0,
ge=0.0,
validation_alias=AliasChoices("init_scale", "prep_scale"),
serialization_alias="prep_scale",
)
meas_scale: float = Field(default=1.0, ge=0.0)
p1_scale: float = Field(default=1.0, ge=0.0)
p2_scale: float = Field(default=1.0, ge=0.0)
emission_scale: float = Field(default=1.0, ge=0.0)
przz_a: float | None = None
przz_b: float | None = None
przz_c: float | None = None
przz_d: float | None = None
przz_power: float = 1.0
p_crosstalk_meas: float = Field(
default=0.0,
ge=0.0,
le=1.0,
validation_alias=AliasChoices("p_crosstalk_meas", "p_meas_crosstalk"),
serialization_alias="p_meas_crosstalk",
)
p_crosstalk_init: float = Field(
default=0.0,
ge=0.0,
le=1.0,
validation_alias=AliasChoices("p_crosstalk_init", "p_prep_crosstalk"),
serialization_alias="p_prep_crosstalk",
)
coherent_dephasing: bool = True
coherent_to_incoherent_factor: float = 1.5
leak2depolar: bool = False
p_meas_crosstalk_scale: float = 1.0
p_prep_crosstalk_scale: float = 1.0
crosstalk_per_gate: bool | None = None
linear_dephasing_rate: float = Field(
default=0.0,
ge=0.0,
validation_alias=AliasChoices("linear_dephasing_rate", "p_idle_linear_rate"),
serialization_alias="p_idle_linear_rate",
)
quadratic_dephasing_rate: float = Field(
default=0.0,
ge=0.0,
validation_alias=AliasChoices(
"quadratic_dephasing_rate", "p_idle_quadratic_rate"
),
serialization_alias="p_idle_quadratic_rate",
)
p2_idle: float = Field(default=0.0, ge=0.0)
@model_validator(mode="after")
def check_valid_config(self) -> Self:
"""Validate the error model configuration."""
przz_params = [self.przz_a, self.przz_b, self.przz_c, self.przz_d]
if not (
all(x is None for x in przz_params)
or all(x is not None for x in przz_params)
):
raise ValueError(
"When setting przz_x, you must either set the four of them, or none."
)
return self
[docs]
class UserErrorParams(BaseModel):
"""User provided error values that override machine values for
emulation of Quantinuum Systems hardware.
See the Quantinuum Systems documentation for details of each parameter.
Args:
p1: Probability of a fault occurring during a 1-qubit gate.
p2: Probability of a fault occurring during a 2-qubit gate.
p_meas:
Probability of a bit flip being applied to a measurement. Either a float or a tuple of
2 floats. If it is a single float then that error rate is used to
bitflip both 0 and 1 measurement results. If a tuple is supplied, the first element is
the probability a bit flip is applied if a 0 result occurs during measurement while the
second error rate if a 1 is measured.
p_init: Probability of a fault occurring during initialization of a qubit.
p_crosstalk_meas: Probability of a crosstalk measurement fault occurring.
p_crosstalk_init: Probability of a cross-talk fault occurring during initialization of a
qubit.
p1_emission_ratio: Fraction of p1 that is spontaneous emission for a single qubit instead
of asymmetric depolarizing noise.
p2_emission_ratio: Fraction of p2 that is spontaneous emission for a 1- qubit in a 2-qubit
gate instead of asymmetric depolarizing noise.
quadratic_dephasing_rate: The frequency, f, in applying RZ(fd)during transport and idling.
linear_dephasing_rate: The probability of applying Z with p=rd where r is rate and
d is duration. This models the memory error. Note both the quadratic and linear term
can be applied in the same simulation.
coherent_to_incoherent_factor: A multiplier on the quadratic term when running stabilizer
simulations to attempt to account for increases in error due to coherent
effects in the circuit.
coherent_dephasing: A boolean value determining whether quadratic dephasing is applied.
transport_dephasing: A boolean affecting whether memory noise is applied during transport.
idle_dephasing: A boolean affecting if memory noise is applied due to qubit idling.
przz_a: Parameter a in parameterized angle scaling. See Emulator User Guide for details.
przz_b: Parameter b in parameterized angle scaling. See Emulator User Guide for details.
przz_c: Parameter c in parameterized angle scaling. See Emulator User Guide for details.
przz_d: Parameter d in parameterized angle scaling. See Emulator User Guide for details.
przz_power: Polynomial power in parameterized angle scaling. See Emulator User Guide for
details.
scale: Scale all error rates in the model linearly.
p1_scale: Scale the probability of a fault occurring during a 1-qubit gate.
p2_scale: Scale the probability of a fault occurring during a 2-qubit gate.
meas_scale: Scale the probability of a fault occurring during measurement.
init_scale: Scale the probability of a fault occurring during initialization of a qubit.
memory_scale: Linearly scale the probability of dephasing causing a fault.
emission_scale: Scale the probability that a spontaneous emission event happens during a
1- or 2-qubit gate.
crosstalk_scale: Scale the probability that measurement or initialization crosstalk events
get applied to qubits.
During mid-circuit measurement and reset (initialization), crosstalk noise can occur
that effectively measures other qubits in the trap or cause them to leak.
leakage_scale: Scale the probability that a leakage even happens during 1- or 2-qubit
gates as well as during initialization or crosstalk; on the device half the time,
spontaneous emission leads to a leakage event.
"""
# Physical Noise
p1: Optional[float] = None
p2: Optional[float] = None
p_meas: Optional[Union[float, Tuple[float, float]]] = None
p_init: Optional[float] = None
p_crosstalk_meas: Optional[float] = None
p_crosstalk_init: Optional[float] = None
p1_emission_ratio: Optional[float] = None
p2_emission_ratio: Optional[float] = None
# Dephasing Noise
quadratic_dephasing_rate: Optional[float] = None
linear_dephasing_rate: Optional[float] = None
coherent_to_incoherent_factor: Optional[float] = None
coherent_dephasing: Optional[bool] = None
transport_dephasing: Optional[bool] = None
idle_dephasing: Optional[bool] = None
# Arbitrary Angle Noise Scaling
przz_a: Optional[float] = None
przz_b: Optional[float] = None
przz_c: Optional[float] = None
przz_d: Optional[float] = None
przz_power: Optional[float] = None
# Scaling
scale: Optional[float] = None
p1_scale: Optional[float] = None
p2_scale: Optional[float] = None
meas_scale: Optional[float] = None
init_scale: Optional[float] = None
memory_scale: Optional[float] = None
emission_scale: Optional[float] = None
crosstalk_scale: Optional[float] = None
leakage_scale: Optional[float] = None