#[repr(u8)]pub enum StandardGate {
Show 36 variants
I = 0,
H = 1,
RX = 2,
RXX = 3,
RXY = 4,
RY = 5,
RYY = 6,
RZ = 7,
RZX = 8,
RZZ = 9,
S = 10,
SDG = 11,
SWAP = 12,
T = 13,
TDG = 14,
U = 15,
X = 16,
XY = 17,
X2P = 18,
X2M = 19,
XY2P = 20,
XY2M = 21,
Y = 22,
Y2P = 23,
Y2M = 24,
Z = 25,
Phase = 26,
GPhase = 27,
CX = 28,
CCX = 29,
CY = 30,
CZ = 31,
CRX = 32,
CRY = 33,
CRZ = 34,
FSIM = 35,
}Expand description
Represents the set of standard quantum logic gates supported natively by Cqlib.
This enum serves as the fundamental identifier for quantum operations that have a defined behavior and matrix representation within the core library. It includes:
- Pauli Gates: $I, X, Y, Z$
- Clifford Gates: $H, S, T, S^\dagger, T^\dagger$
- Parametric Rotations: $RX(\theta), RY(\theta), RZ(\theta), U(\theta, \phi, \lambda)$
- Two-Qubit Gates: $CX, CZ, SWAP, FSim$
- Multi-Controlled Gates: $CCX$ (Toffoli)
§Design Note
StandardGate is designed to be lightweight (Copy, repr(u8)) for efficient
storage and transmission.
Variants§
I = 0
Identity gate (No-operation).
H = 1
Hadamard gate. Superposition creator.
RX = 2
Rotation around X-axis: $R_x(\theta) = e^{-i\theta X/2}$.
RXX = 3
Ising XX interaction gate (two-qubit parametric).
RXY = 4
Rotation around an axis in the X-Y plane.
RY = 5
Rotation around Y-axis: $R_y(\theta) = e^{-i\theta Y/2}$.
RYY = 6
Ising YY interaction gate.
RZ = 7
Rotation around Z-axis: $R_z(\theta) = e^{-i\theta Z/2}$.
RZX = 8
Ising ZX interaction gate.
RZZ = 9
Ising ZZ interaction gate.
S = 10
S gate (Phase gate, $\sqrt{Z}$).
SDG = 11
S-dagger gate ($S^\dagger$).
SWAP = 12
SWAP gate (exchanges states of two qubits).
T = 13
T gate ($\sqrt{S}$).
TDG = 14
T-dagger gate ($T^\dagger$).
U = 15
Generic single-qubit unitary $U(\theta, \phi, \lambda)$.
X = 16
Pauli-X gate (Bit-flip, NOT).
XY = 17
Single-qubit pi rotation about an axis in the XY plane.
X2P = 18
$\sqrt{X}$ gate (SX).
X2M = 19
$\sqrt{X}^\dagger$ gate (SXdg).
XY2P = 20
Positive half-pi single-qubit rotation about an axis in the XY plane.
XY2M = 21
Negative half-pi single-qubit rotation about an axis in the XY plane.
Y = 22
Pauli-Y gate (Bit-phase-flip).
Y2P = 23
$\sqrt{Y}$ gate.
Y2M = 24
$\sqrt{Y}^\dagger$ gate.
Z = 25
Pauli-Z gate (Phase-flip).
Phase = 26
Phase shift gate $P(\lambda)$.
GPhase = 27
Zero-qubit global phase marker.
GPhase is not applied to any qubit. Whole-circuit global phase should
normally be represented by crate::circuit::Circuit::global_phase;
GPhase operations are mainly useful as import or intermediate IR
markers, including body-local phase inside control-flow operations.
CX = 28
Controlled-X gate (CNOT).
CCX = 29
Toffoli gate (Controlled-Controlled-X).
CY = 30
Controlled-Y gate.
CZ = 31
Controlled-Z gate.
CRX = 32
Controlled-RX rotation.
CRY = 33
Controlled-RY rotation.
CRZ = 34
Controlled-RZ rotation.
FSIM = 35
Fermionic Simulation gate (fSim).
Implementations§
Source§impl StandardGate
impl StandardGate
Sourcepub const fn name(self) -> &'static str
pub const fn name(self) -> &'static str
Returns the stable operation name used by circuit APIs and statistics.
Sourcepub fn matrix(
&self,
params: &[f64],
) -> Result<Cow<'_, Array2<Complex<f64>>>, CircuitError>
pub fn matrix( &self, params: &[f64], ) -> Result<Cow<'_, Array2<Complex<f64>>>, CircuitError>
Returns the unitary matrix representation of the gate.
The matrix is returned as a Cow<Array2<Complex<f64>>>.
- Returns
Cow::Borrowedfor static gates (like H, X, CX) to avoid allocation. - Returns
Cow::Ownedfor parametric gates (like RX, U) where the matrix is computed on the fly.
§Arguments
params- A slice of floating-point parameters associated with the gate. For non-parametric gates, this can be empty. For parametric gates, it must contain the correct number of values (e.g., 1 for RX, 3 for U).
§Panics
Panics if params does not contain enough values for the specific gate type.
Sourcepub fn inverse(
&self,
params: &[Parameter],
) -> Option<(StandardGate, SmallVec<[Parameter; 3]>)>
pub fn inverse( &self, params: &[Parameter], ) -> Option<(StandardGate, SmallVec<[Parameter; 3]>)>
Computes the inverse (Hermitian conjugate) of the gate.
§Arguments
params- The parameters of the gate instance to be inverted.
§Returns
Returns an Option containing a tuple:
StandardGate: The type of the inverse gate.SmallVec<[Parameter; 3]>: The transformed parameters for the inverse gate.
Returns None if the inverse cannot be represented as a StandardGate (rare).
Sourcepub fn is_diagonal(&self) -> bool
pub fn is_diagonal(&self) -> bool
Returns whether this gate is diagonal in the computational basis.
Diagonal standard gates preserve computational basis states and only change their phases. This is a structural property of the gate family, independent of concrete parameter values.
Sourcepub fn num_ctrl_qubits(&self) -> usize
pub fn num_ctrl_qubits(&self) -> usize
Returns the number of control qubits defined for this gate.
For example:
X-> 0CX-> 1CCX-> 2
Sourcepub fn num_qubits(&self) -> usize
pub fn num_qubits(&self) -> usize
Returns the total number of qubits this gate acts on (controls + targets).
For example:
X-> 1CX-> 2 (1 control + 1 target)SWAP-> 2
Sourcepub fn num_params(&self) -> usize
pub fn num_params(&self) -> usize
Returns the number of floating-point parameters this gate accepts.
For example:
H-> 0RX-> 1U-> 3
Trait Implementations§
Source§impl Clone for StandardGate
impl Clone for StandardGate
impl Copy for StandardGate
Source§impl Debug for StandardGate
impl Debug for StandardGate
Source§impl Default for StandardGate
impl Default for StandardGate
Source§impl Display for StandardGate
impl Display for StandardGate
impl Eq for StandardGate
Source§impl From<StandardGate> for Instruction
impl From<StandardGate> for Instruction
Source§fn from(g: StandardGate) -> Self
fn from(g: StandardGate) -> Self
Source§impl Hash for StandardGate
impl Hash for StandardGate
Source§impl Ord for StandardGate
impl Ord for StandardGate
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for StandardGate
impl PartialEq for StandardGate
Source§impl PartialOrd for StandardGate
impl PartialOrd for StandardGate
impl StructuralPartialEq for StandardGate
Auto Trait Implementations§
impl Freeze for StandardGate
impl RefUnwindSafe for StandardGate
impl Send for StandardGate
impl Sync for StandardGate
impl Unpin for StandardGate
impl UnsafeUnpin for StandardGate
impl UnwindSafe for StandardGate
Blanket Implementations§
impl<T> Boilerplate for T
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> CallHasher for T
impl<T> CallHasher for T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.impl<T, U> Imply<T> for U
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 moreimpl<N> NodeTrait for N
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> RuleType for T
Source§impl<T> StdoutFmt for Twhere
T: Display,
impl<T> StdoutFmt for Twhere
T: Display,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.