Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Validate toroidal domains at parse boundaries [#437](https://github.com/acgetchell/delaunay/pull/437) [#450](https://github.com/acgetchell/delaunay/pull/450)
- Add vertex construction macro [#469](https://github.com/acgetchell/delaunay/pull/469)
- Add embedded triangulation validation layer [#449](https://github.com/acgetchell/delaunay/pull/449) [#481](https://github.com/acgetchell/delaunay/pull/481)
- Add Pachner feasibility checks [#489](https://github.com/acgetchell/delaunay/pull/489)
- Box nested FlipError payloads [#406](https://github.com/acgetchell/delaunay/pull/406) [#435](https://github.com/acgetchell/delaunay/pull/435)
- Adopt la-stack 0.4.3 API [#424](https://github.com/acgetchell/delaunay/pull/424) [#438](https://github.com/acgetchell/delaunay/pull/438)
- Require refined generator and ordering parameters [#439](https://github.com/acgetchell/delaunay/pull/439)
Expand All @@ -29,6 +30,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Merged Pull Requests

- Add Pachner feasibility checks [#489](https://github.com/acgetchell/delaunay/pull/489)
- Make targeted PL repair failure-atomic [#488](https://github.com/acgetchell/delaunay/pull/488)
- Preserve positive orientation after vertex removal [#487](https://github.com/acgetchell/delaunay/pull/487)
- Preserve exact 2D layered strip vertices [#486](https://github.com/acgetchell/delaunay/pull/486)
- Bump actions/checkout from 6.0.3 to 7.0.0 [#485](https://github.com/acgetchell/delaunay/pull/485)
Expand Down Expand Up @@ -135,6 +138,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Refresh the validation guide, invariants, API-design, and prelude docs
for the five-level stack.
- [**breaking**] Add Pachner feasibility checks [#489](https://github.com/acgetchell/delaunay/pull/489)
[`be6728c`](https://github.com/acgetchell/delaunay/commit/be6728c4a84c988226a7bf4973ef1d382ff7e63b)

- Add immutable flip and Pachner feasibility reports for dry-run workflows.
- Route Pachner feasibility through the shared bistellar preflight used by mutating flips.
- Export Pachner feasibility from the focused Pachner prelude.

### Changed

Expand Down Expand Up @@ -342,6 +351,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Canonicalize coherent orientation per simplex-neighbor component so disconnected repair states do not keep a negative geometric sign.
- Surface post-repair orientation failures through the existing typed invariant errors.
- Avoid redundant full-TDS canonicalization passes on the successful normalization path.
- Make targeted PL repair failure-atomic [#488](https://github.com/acgetchell/delaunay/pull/488)
[`abd466f`](https://github.com/acgetchell/delaunay/commit/abd466f38da370b58610e7b34cb91aca800abb65)

- Extend PL-manifold repair from facet over-sharing to bounded boundary-ridge, ridge-link, and vertex-link repair stages with typed diagnostics.
- Run delaunayize through the Delaunay rollback transaction so failed topology repair, failed Delaunay repair, fallback snapshot failures, and rebuild
failures restore the pre-call triangulation.

- Expose PlManifoldRepairStage through the crate root and delaunayize prelude, and add benchmark fixtures for targeted topology repair.
- Align local and CI tooling on Python 3.14, uv 0.11.26, and the reviewed Rust/Python tool pins.

### Maintenance

Expand Down
14 changes: 7 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,6 @@ name = "allocation_hot_paths"
path = "benches/allocation_hot_paths.rs"
harness = false

[[bench]]
name = "boundary_uuid_iter"
path = "benches/boundary_uuid_iter.rs"
harness = false

[[bench]]
name = "ci_performance_suite"
path = "benches/ci_performance_suite.rs"
Expand All @@ -109,6 +104,11 @@ name = "cold_path_predicates"
path = "benches/cold_path_predicates.rs"
harness = false

[[bench]]
name = "delaunay_repair"
path = "benches/delaunay_repair.rs"
harness = false

[[bench]]
name = "profiling_suite"
path = "benches/profiling_suite.rs"
Expand All @@ -131,8 +131,8 @@ path = "benches/delete_vertex.rs"
harness = false

[[bench]]
name = "edge_key_queries"
path = "benches/edge_key_queries.rs"
name = "locate"
path = "benches/locate.rs"
harness = false

[[bench]]
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ fn main() -> DelaunayResult<()> {
vertex![0.0, 0.0, 1.0]?,
];

let dt = DelaunayTriangulationBuilder::new(&vertices).build::<()>()?;
let dt = DelaunayTriangulationBuilder::new(&vertices).build()?;

assert_eq!(dt.dim(), 3);
assert_eq!(dt.number_of_vertices(), 4);
Expand Down
2 changes: 1 addition & 1 deletion benches/PERFORMANCE_RESULTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ boundary traversal, and explicit bistellar flip roundtrips.

#### Construction

Public API: `DelaunayTriangulation::try_new_with_options`
Public API: `DelaunayTriangulation::builder(...).construction_options(...).build()`

| Benchmark ID | Dimension | Input | Variant | Mean | 95% CI |
|--------------|-----------|-------|---------|------|--------|
Expand Down
12 changes: 6 additions & 6 deletions benches/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ predicates fast across 2D-5D.
| Benchmark | Purpose | Scale | Typical Runtime | Used By |
|-----------|---------|-------|-----------------|---------|
| `allocation_hot_paths.rs` | Allocation contracts for public hot paths | Calibrated 2D-5D canary fixtures | ~1-2 min | Manual allocation checks |
| `boundary_uuid_iter.rs` | Focused boundary-facet and UUID iterator microbenchmarks | 3D small fixed schedules | <1 min | Manual micro-optimization checks |
| `ci_performance_suite.rs` | Public workflow regression contract | Calibrated 2D-5D canaries | ~5-10 min | CI, baselines, `just perf-no-regressions` |
| `circumsphere_containment.rs` | Compare circumsphere predicate methods | 2D-5D fixed, 3D random, edge cases | ~5 min | Predicate tuning, summaries |
| `cold_path_predicates.rs` | Track hot/cold predicate paths | 2D-5D hot queries, near-boundary cases | ~2-5 min | Predicate optimization work |
| `delaunay_repair.rs` | Flip-based Delaunay repair on prepared Levels 1-4 fixtures | 2D-5D repair-convergent fixtures | ~2-5 min | Repair tuning |
| `pachner_stress.rs` | Unified Pachner move API stress | Accepted 4D k=1/k=2/k=3 forward/inverse moves | <1 min | Monte-Carlo move workflow tuning |
| `pl_manifold_repair.rs` | Over-shared facet and targeted topology repair | 2D/3D synthetic repair fixtures | <1 min | PL-manifold repair tuning |
| `profiling_suite.rs` | Large-scale construction, memory, query, validation profiling | 2D/3D 10k, 4D 3k, 5D 1k | ~2-3 hr | Manual/monthly |
| `delete_vertex.rs` | Vertex deletion and rollback cost | 2D-5D fixed cases | ~1-5 min | Vertex deletion |
| `edge_key_queries.rs` | Public `EdgeKey` construction microbenchmarks | 2D-5D fixed live-edge cases | <1 min | Query API tuning |
| `locate.rs` | Point-location facet-walk latency (no-hint vs exact-hint) | 2D-5D fixed cases | ~1-3 min | Locate/walk tuning |
| `tds_clone.rs` | `Tds::clone()` snapshot cost | Deterministic 2D-5D triangulations | ~1-3 min | Rollback design baselines |
| `topology_guarantee_construction.rs` | Cost of topology guarantee modes | 2D-5D construction cases | ~5-15 min | Manual topology policy work |

Expand All @@ -39,14 +39,14 @@ predicates fast across 2D-5D.
| Durable latest-version benchmark baseline | GitHub Release asset `delaunay-vX.Y.Z-criterion-baseline.tar.gz` |
| Smoke-test benchmark harnesses | `just bench-smoke` |
| Allocation hot-path contracts | `cargo bench --profile perf --bench allocation_hot_paths --features count-allocations -- --noplot` |
| Boundary/UUID microbenchmarks | `cargo bench --profile perf --bench boundary_uuid_iter -- --noplot` |
| Predicate comparison | `cargo bench --profile perf --bench circumsphere_containment -- --noplot` |
| Predicate cold-path work | `cargo bench --profile perf --bench cold_path_predicates -- --noplot` |
| Flip-based Delaunay repair | `cargo bench --profile perf --bench delaunay_repair -- --noplot` |
| Unified Pachner move stress | `cargo bench --profile perf --bench pachner_stress -- --noplot` |
| PL-manifold repair path | `cargo bench --profile perf --features bench --bench pl_manifold_repair -- --noplot` |
| Large-scale scaling suite | `cargo bench --profile perf --bench profiling_suite -- --noplot` |
| Vertex deletion mutation baseline | `cargo bench --profile perf --bench delete_vertex -- --noplot` |
| Edge-key query construction | `cargo bench --profile perf --bench edge_key_queries -- --noplot` |
| Point-location facet walk | `cargo bench --profile perf --bench locate -- --noplot` |
| One-dimension acceptance/profiling run | `just debug-large-scale-{2,3,4,5}d [n] [repair_every]` |
| Deep profiling | `cargo bench --profile perf --bench profiling_suite --features count-allocations` |

Expand Down Expand Up @@ -141,13 +141,13 @@ cargo bench --profile perf --bench ci_performance_suite

`ci_performance_suite.rs` is the stable public workflow contract. It covers:

- construction via `DelaunayTriangulation::try_new_with_options`
- construction via `DelaunayTriangulation::builder(...).construction_options(...).build()`
- adversarial construction
- convex hull extraction
- boundary facet traversal
- validation Levels 1-4
- incremental vertex insertion into prepared triangulations
- explicit 4D bistellar flip roundtrips
- explicit 2D-5D bistellar flip roundtrips

The current calibrated fixture sizes are:

Expand Down
5 changes: 4 additions & 1 deletion benches/allocation_hot_paths.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,10 @@ mod allocation_contracts {
attempts,
base_seed: Some(seed),
});
let dt = BenchTriangulation::<D>::try_new_with_options(&vertices, options).or_abort();
let dt: BenchTriangulation<D> = DelaunayTriangulation::builder(&vertices)
.construction_options(options)
.build()
.or_abort();
let simplex_key = representative_simplex_key(&dt).or_abort();
let removal_keys = dt.tds().simplex_keys().take(32).collect();
let facet_vertices = first_facet_vertices(&dt, simplex_key).or_abort();
Expand Down
144 changes: 0 additions & 144 deletions benches/boundary_uuid_iter.rs

This file was deleted.

Loading
Loading