Struct qoqo::noise_models::DecoherenceOnGateModelWrapper

source ·
pub struct DecoherenceOnGateModelWrapper { /* private fields */ }
Expand description

Error model for noise that is only present on gate executions.

Adds additional noise when specific gates (identified by hqslang name and qubits acted on) are executed. The noise is given in the form of a struqture.spins.PlusMinusLindbladNoiseOperator the same way it is for the ContinuousDecoherence model.

Example:

from qoqo.noise_models import DecoherenceOnGateModel
from struqture_py.spins import (PlusMinusLindbladNoiseOperator, PlusMinusProduct)

noise_model = DecoherenceOnGateModel()
lindblad_noise = PlusMinusLindbladNoiseOperator()
lindblad_noise.add_operator_product(
   (PlusMinusProduct().z(0), PlusMinusProduct().z(0)),
   0.9)
lindblad_noise.add_operator_product(
   (PlusMinusProduct().z(1), PlusMinusProduct().z(1)),
   0.9)

noise_model = noise_model.set_two_qubit_term(
"CNOT", 0,1,
lindblad_noise
)

Implementations§

source§

impl DecoherenceOnGateModelWrapper

source

pub fn new() -> DecoherenceOnGateModelWrapper

Create a new DecoherenceOnGateModel.

source

pub fn set_single_qubit_gate_error( &self, gate: &str, qubit: usize, noise_operator: &Bound<'_, PyAny> ) -> PyResult<Self>

Set extra noise for a single qubit gate.

Args: gate (str): The name of the gate. qubit (int): The qubit the gate acts on. noise_operator (struqture_py.spins.PlusMinusLindbladNoiseOperator): The noise affecting system when gate is applied.

Returns: Self: The error model with the new noise on gate set.

Raises: PyTypeError: Noise operator is not a struqture.spins.PlusMinusLindbladNoiseOperator.

source

pub fn get_single_qubit_gate_error( &self, gate: &str, qubit: usize ) -> Option<PlusMinusLindbladNoiseOperatorWrapper>

Return the extra noise for a single qubit gate, if it exists.

Args: gate (str): The name of the gate. qubit (int): The qubit the gate acts on.

Returns Optional[struqture_py.spins.PlusMinusLindbladNoiseOperator]: The error model applied when gate is applied.

source

pub fn set_two_qubit_gate_error( &self, gate: &str, control: usize, target: usize, noise_operator: &Bound<'_, PyAny> ) -> PyResult<Self>

Set extra noise for a two qubit gate.

Args: gate (str): The name of the gate. control (int): The control qubit the gate acts on. target (int): The target qubit the gate acts on. noise_operator (struqture_py.spins.PlusMinusLindbladNoiseOperator): The noise affecting system when gate is applied.

Returns: Self: The error model with the new noise on gate set.

Raises: PyTypeError: Noise operator is not a struqture.spins.PlusMinusLindbladNoiseOperator.

source

pub fn get_two_qubit_gate_error( &self, gate: &str, control: usize, target: usize ) -> Option<PlusMinusLindbladNoiseOperatorWrapper>

Return the extra noise for a single qubit gate, if it exists.

Args: gate (str): The name of the gate. control (int): The control qubit the gate acts on. target (int): The target qubit the gate acts on.

Returns Optional[struqture_py.spins.PlusMinusLindbladNoiseOperator]: The error model applied when gate is applied.

source

pub fn set_three_qubit_gate_error( &self, gate: &str, control0: usize, control1: usize, target: usize, noise_operator: &Bound<'_, PyAny> ) -> PyResult<Self>

Set extra noise for a single qubit gate.

Args: gate (str): The name of the gate. control0 (int): The first control qubit the gate acts on. control1 (int): The second control qubit the gate acts on. target (int): The target qubit the gate acts on. noise_operator (struqture_py.spins.PlusMinusLindbladNoiseOperator): The noise affecting system when gate is applied.

Returns: Self: The error model with the new noise on gate set.

Raises: PyTypeError: Noise operator is not a struqture.spins.PlusMinusLindbladNoiseOperator.

source

pub fn get_three_qubit_gate_error( &self, gate: &str, control0: usize, control1: usize, target: usize ) -> Option<PlusMinusLindbladNoiseOperatorWrapper>

Return the extra noise for a three qubit gate, if it exists.

Args: gate (str): The name of the gate. control0 (int): The first control qubit the gate acts on. control1 (int): The second control qubit the gate acts on. target (int): The target qubit the gate acts on.

Returns Optional[struqture_py.spins.PlusMinusLindbladNoiseOperator]: The error model applied when gate is applied.

source

pub fn set_multi_qubit_gate_error( &self, gate: &str, qubits: Vec<usize>, noise_operator: &Bound<'_, PyAny> ) -> PyResult<Self>

Set extra noise for a multi qubit gate.

Args: gate (str): The name of the gate. qubits (list): The qubits the gate acts on. noise_operator (struqture_py.spins.PlusMinusLindbladNoiseOperator): The noise affecting system when gate is applied.

Returns: Self: The error model with the new noise on gate set.

Raises: PyTypeError: Noise operator is not a struqture.spins.PlusMinusLindbladNoiseOperator.

source

pub fn get_multi_qubit_gate_error( &self, gate: &str, qubits: Vec<usize> ) -> Option<PlusMinusLindbladNoiseOperatorWrapper>

Return the extra noise for a multi qubit gate, if it exists.

Args: gate (str): The name of the gate. qubits (List[int]): The qubits the gate acts on.

Returns Optional[struqture_py.spins.PlusMinusLindbladNoiseOperator]: The error model applied when gate is applied.

source

pub fn from_bincode( input: &Bound<'_, PyAny> ) -> PyResult<DecoherenceOnGateModelWrapper>

Convert the bincode representation of the Noise-Model to a device using the bincode crate.

Args: input (ByteArray): The serialized Noise-Model (in bincode form).

Returns: The deserialized Noise-Model.

Raises: TypeError: Input cannot be converted to byte array. ValueError: Input cannot be deserialized to selected Noise-Model.

source

pub fn from_json(input: &str) -> PyResult<DecoherenceOnGateModelWrapper>

Convert the json representation of a device to a Noise-Model.

Args: input (str): The serialized device in json form.

Returns: The deserialized device.

Raises: ValueError: Input cannot be deserialized to selected Noise-Model.

source

pub fn __copy__(&self) -> Self

Returns a copy of the device (copy here produces a deepcopy).

Returns: A deep copy of self.

source

pub fn __deepcopy__(&self, _memodict: &Bound<'_, PyAny>) -> Self

Creates deep copy of Noise-Model.

Returns: A deep copy of self.

source

pub fn to_bincode(&self) -> PyResult<Py<PyByteArray>>

Return the bincode representation of the Noise-Model using the bincode crate.

Returns: ByteArray: The serialized Noise-Model (in bincode form).

Raises: ValueError: Cannot serialize Noise-Model to bytes.

source

pub fn to_json(&self) -> PyResult<String>

Return the json representation of the Noise-Model.

Returns: str: The serialized form of Noise-Model.

Raises: ValueError: Cannot serialize Noise-Model to json.

source§

impl DecoherenceOnGateModelWrapper

source

pub fn from_pyany(input: &Bound<'_, PyAny>) -> PyResult<NoiseModel>

Fallible conversion of generic python object..

Trait Implementations§

source§

impl Clone for DecoherenceOnGateModelWrapper

source§

fn clone(&self) -> DecoherenceOnGateModelWrapper

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DecoherenceOnGateModelWrapper

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for DecoherenceOnGateModelWrapper

source§

fn default() -> DecoherenceOnGateModelWrapper

Returns the “default value” for a type. Read more
source§

impl HasPyGilRef for DecoherenceOnGateModelWrapper

§

type AsRefTarget = PyCell<DecoherenceOnGateModelWrapper>

Utility type to make Py::as_ref work.
source§

impl IntoPy<Py<PyAny>> for DecoherenceOnGateModelWrapper

source§

fn into_py(self, py: Python<'_>) -> PyObject

Performs the conversion.
source§

impl PartialEq for DecoherenceOnGateModelWrapper

source§

fn eq(&self, other: &DecoherenceOnGateModelWrapper) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PyClass for DecoherenceOnGateModelWrapper

§

type Frozen = True

Whether the pyclass is frozen. Read more
source§

impl PyClassImpl for DecoherenceOnGateModelWrapper

source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
§

type BaseType = PyAny

Base class
§

type ThreadChecker = SendablePyClass<DecoherenceOnGateModelWrapper>

This handles following two situations: Read more
§

type Inventory = Pyo3MethodsInventoryForDecoherenceOnGateModelWrapper

§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::ImmutableChild

Immutable or mutable
§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
source§

fn items_iter() -> PyClassItemsIter

source§

fn doc(py: Python<'_>) -> PyResult<&'static CStr>

Rendered class doc
source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

source§

fn dict_offset() -> Option<isize>

source§

fn weaklist_offset() -> Option<isize>

source§

impl PyClassNewTextSignature<DecoherenceOnGateModelWrapper> for PyClassImplCollector<DecoherenceOnGateModelWrapper>

source§

fn new_text_signature(self) -> Option<&'static str>

source§

impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a DecoherenceOnGateModelWrapper

§

type Holder = Option<PyRef<'py, DecoherenceOnGateModelWrapper>>

source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder ) -> PyResult<Self>

source§

impl PyTypeInfo for DecoherenceOnGateModelWrapper

source§

const NAME: &'static str = "DecoherenceOnGateModel"

Class name.
source§

const MODULE: Option<&'static str> = ::core::option::Option::None

Module name, if any.
source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
source§

fn type_object(py: Python<'_>) -> &PyType

👎Deprecated since 0.21.0: PyTypeInfo::type_object will be replaced by PyTypeInfo::type_object_bound in a future PyO3 version
Returns the safe abstraction over the type object.
source§

fn type_object_bound(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
source§

fn is_type_of(object: &PyAny) -> bool

👎Deprecated since 0.21.0: PyTypeInfo::is_type_of will be replaced by PyTypeInfo::is_type_of_bound in a future PyO3 version
Checks if object is an instance of this type or a subclass of this type.
source§

fn is_type_of_bound(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
source§

fn is_exact_type_of(object: &PyAny) -> bool

👎Deprecated since 0.21.0: PyTypeInfo::is_exact_type_of will be replaced by PyTypeInfo::is_exact_type_of_bound in a future PyO3 version
Checks if object is an instance of this type.
source§

fn is_exact_type_of_bound(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
source§

impl DerefToPyAny for DecoherenceOnGateModelWrapper

source§

impl StructuralPartialEq for DecoherenceOnGateModelWrapper

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DynClone for T
where T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromPyObject<'_> for T
where T: PyClass + Clone,

source§

fn extract_bound(obj: &Bound<'_, PyAny>) -> Result<T, PyErr>

Extracts Self from the bound smart pointer obj. Read more
source§

fn extract(ob: &'py PyAny) -> Result<Self, PyErr>

Extracts Self from the source GIL Ref obj. Read more
source§

impl<'py, T> FromPyObjectBound<'_, 'py> for T
where T: FromPyObject<'py>,

source§

fn from_py_object_bound(ob: Borrowed<'_, 'py, PyAny>) -> Result<T, PyErr>

Extracts Self from the bound smart pointer obj. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> PyErrArguments for T
where T: IntoPy<Py<PyAny>> + Send + Sync,

source§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
source§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

source§

const NAME: &'static str = <T as PyTypeInfo>::NAME

Name of self. This is used in error messages, for example.
source§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,

source§

impl<T> Ungil for T
where T: Send,