pub struct ChainComplex {
pub groups: Vec<ChainGroup>,
pub boundaries: Vec<Vec<Vec<i64>>>,
}Expand description
A chain complex C_• with boundary maps d_n : C_n → C_{n-1}.
Stored as a sequence of groups and the matrices representing the boundary maps.
boundaries[i] is the matrix of d_{i+1} : C_{i+1} → C_i (rows = rank C_i).
Fields§
§groups: Vec<ChainGroup>The chain groups C_0, C_1, …, C_n.
boundaries: Vec<Vec<Vec<i64>>>Boundary matrices d_1, d_2, …, d_n (one fewer than groups).
Implementations§
Source§impl ChainComplex
impl ChainComplex
Sourcepub fn add_group(&mut self, rank: usize, name: &str)
pub fn add_group(&mut self, rank: usize, name: &str)
Append a chain group C_k with the given rank and label.
Sourcepub fn add_boundary(&mut self, matrix: Vec<Vec<i64>>)
pub fn add_boundary(&mut self, matrix: Vec<Vec<i64>>)
Append a boundary matrix d_k : C_k → C_{k-1}.
The matrix is stored as a list of rows (each row has rank(C_{k-1}) entries
and there are rank(C_k) columns).
Sourcepub fn compute_betti_numbers(&self) -> Vec<i64>
pub fn compute_betti_numbers(&self) -> Vec<i64>
Compute the Betti numbers β_n = dim ker(d_n) - dim im(d_{n+1}).
Convention: boundaries[k] = d_{k+1}: C_{k+1} → C_k.
So d_i = boundaries[i-1] and d_{i+1} = boundaries[i].
Returns one Betti number per chain group.
Sourcepub fn euler_characteristic(&self) -> i64
pub fn euler_characteristic(&self) -> i64
Compute the Euler characteristic χ = ∑_n (-1)^n β_n.
Sourcepub fn is_exact_at(&self, n: usize) -> bool
pub fn is_exact_at(&self, n: usize) -> bool
Check whether the complex is exact at position n (0-indexed).
Exactness at C_n means im(d_{n+1}) = ker(d_n), i.e. β_n = 0.
Trait Implementations§
Source§impl Clone for ChainComplex
impl Clone for ChainComplex
Source§fn clone(&self) -> ChainComplex
fn clone(&self) -> ChainComplex
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more