stabilizer_qec 2.1.0

Quantum error-correction simulation and decoding: Stim-format circuits and error models, a bit-parallel sampler, sparse-blossom, correlated and belief matching, BP+OSD, window decoders, bivariate bicycle codes, lattice surgery, Clifford+T circuits with coherent noise, and sampling and BP on the GPU.
Documentation
//! Every instruction of Stim's circuit language, as `stim.gate_data` describes it: names,
//! flags, argument counts, tableau, unitary matrix, flows, inverses and Hadamard conjugate.
//! Generated by tools/gen_gate_data.py (Stim 1.16.0); do not edit.

/// One instruction's data. `tableau` is Stim's: the images of X and Z of each target, as
/// signed Pauli strings (`x0, z0` for one qubit; `x0, z0, x1, z1` for two). `unitary` is
/// row-major (re, im), in Stim's little-endian qubit order. `flows` are Stim's example flows.
#[derive(Debug)]
pub struct GateInfo {
    pub name: &'static str,
    pub aliases: &'static [&'static str],
    pub is_noisy_gate: bool,
    pub is_reset: bool,
    pub is_single_qubit_gate: bool,
    pub is_symmetric_gate: bool,
    pub is_two_qubit_gate: bool,
    pub is_unitary: bool,
    pub produces_measurements: bool,
    pub takes_measurement_record_targets: bool,
    pub takes_pauli_targets: bool,
    /// `num_parens_arguments_range` as (start, stop): Python's range(start, stop).
    pub args: (u16, u16),
    pub tableau: &'static [&'static str],
    pub unitary: &'static [(f64, f64)],
    pub flows: &'static [&'static str],
    pub inverse: Option<&'static str>,
    pub generalized_inverse: &'static str,
    pub hadamard_conjugated: Option<&'static str>,
    /// The same up to Pauli signs (`hadamard_conjugated(unsigned=True)`).
    pub hadamard_conjugated_unsigned: Option<&'static str>,
    /// Stim's internal flags (the `FLAG_*` bits below).
    pub flags: u32,
    /// How many parens arguments: a count, or 254 (zero or one) or 255 (any).
    pub arg_count: u8,
    /// Stim's help category, e.g. "B_Single Qubit Clifford Gates".
    pub category: &'static str,
    /// Stim's decomposition into H, S, CX, M and R (empty for none).
    pub decomposition: &'static str,
    /// Stim's `best_candidate_inverse_id`: the gate `Circuit.inverse` writes for this one.
    pub inverse_candidate: &'static str,
}

pub const FLAG_IS_UNITARY: u32 = 1 << 0;
pub const FLAG_IS_NOISY: u32 = 1 << 1;
pub const FLAG_ARGS_ARE_DISJOINT_PROBABILITIES: u32 = 1 << 2;
pub const FLAG_PRODUCES_RESULTS: u32 = 1 << 3;
pub const FLAG_IS_NOT_FUSABLE: u32 = 1 << 4;
pub const FLAG_IS_BLOCK: u32 = 1 << 5;
pub const FLAG_TARGETS_PAIRS: u32 = 1 << 6;
pub const FLAG_TARGETS_PAULI_STRING: u32 = 1 << 7;
pub const FLAG_ONLY_TARGETS_MEASUREMENT_RECORD: u32 = 1 << 8;
pub const FLAG_CAN_TARGET_BITS: u32 = 1 << 9;
pub const FLAG_TAKES_NO_TARGETS: u32 = 1 << 10;
pub const FLAG_ARGS_ARE_UNSIGNED_INTEGERS: u32 = 1 << 11;
pub const FLAG_TARGETS_COMBINERS: u32 = 1 << 12;
pub const FLAG_IS_RESET: u32 = 1 << 13;
pub const FLAG_HAS_NO_EFFECT_ON_QUBITS: u32 = 1 << 14;
pub const FLAG_IS_SINGLE_QUBIT_GATE: u32 = 1 << 15;

pub const GATE_INFO: &[GateInfo] = &[
    GateInfo { name: "CX", aliases: &["CNOT", "CX", "ZCX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 1), tableau: &["+XX", "+Z_", "+_X", "+ZZ"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], flows: &["X_ -> XX", "Z_ -> Z_", "_X -> _X", "_Z -> ZZ"], inverse: Some("CX"), generalized_inverse: "CX", hadamard_conjugated: Some("XCZ"), hadamard_conjugated_unsigned: Some("XCZ"), flags: 577, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "CNOT 0 1", inverse_candidate: "CX" },
    GateInfo { name: "CXSWAP", aliases: &["CXSWAP"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+XX", "+_Z", "+X_", "+ZZ"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0)], flows: &["X_ -> XX", "Z_ -> _Z", "_X -> X_", "_Z -> ZZ"], inverse: Some("SWAPCX"), generalized_inverse: "SWAPCX", hadamard_conjugated: Some("SWAPCX"), hadamard_conjugated_unsigned: Some("SWAPCX"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "CNOT 1 0
CNOT 0 1", inverse_candidate: "SWAPCX" },
    GateInfo { name: "CY", aliases: &["CY", "ZCY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 1), tableau: &["+XY", "+Z_", "+ZX", "+ZZ"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0), (0.0, 0.0)], flows: &["X_ -> XY", "Z_ -> Z_", "_X -> ZX", "_Z -> ZZ"], inverse: Some("CY"), generalized_inverse: "CY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("XCY"), flags: 577, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 1
S 1
S 1
CNOT 0 1
S 1", inverse_candidate: "CY" },
    GateInfo { name: "CZ", aliases: &["CZ", "ZCZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 1), tableau: &["+XZ", "+Z_", "+ZX", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-1.0, 0.0)], flows: &["X_ -> XZ", "Z_ -> Z_", "_X -> ZX", "_Z -> _Z"], inverse: Some("CZ"), generalized_inverse: "CZ", hadamard_conjugated: Some("XCX"), hadamard_conjugated_unsigned: Some("XCX"), flags: 577, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 1
CNOT 0 1
H 1", inverse_candidate: "CZ" },
    GateInfo { name: "CZSWAP", aliases: &["CZSWAP", "SWAPCZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+ZX", "+_Z", "+XZ", "+Z_"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-1.0, 0.0)], flows: &["X_ -> ZX", "Z_ -> _Z", "_X -> XZ", "_Z -> Z_"], inverse: Some("CZSWAP"), generalized_inverse: "CZSWAP", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
CX 0 1
CX 1 0
H 1", inverse_candidate: "CZSWAP" },
    GateInfo { name: "C_NXYZ", aliases: &["C_NXYZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Y", "-X"], unitary: &[(0.5, 0.5), (0.5, -0.5), (-0.5, -0.5), (0.5, -0.5)], flows: &["X -> -Y", "Z -> -X"], inverse: Some("C_ZYNX"), generalized_inverse: "C_ZYNX", hadamard_conjugated: Some("C_ZYNX"), hadamard_conjugated_unsigned: Some("C_ZYNX"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
H 0
S 0
S 0", inverse_candidate: "C_ZYNX" },
    GateInfo { name: "C_NZYX", aliases: &["C_NZYX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Z", "-Y"], unitary: &[(0.5, 0.5), (-0.5, -0.5), (0.5, -0.5), (0.5, -0.5)], flows: &["X -> -Z", "Z -> -Y"], inverse: Some("C_XYNZ"), generalized_inverse: "C_XYNZ", hadamard_conjugated: Some("C_XYNZ"), hadamard_conjugated_unsigned: Some("C_XYNZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
H 0
S 0
S 0
S 0", inverse_candidate: "C_XYNZ" },
    GateInfo { name: "C_XNYZ", aliases: &["C_XNYZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Y", "+X"], unitary: &[(0.5, 0.5), (-0.5, 0.5), (0.5, 0.5), (0.5, -0.5)], flows: &["X -> -Y", "Z -> X"], inverse: Some("C_ZNYX"), generalized_inverse: "C_ZNYX", hadamard_conjugated: Some("C_ZYX"), hadamard_conjugated_unsigned: Some("C_ZYX"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
H 0", inverse_candidate: "C_ZNYX" },
    GateInfo { name: "C_XYNZ", aliases: &["C_XYNZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Y", "-X"], unitary: &[(0.5, -0.5), (0.5, 0.5), (-0.5, 0.5), (0.5, 0.5)], flows: &["X -> Y", "Z -> -X"], inverse: Some("C_NZYX"), generalized_inverse: "C_NZYX", hadamard_conjugated: Some("C_NZYX"), hadamard_conjugated_unsigned: Some("C_NZYX"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
H 0
S 0
S 0", inverse_candidate: "C_NZYX" },
    GateInfo { name: "C_XYZ", aliases: &["C_XYZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Y", "+X"], unitary: &[(0.5, -0.5), (-0.5, -0.5), (0.5, -0.5), (0.5, 0.5)], flows: &["X -> Y", "Z -> X"], inverse: Some("C_ZYX"), generalized_inverse: "C_ZYX", hadamard_conjugated: Some("C_ZNYX"), hadamard_conjugated_unsigned: Some("C_ZNYX"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
H 0", inverse_candidate: "C_ZYX" },
    GateInfo { name: "C_ZNYX", aliases: &["C_ZNYX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Z", "-Y"], unitary: &[(0.5, -0.5), (0.5, -0.5), (-0.5, -0.5), (0.5, 0.5)], flows: &["X -> Z", "Z -> -Y"], inverse: Some("C_XNYZ"), generalized_inverse: "C_XNYZ", hadamard_conjugated: Some("C_XYZ"), hadamard_conjugated_unsigned: Some("C_XYZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0
S 0
S 0", inverse_candidate: "C_XNYZ" },
    GateInfo { name: "C_ZYNX", aliases: &["C_ZYNX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Z", "+Y"], unitary: &[(0.5, -0.5), (-0.5, 0.5), (0.5, 0.5), (0.5, 0.5)], flows: &["X -> -Z", "Z -> Y"], inverse: Some("C_NXYZ"), generalized_inverse: "C_NXYZ", hadamard_conjugated: Some("C_NXYZ"), hadamard_conjugated_unsigned: Some("C_NXYZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
H 0
S 0", inverse_candidate: "C_NXYZ" },
    GateInfo { name: "C_ZYX", aliases: &["C_ZYX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Z", "+Y"], unitary: &[(0.5, 0.5), (0.5, 0.5), (-0.5, 0.5), (0.5, -0.5)], flows: &["X -> Z", "Z -> Y"], inverse: Some("C_XYZ"), generalized_inverse: "C_XYZ", hadamard_conjugated: Some("C_XNYZ"), hadamard_conjugated_unsigned: Some("C_XNYZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0", inverse_candidate: "C_XYZ" },
    GateInfo { name: "DEPOLARIZE1", aliases: &["DEPOLARIZE1"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "DEPOLARIZE1", hadamard_conjugated: Some("DEPOLARIZE1"), hadamard_conjugated_unsigned: Some("DEPOLARIZE1"), flags: 32774, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "DEPOLARIZE1" },
    GateInfo { name: "DEPOLARIZE2", aliases: &["DEPOLARIZE2"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "DEPOLARIZE2", hadamard_conjugated: Some("DEPOLARIZE2"), hadamard_conjugated_unsigned: Some("DEPOLARIZE2"), flags: 70, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "DEPOLARIZE2" },
    GateInfo { name: "DETECTOR", aliases: &["DETECTOR"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 256), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "DETECTOR", hadamard_conjugated: Some("DETECTOR"), hadamard_conjugated_unsigned: Some("DETECTOR"), flags: 16656, arg_count: 255, category: "Z_Annotations", decomposition: "", inverse_candidate: "DETECTOR" },
    GateInfo { name: "E", aliases: &["CORRELATED_ERROR", "E"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: true, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "E", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 150, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "E" },
    GateInfo { name: "ELSE_CORRELATED_ERROR", aliases: &["ELSE_CORRELATED_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: true, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "ELSE_CORRELATED_ERROR", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 150, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "ELSE_CORRELATED_ERROR" },
    GateInfo { name: "H", aliases: &["H", "H_XZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Z", "+X"], unitary: &[(0.7071067690849304, 0.0), (0.7071067690849304, 0.0), (0.7071067690849304, 0.0), (-0.7071067690849304, -0.0)], flows: &["X -> Z", "Z -> X"], inverse: Some("H"), generalized_inverse: "H", hadamard_conjugated: Some("H"), hadamard_conjugated_unsigned: Some("H"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0", inverse_candidate: "H" },
    GateInfo { name: "HERALDED_ERASE", aliases: &["HERALDED_ERASE"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "HERALDED_ERASE", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 32782, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "HERALDED_ERASE" },
    GateInfo { name: "HERALDED_PAULI_CHANNEL_1", aliases: &["HERALDED_PAULI_CHANNEL_1"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (4, 5), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "HERALDED_PAULI_CHANNEL_1", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 32782, arg_count: 4, category: "F_Noise Channels", decomposition: "", inverse_candidate: "HERALDED_PAULI_CHANNEL_1" },
    GateInfo { name: "H_NXY", aliases: &["H_NXY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Y", "-Z"], unitary: &[(0.0, 0.0), (0.7071067690849304, 0.7071067690849304), (0.7071067690849304, -0.7071067690849304), (0.0, 0.0)], flows: &["X -> -Y", "Z -> -Z"], inverse: Some("H_NXY"), generalized_inverse: "H_NXY", hadamard_conjugated: Some("H_YZ"), hadamard_conjugated_unsigned: Some("H_YZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
H 0
S 0
S 0
H 0", inverse_candidate: "H_NXY" },
    GateInfo { name: "H_NXZ", aliases: &["H_NXZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Z", "-X"], unitary: &[(-0.7071067690849304, -0.0), (0.7071067690849304, 0.0), (0.7071067690849304, 0.0), (0.7071067690849304, 0.0)], flows: &["X -> -Z", "Z -> -X"], inverse: Some("H_NXZ"), generalized_inverse: "H_NXZ", hadamard_conjugated: Some("H_NXZ"), hadamard_conjugated_unsigned: Some("H_NXZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
H 0
S 0
S 0", inverse_candidate: "H_NXZ" },
    GateInfo { name: "H_NYZ", aliases: &["H_NYZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-X", "-Y"], unitary: &[(-0.7071067690849304, -0.0), (0.0, -0.7071067690849304), (0.0, 0.7071067690849304), (0.7071067690849304, 0.0)], flows: &["X -> -X", "Z -> -Y"], inverse: Some("H_NYZ"), generalized_inverse: "H_NYZ", hadamard_conjugated: Some("H_XY"), hadamard_conjugated_unsigned: Some("H_XY"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
H 0
S 0
H 0", inverse_candidate: "H_NYZ" },
    GateInfo { name: "H_XY", aliases: &["H_XY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Y", "-Z"], unitary: &[(0.0, 0.0), (0.7071067690849304, -0.7071067690849304), (0.7071067690849304, 0.7071067690849304), (0.0, 0.0)], flows: &["X -> Y", "Z -> -Z"], inverse: Some("H_XY"), generalized_inverse: "H_XY", hadamard_conjugated: Some("H_NYZ"), hadamard_conjugated_unsigned: Some("H_NYZ"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0
S 0
H 0
S 0", inverse_candidate: "H_XY" },
    GateInfo { name: "H_YZ", aliases: &["H_YZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-X", "+Y"], unitary: &[(0.7071067690849304, 0.0), (0.0, -0.7071067690849304), (0.0, 0.7071067690849304), (-0.7071067690849304, -0.0)], flows: &["X -> -X", "Z -> Y"], inverse: Some("H_YZ"), generalized_inverse: "H_YZ", hadamard_conjugated: Some("H_NXY"), hadamard_conjugated_unsigned: Some("H_NXY"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0
H 0
S 0
S 0", inverse_candidate: "H_YZ" },
    GateInfo { name: "I", aliases: &["I"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X", "+Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X -> X", "Z -> Z"], inverse: Some("I"), generalized_inverse: "I", hadamard_conjugated: Some("I"), hadamard_conjugated_unsigned: Some("I"), flags: 32769, arg_count: 0, category: "A_Pauli Gates", decomposition: "# (no operations)", inverse_candidate: "I" },
    GateInfo { name: "II", aliases: &["II"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "+Z_", "+_X", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> X_", "Z_ -> Z_", "_X -> _X", "_Z -> _Z"], inverse: Some("II"), generalized_inverse: "II", hadamard_conjugated: Some("II"), hadamard_conjugated_unsigned: Some("II"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "", inverse_candidate: "II" },
    GateInfo { name: "II_ERROR", aliases: &["II_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 256), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "II_ERROR", hadamard_conjugated: Some("II_ERROR"), hadamard_conjugated_unsigned: Some("II_ERROR"), flags: 70, arg_count: 255, category: "F_Noise Channels", decomposition: "", inverse_candidate: "II_ERROR" },
    GateInfo { name: "ISWAP", aliases: &["ISWAP"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+ZY", "+_Z", "+YZ", "+Z_"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> ZY", "Z_ -> _Z", "_X -> YZ", "_Z -> Z_"], inverse: Some("ISWAP_DAG"), generalized_inverse: "ISWAP_DAG", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
CNOT 0 1
CNOT 1 0
H 1
S 1
S 0", inverse_candidate: "ISWAP_DAG" },
    GateInfo { name: "ISWAP_DAG", aliases: &["ISWAP_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-ZY", "+_Z", "-YZ", "+Z_"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> -ZY", "Z_ -> _Z", "_X -> -YZ", "_Z -> Z_"], inverse: Some("ISWAP"), generalized_inverse: "ISWAP", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
S 1
S 1
S 1
H 1
CNOT 1 0
CNOT 0 1
H 0", inverse_candidate: "ISWAP" },
    GateInfo { name: "I_ERROR", aliases: &["I_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 256), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "I_ERROR", hadamard_conjugated: Some("I_ERROR"), hadamard_conjugated_unsigned: Some("I_ERROR"), flags: 32774, arg_count: 255, category: "F_Noise Channels", decomposition: "", inverse_candidate: "I_ERROR" },
    GateInfo { name: "M", aliases: &["M", "MZ"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["Z -> rec[-1]", "Z -> Z"], inverse: None, generalized_inverse: "M", hadamard_conjugated: Some("MX"), hadamard_conjugated_unsigned: Some("MX"), flags: 32782, arg_count: 254, category: "L_Collapsing Gates", decomposition: "M 0", inverse_candidate: "M" },
    GateInfo { name: "MPAD", aliases: &["MPAD"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "MPAD", hadamard_conjugated: Some("MPAD"), hadamard_conjugated_unsigned: Some("MPAD"), flags: 12, arg_count: 254, category: "Z_Annotations", decomposition: "", inverse_candidate: "MPAD" },
    GateInfo { name: "MPP", aliases: &["MPP"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: true, args: (0, 2), tableau: &[], unitary: &[], flows: &["XYZ__ -> rec[-2]", "___XX -> rec[-1]", "X____ -> X____", "_Y___ -> _Y___", "__Z__ -> __Z__", "___X_ -> ___X_", "____X -> ____X", "ZZ___ -> ZZ___", "_XX__ -> _XX__", "___ZZ -> ___ZZ"], inverse: None, generalized_inverse: "MPP", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 4238, arg_count: 254, category: "P_Generalized Pauli Product Gates", decomposition: "S 1 1 1
H 0 1 3 4
CX 2 0 1 0 4 3
M 0 3
CX 2 0 1 0 4 3
H 0 1 3 4
S 1", inverse_candidate: "MPP" },
    GateInfo { name: "MR", aliases: &["MR", "MRZ"], is_noisy_gate: true, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["Z -> rec[-1]", "1 -> Z"], inverse: None, generalized_inverse: "MR", hadamard_conjugated: Some("MRX"), hadamard_conjugated_unsigned: Some("MRX"), flags: 40974, arg_count: 254, category: "L_Collapsing Gates", decomposition: "M 0
R 0", inverse_candidate: "MR" },
    GateInfo { name: "MRX", aliases: &["MRX"], is_noisy_gate: true, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["X -> rec[-1]", "1 -> X"], inverse: None, generalized_inverse: "MRX", hadamard_conjugated: Some("MR"), hadamard_conjugated_unsigned: Some("MR"), flags: 40974, arg_count: 254, category: "L_Collapsing Gates", decomposition: "H 0
M 0
R 0
H 0", inverse_candidate: "MRX" },
    GateInfo { name: "MRY", aliases: &["MRY"], is_noisy_gate: true, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["Y -> rec[-1]", "1 -> Y"], inverse: None, generalized_inverse: "MRY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("MRY"), flags: 40974, arg_count: 254, category: "L_Collapsing Gates", decomposition: "S 0
S 0
S 0
H 0
M 0
R 0
H 0
S 0", inverse_candidate: "MRY" },
    GateInfo { name: "MX", aliases: &["MX"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["X -> rec[-1]", "X -> X"], inverse: None, generalized_inverse: "MX", hadamard_conjugated: Some("M"), hadamard_conjugated_unsigned: Some("M"), flags: 32782, arg_count: 254, category: "L_Collapsing Gates", decomposition: "H 0
M 0
H 0", inverse_candidate: "MX" },
    GateInfo { name: "MXX", aliases: &["MXX"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["X_ -> X_", "_X -> _X", "ZZ -> ZZ", "XX -> rec[-1]"], inverse: None, generalized_inverse: "MXX", hadamard_conjugated: Some("MZZ"), hadamard_conjugated_unsigned: Some("MZZ"), flags: 78, arg_count: 254, category: "L_Pair Measurement Gates", decomposition: "CX 0 1
H 0
M 0
H 0
CX 0 1", inverse_candidate: "MXX" },
    GateInfo { name: "MY", aliases: &["MY"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["Y -> rec[-1]", "Y -> Y"], inverse: None, generalized_inverse: "MY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("MY"), flags: 32782, arg_count: 254, category: "L_Collapsing Gates", decomposition: "S 0
S 0
S 0
H 0
M 0
H 0
S 0", inverse_candidate: "MY" },
    GateInfo { name: "MYY", aliases: &["MYY"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["XX -> XX", "Y_ -> Y_", "_Y -> _Y", "YY -> rec[-1]"], inverse: None, generalized_inverse: "MYY", hadamard_conjugated: Some("MYY"), hadamard_conjugated_unsigned: Some("MYY"), flags: 78, arg_count: 254, category: "L_Pair Measurement Gates", decomposition: "S 0 1
CX 0 1
H 0
M 0
S 1 1
H 0
CX 0 1
S 0 1", inverse_candidate: "MYY" },
    GateInfo { name: "MZZ", aliases: &["MZZ"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: false, produces_measurements: true, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 2), tableau: &[], unitary: &[], flows: &["XX -> XX", "Z_ -> Z_", "_Z -> _Z", "ZZ -> rec[-1]"], inverse: None, generalized_inverse: "MZZ", hadamard_conjugated: Some("MXX"), hadamard_conjugated_unsigned: Some("MXX"), flags: 78, arg_count: 254, category: "L_Pair Measurement Gates", decomposition: "CX 0 1
M 1
CX 0 1", inverse_candidate: "MZZ" },
    GateInfo { name: "OBSERVABLE_INCLUDE", aliases: &["OBSERVABLE_INCLUDE"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: true, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "OBSERVABLE_INCLUDE", hadamard_conjugated: Some("OBSERVABLE_INCLUDE"), hadamard_conjugated_unsigned: Some("OBSERVABLE_INCLUDE"), flags: 18832, arg_count: 1, category: "Z_Annotations", decomposition: "", inverse_candidate: "OBSERVABLE_INCLUDE" },
    GateInfo { name: "PAULI_CHANNEL_1", aliases: &["PAULI_CHANNEL_1"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (3, 4), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "PAULI_CHANNEL_1", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 32774, arg_count: 3, category: "F_Noise Channels", decomposition: "", inverse_candidate: "PAULI_CHANNEL_1" },
    GateInfo { name: "PAULI_CHANNEL_2", aliases: &["PAULI_CHANNEL_2"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (15, 16), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "PAULI_CHANNEL_2", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 70, arg_count: 15, category: "F_Noise Channels", decomposition: "", inverse_candidate: "PAULI_CHANNEL_2" },
    GateInfo { name: "QUBIT_COORDS", aliases: &["QUBIT_COORDS"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 256), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "QUBIT_COORDS", hadamard_conjugated: Some("QUBIT_COORDS"), hadamard_conjugated_unsigned: Some("QUBIT_COORDS"), flags: 16400, arg_count: 255, category: "Z_Annotations", decomposition: "", inverse_candidate: "QUBIT_COORDS" },
    GateInfo { name: "R", aliases: &["R", "RZ"], is_noisy_gate: false, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &[], unitary: &[], flows: &["1 -> Z"], inverse: None, generalized_inverse: "M", hadamard_conjugated: Some("RX"), hadamard_conjugated_unsigned: Some("RX"), flags: 40960, arg_count: 0, category: "L_Collapsing Gates", decomposition: "R 0", inverse_candidate: "M" },
    GateInfo { name: "REPEAT", aliases: &["REPEAT"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "REPEAT", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 48, arg_count: 0, category: "Y_Control Flow", decomposition: "", inverse_candidate: "REPEAT" },
    GateInfo { name: "RX", aliases: &["RX"], is_noisy_gate: false, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &[], unitary: &[], flows: &["1 -> X"], inverse: None, generalized_inverse: "MX", hadamard_conjugated: Some("R"), hadamard_conjugated_unsigned: Some("R"), flags: 40960, arg_count: 0, category: "L_Collapsing Gates", decomposition: "R 0
H 0", inverse_candidate: "MX" },
    GateInfo { name: "RY", aliases: &["RY"], is_noisy_gate: false, is_reset: true, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &[], unitary: &[], flows: &["1 -> Y"], inverse: None, generalized_inverse: "MY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("RY"), flags: 40960, arg_count: 0, category: "L_Collapsing Gates", decomposition: "R 0
H 0
S 0", inverse_candidate: "MY" },
    GateInfo { name: "S", aliases: &["S", "SQRT_Z"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Y", "+Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0)], flows: &["X -> Y", "Z -> Z"], inverse: Some("S_DAG"), generalized_inverse: "S_DAG", hadamard_conjugated: Some("SQRT_X"), hadamard_conjugated_unsigned: Some("SQRT_X"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0", inverse_candidate: "S_DAG" },
    GateInfo { name: "SHIFT_COORDS", aliases: &["SHIFT_COORDS"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 256), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "SHIFT_COORDS", hadamard_conjugated: Some("SHIFT_COORDS"), hadamard_conjugated_unsigned: Some("SHIFT_COORDS"), flags: 17424, arg_count: 255, category: "Z_Annotations", decomposition: "", inverse_candidate: "SHIFT_COORDS" },
    GateInfo { name: "SPP", aliases: &["SPP"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: true, args: (0, 1), tableau: &[], unitary: &[], flows: &["X__ -> X__", "Z__ -> -YYZ", "_X_ -> -XZZ", "_Z_ -> XXZ", "__X -> XYY", "__Z -> __Z"], inverse: Some("SPP_DAG"), generalized_inverse: "SPP_DAG", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 4225, arg_count: 0, category: "P_Generalized Pauli Product Gates", decomposition: "CX 2 1
CX 1 0
S 1
S 1
H 1
CX 1 0
CX 2 1", inverse_candidate: "SPP_DAG" },
    GateInfo { name: "SPP_DAG", aliases: &["SPP_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: true, args: (0, 1), tableau: &[], unitary: &[], flows: &["X__ -> X__", "Z__ -> YYZ", "_X_ -> XZZ", "_Z_ -> -XXZ", "__X -> -XYY", "__Z -> __Z"], inverse: Some("SPP"), generalized_inverse: "SPP", hadamard_conjugated: None, hadamard_conjugated_unsigned: None, flags: 4225, arg_count: 0, category: "P_Generalized Pauli Product Gates", decomposition: "CX 2 1
CX 1 0
H 1
S 1
S 1
CX 1 0
CX 2 1", inverse_candidate: "SPP" },
    GateInfo { name: "SQRT_X", aliases: &["SQRT_X"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X", "-Y"], unitary: &[(0.5, 0.5), (0.5, -0.5), (0.5, -0.5), (0.5, 0.5)], flows: &["X -> X", "Z -> -Y"], inverse: Some("SQRT_X_DAG"), generalized_inverse: "SQRT_X_DAG", hadamard_conjugated: Some("S"), hadamard_conjugated_unsigned: Some("S"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0
H 0", inverse_candidate: "SQRT_X_DAG" },
    GateInfo { name: "SQRT_XX", aliases: &["SQRT_XX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "-YX", "+_X", "-XY"], unitary: &[(0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (0.5, -0.5), (0.0, 0.0), (0.5, 0.5), (0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (0.5, -0.5), (0.5, 0.5), (0.0, 0.0), (0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (0.5, 0.5)], flows: &["X_ -> X_", "Z_ -> -YX", "_X -> _X", "_Z -> -XY"], inverse: Some("SQRT_XX_DAG"), generalized_inverse: "SQRT_XX_DAG", hadamard_conjugated: Some("SQRT_ZZ"), hadamard_conjugated_unsigned: Some("SQRT_ZZ"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
CNOT 0 1
H 1
S 0
S 1
H 0
H 1", inverse_candidate: "SQRT_XX_DAG" },
    GateInfo { name: "SQRT_XX_DAG", aliases: &["SQRT_XX_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "+YX", "+_X", "+XY"], unitary: &[(0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (0.5, 0.5), (0.0, 0.0), (0.5, -0.5), (0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (0.5, 0.5), (0.5, -0.5), (0.0, 0.0), (0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (0.5, -0.5)], flows: &["X_ -> X_", "Z_ -> YX", "_X -> _X", "_Z -> XY"], inverse: Some("SQRT_XX"), generalized_inverse: "SQRT_XX", hadamard_conjugated: Some("SQRT_ZZ_DAG"), hadamard_conjugated_unsigned: Some("SQRT_ZZ_DAG"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
CNOT 0 1
H 1
S 0
S 0
S 0
S 1
S 1
S 1
H 0
H 1", inverse_candidate: "SQRT_XX" },
    GateInfo { name: "SQRT_X_DAG", aliases: &["SQRT_X_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X", "+Y"], unitary: &[(0.5, -0.5), (0.5, 0.5), (0.5, 0.5), (0.5, -0.5)], flows: &["X -> X", "Z -> Y"], inverse: Some("SQRT_X"), generalized_inverse: "SQRT_X", hadamard_conjugated: Some("S_DAG"), hadamard_conjugated_unsigned: Some("S_DAG"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
H 0
S 0", inverse_candidate: "SQRT_X" },
    GateInfo { name: "SQRT_Y", aliases: &["SQRT_Y"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Z", "+X"], unitary: &[(0.5, 0.5), (-0.5, -0.5), (0.5, 0.5), (0.5, 0.5)], flows: &["X -> -Z", "Z -> X"], inverse: Some("SQRT_Y_DAG"), generalized_inverse: "SQRT_Y_DAG", hadamard_conjugated: Some("SQRT_Y_DAG"), hadamard_conjugated_unsigned: Some("SQRT_Y_DAG"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
H 0", inverse_candidate: "SQRT_Y_DAG" },
    GateInfo { name: "SQRT_YY", aliases: &["SQRT_YY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-ZY", "+XY", "-YZ", "+YX"], unitary: &[(0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (-0.5, 0.5), (0.0, 0.0), (0.5, 0.5), (0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (0.5, -0.5), (0.5, 0.5), (0.0, 0.0), (-0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (0.5, 0.5)], flows: &["X_ -> -ZY", "Z_ -> XY", "_X -> -YZ", "_Z -> YX"], inverse: Some("SQRT_YY_DAG"), generalized_inverse: "SQRT_YY_DAG", hadamard_conjugated: Some("SQRT_YY"), hadamard_conjugated_unsigned: Some("SQRT_YY"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
S 1
S 1
S 1
H 0
CNOT 0 1
H 1
S 0
S 1
H 0
H 1
S 0
S 1", inverse_candidate: "SQRT_YY_DAG" },
    GateInfo { name: "SQRT_YY_DAG", aliases: &["SQRT_YY_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+ZY", "-XY", "+YZ", "-YX"], unitary: &[(0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (-0.5, -0.5), (0.0, 0.0), (0.5, -0.5), (0.5, 0.5), (0.0, 0.0), (0.0, 0.0), (0.5, 0.5), (0.5, -0.5), (0.0, 0.0), (-0.5, -0.5), (0.0, 0.0), (0.0, 0.0), (0.5, -0.5)], flows: &["X_ -> ZY", "Z_ -> -XY", "_X -> YZ", "_Z -> -YX"], inverse: Some("SQRT_YY"), generalized_inverse: "SQRT_YY", hadamard_conjugated: Some("SQRT_YY_DAG"), hadamard_conjugated_unsigned: Some("SQRT_YY_DAG"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
S 1
H 0
CNOT 0 1
H 1
S 0
S 1
H 0
H 1
S 0
S 1
S 1
S 1", inverse_candidate: "SQRT_YY" },
    GateInfo { name: "SQRT_Y_DAG", aliases: &["SQRT_Y_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+Z", "-X"], unitary: &[(0.5, -0.5), (0.5, -0.5), (-0.5, 0.5), (0.5, -0.5)], flows: &["X -> Z", "Z -> -X"], inverse: Some("SQRT_Y"), generalized_inverse: "SQRT_Y", hadamard_conjugated: Some("SQRT_Y"), hadamard_conjugated_unsigned: Some("SQRT_Y"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "H 0
S 0
S 0", inverse_candidate: "SQRT_Y" },
    GateInfo { name: "SQRT_ZZ", aliases: &["SQRT_ZZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+YZ", "+Z_", "+ZY", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> YZ", "Z_ -> Z_", "_X -> ZY", "_Z -> _Z"], inverse: Some("SQRT_ZZ_DAG"), generalized_inverse: "SQRT_ZZ_DAG", hadamard_conjugated: Some("SQRT_XX"), hadamard_conjugated_unsigned: Some("SQRT_XX"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 1
CNOT 0 1
H 1
S 0
S 1", inverse_candidate: "SQRT_ZZ_DAG" },
    GateInfo { name: "SQRT_ZZ_DAG", aliases: &["SQRT_ZZ_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-YZ", "+Z_", "-ZY", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> -YZ", "Z_ -> Z_", "_X -> -ZY", "_Z -> _Z"], inverse: Some("SQRT_ZZ"), generalized_inverse: "SQRT_ZZ", hadamard_conjugated: Some("SQRT_XX_DAG"), hadamard_conjugated_unsigned: Some("SQRT_XX_DAG"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 1
CNOT 0 1
H 1
S 0
S 0
S 0
S 1
S 1
S 1", inverse_candidate: "SQRT_ZZ" },
    GateInfo { name: "SWAP", aliases: &["SWAP"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+_X", "+_Z", "+X_", "+Z_"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0)], flows: &["X_ -> _X", "Z_ -> _Z", "_X -> X_", "_Z -> Z_"], inverse: Some("SWAP"), generalized_inverse: "SWAP", hadamard_conjugated: Some("SWAP"), hadamard_conjugated_unsigned: Some("SWAP"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "CNOT 0 1
CNOT 1 0
CNOT 0 1", inverse_candidate: "SWAP" },
    GateInfo { name: "SWAPCX", aliases: &["SWAPCX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+_X", "+ZZ", "+XX", "+Z_"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], flows: &["X_ -> _X", "Z_ -> ZZ", "_X -> XX", "_Z -> Z_"], inverse: Some("CXSWAP"), generalized_inverse: "CXSWAP", hadamard_conjugated: Some("CXSWAP"), hadamard_conjugated_unsigned: Some("CXSWAP"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "CNOT 0 1
CNOT 1 0", inverse_candidate: "CXSWAP" },
    GateInfo { name: "S_DAG", aliases: &["SQRT_Z_DAG", "S_DAG"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-Y", "+Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0)], flows: &["X -> -Y", "Z -> Z"], inverse: Some("S"), generalized_inverse: "S", hadamard_conjugated: Some("SQRT_X_DAG"), hadamard_conjugated_unsigned: Some("SQRT_X_DAG"), flags: 32769, arg_count: 0, category: "B_Single Qubit Clifford Gates", decomposition: "S 0
S 0
S 0", inverse_candidate: "S" },
    GateInfo { name: "TICK", aliases: &["TICK"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "TICK", hadamard_conjugated: Some("TICK"), hadamard_conjugated_unsigned: Some("TICK"), flags: 17424, arg_count: 0, category: "Z_Annotations", decomposition: "", inverse_candidate: "TICK" },
    GateInfo { name: "X", aliases: &["X"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X", "-Z"], unitary: &[(0.0, 0.0), (1.0, 0.0), (1.0, 0.0), (0.0, 0.0)], flows: &["X -> X", "Z -> -Z"], inverse: Some("X"), generalized_inverse: "X", hadamard_conjugated: Some("Z"), hadamard_conjugated_unsigned: Some("Z"), flags: 32769, arg_count: 0, category: "A_Pauli Gates", decomposition: "H 0
S 0
S 0
H 0", inverse_candidate: "X" },
    GateInfo { name: "XCX", aliases: &["XCX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "+ZX", "+_X", "+XZ"], unitary: &[(0.5, 0.0), (0.5, 0.0), (0.5, 0.0), (-0.5, 0.0), (0.5, 0.0), (0.5, 0.0), (-0.5, 0.0), (0.5, 0.0), (0.5, 0.0), (-0.5, 0.0), (0.5, 0.0), (0.5, 0.0), (-0.5, 0.0), (0.5, 0.0), (0.5, 0.0), (0.5, 0.0)], flows: &["X_ -> X_", "Z_ -> ZX", "_X -> _X", "_Z -> XZ"], inverse: Some("XCX"), generalized_inverse: "XCX", hadamard_conjugated: Some("CZ"), hadamard_conjugated_unsigned: Some("CZ"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
CNOT 0 1
H 0", inverse_candidate: "XCX" },
    GateInfo { name: "XCY", aliases: &["XCY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "+ZY", "+XX", "+XZ"], unitary: &[(0.5, 0.0), (0.5, 0.0), (-0.0, -0.5), (0.0, 0.5), (0.5, 0.0), (0.5, 0.0), (0.0, 0.5), (-0.0, -0.5), (0.0, 0.5), (-0.0, -0.5), (0.5, 0.0), (0.5, 0.0), (-0.0, -0.5), (0.0, 0.5), (0.5, 0.0), (0.5, 0.0)], flows: &["X_ -> X_", "Z_ -> ZY", "_X -> XX", "_Z -> XZ"], inverse: Some("XCY"), generalized_inverse: "XCY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("CY"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "H 0
S 1
S 1
S 1
CNOT 0 1
H 0
S 1", inverse_candidate: "XCY" },
    GateInfo { name: "XCZ", aliases: &["XCZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 1), tableau: &["+X_", "+ZZ", "+XX", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0)], flows: &["X_ -> X_", "Z_ -> ZZ", "_X -> XX", "_Z -> _Z"], inverse: Some("XCZ"), generalized_inverse: "XCZ", hadamard_conjugated: Some("CX"), hadamard_conjugated_unsigned: Some("CX"), flags: 577, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "CNOT 1 0", inverse_candidate: "XCZ" },
    GateInfo { name: "X_ERROR", aliases: &["X_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "X_ERROR", hadamard_conjugated: Some("Z_ERROR"), hadamard_conjugated_unsigned: Some("Z_ERROR"), flags: 32774, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "X_ERROR" },
    GateInfo { name: "Y", aliases: &["Y"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-X", "-Z"], unitary: &[(0.0, 0.0), (-0.0, -1.0), (0.0, 1.0), (0.0, 0.0)], flows: &["X -> -X", "Z -> -Z"], inverse: Some("Y"), generalized_inverse: "Y", hadamard_conjugated: Some("Y"), hadamard_conjugated_unsigned: Some("Y"), flags: 32769, arg_count: 0, category: "A_Pauli Gates", decomposition: "S 0
S 0
H 0
S 0
S 0
H 0", inverse_candidate: "Y" },
    GateInfo { name: "YCX", aliases: &["YCX"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+XX", "+ZX", "+_X", "+YZ"], unitary: &[(0.5, 0.0), (-0.0, -0.5), (0.5, 0.0), (0.0, 0.5), (0.0, 0.5), (0.5, 0.0), (-0.0, -0.5), (0.5, 0.0), (0.5, 0.0), (0.0, 0.5), (0.5, 0.0), (-0.0, -0.5), (-0.0, -0.5), (0.5, 0.0), (0.0, 0.5), (0.5, 0.0)], flows: &["X_ -> XX", "Z_ -> ZX", "_X -> _X", "_Z -> YZ"], inverse: Some("YCX"), generalized_inverse: "YCX", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("YCZ"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
H 1
CNOT 1 0
S 0
H 1", inverse_candidate: "YCX" },
    GateInfo { name: "YCY", aliases: &["YCY"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: true, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["+XY", "+ZY", "+YX", "+YZ"], unitary: &[(0.5, 0.0), (-0.0, -0.5), (-0.0, -0.5), (0.5, 0.0), (0.0, 0.5), (0.5, 0.0), (-0.5, 0.0), (-0.0, -0.5), (0.0, 0.5), (-0.5, 0.0), (0.5, 0.0), (-0.0, -0.5), (0.5, 0.0), (0.0, 0.5), (0.0, 0.5), (0.5, 0.0)], flows: &["X_ -> XY", "Z_ -> ZY", "_X -> YX", "_Z -> YZ"], inverse: Some("YCY"), generalized_inverse: "YCY", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("YCY"), flags: 65, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
S 1
S 1
S 1
H 0
CNOT 0 1
H 0
S 0
S 1", inverse_candidate: "YCY" },
    GateInfo { name: "YCZ", aliases: &["YCZ"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: false, is_symmetric_gate: false, is_two_qubit_gate: true, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: true, takes_pauli_targets: false, args: (0, 1), tableau: &["+XZ", "+ZZ", "+YX", "+_Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-0.0, -1.0), (0.0, 0.0), (0.0, 0.0), (0.0, 1.0), (0.0, 0.0)], flows: &["X_ -> XZ", "Z_ -> ZZ", "_X -> YX", "_Z -> _Z"], inverse: Some("YCZ"), generalized_inverse: "YCZ", hadamard_conjugated: None, hadamard_conjugated_unsigned: Some("YCX"), flags: 577, arg_count: 0, category: "C_Two Qubit Clifford Gates", decomposition: "S 0
S 0
S 0
CNOT 1 0
S 0", inverse_candidate: "YCZ" },
    GateInfo { name: "Y_ERROR", aliases: &["Y_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "Y_ERROR", hadamard_conjugated: Some("Y_ERROR"), hadamard_conjugated_unsigned: Some("Y_ERROR"), flags: 32774, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "Y_ERROR" },
    GateInfo { name: "Z", aliases: &["Z"], is_noisy_gate: false, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: true, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (0, 1), tableau: &["-X", "+Z"], unitary: &[(1.0, 0.0), (0.0, 0.0), (0.0, 0.0), (-1.0, 0.0)], flows: &["X -> -X", "Z -> Z"], inverse: Some("Z"), generalized_inverse: "Z", hadamard_conjugated: Some("X"), hadamard_conjugated_unsigned: Some("X"), flags: 32769, arg_count: 0, category: "A_Pauli Gates", decomposition: "S 0
S 0", inverse_candidate: "Z" },
    GateInfo { name: "Z_ERROR", aliases: &["Z_ERROR"], is_noisy_gate: true, is_reset: false, is_single_qubit_gate: true, is_symmetric_gate: true, is_two_qubit_gate: false, is_unitary: false, produces_measurements: false, takes_measurement_record_targets: false, takes_pauli_targets: false, args: (1, 2), tableau: &[], unitary: &[], flows: &[], inverse: None, generalized_inverse: "Z_ERROR", hadamard_conjugated: Some("X_ERROR"), hadamard_conjugated_unsigned: Some("X_ERROR"), flags: 32774, arg_count: 1, category: "F_Noise Channels", decomposition: "", inverse_candidate: "Z_ERROR" },
];

/// The instruction a name or alias denotes, case-insensitively, as Stim reads names.
pub fn info(name: &str) -> Option<&'static GateInfo> {
    let upper = name.to_ascii_uppercase();
    GATE_INFO.iter().find(|g| g.name == upper || g.aliases.contains(&upper.as_str()))
}