quantrs2_sim/tensor/
tensornetworksimulator_traits.rs1use crate::error::{Result, SimulatorError};
13use quantrs2_circuit::prelude::*;
14use quantrs2_core::prelude::*;
15
16use super::functions::{
17 cnot_matrix, cz_gate, pauli_h, pauli_x, pauli_y, pauli_z, rotation_x, rotation_y, rotation_z,
18 s_gate, swap_gate, t_gate,
19};
20use super::types::TensorNetworkSimulator;
21
22impl crate::simulator::Simulator for TensorNetworkSimulator {
23 fn run<const N: usize>(
24 &mut self,
25 circuit: &quantrs2_circuit::prelude::Circuit<N>,
26 ) -> crate::error::Result<crate::simulator::SimulatorResult<N>> {
27 self.initialize_zero_state().map_err(|e| {
28 crate::error::SimulatorError::ComputationError(format!(
29 "Failed to initialize state: {e}"
30 ))
31 })?;
32 let gates = circuit.gates();
33 for gate in gates {
34 self.apply_circuit_gate(gate.as_ref()).map_err(|e| {
35 crate::error::SimulatorError::ComputationError(format!("Failed to apply gate: {e}"))
36 })?;
37 }
38 let final_state = self.contract_to_state_vector::<N>().map_err(|e| {
39 crate::error::SimulatorError::ComputationError(format!(
40 "Failed to contract tensor network: {e}"
41 ))
42 })?;
43 Ok(crate::simulator::SimulatorResult::new(final_state))
44 }
45}
46
47impl Default for TensorNetworkSimulator {
48 fn default() -> Self {
49 Self::new(1)
50 }
51}