#![allow(clippy::pedantic, clippy::unnecessary_wraps)]
use quantrs2_tytan::sampler::SampleResult;
use quantrs2_tytan::*;
use std::collections::HashMap;
#[cfg(feature = "dwave")]
use quantrs2_tytan::auto_array::AutoArray;
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_1d() {
let mut assignments = HashMap::new();
assignments.insert("x0".to_string(), true);
assignments.insert("x1".to_string(), false);
assignments.insert("x2".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (arr, indices) = AutoArray::new(&result).get_ndarray("x{}").unwrap();
assert_eq!(arr.ndim(), 1);
assert_eq!(arr.shape(), &[3]);
assert_eq!(arr[0], 1);
assert_eq!(arr[1], 0);
assert_eq!(arr[2], 1);
assert_eq!(indices.len(), 1); assert_eq!(indices[0].len(), 3); assert_eq!(indices[0][0], "0");
assert_eq!(indices[0][1], "1");
assert_eq!(indices[0][2], "2");
}
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_2d() {
let mut assignments = HashMap::new();
assignments.insert("q0_0".to_string(), true);
assignments.insert("q0_1".to_string(), false);
assignments.insert("q1_0".to_string(), false);
assignments.insert("q1_1".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (arr, indices) = AutoArray::new(&result).get_ndarray("q{}_{}").unwrap();
assert_eq!(arr.ndim(), 2);
assert_eq!(arr.shape(), &[2, 2]);
assert_eq!(arr[[0, 0]], 1);
assert_eq!(arr[[0, 1]], 0);
assert_eq!(arr[[1, 0]], 0);
assert_eq!(arr[[1, 1]], 1);
assert_eq!(indices.len(), 2);
assert_eq!(indices[0], ["0", "1"]);
assert_eq!(indices[1], ["0", "1"]);
}
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_dframe() {
let mut assignments = HashMap::new();
assignments.insert("q0_0".to_string(), true);
assignments.insert("q0_1".to_string(), false);
assignments.insert("q1_0".to_string(), false);
assignments.insert("q1_1".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (df, indices) = AutoArray::new(&result).get_dframe("q{}_{}").unwrap();
assert_eq!(df.shape(), &[2, 2]);
assert_eq!(df[[0, 0]], 1);
assert_eq!(df[[0, 1]], 0);
assert_eq!(df[[1, 0]], 0);
assert_eq!(df[[1, 1]], 1);
assert_eq!(indices.len(), 2);
assert_eq!(indices[0], ["0", "1"]);
assert_eq!(indices[1], ["0", "1"]);
}
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_image() {
let mut assignments = HashMap::new();
assignments.insert("q0_0".to_string(), true);
assignments.insert("q0_1".to_string(), false);
assignments.insert("q1_0".to_string(), false);
assignments.insert("q1_1".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (img, indices) = AutoArray::new(&result).get_image("q{}_{}").unwrap();
assert_eq!(img.shape(), &[2, 2]);
assert_eq!(img[[0, 0]], 255);
assert_eq!(img[[0, 1]], 0);
assert_eq!(img[[1, 0]], 0);
assert_eq!(img[[1, 1]], 255);
assert_eq!(indices.len(), 2);
assert_eq!(indices[0], ["0", "1"]);
assert_eq!(indices[1], ["0", "1"]);
}
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_missing_values() {
let mut assignments = HashMap::new();
assignments.insert("q0_0".to_string(), true);
assignments.insert("q1_0".to_string(), false);
assignments.insert("q1_1".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (arr, _) = AutoArray::new(&result).get_ndarray("q{}_{}").unwrap();
assert_eq!(arr.shape(), &[2, 2]);
assert_eq!(arr[[0, 0]], 1);
assert_eq!(arr[[0, 1]], -1); assert_eq!(arr[[1, 0]], 0);
assert_eq!(arr[[1, 1]], 1);
}
#[test]
#[cfg(feature = "dwave")]
fn test_auto_array_natural_sort() {
let mut assignments = HashMap::new();
assignments.insert("q1_1".to_string(), true);
assignments.insert("q1_2".to_string(), false);
assignments.insert("q1_10".to_string(), true);
assignments.insert("q2_1".to_string(), false);
assignments.insert("q10_1".to_string(), true);
let result = SampleResult {
assignments,
energy: -1.0,
occurrences: 1,
};
let (_, indices) = AutoArray::new(&result).get_ndarray("q{}_{}").unwrap();
assert_eq!(indices[0], ["1", "2", "10"]);
assert_eq!(indices[1], ["1", "2", "10"]);
}