scirs2_stats/topological_advanced/
topologicalconfig_traits.rs1use 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}