quantrs2_ml/computer_vision/
functions.rs1use super::*;
6use crate::error::{MLError, Result};
7use crate::optimization::OptimizationMethod;
8use crate::qcnn::PoolingType;
9use crate::qnn::{QNNLayerType, QuantumNeuralNetwork};
10use crate::quantum_transformer::{QuantumTransformer, QuantumTransformerConfig};
11use quantrs2_circuit::builder::{Circuit, Simulator};
12use quantrs2_core::gate::{multi::*, single::*, GateOp};
13use quantrs2_sim::statevector::StateVectorSimulator;
14use scirs2_core::ndarray::{s, Array1, Array2, Array3, Array4, Axis};
15use std::f64::consts::PI;
16impl Clone for Box<dyn VisionModel> {
18 fn clone(&self) -> Self {
19 self.clone_box()
20 }
21}
22impl Clone for Box<dyn TaskHead> {
24 fn clone(&self) -> Self {
25 self.clone_box()
26 }
27}
28#[cfg(test)]
29mod tests {
30 use super::*;
31 #[test]
32 fn test_vision_config_creation() {
33 let config = QuantumVisionConfig::default();
34 assert_eq!(config.num_qubits, 12);
35 let detection_config = QuantumVisionConfig::object_detection(80);
36 assert_eq!(detection_config.num_qubits, 16);
37 let seg_config = QuantumVisionConfig::segmentation(21);
38 assert_eq!(seg_config.num_qubits, 14);
39 }
40 #[test]
41 fn test_image_encoder() {
42 let encoder = QuantumImageEncoder::new(ImageEncodingMethod::AmplitudeEncoding, 8).unwrap();
43 assert_eq!(encoder.num_qubits, 8);
44 assert!(!encoder.encoding_circuits.is_empty());
45 }
46 #[test]
47 fn test_preprocessing() {
48 let config = PreprocessingConfig::default();
49 let preprocessor = ImagePreprocessor::new(config);
50 let images = Array4::zeros((2, 3, 256, 256));
51 let processed = preprocessor.preprocess(&images).unwrap();
52 assert_eq!(processed.dim(), (2, 3, 224, 224));
53 }
54}