Struct qoqo::devices::GenericDeviceWrapper
source · pub struct GenericDeviceWrapper {
pub internal: GenericDevice,
}
Expand description
A generic device assuming all-to-all connectivity between all involved qubits.
Args: number_qubits (int): The number of qubits in the device
Note: GenericDevice uses nested HashMaps to represent the most general device connectivity. The memory usage will be inefficient for devices with large qubit numbers.
Fields§
§internal: GenericDevice
Internal storage of roqoqo::devices::SquareLatticeDevice
Implementations§
source§impl GenericDeviceWrapper
impl GenericDeviceWrapper
sourcepub fn number_qubits(&self) -> usize
pub fn number_qubits(&self) -> usize
Return number of qubits in device.
Returns: int: The number of qubits.
sourcepub fn two_qubit_edges(&self) -> Vec<(usize, usize)>
pub fn two_qubit_edges(&self) -> Vec<(usize, usize)>
Return the list of pairs of qubits linked by a native two-qubit-gate in the device.
A pair of qubits is considered linked by a native two-qubit-gate if the device can implement a two-qubit-gate between the two qubits without decomposing it into a sequence of gates that involves a third qubit of the device. The two-qubit-gate also has to form a universal set together with the available single qubit gates.
The returned vectors is a simple, graph-library independent, representation of the undirected connectivity graph of the device. It can be used to construct the connectivity graph in a graph library of the user’s choice from a list of edges and can be used for applications like routing in quantum algorithms.
Returns: Sequence[(int, int)]: List of two qubit edges in the undirected connectivity graph
sourcepub fn single_qubit_gate_time(&self, hqslang: &str, qubit: usize) -> Option<f64>
pub fn single_qubit_gate_time(&self, hqslang: &str, qubit: usize) -> Option<f64>
Returns the gate time of a single qubit operation if the single qubit operation is available on device.
Args: hqslangstr: The hqslang name of a single qubit gate. qubit[int]: The qubit the gate acts on
Returns: Option[float]: None if gate is not available
Raises: PyValueError: Qubit is not in device
sourcepub fn two_qubit_gate_time(
&self,
hqslang: &str,
control: usize,
target: usize
) -> Option<f64>
pub fn two_qubit_gate_time( &self, hqslang: &str, control: usize, target: usize ) -> Option<f64>
Returns the gate time of a two qubit operation if the two qubit operation is available on device.
Args: hqslangstr: The hqslang name of a single qubit gate. control[int]: The control qubit the gate acts on. target[int]: The target qubit the gate acts on.
Returns: Option[float]: None if gate is not available
Raises: PyValueError: Qubit is not in device
sourcepub fn three_qubit_gate_time(
&self,
hqslang: &str,
control_0: usize,
control_1: usize,
target: usize
) -> Option<f64>
pub fn three_qubit_gate_time( &self, hqslang: &str, control_0: usize, control_1: usize, target: usize ) -> Option<f64>
Returns the gate time of a three qubit operation if the three qubit operation is available on device.
Args: hqslangstr: The hqslang name of a single qubit gate. control_0[int]: The control_0 qubit the gate acts on. control_1[int]: The control_1 qubit the gate acts on. target[int]: The target qubit the gate acts on.
Returns: Option[float]: None if gate is not available
Raises: PyValueError: Qubit is not in device
sourcepub fn multi_qubit_gate_time(
&self,
hqslang: &str,
qubits: Vec<usize>
) -> Option<f64>
pub fn multi_qubit_gate_time( &self, hqslang: &str, qubits: Vec<usize> ) -> Option<f64>
Returns the gate time of a multi qubit operation if the multi qubit operation is available on device.
Args: hqslangstr: The hqslang name of a multi qubit gate. qubits[List[int]]: The qubits the gate acts on.
Returns: Option[float]: None if gate is not available
Raises: PyValueError: Qubit is not in device
sourcepub fn set_single_qubit_gate_time(
&mut self,
gate: &str,
qubit: usize,
gate_time: f64
) -> PyResult<()>
pub fn set_single_qubit_gate_time( &mut self, gate: &str, qubit: usize, gate_time: f64 ) -> PyResult<()>
Set the gate time of a single qubit gate.
Args: gate (str): hqslang name of the single-qubit-gate. qubit (int): The qubit for which the gate time is set gate_time (float): The gate time for the given gate.
Raises: PyValueError: Qubit is not in device
sourcepub fn set_two_qubit_gate_time(
&mut self,
gate: &str,
control: usize,
target: usize,
gate_time: f64
) -> PyResult<()>
pub fn set_two_qubit_gate_time( &mut self, gate: &str, control: usize, target: usize, gate_time: f64 ) -> PyResult<()>
Set the gate time of a two qubit gate.
Args: gate (str): hqslang name of the single-qubit-gate. control (int): The control qubit for which the gate time is set target (int): The control qubit for which the gate time is set gate_time (float): The gate time for the given gate.
Raises: PyValueError: Qubit is not in device
sourcepub fn set_three_qubit_gate_time(
&mut self,
gate: &str,
control_0: usize,
control_1: usize,
target: usize,
gate_time: f64
) -> PyResult<()>
pub fn set_three_qubit_gate_time( &mut self, gate: &str, control_0: usize, control_1: usize, target: usize, gate_time: f64 ) -> PyResult<()>
Set the gate time of a three qubit gate.
Args: gate (str): hqslang name of the single-qubit-gate. control_0 (int): The control_0 qubit for which the gate time is set control_1 (int): The control_1 qubit for which the gate time is set target (int): The control qubit for which the gate time is set gate_time (float): The gate time for the given gate.
Raises: PyValueError: Qubit is not in device
sourcepub fn set_qubit_decoherence_rates(
&mut self,
qubit: usize,
rates: PyReadonlyArray2<'_, f64>
) -> PyResult<()>
pub fn set_qubit_decoherence_rates( &mut self, qubit: usize, rates: PyReadonlyArray2<'_, f64> ) -> PyResult<()>
Set the gate time of a single qubit gate.
Args: gate (str): hqslang name of the single-qubit-gate. qubits (int): The qubit for which the gate time is set gate_time (float): The gate time for the given gate.
Raises: PyValueError: Qubit is not in device
sourcepub fn set_multi_qubit_gate_time(
&self,
gate: &str,
qubits: Vec<usize>,
gate_time: f64
) -> PyResult<()>
pub fn set_multi_qubit_gate_time( &self, gate: &str, qubits: Vec<usize>, gate_time: f64 ) -> PyResult<()>
Set the gate time of a single qubit gate.
Args: gate (str): hqslang name of the single-qubit-gate. qubits (List[int]): The qubits for which the gate time is set gate_time (float): The gate time for the given gate.
Raises: PyValueError: Qubits not in device
sourcepub fn add_damping(&mut self, qubit: usize, damping: f64) -> PyResult<()>
pub fn add_damping(&mut self, qubit: usize, damping: f64) -> PyResult<()>
Adds single qubit damping to noise rates.
Args: qubit (int): The qubit for which the decoherence is added damping (float): The damping rates.
Raises: PyValueError: Qubit is not in device
sourcepub fn add_dephasing(&mut self, qubit: usize, dephasing: f64) -> PyResult<()>
pub fn add_dephasing(&mut self, qubit: usize, dephasing: f64) -> PyResult<()>
Adds single qubit dephasing to noise rates.
Args: qubit (int): The qubit for which the decoherence is added dephasing (float): The dephasing rates.
Raises: PyValueError: Qubit is not in device
sourcepub fn add_depolarising(
&mut self,
qubit: usize,
depolarising: f64
) -> PyResult<()>
pub fn add_depolarising( &mut self, qubit: usize, depolarising: f64 ) -> PyResult<()>
Adds single qubit depolarising to noise rates.
Args: qubit (int): The qubit for which the decoherence is added depolarising (float): The depolarising rates.
Raises: PyValueError: Qubit is not in device
sourcepub fn single_qubit_gate_names(&self) -> Vec<String>
pub fn single_qubit_gate_names(&self) -> Vec<String>
Returns the names of a single qubit operations available on the device.
Returns: List[strt]: The list of gate names.
sourcepub fn two_qubit_gate_names(&self) -> Vec<String>
pub fn two_qubit_gate_names(&self) -> Vec<String>
Returns the names of a two qubit operations available on the device.
Returns: List[strt]: The list of gate names.
sourcepub fn multi_qubit_gate_names(&self) -> Vec<String>
pub fn multi_qubit_gate_names(&self) -> Vec<String>
Returns the names of a mutli qubit operations available on the device.
The list of names also includes the three qubit gate operations.
Returns: List[strt]: The list of gate names.
sourcepub fn __copy__(&self) -> Self
pub fn __copy__(&self) -> Self
Returns a copy of the device (copy here produces a deepcopy).
Returns: A deep copy of self.
sourcepub fn __deepcopy__(&self, _memodict: &Bound<'_, PyAny>) -> Self
pub fn __deepcopy__(&self, _memodict: &Bound<'_, PyAny>) -> Self
Creates deep copy of Device.
Returns: A deep copy of self.
sourcepub fn to_bincode(&self) -> PyResult<Py<PyByteArray>>
pub fn to_bincode(&self) -> PyResult<Py<PyByteArray>>
Return the bincode representation of the Device using the bincode crate.
Returns: ByteArray: The serialized Device (in bincode form).
Raises: ValueError: Cannot serialize Device to bytes.
sourcepub fn to_json(&self) -> PyResult<String>
pub fn to_json(&self) -> PyResult<String>
Return the json representation of the Device.
Returns: str: The serialized form of Device.
Raises: ValueError: Cannot serialize Device to json.
sourcepub fn from_bincode(input: &Bound<'_, PyAny>) -> PyResult<GenericDeviceWrapper>
pub fn from_bincode(input: &Bound<'_, PyAny>) -> PyResult<GenericDeviceWrapper>
Convert the bincode representation of the qoqo device to a device using the bincode crate.
Args: input (ByteArray): The serialized Device (in bincode form).
Returns: The deserialized Device.
Raises: TypeError: Input cannot be converted to byte array. ValueError: Input cannot be deserialized to selected Device.
sourcepub fn from_json(input: &str) -> PyResult<GenericDeviceWrapper>
pub fn from_json(input: &str) -> PyResult<GenericDeviceWrapper>
Convert the json representation of a device to a qoqo device.
Args: input (str): The serialized device in json form.
Returns: The deserialized device.
Raises: ValueError: Input cannot be deserialized to selected Device.
source§impl GenericDeviceWrapper
impl GenericDeviceWrapper
sourcepub fn from_pyany(input: &Bound<'_, PyAny>) -> PyResult<GenericDevice>
pub fn from_pyany(input: &Bound<'_, PyAny>) -> PyResult<GenericDevice>
Fallible conversion of generic python object.
Trait Implementations§
source§impl Clone for GenericDeviceWrapper
impl Clone for GenericDeviceWrapper
source§fn clone(&self) -> GenericDeviceWrapper
fn clone(&self) -> GenericDeviceWrapper
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for GenericDeviceWrapper
impl Debug for GenericDeviceWrapper
source§impl HasPyGilRef for GenericDeviceWrapper
impl HasPyGilRef for GenericDeviceWrapper
§type AsRefTarget = PyCell<GenericDeviceWrapper>
type AsRefTarget = PyCell<GenericDeviceWrapper>
source§impl PartialEq for GenericDeviceWrapper
impl PartialEq for GenericDeviceWrapper
source§fn eq(&self, other: &GenericDeviceWrapper) -> bool
fn eq(&self, other: &GenericDeviceWrapper) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PyClass for GenericDeviceWrapper
impl PyClass for GenericDeviceWrapper
source§impl PyClassImpl for GenericDeviceWrapper
impl PyClassImpl for GenericDeviceWrapper
source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
§type ThreadChecker = SendablePyClass<GenericDeviceWrapper>
type ThreadChecker = SendablePyClass<GenericDeviceWrapper>
type Inventory = Pyo3MethodsInventoryForGenericDeviceWrapper
§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny
by default, and when you declare
#[pyclass(extends=PyDict)]
, it’s PyDict
.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
source§impl PyClassNewTextSignature<GenericDeviceWrapper> for PyClassImplCollector<GenericDeviceWrapper>
impl PyClassNewTextSignature<GenericDeviceWrapper> for PyClassImplCollector<GenericDeviceWrapper>
fn new_text_signature(self) -> Option<&'static str>
source§impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a GenericDeviceWrapper
impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a GenericDeviceWrapper
source§impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a mut GenericDeviceWrapper
impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a mut GenericDeviceWrapper
source§impl PyTypeInfo for GenericDeviceWrapper
impl PyTypeInfo for GenericDeviceWrapper
source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
source§fn type_object(py: Python<'_>) -> &PyType
fn type_object(py: Python<'_>) -> &PyType
PyTypeInfo::type_object
will be replaced by PyTypeInfo::type_object_bound
in a future PyO3 versionsource§fn type_object_bound(py: Python<'_>) -> Bound<'_, PyType>
fn type_object_bound(py: Python<'_>) -> Bound<'_, PyType>
source§fn is_type_of(object: &PyAny) -> bool
fn is_type_of(object: &PyAny) -> bool
PyTypeInfo::is_type_of
will be replaced by PyTypeInfo::is_type_of_bound
in a future PyO3 versionobject
is an instance of this type or a subclass of this type.source§fn is_type_of_bound(object: &Bound<'_, PyAny>) -> bool
fn is_type_of_bound(object: &Bound<'_, PyAny>) -> bool
object
is an instance of this type or a subclass of this type.source§fn is_exact_type_of(object: &PyAny) -> bool
fn is_exact_type_of(object: &PyAny) -> bool
PyTypeInfo::is_exact_type_of
will be replaced by PyTypeInfo::is_exact_type_of_bound
in a future PyO3 versionobject
is an instance of this type.impl DerefToPyAny for GenericDeviceWrapper
impl StructuralPartialEq for GenericDeviceWrapper
Auto Trait Implementations§
impl Freeze for GenericDeviceWrapper
impl RefUnwindSafe for GenericDeviceWrapper
impl Send for GenericDeviceWrapper
impl Sync for GenericDeviceWrapper
impl Unpin for GenericDeviceWrapper
impl UnwindSafe for GenericDeviceWrapper
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FromPyObject<'_> for T
impl<T> FromPyObject<'_> for T
source§impl<'py, T> FromPyObjectBound<'_, 'py> for Twhere
T: FromPyObject<'py>,
impl<'py, T> FromPyObjectBound<'_, 'py> for Twhere
T: FromPyObject<'py>,
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moresource§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
source§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moresource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.