Skip to main content

quantrs2_sim/quantum_reservoir_computing/
quantumreservoircomputer_apply_gate_errors_group.rs

1//! # QuantumReservoirComputer - apply_gate_errors_group Methods
2//!
3//! This module contains method implementations for `QuantumReservoirComputer`.
4//!
5//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
6
7use crate::circuit_interfaces::{
8    CircuitInterface, InterfaceCircuit, InterfaceGate, InterfaceGateType,
9};
10use crate::error::Result;
11use scirs2_core::random::prelude::*;
12
13use super::quantumreservoircomputer_type::QuantumReservoirComputer;
14
15impl QuantumReservoirComputer {
16    /// Apply gate errors
17    pub(super) fn apply_gate_errors(&mut self) -> Result<()> {
18        let error_rate = self.config.noise_level;
19        for qubit in 0..self.config.num_qubits {
20            if thread_rng().random::<f64>() < error_rate {
21                let error_type = thread_rng().random_range(0..3);
22                let gate_type = match error_type {
23                    0 => InterfaceGateType::X,
24                    1 => InterfaceGateType::PauliY,
25                    _ => InterfaceGateType::PauliZ,
26                };
27                self.apply_single_qubit_gate(qubit, gate_type)?;
28            }
29        }
30        Ok(())
31    }
32}