Repository navigation
Releases: DeloneCommons/pyvoro2
Release list
v0.8.0 — Inverse API, correctness hardening & Python 3.14
This is the first GitHub release since v0.6.3, so it includes the changes introduced across both the v0.7 and v0.8 development cycles.
Highlights
- Weight-first power diagrams. Power/Laguerre tessellations can now be computed directly from mathematical
weights=, while the existingradii=representation remains supported. - Unified forward results. Spatial and planar
compute(...)now use the commonTessellationResultAPI, with stable access to sites, IDs, cell measures, empty cells, representation metadata, diagnostics, and normalization. - Canonical inverse API. Separator inverse fitting now lives under
pyvoro2.inverse/pyvoro2.inverse.separator, with explicit graph, gauge, Laplacian, realization, active-set, provenance, and report diagnostics. - Substantial correctness and safety hardening. v0.8 adds certified periodic nearest-image handling, mandatory native-safe duplicate detection, stricter input validation and ownership, guarded native container construction, severity-complete tessellation diagnostics, atomic active-set final states, and source-bound inverse observations/results/reports.
- More robust inverse solvers. The separator objective, hard-constraint handling, ADMM proximal solve, numerical reductions, final quadratic certification, and dense/sparse solver/backend semantics were audited and corrected for difficult binary64 cases and explicit failure reporting.
- Python 3.14 and expanded binary distributions. Official wheels are provided for CPython 3.10–3.14 on manylinux x86_64, Windows AMD64, macOS x86_64, and macOS arm64, together with a source distribution.
- Release and packaging hardening. CI now validates source installs, wheels, the sdist round trip, no-SciPy installations, notebooks, documentation, native sanitizer checks, metadata, and the complete license/notice payload.
Migration from v0.6.3
The temporary compatibility API introduced during the v0.7 transition has now been removed. In particular, pyvoro2.powerfit, broad top-level separator exports, historical separator aliases, PlanarComputeResult, and planar return_result= are no longer part of the v0.8 API.
Use the canonical APIs under pyvoro2.inverse and pyvoro2.inverse.separator. For forward computation, output='cells' remains available when the historical raw cell-list form is desired.
Notes
v0.8.0 is primarily a stability, correctness, API-cleanup, and distribution-quality release following the larger API expansion developed for v0.7. It intentionally does not add the planned prescribed-cell-measure or mixed-inverse solvers; those remain future development work.
For the complete technical history, migration details, and known limitations, see CHANGELOG.md and docs/project/release-notes-v0.8.md.
v0.6.3 - Solver-related improvements
This release includes all changes since 0.6.1, covering both 0.6.2 and 0.6.3.
Highlights
- Added a public power-fit problem/result API via
build_power_fit_problem(...)andbuild_power_fit_result(...), making it easier to export problems, test external solvers, and repackage results into standardPowerWeightFitResultobjects. - Added richer diagnostics and exports, including
edge_diagnosticsand objective breakdown reporting. - Improved native ADMM/Huber fitting with a better splitting formulation, analytic warm starts, and fixes for sparse-outlier cases that previously stalled or diverged.
- Centralized core power-fit formulas in a shared problem/evaluation layer, reducing internal formula drift and simplifying solver/report internals.
- Expanded regression coverage for both the robust-fit path and the new public problem API.
v0.6.1 - Feature-complete pre-1.0 release
This release brings pyvoro2 to a feature-complete pre-1.0 stage: the main functionality originally planned for the project is now in place, with further work focused on testing, refinement, and stabilization ahead of 1.0.
Public powerfit workflow
pyvoro2.powerfit now provides a full public workflow, including reusable pair-constraint resolution, low-level fitting, realized-boundary matching, self-consistent active-set refinement, infeasibility witnesses, and report-friendly outputs for downstream analysis.
Planar 2D support
pyvoro2 now includes a pyvoro2.planar namespace for 2D workflows, with Box / RectangularCell, compute, locate, ghost_cells, tessellation diagnostics, normalization helpers, and optional matplotlib plotting. Powerfit is now available in both 2D and 3D.
Robustness and diagnostics
This release also strengthens robustness and observability with:
- explicit diagnostics for realized-but-unaccounted pairs
- structured candidate/active-graph connectivity diagnostics
- improved disconnected-component gauge handling
- explicit
weight_shift=support for weight-to-radii conversion - active-set path diagnostics, making it easier to distinguish transient optimization behavior from final results
Documentation and release tooling
Documentation and project tooling have also been improved. Example notebooks now live in notebooks/, docs consume generated notebook pages, and the repository includes tooling for notebook export/checking, README sync, distribution-content checks, and local publishability validation via tools/release_check.py.
A convenience extra, pyvoro2[all], is available for contributors who want the full optional stack.
Notes
- The top-level API remains the 3D public surface; planar 2D support lives under
pyvoro2.planar. - Current planar scope covers
BoxandRectangularCell; generic planarPeriodicCellremains intentionally deferred. - Existing
r_min=usage is still supported, butweight_shift=is now the preferred explicit gauge control for weight-to-radii conversion. pyvoro2remains beta / pre-1.0 for now; this release is intended as a feature-complete milestone prior to a stable1.0.pyvoro2-authored code is released under LGPLv3+. Vendored third-party code remains under its own licenses.
See the changelog for the full detailed history.
v0.4.2.post1 - Metadata fixes
Fixes metadata
v0.4.2 - Fixes numeric precision bug
- Updates the vendored voro++ snapshot to include the upstream numeric robustness fix for power/Laguerre (radical) pruning: fixes rare cross-platform edge cases in fully periodic power tessellations.
- Removes a Python-side workaround that recomputed fully periodic orthorhombic power tessellations via the periodic (triclinic) backend when periodic face-shift assignment failed.
v0.4.0 - initial public release
Python-first wrapper around unmodified Voro++ for 3D Voronoi and power/Laguerre (radical Voronoi) tessellations.
- Core API:
compute(..., mode='standard')andcompute(..., mode='power')(per-site radii). - Domains / containers:
Box(finite axis-aligned box)OrthorhombicCell(axis-aligned cell with per-axis periodicity)PeriodicCell(fully periodic triclinic cell) +PeriodicCell.from_params(...)
- Periodic neighbor-image support:
return_face_shifts=Trueannotates faces with lattice-image indicesadjacent_shift=(na, nb, nc). - Point queries:
locate(...)(batched ownership queries) andghost_cells(...)(batched probe/ghost cells). - Input validation & preprocessing: near-duplicate detection via
duplicate_check(...)(also available as an opt-in precheck incompute/locate/ghost_cells), plus robust validation for IDs, finiteness, and power radii; lattice degeneracy checks forPeriodicCell. - Post-processing / topology utilities:
analyze_tessellation(...),validate_tessellation(...),annotate_face_properties(...),normalize.*helpers, andvalidate_normalized_topology(...)for strict normalized-topology workflows. - Inverse tools:
pyvoro2.inverseutilities to fit power weights/radii from desired separating plane positions. - Optional 3D visualization:
pyvoro2.viz3d(extra:pyvoro2[viz], based onpy3Dmol). - Docs + tests: MkDocs documentation site with guide/API/examples, plus a deterministic test suite with opt-in fuzz/property tests and opt-in cross-checks against
pyvoro.