#[repr(C)]pub struct PauliString<const W: usize> {
pub x: [u64; W],
pub z: [u64; W],
}Expand description
A Pauli operator on up to 64·W qubits, W being the number of 64-bit words per x/z part.
Pick the smallest W that fits; the Python bindings monomorphize W ∈ {1, 2, 4, 8, 16}.
The phase of a product is not stored: Self::mul_assign returns it as a Phase for the caller to fold into a coefficient.
Y is the key (x=1, z=1) with no phase factor.
Fields§
§x: [u64; W]X-part bitmask: bit q set iff qubit q is X or Y.
z: [u64; W]Z-part bitmask: bit q set iff qubit q is Z or Y.
Implementations§
Source§impl<const W: usize> PauliString<W>
impl<const W: usize> PauliString<W>
Sourcepub fn y(qubit: usize) -> Self
pub fn y(qubit: usize) -> Self
Single-qubit Y = (x=1, z=1) on qubit; the i in Y = i·X·Z is the caller’s concern.
§Panics
Panics in debug builds if qubit >= 64 · W.
Sourcepub fn mul_assign(&mut self, other: &Self) -> Phase
pub fn mul_assign(&mut self, other: &Self) -> Phase
Multiply self * other in place, returning the phase i^k such that the true product is phase · self.
Sourcepub fn product(self, other: &Self) -> (Self, Phase)
pub fn product(self, other: &Self) -> (Self, Phase)
Value-returning multiply: (self * other, phase).
Sourcepub fn is_within(&self, num_qubits: usize) -> bool
pub fn is_within(&self, num_qubits: usize) -> bool
true iff every set bit lies on a qubit index < num_qubits.
§Panics
Panics in debug builds if num_qubits > 64 · W.
Sourcepub fn commutes_with(&self, other: &Self) -> bool
pub fn commutes_with(&self, other: &Self) -> bool
true iff self and other commute as Pauli operators.
Sourcepub fn commutator(self, other: &Self) -> (Self, Complex64)
pub fn commutator(self, other: &Self) -> (Self, Complex64)
Commutator [self, other] = self·other − other·self, as (product, coefficient).
The coefficient is 2·i^k when the strings anticommute and exactly 0 when they commute; the returned string is Self::product’s result either way.
Sourcepub fn anticommutator(self, other: &Self) -> (Self, Complex64)
pub fn anticommutator(self, other: &Self) -> (Self, Complex64)
Anticommutator {self, other} = self·other + other·self, as (product, coefficient).
The coefficient is 2·i^k when the strings commute and exactly 0 when they anticommute.
Trait Implementations§
Source§impl<const W: usize> Clone for PauliString<W>
impl<const W: usize> Clone for PauliString<W>
Source§fn clone(&self) -> PauliString<W>
fn clone(&self) -> PauliString<W>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<const W: usize> Debug for PauliString<W>
impl<const W: usize> Debug for PauliString<W>
Source§impl<const W: usize> Default for PauliString<W>
impl<const W: usize> Default for PauliString<W>
Source§impl<const W: usize> Hash for PauliString<W>
impl<const W: usize> Hash for PauliString<W>
Source§impl<const W: usize> Ord for PauliString<W>
impl<const W: usize> Ord for PauliString<W>
Source§fn cmp(&self, other: &PauliString<W>) -> Ordering
fn cmp(&self, other: &PauliString<W>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<const W: usize> PartialEq for PauliString<W>
impl<const W: usize> PartialEq for PauliString<W>
Source§impl<const W: usize> PartialOrd for PauliString<W>
impl<const W: usize> PartialOrd for PauliString<W>
impl<const W: usize> Copy for PauliString<W>
impl<const W: usize> Eq for PauliString<W>
impl<const W: usize> StructuralPartialEq for PauliString<W>
Auto Trait Implementations§
impl<const W: usize> Freeze for PauliString<W>
impl<const W: usize> RefUnwindSafe for PauliString<W>
impl<const W: usize> Send for PauliString<W>
impl<const W: usize> Sync for PauliString<W>
impl<const W: usize> Unpin for PauliString<W>
impl<const W: usize> UnwindSafe for PauliString<W>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
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 more