Skip to content

Releases: acgetchell/delaunay

v0.7.8

21 May 22:27
Immutable release. Only release title and notes can be modified.
8a9cbf3

Choose a tag to compare

⚠️ 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

  • Refactor/387 tds mutation boundaries #390
    da30293

  • [breaking] Replace public core module with focused facades #392
    655ff4c

    • Make crate::core private and expose low-level APIs through curated
      tds, collections, algorithms, and query modules.

    • 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
    #404 e5a74a1

    • 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::Flip sources while preserving typed FlipError
      inspection through From<FlipError> and Error::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...
Read more

v0.7.7: ### ⚠️ Breaking Changes

15 May 17:36
Immutable release. Only release title and notes can be modified.
2ca6d87

Choose a tag to compare

⚠️ 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 by PerformanceSummaryGenerator
    and StorageBackendComparator. Adds explicit type checks to
    PerformanceSummaryGenerator to 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

  • Bump taiki-e/install-action from 2.75.18 to 2.75.22 #348
    [31ec720](31ec72...
Read more

v0.7.6

25 Apr 15:54
Immutable release. Only release title and notes can be modified.
6e437fb

Choose a tag to compare

  • Remove ScalarAccumulative and ScalarSummable traits #316
    #318

  • Preserve fallback rebuild cell data #305 #346

  • 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

  • Orient Delaunay repair replacement cells #307 #336

  • 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
    c81bb1a

    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::Explicit variant for explicit builds

    • Add TopologyClassification::ClosedToroid(D) with χ(T^d) = 0

    • Add global_topology field and setter to DelaunayTriangulationBuilder

    • Thread GlobalTopology through build_explicit(), set before validation

    • Override Euler classification in validate_topology_core() when
      global_topology is Toroidal and heuristic yields ClosedSphere

    • 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 returning RidgeFan, 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_EVERY for periodic batch-construction
      progress, DELAUNAY_DEBUG_RETRYABLE_SKIP for 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_MULTIPLICITY for repair
      postcondition debugging.

    • Thread last_applied_flip through 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 typed InternalInconsistencySite enum carrying structured
      indices and counts, so callers can matches! 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 --release and
      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 debug when
      any of the new release-visible env vars are present so library-side
      tracing::debug! events surface without extra RUST_LOG wiring.

    • Broaden test_perturbation_retry_and_exhaustion_4d and
      test_perturbation_retry_seeded_branch_4d to 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 with tracing , using test-debug and bench-logging gates 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
    #318 c612188

    Changed: 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...

Read more

v0.7.5

10 Apr 00:09
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

  • 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

  • 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_cells for
      combinatorial construction bypassing Delaunay insertion

    • Add build_explicit path that constructs a TDS directly from given
      vertices and cell index lists, with adjacency and orientation repair

    • Define ExplicitConstructionError enum with IndexOutOfBounds,
      InvalidCellArity, DuplicateVertexInCell, EmptyCells, and
      IncompatibleTopology variants

    • Wire ExplicitConstruction variant into
      DelaunayTriangulationConstructionError

    • Expose assign_neighbors as pub(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.

  • Add MVP delaunayize-by-flips workflow #227 #303
    0370070

  • feat: add MVP delaunayize-by-flips workflow #227

    Add a public delaunayize_by_flips entrypoint 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_oversharing to 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+)

    • 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
  • Bump pygments from 2.19.2 to 2.20.0 #298
    6228a59

Bumps pygments from 2.19.2 to 2.20.0.

Bumps the dependencies group with 3 updates: rustc-hash , ordered-float
and uuid .

Updates rustc-hash from 2.1.1 to 2.1.2

  • Changelog

  • Commits

    Updates ordered-float from 5.2.0 to 5.3.0

  • Release notes

  • Commits

    Updates uuid from 1.22.0 to 1.23.0

  • Release notes

  • Commits


    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...

Read more

v0.7.4

27 Mar 00:20
Immutable release. Only release title and notes can be modified.
bee1b04

Choose a tag to compare

  • 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

  • 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_data and set_cell_data to Tds for O(1) mutation
      of auxiliary vertex/cell data without affecting geometry or topology

    • Add convenience wrappers on Triangulation and DelaunayTriangulation
      that delegate to the TDS methods without invalidating caches

    • All doctests use prelude::triangulation::* to demonstrate idiomatic
      imports including DelaunayTriangulationBuilder::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_data and set_cell_data to Tds accepting
      Option<U> / Option<V> for setting or clearing auxiliary data
      in O(1) without affecting geometry or topology

    • Add convenience wrappers on Triangulation and DelaunayTriangulation
      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::data and Cell::data from pub to pub(crate)

    • Add const fn data() -> Option<&U> accessor on Vertex and
      const fn data() -> Option<&V> accessor on Cell

    • Update struct-level doc comments with data() / set_vertex_data
      / set_cell_data cross-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_vertices call sites to new

    • Fix type-inference regression in NaN test by annotating VertexBuilder

  • Fix keyword validation and add publish-check recipe 676df6b

  • Replace computational-geometry keyword with geometry (crates.io
    enforces a 20-character limit)

    • Add just publish-check recipe that validates crates.io metadata
      (keywords, categories, description) and runs cargo 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

24 Mar 22:13
Immutable release. Only release title and notes can be modified.
db4ace7

Choose a tag to compare

  • 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

  • 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.rs with dimension-generic SoS tie-breaking
    • sos_orientation_sign<D>() for degenerate orientation predicates
    • sos_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).

  • [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_ambiguous flag and robust_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_artifact workaround
    • Simplify repair attempts from 3 to 2 (FIFO then LIFO)
    • Remove used_robust_predicates from DelaunayRepairDiagnostics
    • Fix pre-existing clippy match_same_arms in 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...

Read more

v0.7.2

10 Mar 22:46
2c7d26d

Choose a tag to compare

  • **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 sysinfo dependency a2a42d5

  • 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 fed429f

    approach: 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 2869cfe

    Closes #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
  • 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)
  • Add test_construction_options_global_repair_fallback_toggle unit 14ff1b3

    test 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 14ff1b3

    uses 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
  • 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
  • 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
  • docs/workflows.md: Add new section for toroidal/periodic triangulations a90526c

    with practical examples and construction modes

  • README.md: Add toroidal feature to Builder API section with example a90526c

    Code updates:

  • src/core/delaunay_triangulation.rs: Add "Advanced Configuration" a90526c

    section 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
  • feat: exact insphere predicates with f64 fast filter fed429f

  • Update `insphere`, `insphere_lifted`, `adaptive_tolerance_insphere`, fed429f

    and conditioned_insphere to use exact-sign path

  • Switch convex hull performance test to FastKernel to avoid 5×5 fed429f

    exact Bareiss on cospherical inputs

  • Document lint suppression preference (`expect` over `allow`) in fed429f

    docs/dev/rust.md

    Closes #240

  • Changed: simplify robust insphere logic and optimize test suites fed429f

    Remove 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 fed429f

    Update internal predicate helpers to return boundary states for
    non-finite inputs and optimize insphere_lifted by deriving
    orientation from the insphere matrix. In robust_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 fed429f

    Update 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 fed429f

    Add debug asser...

Read more

v0.7.1

20 Feb 22:15
df890d3

Choose a tag to compare

  • 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 CoordinateScalar bound from Cell, Tds, Vertex #193

  • Changed: Moves TopologyEdit to triangulation::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
  • Added: Debug harness and uniform ball point generation 79bf0e9

    Adds 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 79bf0e9

    Adds 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 0c94dec

    Implements automated performance baselines generated on version tags
    (vX.Y.Z) as GitHub Actions artifacts, replacing local baselines.
    Adds generate-baseline.yml to create baselines on tag push/workflow
    dispatch.
    The benchmark workflow compares against the latest semver tag artifact.

    Includes benchmark-utils compare-tags to compare any two tags,
    and fetch-baseline to 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 5ab686c

    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.

  • feat(geometry): add ScalarSummable/ScalarAccumulative supertraits abdeeb2

  • Add ScalarSummable (CoordinateScalar + Sum) and ScalarAccumulative (CoordinateScalar + AddAssign + SubAssign + Sum)
    abdeeb2

  • Added: Examples to topology editing functions 8020065

    Adds example usages to the flip_k1_insert, flip_k1_remove,
    and flip_k2 functions to demonstrate their use and expected
    behavior. Also adds an example for the flip_k3 function.
    These examples enhance understanding and usability.

  • Added: Examples to error and struct definitions a1bce55

    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, RandomPointGenerationError and
    ValueConversionError to 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.
  • Added: 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.

  • 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! with tracing in 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 b071fb7

    per-insertion repair based on dimension, balancing repair quality
    and construction speed.

  • Modifying cavity boundary resolution to avoid immediate star-split b071fb7

    fallbacks, retrying with perturbed vertices instead.

  • `finalize_bulk_construction` called `repair_delaunay_with_flips_k2_k3` [b071fb7](https://github.com/acgetchell/delaunay/...

Read more

v0.7.0

13 Jan 08:08
dfdba5a

Choose a tag to compare

  • Feature/manifolds #168

  • Changed: Refactors Gram determinant calculation with LDLT #167

  • feat: add public topology traversal API #164

  • Added: Topology-only manifold validation module 10abbe1

    Introduces 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 10abbe1

    Introduces a ManifoldValidationMode to 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 561a259

    batch 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
  • Changed: Refactors manifold validation mode to topology guarantee 10abbe1

    Renames ManifoldValidationMode to TopologyGuarantee for 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 10abbe1

    Refactors 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 561a259

    Refactors the Gram determinant calculation to use LDLT factorization from the la-stack crate for improved efficiency and numerical stability by exploiting
    symmetry.

    Also, updates the la-stack dependency version.

  • Changed: Rename SimplexCounts to FVector for clarity 561a259

    Renames the SimplexCounts struct to FVector to 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 561a259

    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.

  • Changed: Improve simplex generation by pre-sorting vertex keys 561a259

    Speeds 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 561a259

    Updates the serde_json dependency from v1.0.148 to v1.0.149.

    Also, fixes a bug in the insert_simplices_of_size function 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 3748ebb

    Makes topology traversal APIs public for external use.

    Exposes edges(), incident_edges(), and cell_neighbors() on the
    DelaunayTriangulation struct 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 3748ebb

    Exposes cell and vertex query APIs on DelaunayTriangulation for 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 3748ebb

    BREAKING CHANGE: DelaunayTriangulation::triangulation() is now as_triangulation(); triangulation_mut() is now as_triangulation_mut().

  • Changed: Clarifies TDS validation and API docs 3748ebb

    Updates 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 10abbe1

    Addresses 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
    Pseudomanifold when constructing from from_tds. Adds
    deduplication of parallel edges to increase robustness against
    corrupted data.

  • Fixed: Improves robustness of incremental insertion 561a259

    Addresses rare topological invalidations during incremental
    insertion by:

v0.6.2

01 Jan 03:53
66df9a6

Choose a tag to compare

  • 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
  • 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 c23cefb

    Consolidates and standardizes the validation error types
    within the triangulation data structure (TDS) to improve
    internal error handling and consistency. Replaces
    TriangulationValidationError with TdsValidationError
    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 c23cefb

    Refactors 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 TdsValidationError enum is also updated and a
    TdsMutationError alias is created to provide clearer
    semantics for mutation operations.

    A deprecated function is_delaunay is 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 c23cefb

    Enhances 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 c23cefb

    Refactors the TdsValidationError and TdsMutationError types to
    improve clarity and future extensibility. Introduces a wrapper
    struct for TdsMutationError to allow for independent evolution
    while maintaining API compatibility. Also improves the error
    handling during triangulation construction and modification.

  • perf: Adjust global validation checks c23cefb

    Now 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 c23cefb

    Refactors 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 c23cefb

    Updates 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 c23cefb

    Enhances 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) c23cefb

    Removes 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 c23cefb

    Removes the deprecated fix_invalid_facet_sharing methods from both
    DelaunayTriangulation and Triangulation.

    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_issues flow.

    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 c23cefb

    Improves 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 c23cefb

    Classifies 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...

Read more