quantrs2-ml 0.1.3

Quantum Machine Learning module for QuantRS2
Documentation
//! Auto-generated module
//!
//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)

use scirs2_core::ndarray::*;
use scirs2_core::random::prelude::*;

use super::types::{
    EntanglementConfig, EntanglementManager, ExpertArchitecture, ExpertSpecialization,
    InterferencePattern, LoadBalancer, LoadBalancingStrategy, QuantumExpert, QuantumGateNetwork,
    QuantumMixtureOfExperts, QuantumMixtureOfExpertsConfig, QuantumRouter, QuantumRoutingStrategy,
    RoutingType,
};

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_quantum_mixture_of_experts_creation() {
        let config = QuantumMixtureOfExpertsConfig::default();
        let moe = QuantumMixtureOfExperts::new(config);
        assert!(moe.is_ok());
    }
    #[test]
    fn test_expert_creation() {
        let config = QuantumMixtureOfExpertsConfig::default();
        let expert = QuantumExpert::new(0, &config);
        assert!(expert.is_ok());
    }
    #[test]
    fn test_quantum_routing() {
        let config = QuantumMixtureOfExpertsConfig::default();
        let mut router = QuantumRouter::new(&config).expect("Router creation should succeed");
        let input = Array1::from_vec(vec![0.1, 0.2, 0.3, 0.4]);
        let result = router.route(&input);
        assert!(result.is_ok());
        let routing_result = result.expect("Routing should succeed");
        assert_eq!(routing_result.expert_weights.len(), 8);
        assert!(routing_result.routing_confidence >= 0.0);
        assert!(routing_result.routing_confidence <= 1.0);
    }
    #[test]
    fn test_forward_pass() {
        let config = QuantumMixtureOfExpertsConfig {
            input_dim: 4,
            output_dim: 2,
            num_experts: 3,
            ..Default::default()
        };
        let mut moe = QuantumMixtureOfExperts::new(config).expect("MoE creation should succeed");
        let input = Array1::from_vec(vec![0.1, 0.2, 0.3, 0.4]);
        let result = moe.forward(&input);
        assert!(result.is_ok());
        let output = result.expect("Forward pass should succeed");
        assert_eq!(output.expert_weights.len(), 3);
        assert!(output.routing_decision.routing_confidence >= 0.0);
    }
    #[test]
    fn test_load_balancing() {
        let config = QuantumMixtureOfExpertsConfig {
            load_balancing: LoadBalancingStrategy::Uniform,
            ..Default::default()
        };
        let mut balancer =
            LoadBalancer::new(&config).expect("LoadBalancer creation should succeed");
        let weights = Array1::from_vec(vec![0.8, 0.1, 0.1]);
        let balanced = balancer.balance_loads(&weights);
        assert!(balanced.is_ok());
        let balanced_weights = balanced.expect("Balance loads should succeed");
        assert_eq!(balanced_weights.len(), 3);
    }
    #[test]
    fn test_sparsity_computation() {
        let config = QuantumMixtureOfExpertsConfig::default();
        let gate_network =
            QuantumGateNetwork::new(&config).expect("GateNetwork creation should succeed");
        let weights = Array1::from_vec(vec![0.8, 0.0, 0.2, 0.0]);
        let sparsity = gate_network.compute_sparsity(&weights);
        assert!(sparsity.is_ok());
        assert_eq!(sparsity.expect("Sparsity computation should succeed"), 0.5);
    }
    #[test]
    fn test_quantum_interference() {
        let config = QuantumMixtureOfExpertsConfig {
            routing_strategy: QuantumRoutingStrategy::QuantumSuperposition {
                superposition_strength: 0.8,
                interference_pattern: InterferencePattern::Constructive,
            },
            ..Default::default()
        };
        let moe = QuantumMixtureOfExperts::new(config).expect("MoE creation should succeed");
        let weights = Array1::from_vec(vec![0.5, 0.3, 0.2]);
        let interference = moe.compute_interference_factor(0, &weights);
        assert!(interference.is_ok());
        assert!(interference.expect("Interference computation should succeed") > 0.0);
    }
    #[test]
    fn test_entanglement_management() {
        let config = QuantumMixtureOfExpertsConfig {
            entanglement_config: EntanglementConfig {
                enable_expert_entanglement: true,
                entanglement_strength: 0.7,
                ..Default::default()
            },
            ..Default::default()
        };
        let mut manager =
            EntanglementManager::new(&config).expect("EntanglementManager creation should succeed");
        let expert_weights = Array1::from_vec(vec![0.4, 0.6, 0.0]);
        let result = manager.update_entanglement(&expert_weights);
        assert!(result.is_ok());
        let utilization = manager.get_utilization();
        assert!(utilization >= 0.0);
    }
    #[test]
    fn test_expert_specialization() {
        let config = QuantumMixtureOfExpertsConfig {
            expert_architecture: ExpertArchitecture::SpecializedExperts {
                expert_specializations: vec![
                    ExpertSpecialization::TextProcessing,
                    ExpertSpecialization::ImageProcessing,
                ],
                specialization_strength: 0.8,
            },
            ..Default::default()
        };
        let moe = QuantumMixtureOfExperts::new(config);
        assert!(moe.is_ok());
    }
    #[test]
    fn test_hierarchical_routing() {
        let config = QuantumMixtureOfExpertsConfig {
            routing_strategy: QuantumRoutingStrategy::HierarchicalRouting {
                hierarchy_levels: 2,
                routing_per_level: RoutingType::Quantum,
            },
            ..Default::default()
        };
        let moe = QuantumMixtureOfExperts::new(config);
        assert!(moe.is_ok());
    }
}