Releases: acgetchell/delaunay
v0.7.8
⚠️ Breaking Changes
- Support periodic flip parity for external cells #391
- Split strict and best-effort insertion statistics #405
- Replace public core module with focused facades #392
- Rename public cell APIs to simplex nomenclature #393
- Flatten triangulation modules into focused APIs #399
- Reconcile topology validation policy #385 #404
- Box Delaunay repair flip errors #407
- Run slow correctness cases through slow-tests #412
Merged Pull Requests
- Validate compact 3D toroidal quotients #417
- Enforce 10-second default test budget #415
- Run slow correctness cases through slow-tests #412
- Isolate strict insphere consistency control #383 #411
- Use typed errors in public examples #365 #410
- Prefer builder-based fallible examples #214 #409
- Box Delaunay repair flip errors #407
- Split strict and best-effort insertion statistics #405
- Reconcile topology validation policy #385 #404
- Localize remove_vertex repair #401
- Bump idna in the uv group across 1 directory #400
- Flatten triangulation modules into focused APIs #399
- Bump codecov/codecov-action from 6.0.0 to 6.0.1 #398
- Bump sysinfo in the dependencies group across 1 directory #397
- Bump taiki-e/install-action from 2.77.5 to 2.79.1 #396
- Surface squash-body commit entries #395
- Replace Node markdown tooling with rumdl #394
- Rename public cell APIs to simplex nomenclature #393
- Replace public core module with focused facades #392
- Support periodic flip parity for external cells #391
- Refactor/387 tds mutation boundaries #390
- Refresh release docs and benchmark guidance #389
Added
-
[breaking] Support periodic flip parity for external cells #391
5fb2d4a- Preserve periodic vertex offsets when bistellar flips build replacement cells.
- Align external-facet parity checks across periodic cell frames instead of rejecting periodic external cells.
- Surface replacement periodic-offset shape and frame conflicts with typed flip-context errors.
-
[breaking] Split strict and best-effort insertion statistics #405
71336b5-
Make insert_with_statistics return typed insertion errors for skipped
duplicate or retry-exhausted vertices so callers using ? cannot silently
ignore skipped inputs. -
Add insert_best_effort_with_statistics for diagnostic and bulk-ingestion
workflows that intentionally preserve skipped insertions as outcomes with
telemetry. -
Derive the default validation policy from the active topology guarantee so
PLManifold starts in ExplicitOnly mode while Pseudomanifold keeps
OnSuspicion. -
Document skipped-input observability across construction, workflows, and
robustness guidance.
-
Changed
-
[breaking] Replace public core module with focused facades #392
655ff4c-
Make
crate::coreprivate and expose low-level APIs through curated
tds,collections,algorithms, andquerymodules. -
Add focused prelude/docs coverage for the new public import paths.
-
Update downstream-style tests and doctests to stop relying on
delaunay::core.
-
-
[breaking] Rename public cell APIs to simplex nomenclature #393
48935d5-
Replace cell-oriented public types, methods, error variants, maps, and diagnostics with simplex terminology across TDS, triangulation, construction, repair,
flips, examples, benches, docs, and tests. -
Preserve typed construction and insertion error context for cavity filling, explicit construction summaries, focused preludes, and Delaunay repair
diagnostics under the simplex API. -
Remove redundant integration tests whose coverage is now exercised by unit, property, and public API tests.
-
Move Codacy SARIF filtering into a tested support script and simplify Cargo package metadata.
-
-
[breaking] Flatten triangulation modules into focused APIs #399
774fd1b-
Move Delaunay-facing APIs from the old triangulation facade to crate-root
modules and focused preludes such as construction, insertion, flips,
repair, validation, and delaunayize. -
Split generic Triangulation behavior into construction, insertion, query,
orientation, repair, and validation modules with colocated tests and errors. -
Keep the broad prelude for exploratory use while making focused preludes
orthogonal and workflow-specific. -
Refresh docs, examples, benchmarks, and API export tests for the new module
layout and 7,500-vertex 3D debug-scale default.
-
-
[breaking] Reconcile topology validation policy #385
#404e5a74a1- Add explicit caller-owned validation mode for PL-manifold topology guarantees.
- Reject incoherent topology guarantee and validation policy pairings through typed fallible setters.
- Keep compatibility setters non-committal when a requested pairing is invalid.
- Derive builder validation policy from the selected topology guarantee and document the compatibility matrix.
-
[breaking] Box Delaunay repair flip errors #407
1789ceb-
Box
DelaunayRepairError::Flipsources while preserving typedFlipError
inspection throughFrom<FlipError>andError::source. -
Update repair and construction mappings for the named boxed variant.
-
Cover clone and source behavior for wrapped linear-algebra errors.
-
-
Isolate strict insphere consistency control #383 #411
222e572-
Document the strict insphere consistency environment knob as a process-wide
once-per-process snapshot. -
Add a thread-local test override guard so strict diagnostic paths can be
exercised without mutating global environment state. -
Mark the production review checklist item complete.
-
-
[breaking] Run slow correctness cases through slow-tests #412
1498153- Define the slow-test bucket around deterministic correctness tests that exceed the default-suite budget.
- Move runnable high-dimensional properties out of ignored tests and into either the default suite or the slow-tests feature.
- Give just test-slow a release-mode nextest profile with a longer watchdog for intentional multi-minute regressions.
- Add a repository Semgrep guard against reintroducing slow ignored tests.
Changed: Enforce explicit test buckets
- Sort correctness tests into default and slow-tests buckets instead of relying on ignored tests.
- Move benchmark-style boundary and UUID iterator measurements into a Criterion benchmark target.
- Replace ignored flaky or known-failure cases with active assertions or slow-tests gating.
- Add a Semgrep guard against reintroducing ignored tests and align docs and helper recipes with the new taxonomy.
- Enforce 10-second default test budget [#41...
v0.7.7: ### ⚠️ Breaking Changes
⚠️ Breaking Changes
- Harden Delaunay invariants and tooling #362
- Harden typed validation and exact predicate APIs #375
- Harden correctness and performance invariants #376
- Preserve topology and public error invariants #363
- Quiet Codacy code scanning noise #356
- Cadence batch repair for large construction #369
Merged Pull Requests
- Stabilize large-scale profiling and construction #377
- Harden correctness and performance invariants #376
- Harden typed validation and exact predicate APIs #375
- Bump urllib3 in the uv group across 1 directory #374
- Bump actions-rust-lang/setup-rust-toolchain #373
- Bump sysinfo in the dependencies group #372
- Bump taiki-e/install-action from 2.76.0 to 2.77.5 #371
- Cadence batch repair for large construction #369
- Cover fallback rebuild and flip roundtrips #368
- Harden SARIF tooling #367
- Repair insertion neighbors locally #335 #366
- Preserve topology and public error invariants #363
- Harden Delaunay invariants and tooling #362
- Bump python-multipart in the uv group across 1 directory #361
- Bump taiki-e/install-action from 2.75.26 to 2.76.0 #360
- Quiet Codacy code scanning noise #356
- Enable repo Semgrep rules for issue #338 #354
- Type repair diagnostics and harden invariants #332 #352
- Harden Python benchmark parsing #351
- Expand profiling benchmarks around public API workflows #349
- Bump taiki-e/install-action from 2.75.18 to 2.75.22 #348
Changed
-
Type repair diagnostics and harden invariants #332 #352
a244053- Replace stringified flip-repair skip samples with typed diagnostic context.
- Make vertex removal transactional across post-removal repair and orientation canonicalization.
- Deprecate DelaunayTriangulation::as_triangulation_mut ahead of removal in v0.8.0.
- Use scale-aware degeneracy checks for low-dimensional simplex and facet measures.
- Add regression and property coverage for rollback behavior, typed diagnostics, and scaled valid measures.
- Tolerate throughput formatting precision in benchmark baseline round-trip tests.
-
[breaking] Harden Delaunay invariants and tooling #362
0c1f477-
Enforce checked Delaunay construction and reconstruction so explicit connectivity, deserialization, and TDS wrapping cannot produce invalid
DelaunayTriangulation values. -
Replace stringly insertion and construction failures with typed, matchable errors, and route topology/TDS failures without production panics.
-
Tighten public API names, trait bounds, prelude exports, docs, and doctests around mutation, reconstruction, construction statistics, and feature-gated
behavior. -
Standardize on DenseSlotMap storage, remove SlotMap backend comparison tooling, and align CI, docs.rs, changelog, benchmark, Semgrep, and release workflows.
-
Harden benchmark comparison parsing so individual regressions and malformed baseline sections fail explicitly.
-
-
Cover fallback rebuild and flip roundtrips #368
aa0de2c- Add dimension-generic flip roundtrip properties for public k=1 and internal k=2/k=3 paths.
- Exercise fallback rebuilds after supported Delaunay repair failures and duplicate-simplex topology failures.
- Cover circumradius agreement between direct and precomputed-center paths.
- Exclude debug-only circumsphere logging branches from LCOV.
-
[breaking] Harden typed validation and exact predicate APIs #375
e187cf0-
Replace stringly validation and repair contexts with typed summaries and failure categories across insertion, flips, TDS, builder, and Delaunay validation
paths. -
Tighten kernel, coordinate, and data trait contracts so exact predicates are dimension-scoped and payload bounds apply only where needed.
-
Split explicit-construction validation into orthogonal typed errors and preserve structured source details through fallback and repair paths.
-
Narrow focused prelude exports, add repository style rules, and document the 10,000-vertex 3D acceptance envelope.
-
-
[breaking] Harden correctness and performance invariants #376
4c6d55e-
Replace scalar-unit duplicate detection with scale-aware tolerances and keep the spatial index usable across rollback-safe insertion and removal paths.
-
Route matrix dispatch, predicate degeneracy, non-finite geometry, and robust insphere overflow through typed errors and exact relative-coordinate
predicates. -
Preserve TDS identity across transactional rollback, run required pseudomanifold validation during insertion, and remove raw cell-storage mutation.
-
Use DoS-resistant hashing for coordinate-derived buckets and gate insertion timing telemetry to callers that consume it.
-
Normalize root and archived changelog markdown through shared post-processing.
-
Simplify validation telemetry, predicate helpers, cache invalidation, and prelude coverage without changing the correctness/performance contracts.
-
Fixed
-
Harden Python benchmark parsing #351
fea5898- Reject non-finite and unordered Criterion timing estimates before using them in summaries, baselines, or backend comparisons.
- Preserve full Criterion benchmark IDs and normalize timing units when comparing storage backend results.
- Reuse the shared baseline parser while preserving malformed-section skip behavior and supporting scientific notation.
- Fall back from unusable lscpu output to /proc CPU core detection on Linux.
- Add regression and round-trip tests for parser behavior, benchmark IDs, unit normalization, and Linux CPU fallback.
- Document Python parser/file-format round-trip test expectations.
Fixed: Harden Criterion estimate parsing and validation
Consolidates estimate validation into a single public helper,
is_valid_criterion_estimate, now used byPerformanceSummaryGenerator
andStorageBackendComparator. Adds explicit type checks to
PerformanceSummaryGeneratorto reject structurally malformed JSON
data, improving parsing robustness. -
[breaking] Preserve topology and public error invariants #363
83d9619-
Make duplicate-cell removal and bistellar flip mutation fail before committing invalid TDS state.
-
Preserve typed topology, validation, and insertion errors through retry and flip-wiring paths.
-
Enforce typed error handling in public examples, benchmarks, and public API integration tests.
-
Rebuild and validate TDS topology after duplicate-cell removal so neighbor and incident-cell links stay consistent.
-
Preserve flip validation, wiring, and repair failure kinds instead of flattening them into coarse mutation errors.
-
Propagate construction failures from examples and route benchmark diagnostics through feature-gated tracing.
-
Clarify public API docs for collection aliases and facet error paths.
Fixed: Make duplicate-cell removal transactional
- Validate duplicate-cell removals on a cloned TDS and commit only after neighbor rebuilding, incident-cell assignment, and full validation succeed.
- Preserve typed construction and mutation errors in examples and doctests, including prelude coverage for TdsMutationError.
- Share feature-gated tracing abort helpers across benchmarks and keep setup error handling out of measured closures.
- Remove committed debug printing from collection tests.
-
Maintenance
v0.7.6
-
Remove ScalarAccumulative and ScalarSummable traits #316
#318 -
Switch coverage reporting to cargo-llvm-cov #345
-
Clarify research scope and changelog hygiene #344
-
Instrument large-scale 4D debugging and widen local repair seeds #339
-
Use dedicated perf profile for consistent benchmark measurement #334
-
Periodic-aware Delaunay verification (Level 4) for toroidal tria… #333
-
Adopt Rust 1.95.0 MSRV #330
-
Bump actions-rust-lang/setup-rust-toolchain #328
-
Bump actions/setup-node from 6.3.0 to 6.4.0 #327
-
Bump taiki-e/install-action from 2.75.9 to 2.75.18 #326
-
Bump astral-sh/setup-uv from 8.0.0 to 8.1.0 #325
-
Bump pytest in the uv group across 1 directory #322
-
Bump taiki-e/install-action from 2.73.0 to 2.75.9 #321
-
Bump actions/github-script from 8.0.0 to 9.0.0 #320
-
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
c81bb1aAdd
.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()when
global_topologyisToroidaland heuristic yieldsClosedSphere -
Add T² (3×3 grid) and T³ (3×3×3 Freudenthal) integration tests
validating χ = 0 via explicit construction
-
-
Instrument large-scale 4D debugging and widen local repair seeds #339
3af976e-
Thread cavity-touched cells through insertion as
repair_seed_cells
so post-insertion local Delaunay repair widens its frontier beyond
the inserted vertex star; cells shrunk out of the conflict region
during cavity reduction now participate in the next repair pass. -
Accumulate ridge-fan extras across every fan in a conflict region
before returningRidgeFan, letting one cavity-reduction step
shrink all detected fans at once instead of peeling them iteration
by iteration. -
Add release-visible diagnostic hooks routed through
tracing::debug!:
DELAUNAY_BULK_PROGRESS_EVERYfor periodic batch-construction
progress,DELAUNAY_DEBUG_RETRYABLE_SKIPfor retryable
conflict-region skip traces,DELAUNAY_DEBUG_CAVITY_REDUCTION_ONCE
for the first cavity-reduction chain,DELAUNAY_DEBUG_RIDGE_FAN_ONCE
for the first detected ridge fan, and
DELAUNAY_REPAIR_DEBUG_POSTCONDITION_FACET/
DELAUNAY_REPAIR_DEBUG_RIDGE_MIN_MULTIPLICITYfor repair
postcondition debugging. -
Thread
last_applied_flipthrough repair postcondition verification
so unresolved k=2 facet and ridge snapshots can relate the violating
local star to the immediately preceding flip. -
Replace
ConflictError::InternalInconsistency { context: String }
with a typedInternalInconsistencySiteenum carrying structured
indices and counts, so callers canmatches!on specific sites
instead of parsing prose. -
Generalize the large-scale incremental prefix bisect over
const D,
add a 4D counterpart targeting the seeded 500-point repro
(0xD225_B8A0_7E27_4AE6), and expose it via
just debug-large-scale-4d-incremental-bisect. -
Switch the large-scale debug just recipes to
--releaseand
document the 2026-04-23 re-verification: historical 35-point 3D and
100-point 4D correctness repros from #306/#307 now pass, while a
500-point 4D seed still fails all shuffled retries with
Ridge fan detected: 4 facets share ridge with 3 vertices. -
Default the large-scale debug harness tracing filter to
debugwhen
any of the new release-visible env vars are present so library-side
tracing::debug!events surface without extraRUST_LOGwiring. -
Broaden
test_perturbation_retry_and_exhaustion_4dand
test_perturbation_retry_seeded_branch_4dto iterate over 50 seeds
so the retry-path assertions stay robust to insertion-path
improvements that make individual well-conditioned seeds less likely
to trigger retries.
Fixed: Close the 4D bulk repair retry collapse
- Raise the D≥4 per-insertion repair budget, add a rate-limited escalation pass, and widen local post-repair validation so the 500-point #204 repro converges
without skipped vertices. - Preserve removed-cell snapshots and predecessor context in flip diagnostics, drop stale repair seeds after cavity reduction, and re-export locate conflict
diagnostics from the prelude. - Replace committed
eprintln!diagnostics in production, tests, and benches withtracing, usingtest-debugandbench-logginggates and keeping logs
out of Criterion hot loops. - Document the #204 investigation, refresh the 4D known-issues and TODO notes, and record the repository logging policy plus release-visible debug environment
variables.
Changed: Harden flip diagnostics and refine large-scale debug workflows
Refactor flip snapshotting and cavity-reduction bookkeeping to ensure
diagnostic reliability and accurate repair-seed collection. Update
documentation and justfile recipes to reflect fixed historical repros
and transition to monitoring active scalability investigations for 3D,
4D, and 5D datasets.- Move removed-cell vertex capturing into fallible internal helpers
- Implement lazy evaluation for cavity-reduction diagnostic logs
- Harden vertex deduplication with fallible epsilon validation
- Update 4D known issues to reflect 100-point and 500-point fixes
- Simplify the large-scale debug harness CLI and documentation
-
-
Rename tds file and move delaunay/builder into triangulation/ #317
25faa5b-
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
#318c612188Changed: 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)
-
Update dependencies and synchronize changelog (internal)
7a1066b
Perform a general dependency update, i...
v0.7.5
-
Change remove_vertex to accept VertexKey instead of &Vertex #300
-
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
-
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
#301458ebae -
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, and
IncompatibleTopologyvariants -
Wire
ExplicitConstructionvariant into
DelaunayTriangulationConstructionError -
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 KNOWN_ISSUES_4D.md with #204 debug run findings
87d3054 -
3D: minimal failing prefix is 35 vertices (previously ~130+)
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](https://github.com/acget...
v0.7.4
-
Tighten Vertex::data and Cell::data to pub(crate) #289
-
Generalize DelaunayTriangulationBuilder::new() over U #287
#290 -
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
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
TriangulationandDelaunayTriangulation
that 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_datatoTdsaccepting
Option<U>/Option<V>for setting or clearing auxiliary data
in O(1) without affecting geometry or topology -
Add convenience wrappers on
TriangulationandDelaunayTriangulation
that 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 onVertexand
const 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
#2907694a3e -
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
-
-
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
-
v0.7.3
-
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 -
Replace custom changelog pipeline with git-cliff #247
-
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 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
-
Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
-
Canonicalize positive orientation after bulk construction repair… #261
-
Remove use_robust_on_ambiguous override from flip repair #228
#255 -
Add SoS module for deterministic degeneracy resolution #233
#251 -
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
#2516ed6f88 -
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
#255faf84de -
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 identica...
-
v0.7.2
-
**Non-deterministic tie-breaking**: The sort compared only quantized values without
4782905 -
Sorting by (quantized_values, original_index) for stable tie-breaking
4782905 -
Deterministic: order_vertices_lexicographic provides stable tie-breaking
4782905 -
Changed: Update MSRV to 1.93.1 and
sysinfodependencya2a42d5 -
feat: exact insphere predicates with f64 fast filter
#245 -
feat: use exact-sign orientation in robust_orientation()
#244 -
feat: use exact arithmetic for orientation predicates (#235)
#236 -
perf: switch FastKernel to insphere_lifted and enable LTO
#234 -
refactor: deduplicate D<4 repair fallback and improve diagnostics
#232 -
fix: resolve 3D seeded bulk construction orientation convergence failure
#228 -
refactor(topology): introduce GlobalTopology behavior model adapter
#221 -
feat(tds): enforce coherent orientation as a first-class invariant
#219 -
perf: use bulk Hilbert API in order_vertices_hilbert
#218 -
perf: improve Hilbert curve correctness and add bulk API (#207)
#216 -
docs: update docs for DelaunayTriangulationBuilder and toroidal topology
#215 -
Feat/210 toroidalspace periodic
#213 -
Add `insphere_from_matrix` helper in predicates.rs using a 3-stage
fed429fapproach: f64 fast filter → exact Bareiss → f64 fallback
-
Add near-cocircular and near-cospherical exact-sign tests
fed429f -
Add near-degenerate 2D and 3D tests that exercise the exact-sign path
2869cfeCloses #241
-
Add `matrix_zero_like()` helper for creating same-sized zero matrices
a62437f- Tests
- Add orientation_from_matrix unit tests (positive, negative, degenerate,
- Add near-degenerate exact orientation tests for 2D and 3D (2^-50
- Add truly-degenerate tests (collinear 2D, coplanar 3D)
- Other
- Add `orientation_from_matrix()` using `det_sign_exact()` with a
- Tests
-
docs(predicates): add robustness caveats and parity branch tests
91e290f- Tests
- Add test_insphere_lifted_parity_branch_positive_orientation
- Add test_insphere_lifted_parity_branch_negative_orientation
- Other
- Cargo.toml: Add [profile.release] with lto="thin" and codegen-units=1
- Add performance sections to insphere(), insphere_distance(), and insphere_lifted()
- Add robustness caveat to insphere_distance() recommendation (lines 192-196)
- Add robustness caveat to insphere() performance section (lines 297-302)
- Add new "Robustness" section to insphere_lifted() docs (lines 500-505)
- Tests
-
Add test_construction_options_global_repair_fallback_toggle unit
14ff1b3test verifying the without_global_repair_fallback builder toggle.
-
Add RobustKernel to prelude::query exports
14ff1b3 -
Add make_robust_kernel() factory in triangulation_generation.rs that
14ff1b3uses degenerate_robust config preset; replace all direct RobustKernel::new()
calls to ensure consistent predicate configuration across code paths -
docs: add comprehensive tests and documentation for topology model infrastructure
e56265b- API
- Add module-level overview explaining trait abstraction and concrete implementations
- Tests
- Fix nitpick: add NaN coordinate test for canonicalize_point_in_place
- Fix nitpick: add finiteness validation to lift_for_orientation with test
- Add 25 new tests for global_topology_model.rs (53 total):
- Add 15 new tests for builder.rs (28 total):
- Added: Comprehensive error handling tests for topology-aware operations
- Other
- add internal `GlobalTopologyModel` abstraction and concrete models
- add `GlobalTopologyModelAdapter` and `GlobalTopology::model()` bridge to keep
- Add comprehensive doc comments for validate_topology_model
- Add comprehensive doc comments for canonicalize_vertices
- API
-
add orientation coverage in `tests/tds_orientation.rs`, document the invariant, and update related docs/doctest examples
350f614- Behavior
- Adds debug assertions and robust validation steps in critical mutation paths,
- Tests
- Added: Add property-based tests for coherent orientation invariants
- Added: Nextest CI timeout override for delaunay builder test
- Other
- add Level 2 coherent-orientation validation via `is_coherently_oriented()` and `OrientationViolation` diagnostics
- Behavior
-
perf: improve Hilbert curve correctness and add bulk API (#207)
2d198e7- API
- Add HilbertError enum with InvalidBitsParameter, IndexOverflow, and
- Behavior
- Add debug_assert guards in hilbert_index_from_quantized for parameter
- Tests
- Add 4D continuity test verifying Hilbert curve property on 256-point
- Add quantization rounding distribution test validating fair cell
- Add 5 comprehensive tests for prequantized API covering success cases,
- Added: Configure nextest for JUnit test reporting in CI
- Other
- Implement hilbert_indices_prequantized() returning Result<Vec,
- Added: Explicitly handle zero-dimensional inputs in Hilbert index calculation
- API
-
docs/workflows.md: Add new section for toroidal/periodic triangulations
a90526cwith practical examples and construction modes
-
README.md: Add toroidal feature to Builder API section with example
a90526cCode updates:
-
src/core/delaunay_triangulation.rs: Add "Advanced Configuration"
a90526csection to ::new() documentation mentioning Builder for toroidal
and custom options; fix redundant rustdoc link -
Adds `coverage_count` as a primary metric for selecting quotient cells
c172796- Tests
- Added: Toroidal periodic 2D smoke test and robust insphere error type
- Other
- Added: DelaunayTriangulationBuilder for flexible construction
- Added: Phase 2 periodic triangulation builder
- Added: Implements periodic Delaunay triangulation construction
- Introduces a third local refinement pass in quotient selection to find
- Added: Introduce runtime global topology tracking for triangulations
- Tests
-
feat: exact insphere predicates with f64 fast filter
fed429f -
Update `insphere`, `insphere_lifted`, `adaptive_tolerance_insphere`,
fed429fand
conditioned_insphereto use exact-sign path -
Switch convex hull performance test to FastKernel to avoid 5×5
fed429fexact Bareiss on cospherical inputs
-
Document lint suppression preference (`expect` over `allow`) in
fed429fdocs/dev/rust.md
Closes #240
-
Changed: simplify robust insphere logic and optimize test suites
fed429fRemove the redundant matrix conditioning stage from robust_insphere
now that exact-sign arithmetic is used for ill-conditioned cases.
Update test datasets in the convex hull module to be near-cospherical
rather than exactly cospherical, ensuring the fast filter handles most
queries and prevents CI timeouts from expensive exact predicates on
large degenerate sets. This is an internal change. -
Changed: refine exact predicate fallbacks and optimize matrix reuse
fed429fUpdate internal predicate helpers to return boundary states for
non-finite inputs and optimizeinsphere_liftedby deriving
orientation from the insphere matrix. Inrobust_insphere, treat
exact-sign results as authoritative for finite inputs and reject
invalid tolerances early. This is an internal change. -
Changed: correct matrix norm description in predicate comments
fed429fUpdate documentation in insphere and orientation predicates to clarify
that adaptive_tolerance scales by the matrix infinity norm rather than
the Frobenius norm. This is an internal change. -
Changed: enforce dimension equality in matrix predicates
fed429fAdd debug asser...
v0.7.1
-
Changed: Updates MSRV to 1.93.0 and project dependencies
e3bd4bf -
Fixed: Prevents timeout in 4D bulk construction
#203 -
Feat/ball pointgen and debug harness
#200 -
Ci/perf baselines by tag
#199 -
Refactors changelog generation to use git-cliff
#198 -
Changed: Improves flip algorithm with topology index
#194 -
Changed: Removes
CoordinateScalarbound fromCell,Tds,Vertex#193 -
Changed: Moves
TopologyEdittotriangulation::flips#192 -
Fixed: Correctly wires neighbors after K2 flips
#191 -
Changed: Use borrowed APIs in utility functions
#190 -
feat(geometry): add ScalarSummable/ScalarAccumulative supertraits
#189 -
Changed: Refactors point access for efficiency (internal)
#187 -
Fixed: Corrects kernel parameter passing in triangulation
#186 -
Added: Examples to error and struct definitions
#185 -
Fixed: Validates random triangulations for Euler consistency
#184 -
Fixed: Validates ridge links locally after Delaunay repair
#183 -
Fixed: Stabilizes Delaunay property tests with bistellar flips
#180 -
Feature/bistellar flips
#172 -
chore: add CI fixes and document known 4D bulk construction issues
b071fb7- Tests
- Implementing per-insertion local Delaunay repair in debug/test
- Adding a wall-clock timeout to tests, aborting if exceeded to
- Add `gen_is_connected` proptest (2D/3D normal, 4D/5D `#[ignore]`) asserting
- Other
- Re-enable per-insertion local Delaunay repair for D≥4 in
- Add `if D >= 4 { continue; }` guard in both inverse postcondition checks to
- Add `both_positive_artifact` filter in `is_delaunay_property_only` for D≥4:
- Add `Tds::is_connected()` BFS over neighbor pointers and
- Add docs/KNOWN_ISSUES_4D.md documenting large-scale limitations
- Tests
-
Added: Debug harness and uniform ball point generation
79bf0e9Adds a large-scale triangulation debug harness for manual testing of
various dimensions and point counts, including deterministic point
generation and insertion order shuffling.Also introduces uniform point generation within a D-dimensional ball,
using rejection sampling for even distribution. This provides more
realistic point distributions for higher-dimensional tests. -
Added: Large-scale debug harness for Delaunay repairs
79bf0e9Adds a large-scale debugging harness for the Delaunay
triangulation repair algorithm, enabling more robust
testing and diagnostics, including incremental bisect.Includes recipes for running debug harnesses with 3D/4D
point clouds with controllable point counts.Sets up tracing and diagnostics, exposing new env vars for
controlling logging, max flips, and debug output verbosity.The harness is meant to be ignored by default and only run
manually. -
Added: Tag-based performance baselines via GitHub Actions
0c94decImplements automated performance baselines generated on version tags
(vX.Y.Z) as GitHub Actions artifacts, replacing local baselines.
Addsgenerate-baseline.ymlto create baselines on tag push/workflow
dispatch.
The benchmark workflow compares against the latest semver tag artifact.Includes
benchmark-utils compare-tagsto compare any two tags,
andfetch-baselineto get specific tag baselines. -
Add a defensive debug log when commit bodies contain an unclosed ``` fence.
63553fa -
Add regression tests for equals-in-prose, assignment lines, and unclosed-fence logging.
63553fa -
Added: K=3 flip rewiring test
5ab686cAdds 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. -
feat(geometry): add ScalarSummable/ScalarAccumulative supertraits
abdeeb2 -
Add ScalarSummable (CoordinateScalar + Sum) and ScalarAccumulative (CoordinateScalar + AddAssign + SubAssign + Sum)
abdeeb2 -
Added: Examples to topology editing functions
8020065Adds example usages to the
flip_k1_insert,flip_k1_remove,
andflip_k2functions to demonstrate their use and expected
behavior. Also adds an example for theflip_k3function.
These examples enhance understanding and usability. -
Added: Examples to error and struct definitions
a1bce55Adds 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 asAdjacencyIndexBuildError,
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,RandomPointGenerationErrorand
ValueConversionErrorto make the crate easier to use. -
Adds tests for Delaunay validation and handles empty triangulations correctly.
66c7028- API
- Added: Two-track API design documentation and example
- Behavior
- Adding more debugging information.
- Adds more detailed error messages for debugging failures
- Adds a bench-logging feature to conditionally enable additional error logging
- Other
- Added: Bistellar flips and repair for Delaunay
- Adds: Bistellar flip algorithms for triangulation
- Added: Bistellar flips for Delaunay repair and editing
- Added: Implements bistellar flips for Delaunay repair
- Added: Insertion order strategies for bulk construction
- Adding cycle detection during flips to prevent infinite loops.
- Introducing robust kernel usage as a fallback.
- API
-
Added: Document geometric and topological invariants
0283bf0Adds
invariants.mdto document the theoretical background and
rationale for the topological and geometric invariants enforced by
thedelaunaycrate. This includes simplicial complexes,
PL-manifolds, link-based validation, insertion strategies, and
convergence considerations. UpdatesREADME.mdandlib.rsto
reference the new document. Also adds aexamples/README.mdfile. -
docs: 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
-
Adjusting the flip budget multiplier and minimum for
b071fb7per-insertion repair based on dimension, balancing repair quality
and construction speed. -
Modifying cavity boundary resolution to avoid immediate star-split
b071fb7fallbacks, retrying with perturbed vertices instead.
-
`finalize_bulk_construction` called `repair_delaunay_with_flips_k2_k3` [
b071fb7](https://github.com/acgetchell/delaunay/...
v0.7.0
-
Feature/manifolds
#168 -
Changed: Refactors Gram determinant calculation with LDLT
#167 -
feat: add public topology traversal API
#164 -
Added: Topology-only manifold validation module
10abbe1Introduces a new module for topology-only manifold validation,
independent of geometry and Delaunay predicates. This includes
functions for validating facet degree and closed boundary
conditions, enhancing triangulation validation. -
Added: PL-manifold validation mode to triangulation
10abbe1Introduces a
ManifoldValidationModeto control Level 3 topology
validation, enabling stricter PL-manifold invariants (ridge-link
validation) in addition to pseudomanifold checks. This allows users
to opt into stronger topological guarantees. Adds associated methods
to set and get manifold validation mode. Adds internal helpers for
computing ridge stars and links and validating link graphs. Adds
comprehensive unit tests. -
Adding connectedness validation to conflict region checks.
561a259 -
Adding codimension-2 boundary manifoldness validation
561a259("no boundary of boundary") to triangulation's `is_valid` method. -
Ensuring that strict Level 3 validation is enabled during
561a259batch construction in debug builds. -
feat: add public topology traversal API
3748ebb- API
- Added: Expose public topology traversal API
- Tests
- Add integration tests for topology traversal and adjacency index invariants
- Other
- Introduce canonical `EdgeKey` and read-only topology traversal helpers on `Triangulation`
- Add opt-in `AdjacencyIndex` builder for faster repeated adjacency queries
- API
-
Changed: Refactors manifold validation mode to topology guarantee
10abbe1Renames
ManifoldValidationModetoTopologyGuaranteefor clarity.Updates Level 3 validation configuration and documentation to
reflect the change. The purpose is to clarify that this setting
controls the level of topological guarantees provided, rather than
just a validation mode. -
Changed: Refactors and adds manifold validation tests
10abbe1Refactors internal neighbor buffer initialization for potential
future use. Adds comprehensive tests for manifold validation
logic, including constructors, and ridge link conditions,
ensuring robust topology guarantees. -
Changed: Refactors Gram determinant calculation with LDLT
561a259Refactors 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. -
Changed: Rename SimplexCounts to FVector for clarity
561a259Renames 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
561a259Improves 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. -
Changed: Improve simplex generation by pre-sorting vertex keys
561a259Speeds up simplex generation within Euler characteristic calculation by
pre-sorting vertex keys for cells and facets. This eliminates
per-combination sorting during simplex insertion, as combinations are
generated in sorted order from sorted input. Adds a test case for
insert_simplices_of_size. -
Changed: Updates serde_json dependency to v1.0.149
561a259Updates the serde_json dependency from v1.0.148 to v1.0.149.
Also, fixes a bug in the
insert_simplices_of_sizefunction in
euler.rs, where the loop condition was incorrect, causing
potential issues when generating combinations.Adds tests for classifying a closed 2D surface (sphere) and counting
boundary simplices to verify correct topological classification and
boundary detection. -
Refresh repo tooling/CI configs and supporting scripts/tests
3748ebb -
Changed: Exposes public topology traversal API
3748ebbMakes topology traversal APIs public for external use.
Exposes
edges(),incident_edges(), andcell_neighbors()on the
DelaunayTriangulationstruct 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
3748ebbExposes 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. -
refactor: rename DelaunayTriangulation triangulation accessors
3748ebb -
Rename DelaunayTriangulation::{triangulation, triangulation_mut} -> {as_triangulation, as_triangulation_mut}
3748ebb -
Update all in-tree call sites (core, geometry, tests, docs, examples, benches) to use the new names
3748ebb -
Refresh validation/docs snippets to match the new API
3748ebbBREAKING CHANGE: DelaunayTriangulation::triangulation() is now as_triangulation(); triangulation_mut() is now as_triangulation_mut().
-
Changed: Clarifies TDS validation and API docs
3748ebbUpdates documentation to clarify isolated vertex handling during
triangulation data structure (TDS) validation levels.Also enhances API documentation for the public topology API.
Changed descriptions for better user understanding. -
Changed: Updates CHANGELOG.md for unreleased changes
271353f -
Fixed: Improves manifold validation and error reporting
10abbe1Addresses several issues in manifold validation, including facet
multiplicity checks, boundary facet handling, and ridge link
validation.Improves error reporting by including facet keys in error messages
for easier debugging. Also resets the topology guarantee to
Pseudomanifoldwhen constructing fromfrom_tds. Adds
deduplication of parallel edges to increase robustness against
corrupted data. -
Fixed: Improves robustness of incremental insertion
561a259Addresses rare topological invalidations during incremental
insertion by:
v0.6.2
-
Refactor/validation hierarchy
#157 -
Add deterministic unit tests covering core error branches (Cell/TDS/util/incremental insertion), incl. overflow, missing keys, non-manifold cases, and
c23cefb- API
- Introduce topology-layer `TriangulationValidationError` with structured manifold + Euler variants
- Other
- Add `DelaunayTriangulationValidationError` and update `DelaunayTriangulation::{is_valid, validate}` signatures
- Introduce layered construction errors: TdsConstructionError, TriangulationConstructionError, DelaunayTriangulationConstructionError
- API
-
refactor(validation): reduce public validation API to canonical layer methods
c23cefb -
Make focused invariant validators internal; keep only `is_valid`/`validate` as the public entry points (plus
`DelaunayTriangulation::validation_report` for cumulative diagnostics).
-
refactor: split validation errors by layer (TDS/topology/Delaunay)
c23cefb -
Rename TDS validation error to `TdsValidationError` and update call sites across core/geometry
c23cefb -
refactor: layer construction errors (TDS/Triangulation/Delaunay)
c23cefb -
Update DelaunayTriangulation constructors and insertion plumbing to propagate layered errors consistently
c23cefb -
Refresh docs to match current validation hierarchy + error layering; mark superseded topology integration notes as historical
c23cefb -
Changed: Refactors validation error hierarchy internally
c23cefbConsolidates and standardizes the validation error types
within the triangulation data structure (TDS) to improve
internal error handling and consistency. Replaces
TriangulationValidationErrorwithTdsValidationError
where appropriate, streamlining the error reporting
across the library. Updates error propagation to maintain
semantic accuracy. -
refactor: clarify validation hierarchy and expand core test coverage
c23cefb -
Make validation layering explicit (elements → TDS structure → topology) and expose a cumulative validation_report API
c23cefb -
Preserve underlying layer errors in TriangulationValidationReport; update docs/examples accordingly
c23cefb -
Clarify facet-cache error semantics and plumb source errors through convex-hull boundary facet extraction
c23cefb -
Changed: Refactors triangulation validation for clarity
c23cefbRefactors triangulation validation in
DelaunayTriangulation
to improve clarity and correctness. It streamlines the
validation process, reusing the lower-layer report more
effectively and ensuring that Delaunay property violations
are handled correctly.The
TdsValidationErrorenum is also updated and a
TdsMutationErroralias is created to provide clearer
semantics for mutation operations.A deprecated function
is_delaunayis updated to reference
DelaunayTriangulation::is_valid()and
DelaunayTriangulation::validate()methods.Finally, the 3D insertion order robustness property test is
specialized to avoid nearly-coplanar tetrahedra and
co-spherical 5-tuples, focusing on pure insertion-order
robustness. -
Changed: Improves robustness of triangulation insertion
c23cefbEnhances triangulation insertion robustness by adding
connectedness validation and preventing empty conflict
regions. It also introduces star-split fallback for
topology preservation and refactors boundary handling.
These changes ensure a more reliable triangulation
process. -
Changed: Refactors TDS validation and mutation errors
c23cefbRefactors the
TdsValidationErrorandTdsMutationErrortypes to
improve clarity and future extensibility. Introduces a wrapper
struct forTdsMutationErrorto allow for independent evolution
while maintaining API compatibility. Also improves the error
handling during triangulation construction and modification. -
perf: Adjust global validation checks
c23cefbNow that we have a validation hierarchy, we want to run expensive global checks, which are often O(N*D^2), only when we have a suspicion that something has
gone wrong. Like CGAL, we want to rely on local checks and only call is_valid() when necessary. So, introduce a ValidationPolicy with SuspicionFlags. Then we
only call expensive checks when insertions wander off the happy path, or if the caller decides they want different guarantees (e.g. Never, Always, DebugOnly).Also fix a bunch of other fixes related to code reviews.
-
Changed: Enhances topology validation and repair
c23cefbRefactors topology validation to include connectedness checks
and provides more robust error reporting. Introduces automatic
validation policies for incremental insertions, balancing
performance and safety. Improves neighbor pointer repair
logic and adds validation against neighbor cycles.These changes aim to improve the reliability of the triangulation
process by ensuring a valid topology and reducing the likelihood
of disconnected components and non-manifold facets.
(Internal change: improves validation and repair logic) -
Changed: Enhances triangulation validation and testing
c23cefbUpdates the triangulation validation process to use the
validate()method, providing more comprehensive checks
(Levels 1-4).Also improves proptest to avoid pathological cases with
duplicate coordinates or points on a coordinate hyperplane,
leading to more robust and reliable tests. (Internal) -
Changed: Improves error reporting with cell UUIDs
c23cefbEnhances error reporting in Delaunay triangulation validation by
including cell UUIDs in error messages. This allows for better
debugging and log correlation when issues arise during
validation. Introduces a helper function to avoid repetition. -
Changed: Removes unused imports in tests (internal)
c23cefbRemoves unused imports from several test modules to improve
code cleanliness and reduce potential confusion. This change
is internal and does not affect the functionality of the code. -
Adjust tests/proptests/benches to validate at the appropriate layer (e.g., Level 1–2 during bootstrap, Level 1–3 for topology) and avoid deprecated
helpers.
-
Removed: Deprecates global facet sharing fix
c23cefbRemoves the deprecated
fix_invalid_facet_sharingmethods from both
DelaunayTriangulationandTriangulation.These methods performed a global O(N·D) scan and have been superseded
by the more efficient localized O(k·D)
detect_local_facet_issues+repair_local_facet_issuesflow.This change encourages the use of the localized repair approach, which
is more performant for incremental updates to the triangulation. -
Update docs/README and examples/benches to reflect the 4-level validation hierarchy and correct per-layer semantics.
c23cefb -
Fix commit-check/clippy issues (missing `# Errors` docs, similar-name locals, deprecated `is_delaunay`, private API usage in benches).
c23cefb -
Update insertion/boundary/facet plumbing to use the correct layer error types
c23cefb -
Fix rustdoc links and cspell/markdownlint fallout from the refactor
c23cefb -
Fix geometry helpers/tests to match wrapped construction error variants
c23cefb -
Fixed: Improve TDS validation and Delaunay error handling
c23cefbImproves triangulation data structure (TDS) validation by adding a
check for missing vertex keys in cells, preventing inconsistent state
and improving error diagnostics.Enhances Delaunay validation to include cell keys in error messages,
aiding debugging.These changes improve the overall robustness and diagnosability of
the triangulation process. -
Fixed: Correctly classify cavity boundary facets
c23cefbClassifies cavity boundary facets by facet incidence within the
conflict region, ensuring accurate boundary detection during
incremental updates.This avoids misclassification due to temporarily incomplete neighbor
pointers, preventing internal boundary components and Euler/topology
validation failures.Also adds debug-only safety net to retry cavity-based insertions
with a conservative fallback (star-split) if Level 3 topology
validation fails. This ensures robus...