1use scirs2_core::ndarray::{Array1, Array2};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Copy, PartialEq)]
8pub enum DimensionalityReductionAlgorithm {
9 QPCA,
11 QICA,
13 QtSNE,
15 QUMAP,
17 QLDA,
19 QFactorAnalysis,
21 QCCA,
23 QNMF,
25 QVAE,
27 QDenoisingAE,
29 QSparseAE,
31 QManifoldLearning,
33 QKernelPCA,
35 QMDS,
37 QIsomap,
39 QMutualInfoSelection,
41 QRFE,
43 QLASSO,
45 QRidge,
47 QVarianceThresholding,
49 QTimeSeriesDR,
51 QImageTensorDR,
53 QGraphDR,
55 QStreamingDR,
57}
58
59#[derive(Debug, Clone, Copy, PartialEq)]
61pub enum QuantumDistanceMetric {
62 QuantumEuclidean,
64 QuantumManhattan,
66 QuantumCosine,
68 QuantumFidelity,
70 QuantumTrace,
72 QuantumWasserstein,
74 QuantumKernel,
76 QuantumEntanglement,
78}
79
80#[derive(Debug, Clone, Copy, PartialEq)]
82pub enum QuantumEnhancementLevel {
83 Classical,
85 Light,
87 Moderate,
89 Full,
91 Experimental,
93}
94
95#[derive(Debug, Clone, Copy, PartialEq)]
97pub enum QuantumEigensolver {
98 VQE,
100 QAOA,
102 QPE,
104 QuantumLanczos,
106 QuantumPowerMethod,
108}
109
110#[derive(Debug, Clone, Copy, PartialEq)]
112pub enum QuantumFeatureMap {
113 ZFeatureMap,
115 ZZFeatureMap,
117 PauliFeatureMap,
119 CustomFeatureMap,
121}
122
123#[derive(Debug, Clone, Copy, PartialEq)]
125pub enum AutoencoderArchitecture {
126 Standard,
128 BetaVAE,
130 WAE,
132 InfoVAE,
134 AdversarialAE,
136}
137
138#[derive(Debug, Clone)]
140pub struct QPCAConfig {
141 pub n_components: usize,
143 pub eigensolver: QuantumEigensolver,
145 pub quantum_enhancement: QuantumEnhancementLevel,
147 pub num_qubits: usize,
149 pub whiten: bool,
151 pub random_state: Option<u64>,
153 pub tolerance: f64,
155 pub max_iterations: usize,
157}
158
159#[derive(Debug, Clone)]
161pub struct QICAConfig {
162 pub n_components: usize,
164 pub max_iterations: usize,
166 pub tolerance: f64,
168 pub quantum_enhancement: QuantumEnhancementLevel,
170 pub num_qubits: usize,
172 pub learning_rate: f64,
174 pub nonlinearity: String,
176 pub random_state: Option<u64>,
178}
179
180#[derive(Debug, Clone)]
182pub struct QtSNEConfig {
183 pub n_components: usize,
185 pub perplexity: f64,
187 pub early_exaggeration: f64,
189 pub learning_rate: f64,
191 pub max_iterations: usize,
193 pub quantum_enhancement: QuantumEnhancementLevel,
195 pub num_qubits: usize,
197 pub distance_metric: QuantumDistanceMetric,
199 pub random_state: Option<u64>,
201}
202
203#[derive(Debug, Clone)]
205pub struct QUMAPConfig {
206 pub n_components: usize,
208 pub n_neighbors: usize,
210 pub min_dist: f64,
212 pub learning_rate: f64,
214 pub n_epochs: usize,
216 pub quantum_enhancement: QuantumEnhancementLevel,
218 pub num_qubits: usize,
220 pub distance_metric: QuantumDistanceMetric,
222 pub random_state: Option<u64>,
224}
225
226#[derive(Debug, Clone)]
228pub struct QLDAConfig {
229 pub n_components: Option<usize>,
231 pub shrinkage: Option<f64>,
233 pub quantum_enhancement: QuantumEnhancementLevel,
235 pub num_qubits: usize,
237 pub solver: QuantumEigensolver,
239 pub random_state: Option<u64>,
241}
242
243#[derive(Debug, Clone)]
245pub struct QAutoencoderConfig {
246 pub encoder_layers: Vec<usize>,
248 pub decoder_layers: Vec<usize>,
250 pub latent_dim: usize,
252 pub architecture: AutoencoderArchitecture,
254 pub learning_rate: f64,
256 pub epochs: usize,
258 pub batch_size: usize,
260 pub quantum_enhancement: QuantumEnhancementLevel,
262 pub num_qubits: usize,
264 pub beta: f64,
266 pub noise_level: f64,
268 pub sparsity_parameter: f64,
270 pub random_state: Option<u64>,
272}
273
274#[derive(Debug, Clone)]
276pub struct QFactorAnalysisConfig {
277 pub n_factors: usize,
279 pub max_iterations: usize,
281 pub tolerance: f64,
283 pub quantum_enhancement: QuantumEnhancementLevel,
285 pub num_qubits: usize,
287 pub random_state: Option<u64>,
289}
290
291#[derive(Debug, Clone)]
293pub struct QCCAConfig {
294 pub n_components: usize,
296 pub quantum_enhancement: QuantumEnhancementLevel,
298 pub num_qubits: usize,
300 pub random_state: Option<u64>,
302}
303
304#[derive(Debug, Clone)]
306pub struct QNMFConfig {
307 pub n_components: usize,
309 pub max_iterations: usize,
311 pub tolerance: f64,
313 pub quantum_enhancement: QuantumEnhancementLevel,
315 pub num_qubits: usize,
317 pub random_state: Option<u64>,
319}
320
321#[derive(Debug, Clone)]
323pub struct QManifoldConfig {
324 pub n_components: usize,
326 pub n_neighbors: usize,
328 pub quantum_enhancement: QuantumEnhancementLevel,
330 pub num_qubits: usize,
332 pub distance_metric: QuantumDistanceMetric,
334 pub random_state: Option<u64>,
336}
337
338#[derive(Debug, Clone)]
340pub struct QKernelPCAConfig {
341 pub n_components: usize,
343 pub feature_map: QuantumFeatureMap,
345 pub quantum_enhancement: QuantumEnhancementLevel,
347 pub num_qubits: usize,
349 pub kernel_params: HashMap<String, f64>,
351 pub random_state: Option<u64>,
353}
354
355#[derive(Debug, Clone)]
357pub struct QFeatureSelectionConfig {
358 pub n_features: usize,
360 pub method: String,
362 pub quantum_enhancement: QuantumEnhancementLevel,
364 pub num_qubits: usize,
366 pub random_state: Option<u64>,
368}
369
370#[derive(Debug, Clone)]
372pub struct QSpecializedConfig {
373 pub params: HashMap<String, f64>,
375 pub quantum_enhancement: QuantumEnhancementLevel,
377 pub num_qubits: usize,
379 pub random_state: Option<u64>,
381}
382
383#[derive(Debug, Clone)]
385pub struct DRTrainedState {
386 pub components: Array2<f64>,
388 pub explained_variance_ratio: Array1<f64>,
390 pub mean: Array1<f64>,
392 pub scale: Option<Array1<f64>>,
394 pub quantum_parameters: HashMap<String, f64>,
396 pub model_parameters: HashMap<String, String>,
398 pub training_statistics: HashMap<String, f64>,
400}
401
402impl Default for QPCAConfig {
404 fn default() -> Self {
405 Self {
406 n_components: 2,
407 eigensolver: QuantumEigensolver::VQE,
408 quantum_enhancement: QuantumEnhancementLevel::Moderate,
409 num_qubits: 4,
410 whiten: false,
411 random_state: None,
412 tolerance: 1e-6,
413 max_iterations: 1000,
414 }
415 }
416}
417
418impl Default for QICAConfig {
419 fn default() -> Self {
420 Self {
421 n_components: 2,
422 max_iterations: 200,
423 tolerance: 1e-4,
424 quantum_enhancement: QuantumEnhancementLevel::Moderate,
425 num_qubits: 4,
426 learning_rate: 1.0,
427 nonlinearity: "logcosh".to_string(),
428 random_state: None,
429 }
430 }
431}
432
433impl Default for QtSNEConfig {
434 fn default() -> Self {
435 Self {
436 n_components: 2,
437 perplexity: 30.0,
438 early_exaggeration: 12.0,
439 learning_rate: 200.0,
440 max_iterations: 1000,
441 quantum_enhancement: QuantumEnhancementLevel::Moderate,
442 num_qubits: 4,
443 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
444 random_state: None,
445 }
446 }
447}
448
449impl Default for QAutoencoderConfig {
450 fn default() -> Self {
451 Self {
452 encoder_layers: vec![128, 64, 32],
453 decoder_layers: vec![32, 64, 128],
454 latent_dim: 16,
455 architecture: AutoencoderArchitecture::Standard,
456 learning_rate: 0.001,
457 epochs: 100,
458 batch_size: 32,
459 quantum_enhancement: QuantumEnhancementLevel::Moderate,
460 num_qubits: 4,
461 beta: 1.0,
462 noise_level: 0.1,
463 sparsity_parameter: 0.01,
464 random_state: None,
465 }
466 }
467}
468
469impl Default for QUMAPConfig {
470 fn default() -> Self {
471 Self {
472 n_components: 2,
473 n_neighbors: 15,
474 min_dist: 0.1,
475 learning_rate: 1.0,
476 n_epochs: 200,
477 quantum_enhancement: QuantumEnhancementLevel::Moderate,
478 num_qubits: 4,
479 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
480 random_state: None,
481 }
482 }
483}
484
485impl Default for QLDAConfig {
486 fn default() -> Self {
487 Self {
488 n_components: None,
489 shrinkage: None,
490 quantum_enhancement: QuantumEnhancementLevel::Moderate,
491 num_qubits: 4,
492 solver: QuantumEigensolver::VQE,
493 random_state: None,
494 }
495 }
496}
497
498impl Default for QManifoldConfig {
499 fn default() -> Self {
500 Self {
501 n_components: 2,
502 n_neighbors: 10,
503 quantum_enhancement: QuantumEnhancementLevel::Moderate,
504 num_qubits: 4,
505 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
506 random_state: None,
507 }
508 }
509}
510
511impl Default for QKernelPCAConfig {
512 fn default() -> Self {
513 Self {
514 n_components: 2,
515 feature_map: QuantumFeatureMap::ZFeatureMap,
516 quantum_enhancement: QuantumEnhancementLevel::Moderate,
517 num_qubits: 4,
518 kernel_params: HashMap::new(),
519 random_state: None,
520 }
521 }
522}