All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Unify flip-repair and retry constants across build profiles #306 #319
- Remove ScalarAccumulative and ScalarSummable traits #316 #318
- Rename tds file and move delaunay/builder into triangulation/ #317
- Allow explicit cell construction with non-sphere Euler characteristic #314
-
Allow explicit cell construction with non-sphere Euler characteristic #314
c81bb1a -
feat: allow explicit cell construction with non-sphere Euler characteristic #313
Add
.global_topology()builder setter so callers can declare the intended topology (e.g. Toroidal) for explicit cell construction.validate_topology_core()uses this metadata to override the heuristic classification: closed toroidal meshes expect χ = 0 instead of the sphere default χ = 1+(-1)^D.-
Add
ToroidalConstructionMode::Explicitvariant for explicit builds -
Add
TopologyClassification::ClosedToroid(D)with χ(T^d) = 0 -
Add
global_topologyfield and setter toDelaunayTriangulationBuilder -
Thread
GlobalTopologythroughbuild_explicit(), set before validation -
Override Euler classification in
validate_topology_core()whenglobal_topologyisToroidaland heuristic yieldsClosedSphere -
Add T² (3×3 grid) and T³ (3×3×3 Freudenthal) integration tests validating χ = 0 via explicit construction
-
-
Rename tds file and move delaunay/builder into triangulation/ #317
25faa5b -
refactor: rename tds file and move delaunay/builder into triangulation/
-
Rename src/core/triangulation_data_structure.rs → src/core/tds.rs
-
Move src/core/delaunay_triangulation.rs → src/triangulation/delaunay.rs
-
Move src/core/builder.rs → src/triangulation/builder.rs
-
Widen pub(in crate::core) → pub(crate) for cross-module access
-
Preserve public API via re-exports in core {}
-
Add GlobalTopology::is_euclidean() for API symmetry with is_toroidal()
-
Add doctests for topology_guarantee, global_topology, topology_kind, set_global_topology accessors
-
Hoist in-function test imports to module-level per project convention
-
Shorten fully-qualified paths (CellValidationError, ConflictError, etc.)
-
Bump la-stack 0.3.0 → 0.4.0 (integer-only Bareiss, stack-backed exact arithmetic, custom f64→BigRational via IEEE 754 bit decomposition)
-
Update README, code_organization.md, debug_env_vars.md, rust.md, numerical_robustness_guide.md, COVERAGE.md, and other active docs
-
Archive docs left unchanged (historical state)
-
-
[breaking] Remove ScalarAccumulative and ScalarSummable traits #316 #318
c612188 -
refactor!: remove ScalarAccumulative and ScalarSummable traits #316
- Absorb AddAssign, SubAssign, and Sum bounds into CoordinateScalar
- Remove ScalarAccumulative and ScalarSummable traits and their blanket impls
- Replace all ScalarAccumulative bounds with CoordinateScalar across 20 files
- Simplify operator usage (e.g. coords[axis] += … instead of manual add-assign)
-
Handle geometric degeneracy gracefully in profiling benchmarks
3532624 -
Replace .unwrap() on triangulation build with graceful error handling across all benchmark functions in profiling_suite.rs
-
Scaling and memory benchmarks skip iterations that hit degeneracy
-
Query latency and algorithmic bottleneck benchmarks skip entries when setup construction fails
-
Fixes CI panic: GeometricDegeneracy during 3D memory profiling with 10,000 random points (seed 42)
-
-
Unify flip-repair and retry constants across build profiles #306 #319
14f0d16 -
fix: unify flip-repair and retry constants across build profiles #306
Several flip-repair and construction-retry constants were split by cfg(any(test, debug_assertions)), causing release builds to fail on valid 3D inputs that debug/test builds handled correctly.
Primary fix: RetryPolicy::default() was Disabled in release but DebugOnlyShuffled { attempts: 6 } in debug/test. When the initial Hilbert-ordered insertion hits a co-spherical flip cycle, shuffled retries find a working vertex ordering. Without retries, the first failure was fatal. Changed to Shuffled { attempts: 6 } unconditionally.
Secondary fixes in flips.rs:
- Unify MAX_REPEAT_SIGNATURE to 128 (was 32 in release)
- Unify default_max_flips 3D multiplier to 8x (was 4x in release)
- Make is_connected() postcondition check unconditional
Also in delaunay.rs:
-
Unify HEURISTIC_REBUILD_ATTEMPTS to 6 (was 2 in release)
-
Remove cfg-gated DELAUNAY_SHUFFLE_ATTEMPTS constant
-
Fixed: enable construction retries in release builds by default
Update RetryPolicy::default() to return Shuffled retries in all build profiles. Previously, retries were disabled in release mode, causing fatal construction failures on 3D configurations that required alternative vertex insertion orders to converge. This change ensures consistent behavior between debug and release builds and includes a regression test for the reported failure case.
0.7.5 - 2026-04-10
- Change remove_vertex to accept VertexKey instead of &Vertex #300
- Release v0.7.5 #312
- V0.7.5 cleanup — impl-block split, builder decomposition, p… #311
- Add diagnostic infrastructure for v0.7.6 investigation (#306, #… #309
- Bump taiki-e/install-action from 2.70.2 to 2.73.0 #308
- Add MVP delaunayize-by-flips workflow #227 #303
- Add explicit construction from vertices and cells #293 #301
- Change remove_vertex to accept VertexKey instead of &Vertex #300
- Bump pygments from 2.19.2 to 2.20.0 #298
- Bump astral-sh/setup-uv from 7.6.0 to 8.0.0 #297
- Bump taiki-e/install-action from 2.69.6 to 2.70.2 #296
- Bump codecov/codecov-action from 5.5.3 to 6.0.0 #295
- Bump the dependencies group with 3 updates #294
-
Add explicit construction from vertices and cells #293 #301
458ebae -
feat: add explicit construction from vertices and cells #293
-
Introduce
DelaunayTriangulationBuilder::from_vertices_and_cellsfor combinatorial construction bypassing Delaunay insertion -
Add
build_explicitpath that constructs a TDS directly from given vertices and cell index lists, with adjacency and orientation repair -
Define
ExplicitConstructionErrorenum withIndexOutOfBounds,InvalidCellArity,DuplicateVertexInCell,EmptyCells, andIncompatibleTopologyvariants -
Wire
ExplicitConstructionvariant intoDelaunayTriangulationConstructionError -
Expose
assign_neighborsaspub(crate)in the TDS -
Add comprehensive integration tests for explicit construction across 2D/3D, round-trip fidelity, error cases, and topology guarantees
-
Changed: refine explicit construction validation and error reporting
Update the triangulation builder to return specific ValidationFailed errors when structural invariants are violated. Refine the Delaunay property check in the validation suite to use flip-based verification for more precise error reporting. Expand the test suite to cover 3D round-trip fidelity, non-manifold topology errors, and vertex data consistency during explicit construction.
-
-
feat: add MVP delaunayize-by-flips workflow #227
Add a public
delaunayize_by_flipsentrypoint that performs bounded deterministic topology repair followed by flip-based Delaunay repair, with an optional fallback rebuild from the vertex set.New files:
-
src/core/algorithms/pl_manifold_repair.rs: pub(crate) bounded facet over-sharing repair (iterative worst-quality cell removal)
-
src/triangulation/delaunayize.rs: public API with DelaunayizeConfig, DelaunayizeOutcome, DelaunayizeError, and delaunayize_by_flips()
-
tests/delaunayize_workflow.rs: 13 integration tests covering success paths, fallback behavior, determinism, error variants, and flip-then-repair round-trip
Other changes:
-
Box DelaunayRepairDiagnostics in NonConvergent variant to keep DelaunayRepairError small (eliminates downstream boxing)
-
Wire modules in src/lib.rs with self-contained prelude at prelude::triangulation::delaunayize
-
Re-export PlManifoldRepairStats, PlManifoldRepairError, and DelaunayRepairStats from the delaunayize module
-
Update docs/api_design.md and docs/code_organization.md
-
Changed: allow manifold repair to proceed on over-shared facets
Refactor
repair_facet_oversharingto use partial structural pre-checks rather than full validation, as the latter rejects over-shared facets before repair can occur. Expand test coverage for budget exhaustion, cell removal logic, and repair determinism. -
-
Add diagnostic infrastructure for v0.7.6 investigation (#306, #… #309
b25dff3 -
feat: add diagnostic infrastructure for v0.7.6 investigation (#306, #307)
- Enhance conflict-region verifier with neighbor-reachability analysis
- Add BFS boundary logging to find_conflict_region
- Add orientation tracing and post-insertion audit (DELAUNAY_DEBUG_ORIENTATION)
- Add cell creation provenance logging to fill_cavity
- Re-export diagnostic types (DelaunayRepairDiagnostics, etc.) in prelude
- Create comprehensive debug env var reference (docs/dev/debug_env_vars.md)
-
[breaking] Change remove_vertex to accept VertexKey instead of &Vertex #300
71cca10 -
refactor!: change remove_vertex to accept VertexKey instead of &Vertex
-
More ergonomic: callers pass a key directly instead of looking up and borrowing the full Vertex struct
-
More efficient: O(1) key dereference replaces UUID-based lookup
-
Consistent with set_vertex_data, set_cell_data, and the Edit API which all use keys
-
Aligned with the stated API design in docs/api_design.md
-
Simplifies internal callers in flips.rs (remove get+copy+remove pattern) and builder.rs (eliminate intermediate vertex copies)
-
Add stale-key idempotency test for the new VertexKey API
-
-
V0.7.5 cleanup — impl-block split, builder decomposition, p… #311
5bf5c81 -
refactor: v0.7.5 cleanup — impl-block split, builder decomposition, prelude guidance, re-enable 3D proptests
-
Split monolithic DelaunayTriangulation impl block into 6 trait-minimal blocks per #302 (ScalarAccumulative only where needed)
-
Decompose search_closed_2d_selection: extract ClosedSelectionDfs struct and sort_candidates_by_rarity_and_domain helper, remove clippy suppressions
-
Add "Which import do I need?" prelude guidance table to lib.rs
-
Re-enable 43 previously-ignored 3D proptests (all <1s in release mode)
-
Audit doctests for builder migration (no changes needed; deferred to #214)
-
-
Update internal performance results for v0.7.5
76b2ff7
Refresh the performance documentation with updated benchmark metrics, timestamps, and commit references to align with the v0.7.5 release.
-
Update KNOWN_ISSUES_4D.md with #204 debug run findings
87d3054 -
3D: minimal failing prefix is 35 vertices (previously ~130+)
- 3D: flip cycles confirmed NOT predicate-related (ambiguous=0)
- 4D: negative-orientation cell causes 88% vertex skip rate
- Add release-mode reproduction commands
- Update recommendations section
- Filed follow-up issues #306 and #307
Bumps pygments from 2.19.2 to 2.20.0.
-
updated-dependencies:
-
dependency-name: pygments dependency-version: 2.20.0 dependency-type: indirect ...
Bumps the dependencies group with 3 updates: rustc-hash , ordered-float and uuid .
Updates rustc-hash from 2.1.1 to 2.1.2
-
Updates
ordered-floatfrom 5.2.0 to 5.3.0 -
Updates
uuidfrom 1.22.0 to 1.23.0 -
updated-dependencies:
-
dependency-name: rustc-hash dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies
-
dependency-name: ordered-float dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies
-
dependency-name: uuid dependency-version: 1.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ...
-
Bump codecov/codecov-action from 5.5.3 to 6.0.0 #295
420a1c5
Bumps codecov/codecov-action from 5.5.3 to 6.0.0.
-
updated-dependencies:
-
dependency-name: codecov/codecov-action dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ...
Bumps astral-sh/setup-uv from 7.6.0 to 8.0.0.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ...
-
Bump taiki-e/install-action from 2.69.6 to 2.70.2 #296
0ab08a7
Bumps taiki-e/install-action from 2.69.6 to 2.70.2.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.70.2 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump taiki-e/install-action from 2.70.2 to 2.73.0 #308
839877f
Bumps taiki-e/install-action from 2.70.2 to 2.73.0.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.73.0 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump version to v0.7.5
- Update changelog with latest changes
- Update documentation for release
- Add performance results for v0.7.5
0.7.4 - 2026-03-27
- Tighten Vertex::data and Cell::data to pub(crate) #289
- Generalize DelaunayTriangulationBuilder::new() over U #287 #290
- Release v0.7.4 #291
- Generalize DelaunayTriangulationBuilder::new() over U #287 #290
- Tighten Vertex::data and Cell::data to pub(crate) #289
- Add set_vertex_data and set_cell_data methods #284 #285
-
Add set_vertex_data and set_cell_data methods #284 #285
b398d54 -
feat: add set_vertex_data and set_cell_data methods #284
-
Add
set_vertex_dataandset_cell_datatoTdsfor O(1) mutation of auxiliary vertex/cell data without affecting geometry or topology -
Add convenience wrappers on
TriangulationandDelaunayTriangulationthat delegate to the TDS methods without invalidating caches -
All doctests use
prelude::triangulation::*to demonstrate idiomatic imports includingDelaunayTriangulationBuilder::from_vertices -
9 unit tests covering replacement, no-data vertices, invalid keys, invariant preservation, multi-key mutation, and locate-hint stability
-
feat: add set_vertex_data and set_cell_data methods #284
-
Add
set_vertex_dataandset_cell_datatoTdsacceptingOption<U>/Option<V>for setting or clearing auxiliary data in O(1) without affecting geometry or topology -
Add convenience wrappers on
TriangulationandDelaunayTriangulationthat delegate to the TDS methods without invalidating caches -
All doctests use
prelude::triangulation::*and demonstrate both setting and clearing data paths -
11 unit tests covering Tds basics, Triangulation wrappers, invariant preservation, multi-key mutation, clearing, and locate-hint stability
-
-
[breaking] Tighten Vertex::data and Cell::data to pub(crate) #289
07f1565 -
refactor!: tighten Vertex::data and Cell::data to pub(crate)
-
Change
Vertex::dataandCell::datafrompubtopub(crate) -
Add
const fn data() -> Option<&U>accessor onVertexandconst fn data() -> Option<&V>accessor onCell -
Update struct-level doc comments with
data()/set_vertex_data/set_cell_datacross-references -
Update all external-facing doctests and integration tests to use the new accessor
-
-
[breaking] Generalize DelaunayTriangulationBuilder::new() over U #287 #290
7694a3e -
refactor!: generalize DelaunayTriangulationBuilder::new() over U #287
-
Move
new()from the<f64, (), D>impl to<f64, U, D>so it accepts any vertex data type — U is inferred from the vertex slice -
Deprecate
from_vertices()(now redundant for f64 vertices) -
Migrate all
from_verticescall sites tonew -
Fix type-inference regression in NaN test by annotating VertexBuilder
-
-
chose(release): release v0.7.4
-
Bump version to v0.7.4
-
Update changelog with latest changes
-
Update documentation for release
-
Add performance results for v0.7.4
-
Changed: clarify adaptive_tolerance_insphere delegation in 4D docs
Update the documentation for provable error bounds to clarify that the
adaptive_tolerance_inspherewrapper function remains available but now delegates entirely to the provableinsphere_from_matrixpath. -
-
Fix keyword validation and add publish-check recipe
676df6b -
Replace
computational-geometrykeyword withgeometry(crates.io enforces a 20-character limit)-
Add
just publish-checkrecipe that validates crates.io metadata (keywords, categories, description) and runscargo publish --dry-run -
Add publish-check to RELEASING.md Step 1.3 so metadata issues are caught in the release PR, not at publish time
-
Remove redundant dry-run from RELEASING.md Step 2.7
-
0.7.3 - 2026-03-24
- Add SoS module for deterministic degeneracy resolution #233 #251
- Remove use_robust_on_ambiguous override from flip repair #228 #255
- Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
- Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277
- Remove RobustPredicateConfig and config_presets #259 #260
- Rename TdsValidationError to TdsError #262 #265
- Replace custom changelog pipeline with git-cliff #247
- Release v0.7.3 #283
- Simplify trait bounds and re-export secondary maps #282
- Bump codecov/codecov-action from 5.5.2 to 5.5.3 #280
- Bump taiki-e/install-action from 2.68.34 to 2.69.6 #279
- Bump arc-swap from 1.8.2 to 1.9.0 in the dependencies group #278
- Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277
- Add progressive scale-invariant perturbation #209 #274
- Add ExactPredicates marker trait for flip repair type safety (#… #273
- Identity-based SoS perturbation via canonical vertex ordering (… #272
- Bump astral-sh/setup-uv from 7.3.1 to 7.5.0 #271
- Bump actions-rust-lang/setup-rust-toolchain #270
- Bump taiki-e/install-action from 2.68.25 to 2.68.33 #269
- Bump tracing-subscriber in the dependencies group #268
- Bump actions/download-artifact from 8.0.0 to 8.0.1 #267
- Rename TdsValidationError to TdsError #262 #265
- Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
- Canonicalize positive orientation after bulk construction repair… #261
- Remove RobustPredicateConfig and config_presets #259 #260
- Remove use_robust_on_ambiguous override from flip repair #228 #255
- Add SoS module for deterministic degeneracy resolution #233 #251
- Replace panicking calls with error propagation #242 #250
- Replace derive_builder with hand-written VertexBuilder #212 #249
- Archive completed changelog minor series into per-minor files #248
- Replace custom changelog pipeline with git-cliff #247
-
Archive completed changelog minor series into per-minor files #248
45e4781 -
feat: archive completed changelog minor series into per-minor files
Add archive_changelog.py to split CHANGELOG.md by minor series:
-
Parse version blocks, group by X.Y minor key, write completed minors to docs/archive/changelog/X.Y.md (0.2–0.6)
-
Extract and distribute git-cliff reference-style link definitions so each output file contains only its own version defs (fixes MD053)
-
Keep Unreleased + active minor (0.7) in root CHANGELOG.md with an Archives link section; root shrinks from ~4,000 to ~1,400 lines
-
Pipeline is idempotent: repeated runs produce no diff
Update tag_release.py to fall back to archive files when a requested version is no longer in the root changelog (extract_changelog_section and _github_anchor both search docs/archive/changelog/X.Y.md).
Register archive-changelog CLI entry point in pyproject.toml and wire it into the justfile changelog recipe after postprocess-changelog.
Add 24 tests covering parsing, grouping, link-def distribution, archive writing, idempotency, and tag_release archive fallback.
Other changes:
- Sort justfile recipes in lexicographic order
- Update docs/code_organization.md tree (new files, fix NBSP encoding)
- Update AGENTS.md, README.md, RELEASING.md with archive references
- Exclude docs/archive/changelog/** from typos checks
-
-
[breaking] Add SoS module for deterministic degeneracy resolution #233 #251
6ed6f88 -
feat: add SoS module for deterministic degeneracy resolution #233
- New
src/geometry/sos.rswith dimension-generic SoS tie-breaking sos_orientation_sign<D>()for degenerate orientation predicatessos_insphere_sign<D>()for co-spherical insphere predicates- Two-stage exact det sign:
det_errbound()fast filter + Bareiss exact - 18 unit tests covering 2D–5D degenerate configurations
- No coordinate modification — purely a decision rule
Part of AdaptiveKernel implementation (B2 of #233).
- New
-
[breaking] Remove use_robust_on_ambiguous override from flip repair #228 #255
faf84de -
feat!: remove use_robust_on_ambiguous override from flip repair #228
Remove the
use_robust_on_ambiguousflag androbust_insphere_sign()fallback from flip repair. With AdaptiveKernel providing exact+SoS predicates, the old tolerance-based override was the root cause of flip-repair non-convergence.- Remove override blocks in k2/k3 violation functions
- Remove
both_positive_artifactworkaround - Simplify repair attempts from 3 to 2 (FIFO then LIFO)
- Remove
used_robust_predicatesfromDelaunayRepairDiagnostics - Fix pre-existing clippy
match_same_armsin matrix.rs/measures.rs
-
[breaking] Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
526b39e -
feat: apply SoS to AdaptiveKernel::orientation() and tolerate degenerate cells #263
-
Apply Simulation of Simplicity to AdaptiveKernel::orientation() so degenerate ties are broken deterministically (returns ±1 for all distinct-point inputs, 0 only for identical f64 points)
-
Tolerate degenerate cells (zero exact determinant) in orientation normalization after flip-based Delaunay repair:
- promote_cells_to_positive_orientation: skip instead of error
- cells_require_positive_orientation_promotion: skip instead of error
- canonicalize_global_orientation_sign: scan past degenerate cells
- validate_geometric_cell_orientation: only flag negative orientation
-
Add Hilbert-sort preprocessing dedup (Phase 4 in order_vertices_hilbert) that removes vertices mapping to the same quantized grid cell
-
Add per-cell coordinate uniqueness validation (DuplicateCoordinatesInCell variant, CellCoordinateUniqueness invariant kind)
-
Document three-layer duplicate vertex handling strategy in docs/numerical_robustness_guide.md
-
Update convex_hull and quality tests to accept InsufficientVertices alongside GeometricDegeneracy for extreme-scale dedup inputs
-
Add macro-generated dedup integration tests covering 2D–5D
-
feat: normalize SoS orientation callers and harden Hilbert dedup #263
-
Refactor evaluate_cell_orientation_for_context to use robust_orientation as the sole oracle, removing the duplicate kernel call
-
Add robust_orientation guard in apply_bistellar_flip_with_k to reject degenerate cells before kernel invocation (fixes 4D perf regression)
-
Switch find_boundary_edge_split_facet to robust_orientation for true collinearity/degeneracy detection instead of kernel SoS
-
Use robust_orientation sign directly in build_initial_simplex, removing unused kernel variable and redundant orientation call
-
Extract hilbert_dedup_sorted from order_vertices_hilbert so the ordering function is pure; apply dedup in preprocess_vertices_for_construction after Hilbert sort regardless of DedupPolicy (safety-critical for SoS identical-point failures)
-
Add validate_cell_coordinate_uniqueness to validation_report with CoordinateScalar bound
-
Fix quantization bits table in numerical_robustness_guide.md (2D/3D capped at 31 bits, not 64/42)
-
Update rustdoc for cells_require_positive_orientation_promotion to reflect skip-degenerate semantics
-
Trim inaccurate near-duplicate claim from dedup_batch_construction docs
-
Add SoS identical-points regression tests (2D–5D) verifying AdaptiveKernel returns 0 when all cofactors vanish
-
Add standalone hilbert_dedup_sorted edge-case tests
-
refactor: address review comments for SoS orientation normalization #263
-
Propagate
robust_orientationerrors inapply_bistellar_flip_with_kinstead of silently ignoringErrviamatches! -
Switch
k2_flip_would_create_degenerate_cellfrom kernel orientation torobust_orientationso degenerate cells are detected under SoS; remove unusedkernelparameter -
Delegate
AdaptiveKernel::orientation()torobust_orientationfor layers 1+2, eliminating duplicated matrix build + exact_det_sign logic -
Remove unused
kernelparameter fromfind_boundary_edge_split_facetand update call site inextend_hull -
Update stale rustdoc:
validate_geometric_cell_orientationandbuild_initial_simplexnow referencerobust_orientationinstead of kernel predicates /K::default() -
Add
vkeys[i] == vkeys[j]guard invalidate_cell_coordinate_uniquenessto avoid misleading error when vertex keys are duplicated -
Replace broad
assert!(result.is_err())in all-duplicates test with preciseInsufficientVerticesmatch -
Decouple many-duplicates test from magic
$dim + 2by using the helper's returned distinct count -
Update docs: numerical_robustness_guide, KNOWN_ISSUES_4D, ORIENTATION_SPEC, validation.md
-
refactor: remove unused kernel parameter from flip-application functions #263
-
Replace
K: Kernel<D>withT: CoordinateScalarin 7 functions: apply_bistellar_flip_with_k, apply_bistellar_flip, apply_bistellar_flip_dynamic, apply_bistellar_flip_k2/k3/k1, apply_bistellar_flip_k1_inverse -
Update ~40 call sites across flips.rs, triangulation/flips.rs, delaunay_triangulation.rs
-
Delete ZeroOrientationKernel2d test struct (now redundant)
-
Update ORIENTATION_SPEC.md flip pseudocode to match new signatures
-
Address review round 3 comments: guard coordinate uniqueness validation, add #[non_exhaustive] to InvariantKind, extract generic flip_would_create_degenerate_cell, add nitpick tests
-
fix!: remove Morton and Lexicographic ordering, unconditional Hilbert dedup, strengthen flip assertions #263
-
Strengthen assert_context_has_nonzero_robust_orientation to explicitly fail on Err variants instead of only checking for DEGENERATE
-
Merge hilbert_dedup_sorted into order_vertices_hilbert via dedup_quantized parameter, eliminating redundant re-quantization
-
Make Hilbert quantized dedup unconditional (not gated on DedupPolicy)
-
Update DedupPolicy docs to frame as performance-tuning knob
-
Remove InsertionOrderStrategy::Morton variant and all supporting code (~100 lines: morton_bits_per_coord, morton_code, order_vertices_morton)
-
Remove InsertionOrderStrategy::Lexicographic variant and associated tests; keep internal order_vertices_lexicographic as Hilbert fallback
-
Remove Morton/Lexicographic doc references from README, invariants.md, numerical_robustness_guide.md, and triangulation_generation.rs
-
-
Identity-based SoS perturbation via canonical vertex ordering (… #272
a125d98 -
feat: identity-based SoS perturbation via canonical vertex ordering #266
-
Add canonical_points module with sorted_cell_points and sorted_facet_points_with_extra helpers that sort vertices by VertexKey identity before resolving to points
-
Update all 5 kernel call sites (locate, flips, triangulation) to use canonical ordering for consistent SoS tie-breaking
-
Fix misleading error variant in find_conflict_region BFS traversal (InvalidStartCell → CellDataAccessFailed)
-
Add 6 unit tests including 2D/3D permutation-invariance tests
-
feat: identity-based SoS perturbation via canonical vertex ordering #266
-
Add canonical_points module with sorted_cell_points and sorted_facet_points_with_extra helpers that sort vertices by VertexKey identity before resolving to points
-
Update all 5 kernel call sites (locate, flips, triangulation) to use canonical ordering for consistent SoS tie-breaking
-
Fix misleading error variant in find_conflict_region BFS traversal (InvalidStartCell → CellDataAccessFailed)
-
Document canonical ordering convention in numerical_robustness_guide
-
Add canonical_points.rs to code_organization.md util listing
-
Add 14 new tests: permutation invariance (2D all 6, 3D all 24), canonical ordering helpers, and error-path coverage for is_point_outside_facet and find_conflict_region
-
Changed: reuse canonical cell ordering for query simplex construction
Optimize the construction of the query simplex by reusing the canonical vertex ordering of the cell. This ensures consistent identity-based SoS perturbation and includes a safety check to prevent out-of-range facet index access.
-
-
Add ExactPredicates marker trait for flip repair type safety (#… #273
4877151 -
feat: add ExactPredicates marker trait for flip repair type safety #257
-
Define
ExactPredicatesmarker trait inkernel.rs, implemented forAdaptiveKernelandRobustKernelbut notFastKernel -
Add
K: ExactPredicatesbound to flip repair entry points inflips.rsand propagate throughdelaunay_triangulation.rs,builder.rs, andtriangulation_generation.rs -
Add
compile_faildoctest assertingFastKernelcannot satisfy the bound, plus positive compile-time assertion tests for the other kernels -
Update test code to use
AdaptiveKernelwhereDelaunayTriangulationconstruction or flip repair is invoked -
Document the trait and its design rationale in
numerical_robustness_guide.md
-
-
Add progressive scale-invariant perturbation #209 #274
4c35028 -
feat: add progressive scale-invariant perturbation #209
-
Replace hardcoded perturbation retry count with DEFAULT_PERTURBATION_RETRIES = 3 (4 total attempts)
-
Apply 10^(attempt-1) progressive scaling factor per retry, spanning 4 orders of magnitude (e.g. 1e-8 → 1e-5 for f64)
-
Update debug messages with computed max perturbation values
-
Update numerical robustness guide documentation
-
Add tests for scale invariance, f32 base epsilon, and constant value
-
Remove 32 redundant
where K::Scalar: CoordinateScalarclauses (implied by impl-level bounds) -
fix: correct perturbation exponent off-by-one and improve test coverage #209
-
Fix progressive scale factor: use 10^attempt instead of 10^(attempt-1) so the retry ladder reaches 1e-5 × local_scale (was capped at 1e-6), matching the documented "4 orders of magnitude" range
-
Apply the same correction to the debug-message exponent computation
-
Update perturbation ladder in numerical_robustness_guide.md to reflect the corrected values (1e-7, 1e-6, 1e-5)
-
Replace test_perturbation_f32_base_epsilon with test_perturbation_epsilon_selection_and_retry: asserts mantissa_digits for both f32 and f64, exercises insert_transactional with on-edge near-degenerate points for both scalar types
-
Add absolute expected counts to test_perturbation_scale_invariance_3d to catch regressions that affect all scales equally
-
Add test_perturbation_retry_and_exhaustion_4d: 4D random points exercise the progressive retry loop body and exhaustion branch
-
Add test_perturbation_retry_seeded_branch_4d: calls insert_transactional directly with perturbation_seed != 0 to cover the seeded sign-selection path
-
-
[breaking] Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277
0684ec0
Add configurable flip-budget capping, structured debug-harness outcomes, enriched orientation diagnostics, and a seeded 4D regression test.
Flip budget enforcement:
-
Move max_flips check before apply_bistellar_flip in all 5 repair paths (k2, k3, dynamic, inverse) so Some(0) means truly zero flips
-
Change guard from
>to>=to eliminate off-by-one -
Thread max_flips_override through repair_delaunay_with_flips_k2_k3, the robust fallback, heuristic rebuild, and per-insertion repair
Capped repair API:
-
Add max_flips: Option to DelaunayRepairHeuristicConfig
-
Mark DelaunayRepairHeuristicConfig #[non_exhaustive]
-
Add internal repair_delaunay_with_flips_capped() helper
-
Add DELAUNAY_LARGE_DEBUG_REPAIR_MAX_FLIPS env var to debug harness
Error taxonomy:
-
Add RepairFailed variant to DelaunayTriangulationValidationError for mutating operations (remove_vertex); fix remove_vertex to use it instead of VerificationFailed (which is for passive validation)
Orientation diagnostics:
-
Enrich NegativeOrientation error message with vertex keys
-
Add tracing::warn with cell key, UUID, vertex keys, neighbor keys, and orientation sign for negative-orientation cells
Debug harness:
-
Return DebugOutcome enum instead of panicking (Success, ConstructionFailure, SkippedVertices, RepairNonConvergence, ValidationFailure)
-
Print seed replay command on every abort path
-
Add per-chunk insertion rate (pts/s) in progress output
-
Harness tests now assert on DebugOutcome::Success
-
Replace panicking calls with error propagation #242 #250
9d640c3 -
refactor: replace panicking calls with error propagation #242
-
Add
InternalInconsistencyvariant toTriangulationConstructionErrorfor internal bookkeeping failures distinct from geometric degeneracy -
Replace 5
.expect()calls on HashMap lookups in builder.rs periodic quotient reconstruction with?propagation -
Reclassify 3 additional internal operations (image vertex removal, neighbor assignment, incident-cell rebuild) from
GeometricDegeneracytoInternalInconsistency -
Replace
.expect()oninitial_points.take()in triangulation_generation.rs with error propagation -
Update doc comment from
# Panicsto# Errors -
Add single-quote guidance for gh --body in AGENTS.md
-
-
[breaking] Remove RobustPredicateConfig and config_presets #259 #260
6764bac -
refactor!: remove RobustPredicateConfig and config_presets #259
-
Delete RobustPredicateConfig struct and config_presets module
-
Remove config parameter from robust_insphere, robust_orientation, adaptive_tolerance_insphere, and verify_insphere_consistency
-
Simplify RobustKernel to a zero-size type (remove config field and with_config constructor, derive Default)
-
Remove config threading from flips.rs, delaunay_validation.rs, and coordinate_conversion_errors.rs
-
Delete tests that only exercised config field values
-
Update numerical_robustness_guide.md: document AdaptiveKernel as the default kernel, remove config_presets references
-
-
[breaking] Rename TdsValidationError to TdsError #262 #265
99b9810 -
refactor: rename TdsValidationError to TdsError #262
-
Rename TdsValidationError -> TdsError across all source files
-
Remove the type alias that bridged the old name
-
Update all references in production code, tests, and examples
-
Part of error hierarchy orthogonalization (Phase 5)
-
refactor!: make TriangulationValidationError purely Level 3 #262
Remove the Tds variant from TriangulationValidationError so it contains only Level 3 (topology) errors. TDS-level errors now flow through InvariantError, keeping Levels 1–2 orthogonal from Level 3.
API changes:
-
is_valid, validate, validate_at_completion, validate_after_insertion now return InvariantError instead of TriangulationValidationError
-
validate_geometric_cell_orientation returns TdsError directly
-
remove_vertex returns InvariantError
-
Add Tds variant to DelaunayTriangulationValidationError
-
TdsMutationError inner field made private; add as_tds_error() and into_inner() accessors
-
Remove From for TriangulationValidationError
-
Add From for InvariantError
-
-
Simplify trait bounds and re-export secondary maps #282
04ea024 -
Re-export VertexSecondaryMap and CellSecondaryMap in prelude and prelude::collections; update doc examples to use prelude path
-
Replace ~50 vestigial ScalarSummable bounds with CoordinateScalar across geometry and core modules (Sum is never called on T)
-
Remove ~34 redundant K::Scalar: CoordinateScalar where clauses already implied by K: Kernel (associated type bound)
-
Remove 8 redundant [T; D]: Copy + Sized bounds already implied by T: CoordinateScalar (Float → Copy; arrays are always Sized)
-
Keep ScalarSummable trait definition and blanket impl for future use
-
-
Canonicalize positive orientation after bulk construction repair… #261
dec8df9 -
fix: canonicalize positive orientation after bulk construction repair #258
-
Call normalize_and_promote_positive_orientation() in finalize_bulk_construction after the flip-repair block and before topology validation, ensuring the global geometric sign is positive
-
Update #228 regression test to expect PLManifold (was Pseudomanifold) now that orientation is correctly canonicalized
-
Changed: categorize errors during orientation canonicalization
Distinguish structural
InsertionErrorvariants asInternalInconsistencyto separate algorithmic bugs from input-relatedGeometricDegeneracyduring post-repair orientation canonicalization. Added topology validation to the issue #228 regression test to ensure manifold parity. -
-
[breaking] Replace custom changelog pipeline with git-cliff #247
1b2af41 -
chore!: replace custom changelog pipeline with git-cliff
Replace ~4,000 lines of custom Python changelog generation (changelog_utils.py, enhance_commits.py) with git-cliff and two focused scripts (~640 lines total):
-
postprocess_changelog.py: lightweight markdown hygiene (MD004, MD007, MD012, MD013, MD030, MD031, MD032, MD040) plus summary section injection (Merged PRs, Breaking Changes)
-
tag_release.py: extract latest version section for git tag messages
Pipeline changes:
-
cliff.toml: full git-cliff config with conventional commit parsing, PR auto-linking, and Tera template for Keep a Changelog format
-
justfile: new changelog-update, changelog-tag, changelog recipes replacing the old generate-changelog workflow
-
Idempotent output: postprocessor matches markdownlint --fix exactly, so
just changelog-update && just fixproduces zero diff
Tooling simplification:
-
Remove mypy in favor of ty (Astral) — mypy's permissive config was catching nothing that ty doesn't already cover
-
Disable markdownlint MD037 (false positives on cron expressions and glob patterns like saturating_*)
-
-
Replace derive_builder with hand-written VertexBuilder #212 #249
b017b39 -
chore: replace derive_builder with hand-written VertexBuilder #212
-
Add VertexBuilderError enum and VertexBuilder struct with point(), data(), and build() methods in src/core/vertex.rs
-
Remove #[derive(Builder)] and #[builder(...)] attributes from Vertex
-
Remove derive_builder dependency from Cargo.toml and lib.rs
-
All ~30 call sites unchanged — builder API is a drop-in replacement
-
-
Bump actions/download-artifact from 8.0.0 to 8.0.1 #267
3727781
Bumps actions/download-artifact from 8.0.0 to 8.0.1.
-
updated-dependencies:
-
dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump tracing-subscriber in the dependencies group #268
7d355f4
Bumps the dependencies group with 1 update: tracing-subscriber.
Updates tracing-subscriber from 0.3.22 to 0.3.23
-
updated-dependencies:
-
dependency-name: tracing-subscriber dependency-version: 0.3.23 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...
-
Bump taiki-e/install-action from 2.68.25 to 2.68.33 #269
f7fb663
Bumps taiki-e/install-action from 2.68.25 to 2.68.33.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.68.33 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps actions-rust-lang/setup-rust-toolchain from 1.15.3 to 1.15.4.
-
updated-dependencies:
-
dependency-name: actions-rust-lang/setup-rust-toolchain dependency-version: 1.15.4 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps astral-sh/setup-uv from 7.3.1 to 7.5.0.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 7.5.0 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump arc-swap from 1.8.2 to 1.9.0 in the dependencies group #278
da93901
Bumps the dependencies group with 1 update: arc-swap.
Updates arc-swap from 1.8.2 to 1.9.0
-
updated-dependencies:
-
dependency-name: arc-swap dependency-version: 1.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ...
-
Bump taiki-e/install-action from 2.68.34 to 2.69.6 #279
6c7c8b1
Bumps taiki-e/install-action from 2.68.34 to 2.69.6.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.69.6 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump codecov/codecov-action from 5.5.2 to 5.5.3 #280
47394f3
Bumps codecov/codecov-action from 5.5.2 to 5.5.3.
-
updated-dependencies:
-
dependency-name: codecov/codecov-action dependency-version: 5.5.3 dependency-type: direct:production update-type: version-update:semver-patch ...
-
chore(release): release v0.7.3
-
Bump version to v0.7.3
-
Update changelog with latest changes
-
Update documentation for release
-
Add performance results for v0.7.3
-
Changed: Update documentation to reflect AdaptiveKernel as default
Correct outdated references to FastKernel in README examples and internal test comments to match the current default implementation of DelaunayTriangulation.
-
0.7.2 - 2026-03-10
- Release v0.7.2 #246
- Exact insphere predicates with f64 fast filter #245
- Use exact-sign orientation in robust_orientation() #244
- Bump actions/setup-node from 6.2.0 to 6.3.0 #239
- Bump taiki-e/install-action from 2.68.16 to 2.68.25 #237
- Use exact arithmetic for orientation predicates #235 #236
- Switch FastKernel to insphere_lifted and enable LTO #234
- Deduplicate D<4 repair fallback and improve diagnostics #232
- Resolve 3D seeded bulk construction orientation convergence failure #228
- Bump actions-rust-lang/setup-rust-toolchain #226
- Bump taiki-e/install-action from 2.68.8 to 2.68.16 #225
- Bump astral-sh/setup-uv from 7.3.0 to 7.3.1 #224
- Bump actions/upload-artifact from 6 to 7 #223
- Bump actions/download-artifact from 7.0.0 to 8.0.0 #222
- Introduce GlobalTopology behavior model adapter #221
- Enforce coherent orientation as a first-class invariant #219
- Use bulk Hilbert API in order_vertices_hilbert #218
- Improve Hilbert curve correctness and add bulk API #207 #216
- Update docs for DelaunayTriangulationBuilder and toroidal topology #215
- Feat/210 toroidalspace periodic #213
- Bump taiki-e/install-action from 2.67.30 to 2.68.8 #211
-
Enforce coherent orientation as a first-class invariant #219
350f614 -
feat(tds): enforce coherent orientation as a first-class invariant
- add Level 2 coherent-orientation validation via
is_coherently_oriented()andOrientationViolationdiagnostics - preserve/normalize orientation across flips, cavity/neighbor rebuild paths, periodic quotient reconstruction, and vertex-removal retriangulation
- add orientation coverage in
tests/tds_orientation.rs, document the invariant, and update related docs/doctest examples
- add Level 2 coherent-orientation validation via
-
Use exact arithmetic for orientation predicates #235 #236
a62437f -
feat: use exact arithmetic for orientation predicates #235
Switch to la-stack v0.2.1 with the
exactfeature to obtain provably correct simplex orientation viadet_sign_exact().Orientation predicates:
-
Add
orientation_from_matrix()usingdet_sign_exact()with a finite-entry guard and adaptive-tolerance fallback for non-finite cases -
simplex_orientation()now delegates toorientation_from_matrix(), eliminating manual tolerance comparison
insphere_lifted optimization:
-
Reuse the relative-coordinate block already in the lifted matrix for orientation instead of re-converting all D+1 simplex points
-
Combine the dimension-parity sign and (-1)^D orientation correction into a single simplified formula: det_norm = −det × rel_sign
-
Remove
dimension_is_even,parity_sign, andorient_signvariables
Stack-matrix dispatch cleanup:
- Reduce MAX_STACK_MATRIX_DIM from 18 to 7 (matching tested D≤5 range)
- Replace 19 hand-written match arms with a compact repetition macro
- Add
matrix_zero_like()helper for creating same-sized zero matrices within macro-dispatched blocks without nested dispatch
-
-
Use exact-sign orientation in robust_orientation() #244
2869cfe -
feat: use exact-sign orientation in robust_orientation()
Replace f64 determinant + adaptive tolerance in
robust_orientation()withorientation_from_matrix(), which usesdet_sign_exact()for provably correct sign classification on finite inputs.- Make
orientation_from_matrixpub(crate) so robust_predicates can call it - Remove adaptive_tolerance / manual threshold comparison from robust_orientation()
- Add near-degenerate 2D and 3D tests that exercise the exact-sign path
- Make
-
feat: exact insphere predicates with f64 fast filter
-
Add
insphere_from_matrixhelper in predicates.rs using a 3-stage approach: f64 fast filter → exact Bareiss → f64 fallback -
Update
insphere,insphere_lifted,adaptive_tolerance_insphere, andconditioned_insphereto use exact-sign path -
Remove dead
interpret_insphere_determinantfunction -
Add near-cocircular and near-cospherical exact-sign tests
-
Switch convex hull performance test to FastKernel to avoid 5×5 exact Bareiss on cospherical inputs
-
Document lint suppression preference (
expectoverallow) in docs/dev/rust.md
-
-
Introduce GlobalTopology behavior model adapter #221
e56265b -
refactor(topology): introduce GlobalTopology behavior model adapter
-
add internal
GlobalTopologyModelabstraction and concrete models (euclidean, toroidal, spherical scaffold, hyperbolic scaffold) -
add
GlobalTopologyModelAdapterandGlobalTopology::model()bridge to keepGlobalTopology<D>as the stable public metadata/config surface -
migrate triangulation orientation lifting to model-based behavior calls
-
migrate builder toroidal validation/canonicalization to model-based calls
-
update topology/code-organization docs for metadata-vs-behavior split
-
Changed: Improve global topology model validation and consistency
Enhances periodic cell offset validation by leveraging
supports_periodic_facet_signatures. Introduces robust checks for non-finite coordinates during point canonicalization in toroidal models, preventing invalid states. Refactors theGlobalTopologyModelAdapterto consistently delegate all trait method calls to specific underlying topology model implementations, improving maintainability. Updates error messages for clarity during topology validation. Optimizesperiodic_domainto return a reference, avoiding data copies. Adjusts internal module visibility and re-exportsToroidalConstructionModeto prelude.- refactor: add comprehensive documentation and tests for GlobalTopologyModel
Enhance the global_topology_model module with extensive documentation and unit test coverage:
Documentation improvements:
- Add module-level overview explaining trait abstraction and concrete implementations
- Enhance trait method documentation for periodic_domain() and supports_periodic_facet_signatures()
- Document public methods: ToroidalModel::new(), GlobalTopology::model(), GlobalTopologyModelAdapter::from_global_topology()
Test coverage (41 tests added):
- EuclideanModel: comprehensive trait method coverage
- SphericalModel and HyperbolicModel: scaffolded model behavior
- GlobalTopologyModelAdapter: delegation verification for all trait methods
- Error handling: zero/negative/infinite/NaN periods, non-finite coordinates
- Edge cases: large coordinates, exact periods, zero/large offsets, f32 scalars, 5D
Code quality improvements:
-
Fix nitpick: delegate kind() and allows_boundary() in GlobalTopologyModelAdapter
-
Fix nitpick: add NaN coordinate test for canonicalize_point_in_place
-
Fix nitpick: add finiteness validation to lift_for_orientation with test
-
Apply cargo fmt formatting
-
Fix clippy warnings (float_cmp, suboptimal_flops)
-
Changed: Optimize facet vertex processing and improve periodic facet key determinism
Moves the facet vertex buffer initialization to only execute on the non-periodic path, avoiding unnecessary work for periodic cells and improving efficiency.
Enhances the
periodic_facet_key_from_lifted_verticesfunction to ensure deterministic sorting by considering both the vertex key value and its periodic offset. This prevents inconsistencies when multiple lifted vertices share the same base key. -
-
Make Codacy analysis step continue on error
24a1ad6
Configures the Codacy analysis step in the CI workflow to continue on error. This prevents the entire workflow from failing due to intermittent issues with Codacy's opengrep/semgrep engine, ensuring subsequent steps, like SARIF report uploads, can still execute. This improves CI robustness. This is an internal CI workflow improvement.
- Enhance Codacy CI reliability and performance
b980630
Disables the Semgrep engine within Codacy due to intermittent failures and excessively long runtimes observed in CI. Additionally, adds a timeout to the Codacy analysis step to prevent hung analyzers from consuming the full job timeout, improving overall workflow stability and resource utilization. This is an internal CI/CD change.
- Update MSRV to 1.93.1 and
sysinfodependencya2a42d5
Increment the Minimum Supported Rust Version (MSRV) to 1.93.1
across all project configuration and documentation. This updates
the pinned Rust toolchain, Cargo.toml settings, and clippy.toml
MSRV, ensuring consistency and compatibility. Additionally, the
sysinfo dependency is updated to 0.38.3. This is an internal
maintenance change.
- Improve 3D incremental prefix debug harness
515dade
Refactors the run_incremental_prefix_3d function to use a batch construction
method, aligning it with other large-scale debug tests and simplifying logic.
This enhances initial triangulation robustness and error reporting by capturing
detailed statistics from construction failures.
Adds new environment variables, DELAUNAY_LARGE_DEBUG_PREFIX_MAX_PROBES and
DELAUNAY_LARGE_DEBUG_PREFIX_MAX_RUNTIME_SECS, to control the bisection
process, enabling more efficient and targeted debugging of failure points.
Updates the env_usize helper to correctly parse environment variables
provided in a key=value format, improving test configuration flexibility.
-
Deduplicate D<4 repair fallback and improve diagnostics #232
14ff1b3 -
refactor: deduplicate D<4 repair fallback and improve diagnostics
-
Extract try_d_lt4_global_repair_fallback helper to eliminate duplicated repair-or-abort logic between the stats and non-stats branches of insert_remaining_vertices_seeded.
-
Enrich the soft post-condition diagnostic in normalize_and_promote_positive_orientation with the count of residual negative cells and a sample of up to 5 CellKeys.
-
Add test_construction_options_global_repair_fallback_toggle unit test verifying the without_global_repair_fallback builder toggle.
-
fix: switch default kernel from FastKernel to RobustKernel
-
Change all convenience constructors (new, new_with_topology_guarantee, new_with_options, empty, etc.) to use RobustKernel
-
Change builder build() default to RobustKernel
-
Add RobustKernel to prelude::query exports
-
Update type annotations across tests, benches, and doc tests
-
Preserve FastKernel in tests that explicitly test it via with_kernel()
-
Changed: use RobustKernel for random generation and 3D examples
Update examples and random triangulation utilities to use RobustKernel, aligning them with the core library's default. FastKernel is now explicitly documented as unreliable for 3D workloads due to floating- point precision issues in near-degenerate configurations. This change also adds topological admissibility checks for flip-based repairs and improves error diagnostics for per-insertion failures.
-
-
Update docs for DelaunayTriangulationBuilder and toroidal topology #215
a90526c -
docs: update docs for DelaunayTriangulationBuilder and toroidal topology
Update all documentation to reflect that toroidal topology is fully implemented and accessible via DelaunayTriangulationBuilder.
Documentation updates:
-
docs/topology.md: Replace "future plumbing" language with current implementation status; add complete toroidal triangulation examples
-
docs/api_design.md: Split Builder API section into simple (::new()) vs advanced (Builder) construction with toroidal examples
-
docs/workflows.md: Add new section for toroidal/periodic triangulations with practical examples and construction modes
-
docs/code_organization.md: Update file tree with missing files (invariants.md, workflows.md, tests, geometry/util/ subdirectory)
-
README.md: Add toroidal feature to Builder API section with example
Code updates:
-
src/lib.rs: Export TopologyKind and GlobalTopology from prelude::triangulation for ergonomic imports
-
src/core/delaunay_triangulation.rs: Add "Advanced Configuration" section to ::new() documentation mentioning Builder for toroidal and custom options; fix redundant rustdoc link
-
examples/topology_editing_2d_3d.rs: Migrate to DelaunayTriangulationBuilder
-
benches/profiling_suite.rs: Migrate to DelaunayTriangulationBuilder
-
Changed: Adopt DelaunayTriangulationBuilder and update related documentation
Migrates benchmark and example code to consistently use the DelaunayTriangulationBuilder for creating triangulations. This reflects the full implementation and accessibility of toroidal topology via the builder, and updates documentation across various sections (API design, workflows, topology) to guide users on its proper and advanced configuration. Includes internal exports for ergonomic usage.
-
- Ensure deterministic sorting and enforce coherent orientation
c0e4d4f
Resolves multiple issues to ensure deterministic behavior and strong invariants across the triangulation data structure.
Stabilizes vertex ordering, particularly for Hilbert curve sorts, by refining tie-breaking, error handling, and fallback logic. This prevents non-deterministic results and corrects inverse permutation calculations, addressing previously identified breaking changes related to sorting.
Enforces a consistent positive geometric orientation for all cells throughout the triangulation lifecycle, making coherent orientation a first-class invariant. This fixes 4D construction failures and improves periodic self-neighbor validation by handling lifted coordinates.
Enhances the global topology model, especially for toroidal domains, by improving validation, canonicalization, and periodic facet key derivation. This addresses edge cases related to non-finite coordinates, zero/negative periods, and ensures consistent behavior.
-
Resolve 3D seeded bulk construction orientation convergence failure #228
c181f28 -
Soften post-condition in normalize_and_promote_positive_orientation: add canonicalize_global_orientation_sign before the promote loop to prevent oscillation; demote the residual negative-orientation check from a hard error to a diagnostic log so near-degenerate but structurally valid simplices no longer abort insertion.
-
Replace enlarged local repair fallback with global repair_delaunay_with_flips_k2_k3 when D<4 per-insertion local repair cycles on co-spherical FP configurations. The multi-attempt global repair uses robust predicates and alternate queue orders to break cycling.
-
Gate global repair fallback on a new ConstructionOptions field (use_global_repair_fallback, default true) threaded through the build chain via DelaunayInsertionState. The periodic builder disables it (.without_global_repair_fallback()) so global repair cannot disrupt the image-point topology; the existing 24-attempt shuffle retry finds a working vertex ordering instead.
-
Bumps taiki-e/install-action from 2.67.30 to 2.68.8.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.68.8 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Update docs, remove old files
18679dc
Bumps actions-rust-lang/setup-rust-toolchain from 1.15.2 to 1.15.3.
-
updated-dependencies:
-
dependency-name: actions-rust-lang/setup-rust-toolchain dependency-version: 1.15.3 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump actions/download-artifact from 7.0.0 to 8.0.0 #222
c172f09
Bumps actions/download-artifact from 7.0.0 to 8.0.0.
-
updated-dependencies:
-
dependency-name: actions/download-artifact dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ...
-
Bump taiki-e/install-action from 2.68.8 to 2.68.16 #225
25a09a4
Bumps taiki-e/install-action from 2.68.8 to 2.68.16.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.68.16 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps actions/upload-artifact from 6 to 7.
-
updated-dependencies:
-
dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ...
Bumps astral-sh/setup-uv from 7.3.0 to 7.3.1.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 7.3.1 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump taiki-e/install-action from 2.68.16 to 2.68.25 #237
abe7925
Bumps taiki-e/install-action from 2.68.16 to 2.68.25.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.68.25 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps actions/setup-node from 6.2.0 to 6.3.0.
-
updated-dependencies:
-
dependency-name: actions/setup-node dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ...
-
chore(release): release v0.7.2
-
Bump version to v0.7.2
-
Update changelog with latest changes
-
Update documentation for release
-
Add performance results for v0.7.2
-
Changed: update robustness guide and fix release documentation
Clarify evaluation stages for orientation and insphere predicates, detailing the use of Shewchuk-style error bounds for D ≤ 4. Correct a step reference in the release guide. This is an internal change.
-
-
Improve Hilbert curve correctness and add bulk API #207 #216
2d198e7 -
perf: improve Hilbert curve correctness and add bulk API #207
Implements correctness fixes, API improvements, and comprehensive testing for the Hilbert space-filling curve ordering utilities.
-
Add debug_assert guards in hilbert_index_from_quantized for parameter validation (bits range and overflow checks)
-
Fix quantization truncation bias by changing from NumCast::from(scaled) to scaled.round().to_u32() for fairer spatial distribution across grid cells, improving point ordering quality
-
Add HilbertError enum with InvalidBitsParameter, IndexOverflow, and DimensionTooLarge variants for proper error handling
-
Implement hilbert_indices_prequantized() returning Result<Vec, HilbertError> for bulk processing of pre-quantized coordinates
-
Bulk API avoids redundant quantization computation, significantly improving performance for large insertion batches
-
Add 4D continuity test verifying Hilbert curve property on 256-point grid (bits=2)
-
Add quantization rounding distribution test validating fair cell assignment
-
Add 5 comprehensive tests for prequantized API covering success cases, empty input, and all error conditions
-
All 17 Hilbert-specific tests pass (11 existing + 6 new)
Temporarily ignore repair_fallback_produces_valid_triangulation test as the rounding change affects insertion order, exposing a latent geometric degeneracy issue in triangulation construction. This is properly documented and tracked under issue #204 for investigation.
- Added: Explicitly handle zero-dimensional inputs in Hilbert index calculation
Ensures correct behavior for
hilbert_indices_prequantizedwhen the dimensionalityDis zero. In such a space, all points map to the single origin, and their Hilbert curve index is always 0. This change adds an early return for this specific edge case. -
-
perf: use bulk Hilbert API in order_vertices_hilbert
Refactored
order_vertices_hilbertto use the bulkhilbert_indices_prequantizedAPI instead of callinghilbert_indexindividually for each vertex. This eliminates redundant parameter validation (N validations → 1 validation for N vertices). -
Switch FastKernel to insphere_lifted and enable LTO #234
91e290f -
perf: switch FastKernel to insphere_lifted and enable LTO
Switch FastKernel::in_sphere() to use insphere_lifted() for 5.3x speedup in 3D. Add release profile optimization with thin LTO and codegen-units=1.
Benchmarks across dimensions (2D-5D):
- insphere_lifted is 5.3x faster in 3D (15.5 ns vs 81.7 ns)
- Random query test: 3.75x faster (20.0 µs vs 75.0 µs for 1000 queries)
- insphere_lifted consistently fastest across all dimensions
Performance gains attributed to la-stack v0.2.0's closed-form determinants for D=1-4.
0.7.1 - 2026-02-20
- Release v0.7.1 #205
- Prevents timeout in 4D bulk construction #203
- Bump taiki-e/install-action from 2.67.26 to 2.67.30 #202
- Bump the dependencies group with 3 updates #201
- Feat/ball pointgen and debug harness #200
- Ci/perf baselines by tag #199
- Refactors changelog generation to use git-cliff #198
- Bump astral-sh/setup-uv from 7.2.1 to 7.3.0 #196
- Bump taiki-e/install-action from 2.67.18 to 2.67.26 #195
- Improves flip algorithm with topology index #194
- Removes
CoordinateScalarbound fromCell,Tds,Vertex#193 - Moves
TopologyEdittotriangulation::flips#192 - Correctly wires neighbors after K2 flips #191
- Use borrowed APIs in utility functions #190
- Add ScalarSummable/ScalarAccumulative supertraits #189
- Refactors point access for efficiency (internal) #187
- Corrects kernel parameter passing in triangulation #186
- Examples to error and struct definitions #185
- Validates random triangulations for Euler consistency #184
- Validates ridge links locally after Delaunay repair #183
- Bump astral-sh/setup-uv from 7.2.0 to 7.2.1 #182
- Bump taiki-e/install-action from 2.67.17 to 2.67.18 #181
- Stabilizes Delaunay property tests with bistellar flips #180
- Bump taiki-e/install-action from 2.66.1 to 2.67.11 #177
- Bump actions/checkout from 6.0.1 to 6.0.2 #176
- Bump actions/setup-node from 6.1.0 to 6.2.0 #175
- Feature/bistellar flips #172
-
Added: Examples to error and struct definitions
Adds code examples to various error enums and struct definitions to improve documentation and provide usage guidance.
This change enhances the discoverability and understanding of various components, such as
AdjacencyIndexBuildError,BistellarFlipKind,FlipDirection,FlipError,FlipInfo,TriangleHandle,RidgeHandle,DelaunayRepairStats,RepairQueueOrder,DelaunayRepairDiagnostics,DelaunayRepairError,HullExtensionReason,InsertionError,LocateResult,LocateError,ConflictError,LocateFallbackReason,LocateFallback,LocateStats,CellValidationError,EdgeKey,FacetError,TopologicalOperation,RepairDecision,InsertionResult,InsertionStatistics,TriangulationConstructionState,TdsConstructionError,DelaunayValidationError,DelaunayRepairPolicy,DelaunayRepairHeuristicConfig,DelaunayRepairHeuristicSeeds,DelaunayRepairOutcome,DelaunayCheckPolicy,UuidValidationError,VertexValidationError,ConvexHullValidationError,ConvexHullConstructionError,MatrixError,InSphere,Orientation,QualityError,ConsistencyResult,CoordinateConversionError,CoordinateValidationError,CircumcenterError,SurfaceMeasureError,RandomPointGenerationErrorandValueConversionErrorto make the crate easier to use.- Changed: Improves examples and updates doc tests
Updates doc tests to use clearer examples and more idiomatic syntax, enhancing code readability and maintainability. Modifies BistellarFlipKind to use a getter method. Addresses issues identified during documentation review. (internal)
-
Add ScalarSummable/ScalarAccumulative supertraits #189
abdeeb2 -
feat(geometry): add ScalarSummable/ScalarAccumulative supertraits
- Add ScalarSummable (CoordinateScalar + Sum) and ScalarAccumulative (CoordinateScalar + AddAssign + SubAssign + Sum)
- Refactor repeated scalar bounds across geometry/core modules to use the new supertraits
- Allow “supertrait(s)” in cspell
-
Document geometric and topological invariants
0283bf0
Adds invariants.md to document the theoretical background and
rationale for the topological and geometric invariants enforced by
the delaunay crate. This includes simplicial complexes,
PL-manifolds, link-based validation, insertion strategies, and
convergence considerations. Updates README.md and lib.rs to
reference the new document. Also adds a examples/README.md file.
-
Refactors point access for efficiency (internal) #187
8020065 -
Changed: Refactors point access for efficiency (internal)
Simplifies vertex coordinate access using
.coords()instead of.into(), improving code clarity and potentially performance. This change is internal, affecting predicate calculations and geometric algorithms. Also, moves the issue 120 investigation document to the archive. -
Changed: Use borrowed APIs in utility functions
Updates
into_hashmap,dedup_vertices_exact,dedup_vertices_epsilon, andfilter_vertices_excludingfunctions to accept slices instead of vectors, improving performance by avoiding unnecessary cloning.This aligns with the Rust agent's preference for borrowed APIs, taking references as arguments and returning borrowed views when possible, and only taking ownership when required.
-
Changed: Moves
TopologyEdittotriangulation::flipsMoves the
TopologyEdittrait totriangulation::flipsand renames it toBistellarFlips.This change involves updating imports and references throughout the codebase and documentation to reflect the new location and name of the trait.
- Changed: Refactors prelude modules for clarity (internal)
Streamlines the prelude modules to provide clearer and more focused exports for common triangulation tasks. This change affects import statements in documentation and examples, requiring more specific paths for certain types.
- Removed: Topology validation prelude module
Removes the redundant topology validation prelude module.
Moves its contents into the main topology prelude, simplifying module structure and reducing code duplication. This change internally refactors the prelude modules for better organization.
-
Removes
CoordinateScalarbound fromCell,Tds,Vertex#193e69f3d1 -
Changed: Removes
CoordinateScalarbound fromCell,Tds,VertexRelaxes trait bounds on
Cell,Tds, andVertexstructs by removing theCoordinateScalarrequirement.This change prepares the triangulation data structure for combinatorial operations independent of geometry. The
validatemethod inTdsnow requiresCoordinateScalarto perform coordinate validation, where applicable. (Internal change).- Changed: Clarifies
Vertexconstraints and movespoint
Clarifies the
Vertexstruct's constraints, emphasizingCoordinateScalarrequirement for geometric operations and serialization but allowing combinatorial use without it.Moves the
pointmethod definition to ensure consistent API presentation. (Internal refactoring, no functional change). - Changed: Clarifies
-
Changed: Improves flip algorithm with topology index
Improves flip algorithm by introducing a topology index to efficiently check for duplicate cells and non-manifold facets. This avoids redundant scans of the triangulation data structure, especially during repair operations, by pre-computing and storing facet and cell signatures. This change is internal.
-
Updates typos-cli installation in CI workflow
6168e83
Updates the typos-cli installation in the CI workflow to use the
taiki-e/install-action for simpler and more reliable installation.
This aligns with the switch from cspell to typos in the codebase.
- Refactors changelog generation to use git-cliff #198
63553fa - Ci/perf baselines by tag #199
0c94dec - Feat/ball pointgen and debug harness #200
79bf0e9
-
Refresh docs and add workflows guide
695e9a0 -
Add a new workflows guide covering Builder/Edit API usage, topology guarantees, and repair
- Wire README into doctests and refresh crate-level docs/examples (simplify type annotations, link to workflows)
- Update README Features + references (kernels, insertion ordering, construction options, validation/repair)
- Reorganize docs index and archive historical/roadmap material; refresh topology/robustness/validation guides
- Replace debug
eprintln!withtracingin Hilbert utilities/tests - Tweak spell-check + release docs (typos-cli, rename handling, release steps) and update CHANGELOG
-
Stabilizes Delaunay property tests with bistellar flips #180
e3bd4bf -
Fixed: Stabilizes Delaunay property tests with bistellar flips
Enables previously failing Delaunay property tests by implementing bistellar flips for robust Delaunay repair. Includes automatic repair and fast validation.
Updates MSRV to 1.93.0.
-
Validates ridge links locally after Delaunay repair #183
7bc4792 -
Fixed: Validates ridge links locally after Delaunay repair
Addresses potential topology violations (non-manifold configurations) introduced by flip-based Delaunay repair by validating ridge links for affected cells post-insertion. This prevents committing invalid triangulations and surfaces topology validation failures as insertion errors, enabling transactional rollback.
-
Validates random triangulations for Euler consistency #184
72eb272
Ensures that random triangulations satisfy Euler characteristic validation to prevent construction errors or invalid classifications.
Adds a validation function to check topology/Euler validity after triangulation construction or robust fallback attempts, catching potential issues that can lead to incorrect results. Removes redundant validation checks.
-
Corrects kernel parameter passing in triangulation #186
df3c490 -
Fixed: Corrects kernel parameter passing in triangulation
Addresses an issue where the kernel was being passed by value instead of by reference in the Delaunay triangulation construction. This change ensures that the kernel is correctly accessed and used, preventing potential errors and improving reliability. The fix involves modifying the
with_kernelmethod signatures and call sites to accept a kernel reference instead of a kernel value. This affects benchmark code, documentation, examples, and internal code. -
Fixed: Correctly wires neighbors after K2 flips
Fixes an issue where external neighbors across the cavity boundary were not being correctly rewired after a K2 flip.
Introduces
external_facets_for_boundaryto collect the set of external facets that are shared with the flip cavity boundary, and then uses these to correctly wire up neighbors.Adds a test case to verify that external neighbors are correctly rewired after the flip, ensuring that the triangulation remains valid and consistent. Refs: refactor/wire-cavity-neighbors
- Added: K=3 flip rewiring test
Adds a test to verify correct rewiring of external neighbors after a k=3 flip. This validates the boundary handling and neighbor update logic in the bistellar flip implementation.
This test constructs an explicit k=3 ridge-flip fixture and checks neighbor rewiring.
-
Fixed: Prevents timeout in 4D bulk construction
Addresses a timeout issue in 4D bulk construction by implementing per-insertion local Delaunay repair (soft-fail) during bulk construction to prevent violation accumulation, which slows down the global repair process. Also adds a hard wall-clock time limit to the test harness.
Bumps actions/setup-node from 6.1.0 to 6.2.0.
-
updated-dependencies:
-
dependency-name: actions/setup-node dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor ...
Bumps actions/checkout from 6.0.1 to 6.0.2.
-
updated-dependencies:
-
dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump taiki-e/install-action from 2.66.1 to 2.67.11 #177
92292e0
Bumps taiki-e/install-action from 2.66.1 to 2.67.11.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.67.11 dependency-type: direct:production update-type: version-update:semver-minor ...
Bumps astral-sh/setup-uv from 7.2.0 to 7.2.1.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 7.2.1 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump taiki-e/install-action from 2.67.17 to 2.67.18 #181
068f314
Bumps taiki-e/install-action from 2.67.17 to 2.67.18.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.67.18 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump rand to 0.10 and trim unused deps
fe3e406 -
Update rand to v0.10 and fix RNG trait imports (use rand::RngExt) in tests/utilities
- Move test-only crates to dev-dependencies (approx, serde_json)
- Remove unused runtime dependencies (anyhow, clap, serde_test)
- Drop clippy allow for multiple_crate_versions
- Update Cargo.lock and regenerate CHANGELOG.md
Bumps astral-sh/setup-uv from 7.2.1 to 7.3.0.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 7.3.0 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump taiki-e/install-action from 2.67.18 to 2.67.26 #195
1cd6008
Bumps taiki-e/install-action from 2.67.18 to 2.67.26.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.67.26 dependency-type: direct:production update-type: version-update:semver-patch ...
-
Bump taiki-e/install-action from 2.67.26 to 2.67.30 #202
e99f0d3
Bumps taiki-e/install-action from 2.67.26 to 2.67.30.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.67.30 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps the dependencies group with 3 updates: arc-swap , uuid and sysinfo .
Updates arc-swap from 1.8.1 to 1.8.2
-
Updates
uuidfrom 1.20.0 to 1.21.0 -
Updates
sysinfofrom 0.38.1 to 0.38.2 -
updated-dependencies:
-
dependency-name: arc-swap dependency-version: 1.8.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies
-
dependency-name: uuid dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies
-
dependency-name: sysinfo dependency-version: 0.38.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...
-
chore(release): release v0.7.1
-
Bump version to 0.7.1
-
Update CHANGELOG.md with latest changes
-
Update documentation for release
-
Add performance results for v0.7.1
-
Changed: Updates performance benchmark results (internal)
Updates the performance benchmark results in PERFORMANCE_RESULTS.md based on the latest benchmark run. Also, modifies the benchmark utility script to correctly extract dimension information for performance summaries. This is an internal change to reflect performance improvements.
- Fixed: Correctly parses dimension info in performance summaries
Fixes an issue where parentheses within the dimension information were being incorrectly removed when parsing performance summaries.
Uses
removeprefixandremovesuffixinstead ofstripto avoid accidentally removing internal parentheses in dimension descriptions. -
- Replace cspell with typos for spell checking
4b5e1a1
Replaces the cspell tool with typos for spell checking across the project. This change involves removing cspell configurations and dependencies, and integrating typos, including its configuration file.
0.7.0 - 2026-01-13
- Add public topology traversal API #164
- Refactors topology guarantee and manifold validation #171
- Bump astral-sh/setup-uv from 7.1.6 to 7.2.0 #170
- Bump taiki-e/install-action from 2.65.13 to 2.66.1 #169
- Feature/manifolds #168
- Refactors Gram determinant calculation with LDLT #167
- Bump clap from 4.5.53 to 4.5.54 in the dependencies group #166
- Bump taiki-e/install-action from 2.65.7 to 2.65.13 #165
- Add public topology traversal API #164
-
feat: add public topology traversal API
-
Introduce canonical
EdgeKeyand read-only topology traversal helpers onTriangulation -
Add opt-in
AdjacencyIndexbuilder for faster repeated adjacency queries -
Add integration tests for topology traversal and adjacency index invariants
-
Refresh repo tooling/CI configs and supporting scripts/tests
-
Changed: Exposes public topology traversal API
Makes topology traversal APIs public for external use.
Exposes
edges(),incident_edges(), andcell_neighbors()on theDelaunayTriangulationstruct as convenience wrappers. Updates documentation, examples, and benchmarks to use new API.This allows external users to traverse the triangulation's topology without needing to access internal implementation details.
- Changed: Expose topology query APIs on DelaunayTriangulation
Exposes cell and vertex query APIs on
DelaunayTriangulationfor zero-allocation topology traversal.Also includes internal refactoring to improve vertex incidence validation and ensure more robust handling of invalid key references. Now TDS validation detects isolated vertices.
-
- Updates CHANGELOG.md for unreleased changes
271353f
Updates the changelog to reflect recent changes, including adding a new public topology traversal API, refreshing repository tooling/CI configurations, and clarifying TDS validation and API documentation.
-
Refactors Gram determinant calculation with LDLT #167
561a259 -
Changed: Refactors Gram determinant calculation with LDLT
Refactors the Gram determinant calculation to use LDLT factorization from the
la-stackcrate for improved efficiency and numerical stability by exploiting symmetry.Also, updates the
la-stackdependency version.- Fixed: Improves robustness of incremental insertion
Addresses rare topological invalidations during incremental insertion by:
-
Adding connectedness validation to conflict region checks.
-
Adding codimension-2 boundary manifoldness validation ("no boundary of boundary") to triangulation's
is_validmethod. -
Ensuring that strict Level 3 validation is enabled during batch construction in debug builds. Refs: feat/la-stack-ldlt-factorization
-
Changed: Rename SimplexCounts to FVector for clarity
Renames the
SimplexCountsstruct toFVectorto better reflect its mathematical meaning as the f-vector in topology, representing the counts of simplices of different dimensions.This change improves code readability and aligns the naming convention with standard topological terminology. (Internal refactoring, no API change.)
- Changed: Improves simplex generation algorithm
Improves the algorithm for generating simplex combinations in the Euler characteristic calculation. This change enhances efficiency by using a lexicographic approach to generate combinations, reducing unnecessary computations.
-
Refactors topology guarantee and manifold validation #171
dfdba5a -
Changed: Refactors topology guarantee and manifold validation
Refactors manifold validation mode to topology guarantee for clarity. Updates Level 3 validation configuration, improves error reporting, and adds comprehensive manifold validation tests. Also improves robustness of incremental insertion.
- Changed: Updates topology guarantee defaults and validation
Updates the default topology guarantee to
Pseudomanifoldfor new triangulations and deserialized triangulations. Also, clarifies validation policy and its relationship to topology guarantees in documentation. Introduces a test-only function to repair degenerate cells by removing them and clearing dangling references.- Fixed: Corrects triangulation perturbation logic
Fixes a bug in the vertex insertion perturbation logic that caused non-equivalent results when translating the input point set by using a translation-invariant anchor for perturbation scaling.
Also, preserves the caller-provided vertex UUID across perturbation retries to maintain vertex identity.
Updates documentation on topology guarantees to clarify manifoldness invariants.
- Changed: Improves PL-manifold validation with vertex-link check
Replaces ridge-link validation with vertex-link validation for PL-manifold topology guarantee. This change provides a more robust and canonical check for PL-manifoldness, ensuring that the link of every vertex is a sphere or ball of the appropriate dimension.
Bumps the dependencies group with 1 update: clap.
Updates clap from 4.5.53 to 4.5.54
-
updated-dependencies:
-
dependency-name: clap dependency-version: 4.5.54 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...
-
Bump taiki-e/install-action from 2.65.7 to 2.65.13 #165
6b5f723
Bumps taiki-e/install-action from 2.65.7 to 2.65.13.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.65.13 dependency-type: direct:production update-type: version-update:semver-patch ...
Bumps astral-sh/setup-uv from 7.1.6 to 7.2.0.
-
updated-dependencies:
-
dependency-name: astral-sh/setup-uv dependency-version: 7.2.0 dependency-type: direct:production update-type: version-update:semver-minor ...
-
Bump taiki-e/install-action from 2.65.13 to 2.66.1 #169
44d3add
Bumps taiki-e/install-action from 2.65.13 to 2.66.1.
-
updated-dependencies:
-
dependency-name: taiki-e/install-action dependency-version: 2.66.1 dependency-type: direct:production update-type: version-update:semver-minor ...
Older releases are archived by minor series: