use num_complex::Complex64;
use numpy::{PyArray2, ToPyArray};
use qoqo_calculator::CalculatorFloat;
use qoqo_calculator_pyo3::{convert_into_calculator_float, CalculatorFloatWrapper};
use crate::CircuitWrapper;
use pyo3::exceptions::{PyRuntimeError, PyValueError};
use pyo3::prelude::*;
use pyo3::types::PySet;
use std::collections::HashMap;
#[cfg(feature = "json_schema")]
use roqoqo::ROQOQO_VERSION;
use roqoqo::operations::*;
use qoqo_macros::*;
#[wrap(
Operate,
OperateFourQubit,
OperateGate,
OperateFourQubitGate,
JsonSchema
)]
pub struct TripleControlledPauliX {
control_0: usize,
control_1: usize,
control_2: usize,
target: usize,
}
#[wrap(
Operate,
OperateFourQubit,
OperateGate,
OperateFourQubitGate,
JsonSchema
)]
pub struct TripleControlledPauliZ {
control_0: usize,
control_1: usize,
control_2: usize,
target: usize,
}
#[wrap(
Operate,
OperateFourQubit,
OperateGate,
OperateFourQubitGate,
JsonSchema
)]
pub struct TripleControlledPhaseShift {
control_0: usize,
control_1: usize,
control_2: usize,
target: usize,
theta: CalculatorFloat,
}