Skip to main content

quantrs2_sim/tensor/
tensornetworksimulator_traits.rs

1//! # TensorNetworkSimulator - Trait Implementations
2//!
3//! This module contains trait implementations for `TensorNetworkSimulator`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Simulator`
8//! - `Default`
9//!
10//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
11
12use 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}