Skip to content

Releases: DeloneCommons/pyvoro2

v0.8.0 — Inverse API, correctness hardening & Python 3.14

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 17 Aug 20:08

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 existing radii= representation remains supported.
  • Unified forward results. Spatial and planar compute(...) now use the common TessellationResult API, 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

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 21 Mar 06:40
eaffdcb

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(...) and build_power_fit_result(...), making it easier to export problems, test external solvers, and repackage results into standard PowerWeightFitResult objects.
  • Added richer diagnostics and exports, including edge_diagnostics and 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

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 17 Mar 12:36

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 Box and RectangularCell; generic planar PeriodicCell remains intentionally deferred.
  • Existing r_min= usage is still supported, but weight_shift= is now the preferred explicit gauge control for weight-to-radii conversion.
  • pyvoro2 remains beta / pre-1.0 for now; this release is intended as a feature-complete milestone prior to a stable 1.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

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 13 Mar 23:17
Fixes metadata

v0.4.2 - Fixes numeric precision bug

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 04 Mar 19:17
  • 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

Choose a tag to compare

@IvanChernyshov IvanChernyshov released this 15 Feb 20:59
933bb22

Python-first wrapper around unmodified Voro++ for 3D Voronoi and power/Laguerre (radical Voronoi) tessellations.

  • Core API: compute(..., mode='standard') and compute(..., 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=True annotates faces with lattice-image indices adjacent_shift=(na, nb, nc).
  • Point queries: locate(...) (batched ownership queries) and ghost_cells(...) (batched probe/ghost cells).
  • Input validation & preprocessing: near-duplicate detection via duplicate_check(...) (also available as an opt-in precheck in compute/locate/ghost_cells), plus robust validation for IDs, finiteness, and power radii; lattice degeneracy checks for PeriodicCell.
  • Post-processing / topology utilities: analyze_tessellation(...), validate_tessellation(...), annotate_face_properties(...), normalize.* helpers, and validate_normalized_topology(...) for strict normalized-topology workflows.
  • Inverse tools: pyvoro2.inverse utilities to fit power weights/radii from desired separating plane positions.
  • Optional 3D visualization: pyvoro2.viz3d (extra: pyvoro2[viz], based on py3Dmol).
  • 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.