Skip to main content

scirs2_stats/topological_advanced/
topologicalconfig_traits.rs

1//! # TopologicalConfig - Trait Implementations
2//!
3//! This module contains trait implementations for `TopologicalConfig`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Debug`
8//! - `Clone`
9//! - `Default`
10//!
11//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
12
13use scirs2_core::numeric::{Float, NumCast, One, Zero};
14use scirs2_core::{simd_ops::SimdUnifiedOps, validation::*};
15use scirs2_linalg::parallel_dispatch::ParallelConfig;
16
17use super::functions::const_f64;
18use super::types::{
19    ClusteringMethod, CoeffientField, CoverConfig, CoverType, DistanceMetric, FiltrationConfig,
20    FiltrationType, MapperConfig, MergerStrategy, MultipleComparisonsCorrection, MultiscaleConfig,
21    NullModel, PersistenceAlgorithm, PersistenceConfig, ScaleDistribution, SimplificationConfig,
22    TopologicalConfig, TopologicalInferenceConfig, TopologicalTest,
23};
24
25impl<F> std::fmt::Debug for TopologicalConfig<F>
26where
27    F: std::fmt::Debug,
28{
29    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30        f.debug_struct("TopologicalConfig")
31            .field("max_dimension", &self.max_dimension)
32            .field("filtration_config", &self.filtration_config)
33            .field("persistence_config", &self.persistence_config)
34            .field("mapper_config", &self.mapper_config)
35            .field("multiscale_config", &self.multiscale_config)
36            .field("inference_config", &self.inference_config)
37            .field("parallel_config", &"<ParallelConfig>")
38            .finish()
39    }
40}
41
42impl<F> Clone for TopologicalConfig<F>
43where
44    F: Clone,
45{
46    fn clone(&self) -> Self {
47        Self {
48            max_dimension: self.max_dimension,
49            filtration_config: self.filtration_config.clone(),
50            persistence_config: self.persistence_config.clone(),
51            mapper_config: self.mapper_config.clone(),
52            multiscale_config: self.multiscale_config.clone(),
53            inference_config: self.inference_config.clone(),
54            parallel_config: ParallelConfig::default(),
55        }
56    }
57}
58
59impl<F> Default for TopologicalConfig<F>
60where
61    F: Float + NumCast + Copy + std::fmt::Display + SimdUnifiedOps + Send + Sync,
62{
63    fn default() -> Self {
64        Self {
65            max_dimension: 2,
66            filtration_config: FiltrationConfig {
67                filtration_type: FiltrationType::VietorisRips,
68                distance_metric: DistanceMetric::Euclidean,
69                max_epsilon: const_f64::<F>(1.0),
70                num_steps: 100,
71                adaptive_steps: false,
72            },
73            persistence_config: PersistenceConfig {
74                algorithm: PersistenceAlgorithm::StandardReduction,
75                coefficient_field: CoeffientField::Z2,
76                persistence_threshold: const_f64::<F>(0.01),
77                compute_entropy: true,
78                stability_analysis: false,
79            },
80            mapper_config: MapperConfig {
81                filter_functions: Vec::new(),
82                cover_config: CoverConfig {
83                    num_intervals: vec![10],
84                    overlap_percent: const_f64::<F>(0.3),
85                    cover_type: CoverType::UniformInterval,
86                },
87                clustering_method: ClusteringMethod::SingleLinkage,
88                overlap_threshold: const_f64::<F>(0.1),
89                simplification: SimplificationConfig {
90                    edge_contraction: false,
91                    vertex_removal: false,
92                    threshold: 0.01,
93                },
94            },
95            multiscale_config: MultiscaleConfig {
96                scale_range: (const_f64::<F>(0.1), const_f64::<F>(2.0)),
97                num_scales: 10,
98                scale_distribution: ScaleDistribution::Linear,
99                merger_strategy: MergerStrategy::Union,
100            },
101            inference_config: TopologicalInferenceConfig {
102                bootstrap_samples: 0,
103                confidence_level: const_f64::<F>(0.95),
104                null_model: NullModel::UniformRandom,
105                test_type: TopologicalTest::PersistentRankTest,
106                multiple_comparisons: MultipleComparisonsCorrection::BenjaminiHochberg,
107            },
108            parallel_config: ParallelConfig::default(),
109        }
110    }
111}