holos_tda/relative_interface/
model.rs1use crate::Diagram;
2use crate::certificate::ChangeColumn;
3
4#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
6pub struct InterfaceChainTerm {
7 pub cell: Vec<usize>,
9 pub coefficient: u32,
11}
12
13#[derive(Debug, Clone, PartialEq)]
15pub struct InterfaceCell {
16 pub vertices: Vec<usize>,
18 pub value: f64,
20 pub boundary: Vec<InterfaceChainTerm>,
22}
23
24impl InterfaceCell {
25 pub fn dimension(&self) -> usize {
27 self.vertices.len() - 1
28 }
29}
30
31#[derive(Debug, Clone, PartialEq, Eq)]
33pub struct InterfaceCancellation {
34 pub upper: Vec<usize>,
36 pub lower: Vec<usize>,
38 pub coefficient: u32,
40}
41
42#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
44pub struct RelativeInterfaceWork {
45 pub input_cells: usize,
47 pub cancellations: usize,
49 pub core_cells: usize,
51 pub reduction_additions: usize,
53}
54
55#[derive(Debug, Clone)]
60pub struct RelativeInterfaceCertificate {
61 pub(super) max_dim: usize,
62 pub(super) modulus: u32,
63 pub(super) protected_vertices: Vec<usize>,
64 pub(super) input_cells: Vec<Vec<InterfaceCell>>,
65 pub(super) cancellations: Vec<InterfaceCancellation>,
66 pub(super) core_cells: Vec<Vec<InterfaceCell>>,
67 pub(super) columns: Vec<Vec<ChangeColumn>>,
68 pub(super) diagram: Diagram,
69 pub(super) digest: [u8; 32],
70 pub(super) work: RelativeInterfaceWork,
71}