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)
43 .expect("should create encoder");
44 assert_eq!(encoder.num_qubits, 8);
45 assert!(!encoder.encoding_circuits.is_empty());
46 }
47 #[test]
48 fn test_preprocessing() {
49 let config = PreprocessingConfig::default();
50 let preprocessor = ImagePreprocessor::new(config);
51 let images = Array4::zeros((2, 3, 256, 256));
52 let processed = preprocessor
53 .preprocess(&images)
54 .expect("preprocess should succeed");
55 assert_eq!(processed.dim(), (2, 3, 224, 224));
56 }
57}