CellularPersistenceInChunksContext

org.appliedtopology.tda4j.homology.CellularPersistenceInChunksContext
class CellularPersistenceInChunksContext[CellT, CoefficientT](maxDim: Int = ...)(using evidence$1: OrderedCell { type Self = CellT; }, evidence$2: Field { type Self = CoefficientT; })

maxDim means "top homological degree reported," not "top simplex dimension built" -- fixed at the source, the same fix and for the same reason as RipserCohomologyContext's own maxDimension (see .claude/WORKLOG-maxdim-semantics-fix.md). This is homology, not cohomology, so the mirror-image fact holds: correctly determining whether a class BORN at dimension maxDim is essential or killed requires considering real (maxDim + 1)-dimensional cells' own boundaries (a (maxDim+1)-simplex's boundary reduces to a dimension-maxDim pivot exactly when it kills that class) -- without them, every dimension-maxDim class was unconditionally essential, since no cell of the stream was ever considered that could possibly pair against it. Fixed by internally walking 0.to(maxDim + 1) (both in allCells's construction and both loops in advanceAll) instead of 0.to(maxDim), so (maxDim + 1)-cells DO get locally/globally reduced and CAN correctly kill a maxDim-born class -- and filtering diagramAt's essential-bar output back down to sigma.dim <= maxDim (finite bars need no equivalent filter: recordPair's barDim = pivot.dim, and a pivot is always one dimension below its killer, so barDim <= maxDim automatically whenever the killer's own dimension is <= maxDim + 1). (maxDim+1)-cells that themselves end up looking essential (nothing of dimension maxDim + 2 was ever considered to check) are deliberately left in essentialSimplices internally (later pairing logic in recordPair needs an accurate view across all live dimensions) and only excluded at this final reporting boundary, never a filter applied earlier.

Attributes

Experimental
true
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class CubicalPersistenceInChunksContext[CoefficientT]
class PersistenceInChunksContext[VertexT, CoefficientT]

Members list

Type members

Classlikes

class HomologyState(boundaries: Map[CellularPersistenceInChunksContext.this.CellT, Chain[CellularPersistenceInChunksContext.this.CellT, CellularPersistenceInChunksContext.this.CoefficientT]], stream: StratifiedCellStream[CellularPersistenceInChunksContext.this.CellT, Double], barcode: Map[Int, Queue[(Double, Double, Chain[CellularPersistenceInChunksContext.this.CellT, CellularPersistenceInChunksContext.this.CoefficientT])]], essentialRepresentatives: Map[CellularPersistenceInChunksContext.this.CellT, Chain[CellularPersistenceInChunksContext.this.CellT, CellularPersistenceInChunksContext.this.CoefficientT]])

Attributes

Supertypes
class Object
trait Matchable
class Any

Value members

Concrete methods

def persistentHomology(stream: => StratifiedCellStream[CellT, Double]): HomologyState

Concrete fields

val chainRM: RingModule { type R = CoefficientT; type Self = Chain[CellT, CoefficientT]; }