use std::collections::HashSet;
use crate::operations::{
ImplementedIn1point6, ImplementedIn1point8, InvolveModes, InvolveQubits, InvolvedClassical,
InvolvedModes, InvolvedQubits, Operate, OperateModeGate, OperateSingleMode,
OperateSingleModeGate, OperateTwoMode, OperateTwoModeGate, Substitute, SubstituteModes,
SupportedVersion,
};
use crate::RoqoqoError;
use qoqo_calculator::CalculatorFloat;
#[derive(
Debug,
Clone,
PartialEq,
OperateModeGate,
OperateSingleModeGate,
roqoqo_derive::Operate,
roqoqo_derive::Substitute,
roqoqo_derive::InvolveModes,
roqoqo_derive::SubstituteModes,
roqoqo_derive::OperateSingleMode,
)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
pub struct Squeezing {
mode: usize,
squeezing: CalculatorFloat,
phase: CalculatorFloat,
}
#[allow(non_upper_case_globals)]
const TAGS_Squeezing: &[&str; 4] = &[
"Operation",
"ModeGateOperation",
"SingleModeGateOperation",
"Squeezing",
];
impl InvolveQubits for Squeezing {
fn involved_qubits(&self) -> InvolvedQubits {
InvolvedQubits::None
}
}
impl ImplementedIn1point6 for Squeezing {}
impl SupportedVersion for Squeezing {
fn minimum_supported_roqoqo_version(&self) -> (u32, u32, u32) {
(1, 6, 0)
}
}
#[derive(
Debug,
Clone,
PartialEq,
OperateModeGate,
OperateSingleModeGate,
roqoqo_derive::Operate,
roqoqo_derive::Substitute,
roqoqo_derive::InvolveModes,
roqoqo_derive::SubstituteModes,
roqoqo_derive::OperateSingleMode,
)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
pub struct PhaseDisplacement {
mode: usize,
displacement: CalculatorFloat,
phase: CalculatorFloat,
}
#[allow(non_upper_case_globals)]
const TAGS_PhaseDisplacement: &[&str; 4] = &[
"Operation",
"ModeGateOperation",
"SingleModeGateOperation",
"PhaseDisplacement",
];
impl InvolveQubits for PhaseDisplacement {
fn involved_qubits(&self) -> InvolvedQubits {
InvolvedQubits::None
}
}
impl ImplementedIn1point8 for PhaseDisplacement {}
impl SupportedVersion for PhaseDisplacement {
fn minimum_supported_roqoqo_version(&self) -> (u32, u32, u32) {
(1, 8, 0)
}
}
#[derive(
Debug,
Clone,
PartialEq,
OperateModeGate,
OperateSingleModeGate,
roqoqo_derive::Operate,
roqoqo_derive::Substitute,
roqoqo_derive::InvolveModes,
roqoqo_derive::SubstituteModes,
roqoqo_derive::OperateSingleMode,
)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
pub struct PhaseShift {
mode: usize,
phase: CalculatorFloat,
}
#[allow(non_upper_case_globals)]
const TAGS_PhaseShift: &[&str; 4] = &[
"Operation",
"ModeGateOperation",
"SingleModeGateOperation",
"PhaseShift",
];
impl InvolveQubits for PhaseShift {
fn involved_qubits(&self) -> InvolvedQubits {
InvolvedQubits::None
}
}
impl ImplementedIn1point6 for PhaseShift {}
impl SupportedVersion for PhaseShift {
fn minimum_supported_roqoqo_version(&self) -> (u32, u32, u32) {
(1, 6, 0)
}
}
#[derive(
Debug,
Clone,
PartialEq,
OperateModeGate,
OperateTwoModeGate,
roqoqo_derive::Operate,
roqoqo_derive::Substitute,
roqoqo_derive::InvolveModes,
roqoqo_derive::SubstituteModes,
roqoqo_derive::OperateTwoMode,
)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
pub struct BeamSplitter {
mode_0: usize,
mode_1: usize,
theta: CalculatorFloat,
phi: CalculatorFloat,
}
#[allow(non_upper_case_globals)]
const TAGS_BeamSplitter: &[&str; 4] = &[
"Operation",
"ModeGateOperation",
"TwoModeGateOperation",
"BeamSplitter",
];
impl InvolveQubits for BeamSplitter {
fn involved_qubits(&self) -> InvolvedQubits {
InvolvedQubits::None
}
}
impl ImplementedIn1point6 for BeamSplitter {}
impl SupportedVersion for BeamSplitter {
fn minimum_supported_roqoqo_version(&self) -> (u32, u32, u32) {
(1, 6, 0)
}
}
#[derive(
Debug,
Clone,
PartialEq,
roqoqo_derive::Operate,
roqoqo_derive::Substitute,
roqoqo_derive::InvolveModes,
roqoqo_derive::SubstituteModes,
roqoqo_derive::OperateSingleMode,
)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
pub struct PhotonDetection {
mode: usize,
readout: String,
readout_index: usize,
}
#[allow(non_upper_case_globals)]
const TAGS_PhotonDetection: &[&str; 3] = &["Operation", "Measurement", "PhotonDetection"];
impl InvolveQubits for PhotonDetection {
fn involved_qubits(&self) -> InvolvedQubits {
InvolvedQubits::None
}
fn involved_classical(&self) -> InvolvedClassical {
let mut a: HashSet<(String, usize)> = HashSet::new();
a.insert((self.readout.clone(), self.readout_index));
InvolvedClassical::Set(a)
}
}
impl ImplementedIn1point6 for PhotonDetection {}
impl SupportedVersion for PhotonDetection {
fn minimum_supported_roqoqo_version(&self) -> (u32, u32, u32) {
(1, 6, 0)
}
}