holos_tda/circular/
model.rs1use crate::classes::CocycleTerm;
2use crate::cohomology::{CohomologyContinuation, CohomologyLimits, CohomologySpaceId};
3
4#[derive(Debug, Clone, Copy, PartialEq)]
6#[non_exhaustive]
7pub struct CircularCoordinateParams {
8 pub tolerance: f64,
10 pub max_iterations: usize,
12 pub cohomology: CohomologyLimits,
14}
15
16impl Default for CircularCoordinateParams {
17 fn default() -> Self {
18 Self {
19 tolerance: 1e-10,
20 max_iterations: 10_000,
21 cohomology: CohomologyLimits::default(),
22 }
23 }
24}
25
26impl CircularCoordinateParams {
27 #[must_use]
29 pub fn with_tolerance(mut self, tolerance: f64) -> Self {
30 self.tolerance = tolerance;
31 self
32 }
33
34 #[must_use]
36 pub fn with_max_iterations(mut self, max_iterations: usize) -> Self {
37 self.max_iterations = max_iterations;
38 self
39 }
40
41 #[must_use]
43 pub fn with_cohomology_limits(mut self, cohomology: CohomologyLimits) -> Self {
44 self.cohomology = cohomology;
45 self
46 }
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
51pub struct IntegralCocycleTerm {
52 pub u: usize,
54 pub v: usize,
56 pub coefficient: i64,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
62pub struct CircularClassTerm {
63 pub basis_index: usize,
65 pub coefficient: u32,
67}
68
69#[derive(Debug, Clone, PartialEq)]
71pub struct CircularCoordinate {
72 pub space: CohomologySpaceId,
74 pub modulus: u32,
76 pub scale: f64,
78 pub field_multiplier: u32,
80 pub class: Vec<CircularClassTerm>,
82 pub source: Vec<CocycleTerm>,
84 pub integral: Vec<IntegralCocycleTerm>,
86 pub divisibility: u64,
88 pub potential: Vec<f64>,
90 pub phase: Vec<f64>,
92 pub energy: f64,
94 pub max_residual: f64,
96 pub relative_residual: f64,
98 pub iterations: usize,
100 pub tolerance: f64,
102}
103
104#[derive(Debug, Clone, PartialEq)]
106pub struct CircularCoordinateContinuation {
107 pub topology: CohomologyContinuation,
109 pub coordinate: Option<CircularCoordinate>,
111}
112
113#[derive(Debug, Clone, PartialEq)]
115pub(crate) struct SelectedCircularCoordinate {
116 pub(crate) modulus: u32,
117 pub(crate) scale: f64,
118 pub(crate) field_multiplier: u32,
119 pub(crate) integral: Vec<IntegralCocycleTerm>,
120 pub(crate) divisibility: u64,
121 pub(crate) potential: Vec<f64>,
122 pub(crate) phase: Vec<f64>,
123 pub(crate) energy: f64,
124 pub(crate) max_residual: f64,
125 pub(crate) relative_residual: f64,
126 pub(crate) iterations: usize,
127 pub(crate) tolerance: f64,
128}