Files
wifi-densepose/crates/ruQu/examples/quantum_fabric_basic.rs
ruv d803bfe2b1 Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
2026-02-28 14:39:40 -05:00

143 lines
5.0 KiB
Rust

//! Basic example demonstrating the QuantumFabric API.
//!
//! This example shows how to:
//! 1. Build a QuantumFabric with a surface code topology
//! 2. Ingest syndrome rounds
//! 3. Get coherence gate decisions
//!
//! Run with: cargo run --example quantum_fabric_basic -p ruqu
use ruqu::{
fabric::{surface_code_d7, QuantumFabric},
syndrome::{DetectorBitmap, SyndromeRound},
tile::GateThresholds,
types::GateDecision,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== ruQu QuantumFabric Basic Example ===\n");
// -------------------------------------------------------------------------
// Step 1: Build the QuantumFabric
// -------------------------------------------------------------------------
println!("Building QuantumFabric...");
let fabric = QuantumFabric::builder()
.tiles(256) // 255 workers + TileZero
.patch_map(surface_code_d7()) // Surface code distance-7 layout
.syndrome_buffer(1024) // Ring buffer depth
.thresholds(GateThresholds::default())
.build()?;
println!(
" Fabric created with {} worker tiles",
fabric.worker_count()
);
println!(
" Patch map: {} ({} qubits, {} detectors)",
fabric.patch_map().name,
fabric.patch_map().qubit_count,
fabric.patch_map().detector_count
);
println!();
// -------------------------------------------------------------------------
// Step 2: Simulate syndrome rounds
// -------------------------------------------------------------------------
println!("Simulating syndrome rounds...");
let mut fabric = fabric; // Make mutable
let detector_count = fabric.patch_map().detector_count.min(64);
// Simulate 100 syndrome rounds
for cycle in 0..100 {
// Create a syndrome round with some random firings
let mut detectors = DetectorBitmap::new(detector_count);
// Simulate sparse syndrome: ~5% detector firing rate
for det in 0..detector_count {
if det * 17 % 20 == cycle % 20 {
detectors.set(det, true);
}
}
let round = SyndromeRound::new(
cycle as u64, // round_id
cycle as u64, // cycle
cycle as u64 * 1_000_000, // timestamp (ns)
detectors,
0, // source_tile (0 = broadcast)
);
// Ingest the syndrome
fabric.ingest_syndromes(&[round])?;
// Get gate decision every 10 cycles
if cycle % 10 == 9 {
let decision = fabric.tick()?;
let decision_str = match decision {
GateDecision::Safe => "SAFE (proceed with full speed)",
GateDecision::Cautious => "CAUTIOUS (increase monitoring)",
GateDecision::Unsafe => "UNSAFE (quarantine region)",
};
println!(" Cycle {}: Gate Decision = {}", cycle + 1, decision_str);
}
}
// -------------------------------------------------------------------------
// Step 3: Report statistics
// -------------------------------------------------------------------------
println!("\n=== Decision Statistics ===");
let stats = fabric.decision_stats();
let state = fabric.current_state();
println!(" Total decisions: {}", stats.total);
println!(
" Permits: {} ({:.1}%)",
stats.permits,
stats.permit_rate * 100.0
);
println!(" Defers: {}", stats.defers);
println!(" Denies: {}", stats.denies);
println!(" Avg latency: {} ns", stats.avg_latency_ns);
println!(" Peak latency: {} ns", stats.peak_latency_ns);
println!(" Syndromes ingested: {}", state.syndromes_ingested);
// -------------------------------------------------------------------------
// Step 4: Demonstrate CoherenceGate API
// -------------------------------------------------------------------------
println!("\n=== CoherenceGate Details ===");
// Get detailed filter results
let filter_results = fabric.gate.evaluate_detailed();
println!(" Structural Filter:");
println!(" Cut value: {:.2}", filter_results.structural.cut_value);
println!(" Coherent: {}", filter_results.structural.is_coherent);
println!(" Shift Filter:");
println!(" Pressure: {:.3}", filter_results.shift.pressure);
println!(" Stable: {}", filter_results.shift.is_stable);
println!(" Evidence Filter:");
println!(" E-value: {:.2e}", filter_results.evidence.e_value);
println!(" Samples: {}", filter_results.evidence.samples_seen);
// Get witness receipt
if let Some(receipt) = fabric.gate.receipt() {
println!("\n=== Latest Witness Receipt ===");
println!(" Sequence: {}", receipt.sequence);
println!(" Decision: {:?}", receipt.decision);
println!(
" Hash: {:02x}{:02x}{:02x}{:02x}...",
receipt.hash[0], receipt.hash[1], receipt.hash[2], receipt.hash[3]
);
}
println!("\nExample completed successfully!");
Ok(())
}