use std::collections::BTreeMap;
use crate::Diagram;
use crate::certificate::{ChangeColumn, ReductionRepairMode};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct GradedDimensionWork {
pub simplex_dimension: usize,
pub columns_reused: usize,
pub columns_reduced: usize,
pub column_additions: usize,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct GradedReductionRepairWork {
pub(super) dimensions: Vec<GradedDimensionWork>,
}
impl GradedReductionRepairWork {
pub fn dimensions(&self) -> &[GradedDimensionWork] {
&self.dimensions
}
pub fn columns_reused(&self) -> usize {
self.dimensions.iter().map(|work| work.columns_reused).sum()
}
pub fn columns_reduced(&self) -> usize {
self.dimensions
.iter()
.map(|work| work.columns_reduced)
.sum()
}
pub fn column_additions(&self) -> usize {
self.dimensions
.iter()
.map(|work| work.column_additions)
.sum()
}
}
#[derive(Debug, Clone)]
pub struct GradedReductionRepair {
pub(super) certificate: GradedReductionCertificate,
pub(super) mode: ReductionRepairMode,
pub(super) work: GradedReductionRepairWork,
}
impl GradedReductionRepair {
pub fn certificate(&self) -> &GradedReductionCertificate {
&self.certificate
}
pub fn mode(&self) -> ReductionRepairMode {
self.mode
}
pub fn work(&self) -> &GradedReductionRepairWork {
&self.work
}
pub(crate) fn into_certificate(self) -> GradedReductionCertificate {
self.certificate
}
}
#[derive(Debug, Clone)]
pub struct GradedReductionCertificate {
pub(super) vertex_count: usize,
pub(super) max_dim: usize,
pub(super) threshold: Option<f64>,
pub(super) modulus: u32,
pub(super) graph_digest: [u8; 32],
pub(super) columns: Vec<Vec<ChangeColumn>>,
pub(super) diagram: Diagram,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub(crate) struct SimplexKey(pub(crate) Vec<usize>);
#[derive(Debug, Clone)]
pub(crate) struct FilteredSimplex {
pub(crate) key: SimplexKey,
pub(crate) value: f64,
}
pub(crate) struct GradedComplex {
pub(super) simplices: Vec<Vec<FilteredSimplex>>,
pub(super) rows: Vec<BTreeMap<SimplexKey, usize>>,
}
#[derive(Debug, Clone, Default)]
pub(super) struct SparseColumn(pub(super) BTreeMap<usize, u64>);
pub(crate) struct CheckedGraded {
pub(crate) diagram: Diagram,
}