quantrs2_tytan/tensor_network_sampler/
tensornetworksampler_traits.rs1use crate::sampler::{SampleResult, Sampler, SamplerError, SamplerResult};
12use scirs2_core::ndarray::{Array1, Array2, ArrayD};
13use scirs2_core::random::prelude::*;
14use std::collections::HashMap;
15
16use super::types::TensorNetworkSampler;
17
18impl Sampler for TensorNetworkSampler {
19 fn run_qubo(
20 &self,
21 qubo: &(
22 scirs2_core::ndarray::Array2<f64>,
23 std::collections::HashMap<String, usize>,
24 ),
25 num_reads: usize,
26 ) -> SamplerResult<Vec<crate::sampler::SampleResult>> {
27 let (matrix, var_map) = qubo;
28 let tensor: ArrayD<f64> = matrix.clone().into_dyn();
31 self.run_hobo(&(tensor, var_map.clone()), num_reads)
32 }
33 fn run_hobo(
34 &self,
35 problem: &(
36 scirs2_core::ndarray::ArrayD<f64>,
37 std::collections::HashMap<String, usize>,
38 ),
39 num_reads: usize,
40 ) -> SamplerResult<Vec<crate::sampler::SampleResult>> {
41 let (hamiltonian, _var_map) = problem;
42 let mut sampler_copy = Self::new(self.config.clone());
43 match sampler_copy.sample(hamiltonian, num_reads) {
44 Ok(results) => Ok(results),
45 Err(e) => Err(SamplerError::InvalidParameter(e.to_string())),
46 }
47 }
48}