qualia_core_db/specialized_libs/qpu_bridge/
circuit.rs1use super::*;
18
19#[repr(C)]
20pub struct QuantumCircuitParams {
21 pub circuit_type: QuantumCircuitType,
22 pub num_qubits: u32,
23 pub depth: u32,
24 pub parameters: [f32; 64],
25}
26
27#[repr(u8)]
28#[derive(Clone, Copy, PartialEq)]
29pub enum QuantumCircuitType {
30 Hamiltonian = 0,
31 StatePreparation = 1,
32 Measurement = 2,
33 General = 3,
34 VQE = 4,
35 QAOA = 5,
36}
37
38#[repr(C)]
39pub struct QuantumCircuit {
40 pub circuit_type: QuantumCircuitType,
41 pub num_qubits: u32,
42 pub depth: u32,
43 pub gates: [QuantumGate; 100],
44}
45
46#[repr(C)]
47#[derive(Clone, Copy)]
48pub struct QuantumGate {
49 pub gate_type: QuantumGateType,
50 pub target_qubit: u8,
51 pub control_qubit: u8,
52 pub parameters: [f32; 4],
53}
54
55#[repr(u8)]
56#[derive(Clone, Copy, PartialEq)]
57pub enum QuantumGateType {
58 H = 0,
59 X = 1,
60 Y = 2,
61 Z = 3,
62 CNOT = 4,
63 RX = 5,
64 RY = 6,
65 RZ = 7,
66 CZ = 8,
67}
68
69impl QuantumCircuit {
70 pub fn from_params(params: &QuantumCircuitParams) -> Result<Self, QPUBridgeError> {
71 Ok(Self {
72 circuit_type: params.circuit_type,
73 num_qubits: params.num_qubits,
74 depth: params.depth,
75 gates: [QuantumGate::default(); 100],
76 })
77 }
78}
79
80impl QuantumGate {
81 #[inline(always)]
82 pub const fn default() -> Self {
83 Self {
84 gate_type: QuantumGateType::H,
85 target_qubit: 0,
86 control_qubit: 0,
87 parameters: [0.0; 4],
88 }
89 }
90}