1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub enum QECCodeType {
9 SurfaceCode {
11 distance: usize,
12 layout: SurfaceCodeLayout,
13 },
14 ColorCode {
16 distance: usize,
17 color_type: ColorCodeType,
18 },
19 TopologicalCode { code_type: TopologicalCodeType },
21 CSSCode { stabilizers: Vec<String> },
23 SteaneCode,
25 ShorCode,
27 RepetitionCode { length: usize },
29 CustomCode {
31 name: String,
32 parameters: HashMap<String, f64>,
33 },
34}
35
36#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
38pub enum SurfaceCodeLayout {
39 Square,
40 Triangular,
41 Hexagonal,
42 Rotated,
43 Custom(String),
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
48pub enum ColorCodeType {
49 TriangularLattice,
50 HexagonalLattice,
51 Custom(String),
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub enum TopologicalCodeType {
57 ToricCode,
58 PlanarCode,
59 TwistedToricCode,
60 Custom(String),
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct SurfaceCodeConfig {
66 pub distance: usize,
68 pub layout: SurfaceCodeLayout,
70 pub qubit_allocation: QubitAllocation,
72 pub stabilizer_config: StabilizerConfig,
74 pub boundary_conditions: BoundaryConditions,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct QubitAllocation {
81 pub data_qubits: Vec<usize>,
83 pub syndrome_qubits: Vec<usize>,
85 pub auxiliary_qubits: Vec<usize>,
87 pub spare_qubits: Vec<usize>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct StabilizerConfig {
94 pub x_stabilizers: Vec<Stabilizer>,
96 pub z_stabilizers: Vec<Stabilizer>,
98 pub measurement_schedule: MeasurementSchedule,
100 pub error_threshold: f64,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct Stabilizer {
107 pub qubits: Vec<usize>,
109 pub operators: Vec<PauliOperator>,
111 pub weight: usize,
113 pub expected_eigenvalue: i8,
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
119pub enum PauliOperator {
120 I, X, Y, Z, }
125
126#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct MeasurementSchedule {
129 pub measurement_order: Vec<usize>,
131 pub measurement_interval: std::time::Duration,
133 pub parallel_groups: Vec<Vec<usize>>,
135 pub adaptive_scheduling: bool,
137}
138
139#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
141pub enum BoundaryConditions {
142 Open,
143 Periodic,
144 Twisted,
145 Rough,
146 Smooth,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct ColorCodeConfig {
152 pub distance: usize,
154 pub color_type: ColorCodeType,
156 pub face_coloring: FaceColoring,
158 pub vertex_operators: Vec<VertexOperator>,
160 pub face_operators: Vec<FaceOperator>,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct FaceColoring {
167 pub color_assignments: HashMap<usize, Color>,
169 pub constraints: Vec<ColorConstraint>,
171}
172
173#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
175pub enum Color {
176 Red,
177 Green,
178 Blue,
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize)]
183pub struct ColorConstraint {
184 pub constraint_type: ConstraintType,
186 pub faces: Vec<usize>,
188 pub required_colors: Vec<Color>,
190}
191
192#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
194pub enum ConstraintType {
195 AdjacentFaces,
196 VertexNeighbors,
197 EdgeConnected,
198}
199
200#[derive(Debug, Clone, Serialize, Deserialize)]
202pub struct VertexOperator {
203 pub vertex: usize,
205 pub qubits: Vec<usize>,
207 pub operator_type: VertexOperatorType,
209}
210
211#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
213pub enum VertexOperatorType {
214 XType,
215 ZType,
216 YType,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize)]
221pub struct FaceOperator {
222 pub face: usize,
224 pub color: Color,
226 pub boundary_qubits: Vec<usize>,
228 pub weight: usize,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
234pub struct TopologicalCodeConfig {
235 pub code_type: TopologicalCodeType,
237 pub lattice: LatticeConfig,
239 pub logical_operators: LogicalOperators,
241 pub syndrome_extraction: SyndromeExtractionConfig,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
247pub struct LatticeConfig {
248 pub dimensions: (usize, usize),
250 pub periodic: bool,
252 pub twisted: bool,
254 pub defects: Vec<DefectLocation>,
256}
257
258#[derive(Debug, Clone, Serialize, Deserialize)]
260pub struct DefectLocation {
261 pub position: (usize, usize),
263 pub defect_type: DefectType,
265}
266
267#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
269pub enum DefectType {
270 Hole,
271 Twist,
272 Boundary,
273 Custom(String),
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize)]
278pub struct LogicalOperators {
279 pub logical_x: Vec<LogicalOperator>,
281 pub logical_z: Vec<LogicalOperator>,
283 pub commutation_relations: CommutationTable,
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
289pub struct LogicalOperator {
290 pub path: Vec<usize>,
292 pub operator_type: LogicalOperatorType,
294 pub homology_class: Vec<i32>,
296}
297
298#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
300pub enum LogicalOperatorType {
301 XOperator,
302 ZOperator,
303 YOperator,
304}
305
306#[derive(Debug, Clone, Serialize, Deserialize)]
308pub struct CommutationTable {
309 pub matrix: Vec<Vec<i8>>,
311 pub labels: Vec<String>,
313}
314
315#[derive(Debug, Clone, Serialize, Deserialize)]
317pub struct SyndromeExtractionConfig {
318 pub method: ExtractionMethod,
320 pub measurement_circuits: Vec<MeasurementCircuit>,
322 pub correction_cycles: usize,
324}
325
326#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
328pub enum ExtractionMethod {
329 Standard,
330 Fast,
331 Adaptive,
332 FaultTolerant,
333}
334
335#[derive(Debug, Clone, Serialize, Deserialize)]
337pub struct MeasurementCircuit {
338 pub gates: Vec<Gate>,
340 pub measurement_qubits: Vec<usize>,
342 pub classical_registers: Vec<usize>,
344}
345
346#[derive(Debug, Clone, Serialize, Deserialize)]
348pub struct Gate {
349 pub gate_type: GateType,
351 pub targets: Vec<usize>,
353 pub controls: Vec<usize>,
355 pub parameters: Vec<f64>,
357}
358
359#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
361pub enum GateType {
362 X,
363 Y,
364 Z,
365 H,
366 S,
367 T,
368 CNOT,
369 CZ,
370 Measurement,
371 Reset,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize)]
376pub struct CSSCodeConfig {
377 pub classical_codes: ClassicalCodes,
379 pub parity_matrices: ParityMatrices,
381 pub generator_matrices: GeneratorMatrices,
383 pub code_parameters: CSSParameters,
385}
386
387#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct ClassicalCodes {
390 pub x_code: ClassicalCode,
392 pub z_code: ClassicalCode,
394 pub dual_relationship: DualRelationship,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize)]
400pub struct ClassicalCode {
401 pub length: usize,
403 pub dimension: usize,
405 pub min_distance: usize,
407 pub generator: Vec<Vec<u8>>,
409 pub parity_check: Vec<Vec<u8>>,
411}
412
413#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
415pub enum DualRelationship {
416 SelfDual,
417 MutuallyDual,
418 NonDual,
419}
420
421#[derive(Debug, Clone, Serialize, Deserialize)]
423pub struct ParityMatrices {
424 pub hx_matrix: Vec<Vec<u8>>,
426 pub hz_matrix: Vec<Vec<u8>>,
428 pub orthogonality_verified: bool,
430}
431
432#[derive(Debug, Clone, Serialize, Deserialize)]
434pub struct GeneratorMatrices {
435 pub gx_matrix: Vec<Vec<u8>>,
437 pub gz_matrix: Vec<Vec<u8>>,
439 pub logical_generators: LogicalGenerators,
441}
442
443#[derive(Debug, Clone, Serialize, Deserialize)]
445pub struct LogicalGenerators {
446 pub logical_x_generators: Vec<Vec<u8>>,
448 pub logical_z_generators: Vec<Vec<u8>>,
450 pub stabilizer_generators: Vec<Vec<u8>>,
452}
453
454#[derive(Debug, Clone, Serialize, Deserialize)]
456pub struct CSSParameters {
457 pub n: usize,
459 pub k: usize,
461 pub d: usize,
463 pub t: usize,
465}
466
467#[derive(Debug, Clone, Serialize, Deserialize)]
469pub struct SteaneCodeConfig {
470 pub parameters: SteaneParameters,
472 pub encoding_circuits: Vec<EncodingCircuit>,
474 pub decoding_tables: DecodingTables,
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize)]
480pub struct SteaneParameters {
481 pub n: usize, pub k: usize, pub d: usize, }
486
487#[derive(Debug, Clone, Serialize, Deserialize)]
489pub struct EncodingCircuit {
490 pub name: String,
492 pub gates: Vec<Gate>,
494 pub input_qubits: Vec<usize>,
496 pub output_qubits: Vec<usize>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct DecodingTables {
503 pub syndrome_error_map: HashMap<Vec<u8>, ErrorPattern>,
505 pub recovery_operations: HashMap<Vec<u8>, Vec<Gate>>,
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize)]
511pub struct ErrorPattern {
512 pub locations: Vec<usize>,
514 pub error_types: Vec<ErrorType>,
516 pub weight: usize,
518}
519
520#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
522pub enum ErrorType {
523 X,
524 Y,
525 Z,
526 Identity,
527}
528
529#[derive(Debug, Clone, Serialize, Deserialize)]
531pub struct ShorCodeConfig {
532 pub parameters: ShorParameters,
534 pub bit_flip_structure: BitFlipStructure,
536 pub phase_flip_structure: PhaseFlipStructure,
538}
539
540#[derive(Debug, Clone, Serialize, Deserialize)]
542pub struct ShorParameters {
543 pub n: usize, pub k: usize, pub d: usize, }
550
551#[derive(Debug, Clone, Serialize, Deserialize)]
553pub struct BitFlipStructure {
554 pub blocks: Vec<CodeBlock>,
556 pub parity_qubits: Vec<usize>,
558}
559
560#[derive(Debug, Clone, Serialize, Deserialize)]
562pub struct PhaseFlipStructure {
563 pub superposition_states: Vec<SuperpositionState>,
565 pub phase_parity_qubits: Vec<usize>,
567}
568
569#[derive(Debug, Clone, Serialize, Deserialize)]
571pub struct CodeBlock {
572 pub qubits: Vec<usize>,
574 pub majority_vote_qubits: Vec<usize>,
576}
577
578#[derive(Debug, Clone, Serialize, Deserialize)]
580pub struct SuperpositionState {
581 pub coefficients: Vec<f64>,
583 pub basis_states: Vec<String>,
585}
586
587#[derive(Debug, Clone, Serialize, Deserialize)]
589pub struct RepetitionCodeConfig {
590 pub length: usize,
592 pub majority_voting: MajorityVoting,
594 pub error_threshold: f64,
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600pub struct MajorityVoting {
601 pub strategy: VotingStrategy,
603 pub confidence_threshold: f64,
605 pub tie_breaking: TieBreaking,
607}
608
609#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
611pub enum VotingStrategy {
612 Simple,
613 Weighted,
614 Adaptive,
615}
616
617#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
619pub enum TieBreaking {
620 Random,
621 Conservative,
622 Aggressive,
623 Historical,
624}