use super::*;
use crate::error::{MLError, Result};
use crate::optimization::OptimizationMethod;
use crate::qcnn::PoolingType;
use crate::qnn::{QNNLayerType, QuantumNeuralNetwork};
use crate::quantum_transformer::{QuantumTransformer, QuantumTransformerConfig};
use quantrs2_circuit::builder::{Circuit, Simulator};
use quantrs2_core::gate::{multi::*, single::*, GateOp};
use quantrs2_sim::statevector::StateVectorSimulator;
use scirs2_core::ndarray::{s, Array1, Array2, Array3, Array4, Axis};
use std::f64::consts::PI;
impl Clone for Box<dyn VisionModel> {
fn clone(&self) -> Self {
self.clone_box()
}
}
impl Clone for Box<dyn TaskHead> {
fn clone(&self) -> Self {
self.clone_box()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_vision_config_creation() {
let config = QuantumVisionConfig::default();
assert_eq!(config.num_qubits, 12);
let detection_config = QuantumVisionConfig::object_detection(80);
assert_eq!(detection_config.num_qubits, 16);
let seg_config = QuantumVisionConfig::segmentation(21);
assert_eq!(seg_config.num_qubits, 14);
}
#[test]
fn test_image_encoder() {
let encoder = QuantumImageEncoder::new(ImageEncodingMethod::AmplitudeEncoding, 8)
.expect("should create encoder");
assert_eq!(encoder.num_qubits, 8);
assert!(!encoder.encoding_circuits.is_empty());
}
#[test]
fn test_preprocessing() {
let config = PreprocessingConfig::default();
let preprocessor = ImagePreprocessor::new(config);
let images = Array4::zeros((2, 3, 256, 256));
let processed = preprocessor
.preprocess(&images)
.expect("preprocess should succeed");
assert_eq!(processed.dim(), (2, 3, 224, 224));
}
}