lift-quantum 0.4.4

LIFT compiler quantum dialect: qubits (linear types), quantum gates, noise attributes, layout mapping
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum QuantumType {
    Qubit,
    PhysicalQubit {
        id: usize,
        t1_us: f64,
        t2_us: f64,
        freq_ghz: f64,
        fidelity: f64,
    },
    ClassicalBit,
    QuantumState {
        dimension: usize,
        representation: StateRepr,
    },
    Hamiltonian {
        num_qubits: usize,
    },
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StateRepr {
    StateVector,
    DensityMatrix,
    MPS,
    Stabiliser,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PauliTerm {
    pub coeff: f64,
    pub ops: Vec<PauliOp>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PauliOp {
    I,
    X,
    Y,
    Z,
}

impl QuantumType {
    pub fn is_linear(&self) -> bool {
        matches!(self, QuantumType::Qubit | QuantumType::PhysicalQubit { .. })
    }
}