use crate::prelude::*;
use derive_more::Display;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Display, Deserialize, PartialEq, Serialize, JsonSchema)]
pub enum Model {
#[display("Advantage")]
#[serde(alias = "advantage")]
Advantage,
#[display("Advantage2")]
#[serde(alias = "advantage2", alias = "Advantage 2", alias = "advantage 2")]
Advantage2,
#[display("Ankaa")]
#[serde(alias = "ankaa")]
Ankaa,
#[display("Aspen")]
#[serde(alias = "aspen")]
Aspen,
#[display("Bristlecone")]
#[serde(alias = "bristlecone")]
Bristlecone,
#[display("Condor")]
#[serde(alias = "condor")]
Condor,
#[display("Eagle")]
#[serde(alias = "eagle")]
Eagle,
#[display("Falcon")]
#[serde(alias = "falcon")]
Falcon,
#[display("Flamingo")]
#[serde(alias = "flamingo")]
Flamingo,
#[display("H1")]
#[serde(alias = "h1", alias = "H 1", alias = "h 1")]
H1,
#[display("H2")]
#[serde(alias = "h2", alias = "H 2", alias = "h 2")]
H2,
#[display("Heron")]
#[serde(alias = "heron")]
Heron,
#[display("Hummingbird")]
#[serde(alias = "hummingbird")]
Hummingbird,
#[display("IonQ Aria")]
#[serde(alias = "IonQ Aria", alias = "ionq aria", alias = "aria", alias = "Aria")]
IonQAria,
#[display("IonQ Forte")]
#[serde(alias = "IonQ Forte", alias = "ionq forte", alias = "forte", alias = "Forte")]
IonQForte,
#[display("IonQ Harmony")]
#[serde(alias = "IonQ Harmony", alias = "ionq harmony", alias = "harmony", alias = "Harmony")]
IonQHarmony,
#[display("IonQ Tempo")]
#[serde(alias = "IonQ Tempo", alias = "ionq tempo", alias = "tempo", alias = "Tempo")]
IonQTempo,
#[display("Osprey")]
#[serde(alias = "osprey")]
Osprey,
#[display("Sycamore")]
#[serde(alias = "sycamore")]
Sycamore,
#[display("2000Q")]
#[serde(alias = "2000q", alias = "2000Q")]
TwoThousandQ,
#[display("Willow")]
#[serde(alias = "willow")]
Willow,
#[display("{}", _0)]
Other(String),
}
#[derive(Clone, Debug, Display, Deserialize, PartialEq, Serialize, JsonSchema)]
pub enum Paradigm {
#[display("Gate-based")]
#[serde(alias = "gate-based", alias = "gate_based", alias = "GateBased")]
GateBased,
#[display("Annealing")]
Annealing,
#[display("Hybrid Quantum-Classical")]
#[serde(
alias = "Hybrid Quantum-Classical",
alias = "hybrid quantum-classical",
alias = "hybrid quantum classical",
alias = "hybrid_quantum_classical",
alias = "HybridQuantumClassical"
)]
HybridQuantumClassical,
#[display("Photonic")]
Photonic,
#[display("Neutral Atom")]
#[serde(alias = "Neutral Atom", alias = "neutral_atom", alias = "NeutralAtom")]
NeutralAtom,
#[display("NISQ")]
#[serde(
alias = "NISQ",
alias = "nisq",
alias = "Noisy Intermediate-Scale Quantum",
alias = "noisy intermediate-scale quantum",
alias = "noisy_intermediate_scale_quantum",
alias = "NoisyIntermediateScaleQuantum"
)]
Nisq,
#[display("Trapped Ion")]
#[serde(alias = "Trapped Ion", alias = "trapped_ion", alias = "TrappedIon")]
TrappedIon,
#[display("{}", _0)]
Other(String),
}
#[derive(Clone, Debug, Default, Display, Deserialize, PartialEq, Serialize, JsonSchema)]
#[repr(u8)]
pub enum Regime {
#[default]
#[display("classical")]
#[serde(alias = "classical")]
Classical = 0,
#[display("hybrid")]
#[serde(alias = "hybrid")]
Hybrid = 1,
#[display("deep")]
#[serde(alias = "deep")]
Deep = 2,
}
#[derive(Clone, Debug, Display, Deserialize, PartialEq, Serialize, JsonSchema)]
pub enum Topology {
#[display("heavy-hex")]
#[serde(alias = "heavy-hex", alias = "heavy_hex", alias = "heavyHex", alias = "heavyhex")]
HeavyHex,
#[display("all-to-all")]
#[serde(alias = "all-to-all", alias = "all_to_all", alias = "allToAll")]
AllToAll,
#[display("grid")]
#[serde(alias = "grid", alias = "square lattice", alias = "square_lattice", alias = "SquareLattice")]
Grid,
#[display("ring")]
#[serde(alias = "ring")]
Ring,
#[display("linear chain")]
#[serde(alias = "linear chain", alias = "linear_chain", alias = "LinearChain")]
LinearChain,
#[display("star")]
#[serde(alias = "star")]
Star,
#[display("Pegasus")]
#[serde(alias = "pegasus")]
Pegasus,
#[display("Chimera")]
#[serde(alias = "chimera")]
Chimera,
#[display("Zyng")]
#[serde(alias = "zyng")]
Zyng,
#[display("{}", _0)]
Other(String),
}