1pub mod api;
6pub mod bms;
7pub mod cache;
8pub mod cost;
9pub mod error;
10pub mod flux_holonomy;
11pub mod ir;
12pub mod nonlocal_dynamics;
13pub mod phi_ir;
14pub mod qpu;
15pub mod radiative_entropy;
16
17pub use bms::{BMSObservable, EscapeRoute};
18pub use error::{ZetaError, ZetaResult};
19pub use flux_holonomy::{compute_flux_sector, FluxSector};
20pub use nonlocal_dynamics::{
21 evolve_nonlocal_lindblad, reduce_to_subsystem, von_neumann_entropy, EntropicSubsystem,
22};
23pub use phi_ir::{PhiCircuit, PhiElement, WeylGen};
24pub use qpu::{Modality, QPU};
25pub use radiative_entropy::RadiativeVisibility;
26
27use nalgebra::DMatrix;
28use std::collections::HashMap;
29
30#[derive(Debug)]
41pub struct QuantumQuantizer {
42 pub qpu: QPU, pub calibration: HashMap<String, f64>, }
45
46impl QuantumQuantizer {
48 pub fn new(
50 modality: Modality, calibration: &HashMap<String, f64>, calibration_ts: String, ) -> Self {
54 let mut qpu = QPU::new(modality, calibration_ts); for (k, &err) in calibration {
58 if let Some((a, b)) = k.split_once('-') {
60 if let (Ok(a), Ok(b)) = (a.parse::<u32>(), b.parse::<u32>()) {
62 qpu.add_coupling(a, b, err); qpu.add_coupling(b, a, err); }
65 }
66 }
67
68 Self {
70 qpu, calibration: calibration.clone(), }
73 }
74
75 pub fn quantize(&mut self, circ: &PhiCircuit) -> anyhow::Result<(PhiCircuit, f64)> {
77 let integrated_obstruction = crate::cost::integrated_obstruction(circ, &self.qpu); Ok((circ.clone(), integrated_obstruction)) }
81
82 pub fn quantize_with_bms(
84 &mut self,
85 circ: &PhiCircuit,
86 route: EscapeRoute,
87 ) -> anyhow::Result<(PhiCircuit, f64, BMSObservable)> {
88 let (optimized, sx) = self.quantize(circ)?; let (_entropy, bms_obs) =
90 crate::bms::probe_gravitational_memory(&optimized, &self.qpu, route); Ok((optimized, sx, bms_obs)) }
93
94 fn analyze_nonlocal_dynamics(&self, dt: f64, dissipator: f64) -> EntropicSubsystem {
95 let rho_full = DMatrix::identity(4, 4);
96 let h_nonlocal = DMatrix::from_fn(4, 4, |i, j| if i % 2 != j % 2 { 0.1 } else { 0.0 });
97 let rho_evolved = evolve_nonlocal_lindblad(&rho_full, &h_nonlocal, dissipator, dt);
98 reduce_to_subsystem(&rho_evolved, 1)
99 }
100
101 fn analyze_flux_sector(&self) -> FluxSector {
102 let proj1 = DMatrix::from_diagonal_element(4, 4, 1.0);
103 let proj2 = proj1.clone();
104 let flux_op = DMatrix::from_element(4, 4, 0.05);
105 let holonomy_mat = DMatrix::identity(4, 4) + flux_op.clone() * 0.2;
106 compute_flux_sector(&proj1, &proj2, &flux_op, &holonomy_mat)
107 }
108
109 fn analyze_radiative_visibility(
110 &self,
111 bms: &BMSObservable,
112 integrated_obstruction: f64,
113 ) -> RadiativeVisibility {
114 RadiativeVisibility::from_bms_and_entropy(bms, integrated_obstruction)
115 }
116
117 pub fn quantize_full_analysis(
119 &mut self,
120 circ: &PhiCircuit,
121 bms_route: crate::bms::EscapeRoute,
122 dt: f64,
123 dissipator: f64,
124 ) -> anyhow::Result<(
125 PhiCircuit,
126 f64,
127 crate::bms::BMSObservable,
128 EntropicSubsystem,
129 FluxSector,
130 RadiativeVisibility,
131 )> {
132 let (optimized, integrated_obstruction) = self.quantize(circ)?;
133 let (_full_entropy, bms_obs) =
134 crate::bms::probe_gravitational_memory(&optimized, &self.qpu, bms_route);
135
136 let subsystem = self.analyze_nonlocal_dynamics(dt, dissipator);
137 let flux_sector = self.analyze_flux_sector();
138 let radiative = self.analyze_radiative_visibility(&bms_obs, integrated_obstruction);
139
140 Ok((
141 optimized,
142 integrated_obstruction,
143 bms_obs,
144 subsystem,
145 flux_sector,
146 radiative,
147 ))
148 }
149}