Patch release: degenerate input to simplex_volume_in_embedding (collinear, coplanar, or coincident vertices) now yields volume 0.0 like the reference implementation, instead of raising ValueError (#15).
adaptive's curvature losses feed degenerate vertex sets whenever the sampled function is locally flat, so with adaptive ≥ 1.5 auto-selecting this backend, LearnerND runs with curvature_loss_function() crashed where the pure-Python backend returned a zero loss. The fix mirrors the reference's tolerance contract: a Cayley-Menger squared volume within rounding noise of zero (> -1e-15) is a zero-volume simplex; only below that band is it an error. For three vertices in a >2D embedding the squared-distance Cayley-Menger form replaces root-based Heron so rounding near zero behaves like the reference's determinant.
With this release the full adaptive 1.5.0 test suite passes with the Rust backend active (283 passed; previously 7 curvature-loss failures), clearing the way for adaptive to bump _MIN_RUST_VERSION and run the Rust backend in CI.
Full changelog: v0.3.0...v0.3.1