pub struct GateProperties {
pub name: String,
pub num_qubits: usize,
pub is_native: bool,
pub cost: GateCost,
pub error: GateError,
pub decompositions: Vec<DecompositionRule>,
pub commutes_with: Vec<String>,
pub is_self_inverse: bool,
pub is_diagonal: bool,
pub is_parameterized: bool,
}
Expand description
Properties of a quantum gate
Fields§
§name: String
Gate name
num_qubits: usize
Number of qubits
is_native: bool
Is this a native gate on hardware?
cost: GateCost
Cost information
error: GateError
Error information
decompositions: Vec<DecompositionRule>
Available decomposition rules
commutes_with: Vec<String>
Gates that this gate commutes with
is_self_inverse: bool
Is self-inverse (G·G = I)?
is_diagonal: bool
Is diagonal in computational basis?
is_parameterized: bool
Is parameterized?
Implementations§
Source§impl GateProperties
impl GateProperties
Sourcepub fn single_qubit(name: &str) -> Self
pub fn single_qubit(name: &str) -> Self
Create properties for a single-qubit gate
Examples found in repository?
examples/optimization_demo.rs (line 177)
168fn demo_gate_properties() {
169 println!("\nDemo 4: Gate Properties");
170 println!("-----------------------");
171
172 // Show properties of various gates
173 let gates = vec!["H", "X", "CNOT", "Toffoli"];
174
175 for gate_name in gates {
176 let props = match gate_name {
177 "H" | "X" => GateProperties::single_qubit(gate_name),
178 "CNOT" => GateProperties::two_qubit(gate_name),
179 "Toffoli" => GateProperties::multi_qubit(gate_name, 3),
180 _ => continue,
181 };
182
183 println!("\n{} Gate Properties:", gate_name);
184 println!(" Native: {}", props.is_native);
185 println!(" Duration: {:.1} ns", props.cost.duration_ns);
186 println!(" Error rate: {:.6}", props.error.error_rate);
187 println!(" Self-inverse: {}", props.is_self_inverse);
188 println!(" Diagonal: {}", props.is_diagonal);
189 println!(" Decompositions: {}", props.decompositions.len());
190 }
191
192 // Show commutation relations
193 println!("\nCommutation Relations:");
194 let comm_table = CommutationTable::new();
195
196 let gate_pairs = vec![
197 ("X", "Y"),
198 ("X", "Z"),
199 ("Z", "Z"),
200 ("Z", "RZ"),
201 ("CNOT", "CNOT"),
202 ];
203
204 for (g1, g2) in gate_pairs {
205 println!(
206 " {} ↔ {}: {}",
207 g1,
208 g2,
209 if comm_table.commutes(g1, g2) {
210 "✓"
211 } else {
212 "✗"
213 }
214 );
215 }
216 println!();
217}
Sourcepub fn two_qubit(name: &str) -> Self
pub fn two_qubit(name: &str) -> Self
Create properties for a two-qubit gate
Examples found in repository?
examples/optimization_demo.rs (line 178)
168fn demo_gate_properties() {
169 println!("\nDemo 4: Gate Properties");
170 println!("-----------------------");
171
172 // Show properties of various gates
173 let gates = vec!["H", "X", "CNOT", "Toffoli"];
174
175 for gate_name in gates {
176 let props = match gate_name {
177 "H" | "X" => GateProperties::single_qubit(gate_name),
178 "CNOT" => GateProperties::two_qubit(gate_name),
179 "Toffoli" => GateProperties::multi_qubit(gate_name, 3),
180 _ => continue,
181 };
182
183 println!("\n{} Gate Properties:", gate_name);
184 println!(" Native: {}", props.is_native);
185 println!(" Duration: {:.1} ns", props.cost.duration_ns);
186 println!(" Error rate: {:.6}", props.error.error_rate);
187 println!(" Self-inverse: {}", props.is_self_inverse);
188 println!(" Diagonal: {}", props.is_diagonal);
189 println!(" Decompositions: {}", props.decompositions.len());
190 }
191
192 // Show commutation relations
193 println!("\nCommutation Relations:");
194 let comm_table = CommutationTable::new();
195
196 let gate_pairs = vec![
197 ("X", "Y"),
198 ("X", "Z"),
199 ("Z", "Z"),
200 ("Z", "RZ"),
201 ("CNOT", "CNOT"),
202 ];
203
204 for (g1, g2) in gate_pairs {
205 println!(
206 " {} ↔ {}: {}",
207 g1,
208 g2,
209 if comm_table.commutes(g1, g2) {
210 "✓"
211 } else {
212 "✗"
213 }
214 );
215 }
216 println!();
217}
Sourcepub fn multi_qubit(name: &str, num_qubits: usize) -> Self
pub fn multi_qubit(name: &str, num_qubits: usize) -> Self
Create properties for a multi-qubit gate
Examples found in repository?
examples/optimization_demo.rs (line 179)
168fn demo_gate_properties() {
169 println!("\nDemo 4: Gate Properties");
170 println!("-----------------------");
171
172 // Show properties of various gates
173 let gates = vec!["H", "X", "CNOT", "Toffoli"];
174
175 for gate_name in gates {
176 let props = match gate_name {
177 "H" | "X" => GateProperties::single_qubit(gate_name),
178 "CNOT" => GateProperties::two_qubit(gate_name),
179 "Toffoli" => GateProperties::multi_qubit(gate_name, 3),
180 _ => continue,
181 };
182
183 println!("\n{} Gate Properties:", gate_name);
184 println!(" Native: {}", props.is_native);
185 println!(" Duration: {:.1} ns", props.cost.duration_ns);
186 println!(" Error rate: {:.6}", props.error.error_rate);
187 println!(" Self-inverse: {}", props.is_self_inverse);
188 println!(" Diagonal: {}", props.is_diagonal);
189 println!(" Decompositions: {}", props.decompositions.len());
190 }
191
192 // Show commutation relations
193 println!("\nCommutation Relations:");
194 let comm_table = CommutationTable::new();
195
196 let gate_pairs = vec![
197 ("X", "Y"),
198 ("X", "Z"),
199 ("Z", "Z"),
200 ("Z", "RZ"),
201 ("CNOT", "CNOT"),
202 ];
203
204 for (g1, g2) in gate_pairs {
205 println!(
206 " {} ↔ {}: {}",
207 g1,
208 g2,
209 if comm_table.commutes(g1, g2) {
210 "✓"
211 } else {
212 "✗"
213 }
214 );
215 }
216 println!();
217}
Trait Implementations§
Source§impl Clone for GateProperties
impl Clone for GateProperties
Source§fn clone(&self) -> GateProperties
fn clone(&self) -> GateProperties
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for GateProperties
impl RefUnwindSafe for GateProperties
impl Send for GateProperties
impl Sync for GateProperties
impl Unpin for GateProperties
impl UnwindSafe for GateProperties
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
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>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.