use scirs2_core::ndarray::{Array1, Array2};
use std::collections::HashMap;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum DimensionalityReductionAlgorithm {
QPCA,
QICA,
QtSNE,
QUMAP,
QLDA,
QFactorAnalysis,
QCCA,
QNMF,
QVAE,
QDenoisingAE,
QSparseAE,
QManifoldLearning,
QKernelPCA,
QMDS,
QIsomap,
QMutualInfoSelection,
QRFE,
QLASSO,
QRidge,
QVarianceThresholding,
QTimeSeriesDR,
QImageTensorDR,
QGraphDR,
QStreamingDR,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum QuantumDistanceMetric {
QuantumEuclidean,
QuantumManhattan,
QuantumCosine,
QuantumFidelity,
QuantumTrace,
QuantumWasserstein,
QuantumKernel,
QuantumEntanglement,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum QuantumEnhancementLevel {
Classical,
Light,
Moderate,
Full,
Experimental,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum QuantumEigensolver {
VQE,
QAOA,
QPE,
QuantumLanczos,
QuantumPowerMethod,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum QuantumFeatureMap {
ZFeatureMap,
ZZFeatureMap,
PauliFeatureMap,
CustomFeatureMap,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AutoencoderArchitecture {
Standard,
BetaVAE,
WAE,
InfoVAE,
AdversarialAE,
}
#[derive(Debug, Clone)]
pub struct QPCAConfig {
pub n_components: usize,
pub eigensolver: QuantumEigensolver,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub whiten: bool,
pub random_state: Option<u64>,
pub tolerance: f64,
pub max_iterations: usize,
}
#[derive(Debug, Clone)]
pub struct QICAConfig {
pub n_components: usize,
pub max_iterations: usize,
pub tolerance: f64,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub learning_rate: f64,
pub nonlinearity: String,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QtSNEConfig {
pub n_components: usize,
pub perplexity: f64,
pub early_exaggeration: f64,
pub learning_rate: f64,
pub max_iterations: usize,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub distance_metric: QuantumDistanceMetric,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QUMAPConfig {
pub n_components: usize,
pub n_neighbors: usize,
pub min_dist: f64,
pub learning_rate: f64,
pub n_epochs: usize,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub distance_metric: QuantumDistanceMetric,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QLDAConfig {
pub n_components: Option<usize>,
pub shrinkage: Option<f64>,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub solver: QuantumEigensolver,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QAutoencoderConfig {
pub encoder_layers: Vec<usize>,
pub decoder_layers: Vec<usize>,
pub latent_dim: usize,
pub architecture: AutoencoderArchitecture,
pub learning_rate: f64,
pub epochs: usize,
pub batch_size: usize,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub beta: f64,
pub noise_level: f64,
pub sparsity_parameter: f64,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QFactorAnalysisConfig {
pub n_factors: usize,
pub max_iterations: usize,
pub tolerance: f64,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QCCAConfig {
pub n_components: usize,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QNMFConfig {
pub n_components: usize,
pub max_iterations: usize,
pub tolerance: f64,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QManifoldConfig {
pub n_components: usize,
pub n_neighbors: usize,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub distance_metric: QuantumDistanceMetric,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QKernelPCAConfig {
pub n_components: usize,
pub feature_map: QuantumFeatureMap,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub kernel_params: HashMap<String, f64>,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QFeatureSelectionConfig {
pub n_features: usize,
pub method: String,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QSpecializedConfig {
pub params: HashMap<String, f64>,
pub quantum_enhancement: QuantumEnhancementLevel,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct DRTrainedState {
pub components: Array2<f64>,
pub explained_variance_ratio: Array1<f64>,
pub mean: Array1<f64>,
pub scale: Option<Array1<f64>>,
pub quantum_parameters: HashMap<String, f64>,
pub model_parameters: HashMap<String, String>,
pub training_statistics: HashMap<String, f64>,
}
impl Default for QPCAConfig {
fn default() -> Self {
Self {
n_components: 2,
eigensolver: QuantumEigensolver::VQE,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
whiten: false,
random_state: None,
tolerance: 1e-6,
max_iterations: 1000,
}
}
}
impl Default for QICAConfig {
fn default() -> Self {
Self {
n_components: 2,
max_iterations: 200,
tolerance: 1e-4,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
learning_rate: 1.0,
nonlinearity: "logcosh".to_string(),
random_state: None,
}
}
}
impl Default for QtSNEConfig {
fn default() -> Self {
Self {
n_components: 2,
perplexity: 30.0,
early_exaggeration: 12.0,
learning_rate: 200.0,
max_iterations: 1000,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
random_state: None,
}
}
}
impl Default for QAutoencoderConfig {
fn default() -> Self {
Self {
encoder_layers: vec![128, 64, 32],
decoder_layers: vec![32, 64, 128],
latent_dim: 16,
architecture: AutoencoderArchitecture::Standard,
learning_rate: 0.001,
epochs: 100,
batch_size: 32,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
beta: 1.0,
noise_level: 0.1,
sparsity_parameter: 0.01,
random_state: None,
}
}
}
impl Default for QUMAPConfig {
fn default() -> Self {
Self {
n_components: 2,
n_neighbors: 15,
min_dist: 0.1,
learning_rate: 1.0,
n_epochs: 200,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
random_state: None,
}
}
}
impl Default for QLDAConfig {
fn default() -> Self {
Self {
n_components: None,
shrinkage: None,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
solver: QuantumEigensolver::VQE,
random_state: None,
}
}
}
impl Default for QManifoldConfig {
fn default() -> Self {
Self {
n_components: 2,
n_neighbors: 10,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
random_state: None,
}
}
}
impl Default for QKernelPCAConfig {
fn default() -> Self {
Self {
n_components: 2,
feature_map: QuantumFeatureMap::ZFeatureMap,
quantum_enhancement: QuantumEnhancementLevel::Moderate,
num_qubits: 4,
kernel_params: HashMap::new(),
random_state: None,
}
}
}