Struct qoqo::devices::SquareLatticeDeviceWrapper
source · pub struct SquareLatticeDeviceWrapper {
pub internal: SquareLatticeDevice,
}
Expand description
A generic square lattice device with only next-neighbours-connectivity.
Args: number_rows (int): The fixed number of rows in device.. number_columns (int): Fixed number of columns in device. single_qubit_gates (Liststr): A list of ‘hqslang’ names of single-qubit-gates supported by the device. two_qubit_gates (Liststr): A list of ‘hqslang’ names of basic two-qubit-gates supported by the device. default_gate_time (float): The default startig gate time.
Fields§
§internal: SquareLatticeDevice
Internal storage of roqoqo::devices::SquareLatticeDevice
Implementations§
source§impl SquareLatticeDeviceWrapper
impl SquareLatticeDeviceWrapper
sourcepub fn new(
number_rows: usize,
number_columns: usize,
single_qubit_gates: Vec<String>,
two_qubit_gates: Vec<String>,
default_gate_time: f64
) -> PyResult<Self>
pub fn new( number_rows: usize, number_columns: usize, single_qubit_gates: Vec<String>, two_qubit_gates: Vec<String>, default_gate_time: f64 ) -> PyResult<Self>
Create new SquareLatticeDevice device
Args: number_rows (int): The fixed number of rows in device, needs to be the same for all layouts. number_columns (int): Fixed number of tweezers in each row, needs to be the same for all layouts. single_qubit_gates (Liststr): A list of ‘hqslang’ names of single-qubit-gates supported by the device. two_qubit_gates (Liststr): A list of ‘hqslang’ names of basic two-qubit-gates supported by the device. default_gate_time (float): The default startig gate time.
Returns: SquareLatticeDevice
sourcepub fn number_rows(&self) -> usize
pub fn number_rows(&self) -> usize
Return the number of rows of optical tweezers in the two-dimensional grid of potential qubit positions.
Returns: int: The number of rows.
sourcepub fn number_columns(&self) -> usize
pub fn number_columns(&self) -> usize
Return number of columns in device.
Returns: int: The number of columns.
sourcepub fn set_all_two_qubit_gate_times(&self, gate: &str, gate_time: f64) -> Self
pub fn set_all_two_qubit_gate_times(&self, gate: &str, gate_time: f64) -> Self
sourcepub fn set_all_single_qubit_gate_times(
&self,
gate: &str,
gate_time: f64
) -> Self
pub fn set_all_single_qubit_gate_times( &self, gate: &str, gate_time: f64 ) -> Self
sourcepub fn set_all_qubit_decoherence_rates(
&self,
rates: PyReadonlyArray2<'_, f64>
) -> PyResult<Self>
pub fn set_all_qubit_decoherence_rates( &self, rates: PyReadonlyArray2<'_, f64> ) -> PyResult<Self>
Set the decoherence rates for all qubits in the SquareLatticeDevice device.
Args: rates (2darray):: Decoherence rates provided as (3x3)-matrix for all qubits in the device.
Returns: SquareLatticeDevice
Raises:
PyValueError: The input parameter rates
needs to be a (3x3)-matrix.
sourcepub fn add_damping_all(&mut self, damping: f64) -> Self
pub fn add_damping_all(&mut self, damping: f64) -> Self
Adds qubit damping to noise rates.
Args: daming (float): The damping rates.
Returns: SquareLatticeDevice
sourcepub fn add_dephasing_all(&mut self, dephasing: f64) -> Self
pub fn add_dephasing_all(&mut self, dephasing: f64) -> Self
Adds qubit dephasing to noise rates.
Args: dephasing (float): The dephasing rates.
Returns: SquareLatticeDevice
sourcepub fn add_depolarising_all(&mut self, depolarising: f64) -> Self
pub fn add_depolarising_all(&mut self, depolarising: f64) -> Self
Adds qubit depolarising to noise rates.
Args: depolarising (float): The depolarising rates.
Returns: SquareLatticeDevice
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<SquareLatticeDeviceWrapper>
pub fn from_bincode( input: &Bound<'_, PyAny> ) -> PyResult<SquareLatticeDeviceWrapper>
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<SquareLatticeDeviceWrapper>
pub fn from_json(input: &str) -> PyResult<SquareLatticeDeviceWrapper>
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 SquareLatticeDeviceWrapper
impl SquareLatticeDeviceWrapper
sourcepub fn from_pyany(input: &Bound<'_, PyAny>) -> PyResult<SquareLatticeDevice>
pub fn from_pyany(input: &Bound<'_, PyAny>) -> PyResult<SquareLatticeDevice>
Fallible conversion of generic python object.
Trait Implementations§
source§impl Clone for SquareLatticeDeviceWrapper
impl Clone for SquareLatticeDeviceWrapper
source§fn clone(&self) -> SquareLatticeDeviceWrapper
fn clone(&self) -> SquareLatticeDeviceWrapper
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for SquareLatticeDeviceWrapper
impl Debug for SquareLatticeDeviceWrapper
source§impl HasPyGilRef for SquareLatticeDeviceWrapper
impl HasPyGilRef for SquareLatticeDeviceWrapper
§type AsRefTarget = PyCell<SquareLatticeDeviceWrapper>
type AsRefTarget = PyCell<SquareLatticeDeviceWrapper>
source§impl PartialEq for SquareLatticeDeviceWrapper
impl PartialEq for SquareLatticeDeviceWrapper
source§fn eq(&self, other: &SquareLatticeDeviceWrapper) -> bool
fn eq(&self, other: &SquareLatticeDeviceWrapper) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PyClass for SquareLatticeDeviceWrapper
impl PyClass for SquareLatticeDeviceWrapper
source§impl PyClassImpl for SquareLatticeDeviceWrapper
impl PyClassImpl for SquareLatticeDeviceWrapper
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<SquareLatticeDeviceWrapper>
type ThreadChecker = SendablePyClass<SquareLatticeDeviceWrapper>
type Inventory = Pyo3MethodsInventoryForSquareLatticeDeviceWrapper
§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<SquareLatticeDeviceWrapper> for PyClassImplCollector<SquareLatticeDeviceWrapper>
impl PyClassNewTextSignature<SquareLatticeDeviceWrapper> for PyClassImplCollector<SquareLatticeDeviceWrapper>
fn new_text_signature(self) -> Option<&'static str>
source§impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a SquareLatticeDeviceWrapper
impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a SquareLatticeDeviceWrapper
source§impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a mut SquareLatticeDeviceWrapper
impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a mut SquareLatticeDeviceWrapper
source§impl PyTypeInfo for SquareLatticeDeviceWrapper
impl PyTypeInfo for SquareLatticeDeviceWrapper
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 SquareLatticeDeviceWrapper
impl StructuralPartialEq for SquareLatticeDeviceWrapper
Auto Trait Implementations§
impl Freeze for SquareLatticeDeviceWrapper
impl RefUnwindSafe for SquareLatticeDeviceWrapper
impl Send for SquareLatticeDeviceWrapper
impl Sync for SquareLatticeDeviceWrapper
impl Unpin for SquareLatticeDeviceWrapper
impl UnwindSafe for SquareLatticeDeviceWrapper
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.