FastAlphaHomologyContext
The homology.FastCubicalHomologyContext dual-graph union-find, ported to a HelixDelaunay alpha complex (.claude/DESIGN-alpha-dual-unionfind.md, item 7 of .claude/WORKLOG-mainstream-feature-gap-analysis.md, a follow-on to item 6's cubical engine). HelixDelaunay specifically, not AlphaComplexDQP/AlphaShapeDQP -- the dual graph needs the FULL, untruncated triangulation and "every facet has = 2''' (required), same asFastCubicalHomologyContext(which this class mirrors term-for-term):H_0(ordinary primal union-find) plusH_{d-1}(via the dual union-find below) together account for every cell dimension a 2D triangulation has, with no generalChain.reduceByreduction needed at all. Atd >= 3there ared-2"middle" dimensions (1 <= k <= d-2) with no duality shortcut; these are handed toCellularPersistenceInChunksContextrun on aLimitedAlphaShapesStreamview that hides the real top-dimensional simplices entirely -- still a net win, since the (often largest) top dimension never touches generalChainreduction. See.claude/DESIGN-fast-engines-hybrid-middle-dimensions.md` for the full derivation, including why the dual union-find's own correctness doesn't depend on how the middle dimensions get resolved.
'''Unlike the cubical grid, "every facet has 1 or 2 cofaces" is not guaranteed by construction''' -- validated explicitly up front, throwing FastAlphaTriangulationException (a message written for an unsuspecting caller, not just this engine's own developers -- what happened, why it isn't a bug in their data, and the concrete fix) on violation, rather than silently building a wrong dual graph. Measured at roughly 1-in-18700 on random points at ambient dimension 2 (the original measurement) -- but this is a real, genuine HelixDelaunay limitation (a cospherical tiling choice or its own documented frontier-walk incompleteness bug), and it is NOTICEABLY MORE LIKELY at higher ambient dimension and with more points, not a flat rate: roughly 1-in-1666 measured at ambient dimension 3 with 20-30 points (vs. no violations at all in 20000 trials with 6-16 points at the same dimension). See .claude/DESIGN-fast-engines-hybrid-middle-dimensions.md's own measurement and the design note's "new finding" section.
'''A facet's own dual-edge value is helix.filtrationValue(facet) directly, never recomputed as min over its containing top simplices''' -- unlike a cubical grid (where those two quantities are the same by construction), HelixDelaunay.computeFVal's own edgeIsDelaunay shortcut can give a genuinely SMALLER value than either containing triangle's own circumradius; using anything else silently shifts some bars' birth values (see the design note's own worked example for a concrete case where this matters).
See FastCubicalHomologyContext's own doc for the shared parts of the construction (the dual graph itself, the ∞ sentinel and why it must be +Infinity, the birth/death swap, and the representative-tracking orientation-flip scheme) -- identical here, Simplex[Int]'s alternating-sign boundary rule (simplexIsOrderedCell) standing in for Cube's rank-among-non-degenerate-axes rule.
Attributes
- Experimental
- true
- Graph
-
- Supertypes
-
class Objecttrait Matchableclass Any