pub struct SciRS2CircuitAnalyzer {
pub config: AnalyzerConfig,
/* private fields */
}
Expand description
SciRS2 circuit analyzer with advanced graph algorithms
Fields§
§config: AnalyzerConfig
Configuration options
Implementations§
Source§impl SciRS2CircuitAnalyzer
impl SciRS2CircuitAnalyzer
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new analyzer
Examples found in repository?
examples/advanced_features_demo.rs (line 46)
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19 println!("=== QuantRS2 Circuit Advanced Features Demo ===\n");
20
21 // 1. Basic circuit creation
22 println!("1. Creating a basic quantum circuit:");
23 let mut circuit = Circuit::<3>::new();
24 circuit.add_gate(Hadamard { target: QubitId(0) })?;
25 circuit.add_gate(CNOT {
26 control: QubitId(0),
27 target: QubitId(1),
28 })?;
29 circuit.add_gate(CNOT {
30 control: QubitId(1),
31 target: QubitId(2),
32 })?;
33 println!(" Circuit with {} gates created", circuit.gates().len());
34
35 // 2. ZX-calculus optimization
36 println!("\n2. ZX-calculus optimization:");
37 let zx_optimizer = ZXOptimizer::new();
38 let zx_diagram = zx_optimizer.circuit_to_zx(&circuit)?;
39 println!(
40 " ZX diagram with {} nodes created",
41 zx_diagram.nodes.len()
42 );
43
44 // 3. SciRS2 graph analysis
45 println!("\n3. SciRS2 graph analysis:");
46 let mut analyzer = SciRS2CircuitAnalyzer::new();
47 let analysis = analyzer.analyze_circuit(&circuit)?;
48 println!(
49 " Graph metrics: {} nodes, {} edges",
50 analysis.metrics.num_nodes, analysis.metrics.num_edges
51 );
52 println!(" Communities detected: {}", analysis.communities.len());
53
54 // 4. ML-based optimization
55 println!("\n4. ML-based circuit optimization:");
56 let ml_strategy = MLStrategy::NeuralNetwork {
57 architecture: vec![32, 16, 8],
58 learning_rate: 0.001,
59 epochs: 10,
60 batch_size: 16,
61 };
62 let mut ml_optimizer = MLCircuitOptimizer::new(ml_strategy);
63 let ml_result = ml_optimizer.optimize(&circuit)?;
64 println!(
65 " ML optimization completed in {:?}",
66 ml_result.optimization_time
67 );
68
69 // 5. Fault-tolerant compilation
70 println!("\n5. Fault-tolerant compilation:");
71 let code = QECCode::SteaneCode;
72 let ft_compiler = FaultTolerantCompiler::new(code);
73 let ft_circuit = ft_compiler.compile(&circuit)?;
74 println!(
75 " Fault-tolerant circuit: {} physical qubits, {} magic states",
76 ft_circuit.physical_qubit_count, ft_circuit.magic_state_requirements
77 );
78
79 // 6. Photonic circuit conversion
80 println!("\n6. Photonic quantum computation:");
81 let photonic_circuit = PhotonicConverter::quantum_to_photonic(&circuit)?;
82 println!(
83 " Photonic circuit: {} modes, {} gates",
84 photonic_circuit.num_modes,
85 photonic_circuit.gates.len()
86 );
87
88 // 7. Topological quantum computation
89 println!("\n7. Topological quantum computation:");
90 let anyon_model = AnyonModel::fibonacci();
91 let topo_compiler = TopologicalCompiler::new(anyon_model);
92 let topo_circuit = topo_compiler.compile_quantum_circuit(&circuit)?;
93 println!(
94 " Topological circuit: {} anyons, {} braiding operations",
95 topo_circuit.anyon_count(),
96 topo_circuit.total_braiding_operations()
97 );
98
99 // 8. Circuit-to-simulator interface
100 println!("\n8. Circuit compilation for simulators:");
101 let mut compiler = CircuitCompiler::new();
102 compiler.add_target(CompilationTarget {
103 backend: SimulatorBackend::StateVector {
104 max_qubits: 20,
105 use_gpu: false,
106 memory_optimization: MemoryOptimization::Basic,
107 },
108 optimization_level: SimulatorOptimizationLevel::Basic,
109 instruction_set: InstructionSet::Universal,
110 parallel_execution: true,
111 batch_size: Some(10),
112 });
113
114 let compiled = compiler.compile(&circuit)?;
115 println!(
116 " Compiled circuit: {} instructions, estimated memory: {} bytes",
117 compiled.instructions.len(),
118 compiled.resources.memory_bytes
119 );
120
121 // 9. Mid-circuit measurements and feed-forward
122 println!("\n9. Mid-circuit measurements and feed-forward:");
123 let mut measurement_circuit = MeasurementCircuit::<2>::new();
124 measurement_circuit.add_gate(Box::new(Hadamard { target: QubitId(0) }))?;
125 let bit = measurement_circuit.measure(QubitId(0))?;
126
127 let condition = ClassicalCondition::equals(
128 ClassicalValue::Integer(bit as u64),
129 ClassicalValue::Integer(1),
130 );
131 measurement_circuit.add_conditional(condition, Box::new(PauliX { target: QubitId(1) }))?;
132 println!(
133 " Measurement circuit with {} operations created",
134 measurement_circuit.num_operations()
135 );
136
137 // 10. Cross-talk aware scheduling
138 println!("\n10. Cross-talk aware scheduling:");
139 let crosstalk_model = CrosstalkModel::uniform(3, 0.05);
140 let scheduler = CrosstalkScheduler::new(crosstalk_model);
141 let schedule = scheduler.schedule(&circuit)?;
142 println!(
143 " Scheduled into {} time slices, total crosstalk: {:.3}",
144 schedule.time_slices.len(),
145 schedule.total_crosstalk
146 );
147
148 println!("\n=== Demo completed successfully! ===");
149 Ok(())
150}
Sourcepub fn with_config(config: AnalyzerConfig) -> Self
pub fn with_config(config: AnalyzerConfig) -> Self
Create analyzer with custom configuration
Sourcepub fn circuit_to_scirs2_graph<const N: usize>(
&self,
circuit: &Circuit<N>,
) -> QuantRS2Result<SciRS2CircuitGraph>
pub fn circuit_to_scirs2_graph<const N: usize>( &self, circuit: &Circuit<N>, ) -> QuantRS2Result<SciRS2CircuitGraph>
Convert circuit to SciRS2 graph representation
Sourcepub fn analyze_circuit<const N: usize>(
&mut self,
circuit: &Circuit<N>,
) -> QuantRS2Result<AnalysisResult>
pub fn analyze_circuit<const N: usize>( &mut self, circuit: &Circuit<N>, ) -> QuantRS2Result<AnalysisResult>
Perform comprehensive circuit analysis
Examples found in repository?
examples/advanced_features_demo.rs (line 47)
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19 println!("=== QuantRS2 Circuit Advanced Features Demo ===\n");
20
21 // 1. Basic circuit creation
22 println!("1. Creating a basic quantum circuit:");
23 let mut circuit = Circuit::<3>::new();
24 circuit.add_gate(Hadamard { target: QubitId(0) })?;
25 circuit.add_gate(CNOT {
26 control: QubitId(0),
27 target: QubitId(1),
28 })?;
29 circuit.add_gate(CNOT {
30 control: QubitId(1),
31 target: QubitId(2),
32 })?;
33 println!(" Circuit with {} gates created", circuit.gates().len());
34
35 // 2. ZX-calculus optimization
36 println!("\n2. ZX-calculus optimization:");
37 let zx_optimizer = ZXOptimizer::new();
38 let zx_diagram = zx_optimizer.circuit_to_zx(&circuit)?;
39 println!(
40 " ZX diagram with {} nodes created",
41 zx_diagram.nodes.len()
42 );
43
44 // 3. SciRS2 graph analysis
45 println!("\n3. SciRS2 graph analysis:");
46 let mut analyzer = SciRS2CircuitAnalyzer::new();
47 let analysis = analyzer.analyze_circuit(&circuit)?;
48 println!(
49 " Graph metrics: {} nodes, {} edges",
50 analysis.metrics.num_nodes, analysis.metrics.num_edges
51 );
52 println!(" Communities detected: {}", analysis.communities.len());
53
54 // 4. ML-based optimization
55 println!("\n4. ML-based circuit optimization:");
56 let ml_strategy = MLStrategy::NeuralNetwork {
57 architecture: vec![32, 16, 8],
58 learning_rate: 0.001,
59 epochs: 10,
60 batch_size: 16,
61 };
62 let mut ml_optimizer = MLCircuitOptimizer::new(ml_strategy);
63 let ml_result = ml_optimizer.optimize(&circuit)?;
64 println!(
65 " ML optimization completed in {:?}",
66 ml_result.optimization_time
67 );
68
69 // 5. Fault-tolerant compilation
70 println!("\n5. Fault-tolerant compilation:");
71 let code = QECCode::SteaneCode;
72 let ft_compiler = FaultTolerantCompiler::new(code);
73 let ft_circuit = ft_compiler.compile(&circuit)?;
74 println!(
75 " Fault-tolerant circuit: {} physical qubits, {} magic states",
76 ft_circuit.physical_qubit_count, ft_circuit.magic_state_requirements
77 );
78
79 // 6. Photonic circuit conversion
80 println!("\n6. Photonic quantum computation:");
81 let photonic_circuit = PhotonicConverter::quantum_to_photonic(&circuit)?;
82 println!(
83 " Photonic circuit: {} modes, {} gates",
84 photonic_circuit.num_modes,
85 photonic_circuit.gates.len()
86 );
87
88 // 7. Topological quantum computation
89 println!("\n7. Topological quantum computation:");
90 let anyon_model = AnyonModel::fibonacci();
91 let topo_compiler = TopologicalCompiler::new(anyon_model);
92 let topo_circuit = topo_compiler.compile_quantum_circuit(&circuit)?;
93 println!(
94 " Topological circuit: {} anyons, {} braiding operations",
95 topo_circuit.anyon_count(),
96 topo_circuit.total_braiding_operations()
97 );
98
99 // 8. Circuit-to-simulator interface
100 println!("\n8. Circuit compilation for simulators:");
101 let mut compiler = CircuitCompiler::new();
102 compiler.add_target(CompilationTarget {
103 backend: SimulatorBackend::StateVector {
104 max_qubits: 20,
105 use_gpu: false,
106 memory_optimization: MemoryOptimization::Basic,
107 },
108 optimization_level: SimulatorOptimizationLevel::Basic,
109 instruction_set: InstructionSet::Universal,
110 parallel_execution: true,
111 batch_size: Some(10),
112 });
113
114 let compiled = compiler.compile(&circuit)?;
115 println!(
116 " Compiled circuit: {} instructions, estimated memory: {} bytes",
117 compiled.instructions.len(),
118 compiled.resources.memory_bytes
119 );
120
121 // 9. Mid-circuit measurements and feed-forward
122 println!("\n9. Mid-circuit measurements and feed-forward:");
123 let mut measurement_circuit = MeasurementCircuit::<2>::new();
124 measurement_circuit.add_gate(Box::new(Hadamard { target: QubitId(0) }))?;
125 let bit = measurement_circuit.measure(QubitId(0))?;
126
127 let condition = ClassicalCondition::equals(
128 ClassicalValue::Integer(bit as u64),
129 ClassicalValue::Integer(1),
130 );
131 measurement_circuit.add_conditional(condition, Box::new(PauliX { target: QubitId(1) }))?;
132 println!(
133 " Measurement circuit with {} operations created",
134 measurement_circuit.num_operations()
135 );
136
137 // 10. Cross-talk aware scheduling
138 println!("\n10. Cross-talk aware scheduling:");
139 let crosstalk_model = CrosstalkModel::uniform(3, 0.05);
140 let scheduler = CrosstalkScheduler::new(crosstalk_model);
141 let schedule = scheduler.schedule(&circuit)?;
142 println!(
143 " Scheduled into {} time slices, total crosstalk: {:.3}",
144 schedule.time_slices.len(),
145 schedule.total_crosstalk
146 );
147
148 println!("\n=== Demo completed successfully! ===");
149 Ok(())
150}
Auto Trait Implementations§
impl Freeze for SciRS2CircuitAnalyzer
impl RefUnwindSafe for SciRS2CircuitAnalyzer
impl Send for SciRS2CircuitAnalyzer
impl Sync for SciRS2CircuitAnalyzer
impl Unpin for SciRS2CircuitAnalyzer
impl UnwindSafe for SciRS2CircuitAnalyzer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self
to the equivalent element of its superset.