ppvm_pauli_word/pattern/
data.rs1#[cfg(feature = "bincode")]
7use bincode::{Decode, Encode};
8#[cfg(feature = "serde")]
9use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16#[cfg_attr(feature = "bincode", derive(Encode, Decode))]
17#[repr(u8)]
18pub enum NotIdentity {
19 X = 1,
20 Z = 2,
21 Y = 3,
22}
23
24#[derive(Debug, Clone, PartialEq)]
25#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
26#[cfg_attr(feature = "bincode", derive(Encode, Decode))]
27pub(crate) enum OpPattern {
28 Identity, Single(NotIdentity), Double(NotIdentity, NotIdentity), AnyNonIdentity, SingleOrIdentity(NotIdentity), DoubleOrIdentity(NotIdentity, NotIdentity), AnyPauliOrIdentity, }
36
37impl OpPattern {
38 pub fn add_identity(self) -> Self {
39 match self {
40 OpPattern::Single(not_identity) => OpPattern::SingleOrIdentity(not_identity),
41 OpPattern::Double(left, right) => OpPattern::DoubleOrIdentity(left, right),
42 OpPattern::AnyNonIdentity => OpPattern::AnyPauliOrIdentity,
43 _ => self,
44 }
45 }
46}
47
48#[derive(Debug, Clone, PartialEq)]
49#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50#[cfg_attr(feature = "bincode", derive(Encode, Decode))]
51pub(crate) enum Decorated {
52 Position(OpPattern, usize), Star(OpPattern), Repeat(OpPattern, usize), }
56
57#[derive(Debug, Clone, PartialEq)]
63#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
64#[cfg_attr(feature = "bincode", derive(Encode, Decode))]
65pub struct PauliPattern(pub(super) Vec<Decorated>);