Change Log

v0.4.0 (13/07/2026)

  • Added Voronoi2DSphere for trans-dimensional tessellations on the sphere, with great-circle nearest-site geometry, uniform-per-area site sampling, isotropic spherical perturbations, polygon and MultiPolygon domains, configurable longitude seams, and 2-D map and 3-D sphere plotting.

  • Added exact incremental nearest-site interpolation for fixed query positions to Voronoi2D and Voronoi2DSphere, avoiding a full-grid nearest-neighbour query on every Markov-chain iteration.

  • Added public InvalidProposalException for deliberately inadmissible proposals. These now produce one counted rejected iteration instead of a state-dependent redraw, preserving detailed balance.

  • Added on_forward_error={"reject", "raise"} to Markov chains and inversion interfaces. Unexpected forward errors reject proposals by default and can be configured to raise for debugging.

  • Unexpected errors raised by user perturbation functions now propagate instead of being silently retried. Raise InvalidProposalException for deliberate proposal rejection.

  • Fixed scalar initialization of position-dependent Gaussian, Laplace, and custom priors in multidimensional and spherical domains.

  • Unified the state-local KD-tree and fixed-position interpolation lifecycle of Voronoi2D and Voronoi2DSphere while preserving their public API and eager/lazy cache behaviour. Cache updates now also use the exact removed-site index, including when a tessellation contains duplicate sites.

  • Completed cache handling for initialized, prior-sampled, nested-birth, user-created, and pickled states, including process- and thread-based parallel chains. NumPy integer scalars are now accepted for fixed n_dimensions.

  • Hardened Voronoi polygon validation and bounded polygon sampling, restored Shapely’s internal query preparation after pickling, and validated tessellation-ensemble input lengths.

  • Fixed spherical plotting of GeometryCollection seam results and added a user-controlled surface-mesh spacing and center_lonlat camera control for three-dimensional rendering.

  • Fixed planar Voronoi plotting for duplicate, axis-aligned, and far-offset sites; avoided redundant KD-tree rebuilds for rejected dimension changes; and accelerated polygon containment checks with Shapely’s coordinate API.

v0.3.12 (10/07/2026)

  • Bug fix: Voronoi-site perturbations in Voronoi, Voronoi1D, and Voronoi2D now reject proposals falling outside the discretization domain rather than redrawing them until valid. The redraw scheme made the effective proposal a truncated Gaussian whose normalization depends on the current site position, breaking detailed balance and biasing the sampled site positions within a few perturb_std of the domain boundaries (or of the polygon edges in Voronoi2D)

  • Bug fix: fixed a TypeError raised during birth perturbations when a ParameterSpace is nested inside a trans-dimensional discretization with birth_from="neighbour" (the default)

v0.3.11 (30/06/2026)

  • Bug fix: replaced deprecated np.row_stack with np.vstack in Voronoi birth perturbations, fixing Voronoi2D.birth() compatibility with NumPy >= 2.5

v0.3.10 (23/03/2026)

  • Bug fix: Python 3.14 compatibility — added explicit type casts at Cython call sites to prevent TypeError when numpy scalars are passed to typed Cython parameters (issue #25)

  • Refactor: moved all 1D-specific logic from Voronoi into Voronoi1D overrides, removing dimension conditionals from the base class

  • Voronoi now raises ValueError if directly instantiated with spatial_dimensions of 1 or 2, recommending Voronoi1D or Voronoi2D instead

v0.3.9 (23/03/2026)

  • Bug fix: Voronoi1D.sample_site() now returns a Python float instead of a shape-(1,) NumPy array, fixing a TypeError in birth perturbation with Cython extensions compiled against older Cython versions and NumPy >= 2.0

v0.3.8 (13/03/2026)

  • Fixed docstring of BayesianInversion

v0.3.7 (19/11/2025)

  • Change to setup.py: avoid “-march=native” for “arm64” and “aarch64” machines

v0.3.6 (11/11/2025)

  • Enhancement: SimulatedAnnealing now accepts the argument cooling_fraction

v0.3.5 (08/10/2025)

  • Enhancement: State generated by Parameterization.initialize() now validated when creating a MarkovChain

v0.3.4 (02/08/2025)

  • Bug fix: added else condition in bayesbay.prior.CustomPrior.perturb_value() to accommodate is_birth=False

v0.3.3 (16/04/2025)

  • Enhancement: More robust checks when custom starting states (walkers_starting_states) are passed to BayesianInversion

v0.3.2 (16/04/2025)

  • Enhancement: Enabled custom starting states in high-level API

    • BayesianInversion now takes optional argument walkers_starting_states

    • MarkovChain now takes optional argument starting_state

v0.3.1 (20/03/2024)

  • API change: removed DimensionalityException

    • DimensionalityException replaced with -math.inf log probability in birth and death perturbations

  • New feature: Voronoi1D

    • Voronoi1D.compute_interface_positions() added

  • Enhancement: Voronoi1D.compute_cell_extents now deals with negative lower boundaries

v0.3.0 (15/03/2024)

  • New feature: Nested parameter space (and discretization)

v0.2.4 (07/03/2024)

  • Enhancement: __repr__ in some classes

v0.2.3 (07/03/2024)

  • New feature: bayesbay.prior.LaplacePrior

  • New feature: bayesbay.LogLikelihood.__repr__

  • New feature: bayesbay.Target.__repr__

v0.2.2 (04/03/2024)

  • New feature: Voronoi2D

    • Voronoi2D.get_tessellation_statistics() added

  • API change: Voronoi1D

    • generalized all static methods:

      • interpolate_tessellation

      • _interpolate_tessellations

      • get_tessellation_statistics

      • plot_tessellation

      • plot_tessellations

      • plot_tessellation_statistics

      • plot_tessellation_density

v0.2.1 (27/02/2024)

  • New feature: Voronoi2D

    • Voronoi2D.interpolate_tessellation() added

    • Voronoi2D.polygon added, allowing for prior probabilities defined within polygons

  • API change: bayesbay.samplers._samplers

    • multiprocessing now carried out with joblib

v0.2.0 (14/02/2024)

  • New feature:

    • Voronoi2D added

  • New feature: pertubation_weights

    • weights can be updated

      • BaseBayesianInversion.set_perturbation_funcs(funcs, weights)

      • BaseMarkovChain.set_perturbation_funcs(funcs, weights)

    • weights can be assigned during initialization

      • BaseBayesianInversion(perturbation_weights, ...)

      • BaseMarkovChain(perturbation_weights, ...)

      • MarkovChain(perturbation_weights, ...)

  • API change: bayesbay.parameters -> bayesbay.prior

    • UniformParameter -> UniformPrior

    • GaussianParameter -> GaussianPrior

    • CustomParameter -> CustomPrior

  • API change: ParameterSpaceState and State

    • cache added to ParameterSpaceState

    • save_to_cache, load_from_cache, saved_in_cache added to ParameterSpaceState

    • By default, the ParameterSpaceState.cache is carried over when calling State.copy(), i.e., it is copied to the new ParameterSpaceState

  • API change: bayesbay.discretization._voronoi

    • All methods in Voronoi1D, except for static ones, have been moved to Voronoi, which is now more general

v0.1.9 (05/02/2024)

  • API change: LogLikelihood can accept log likelihood function or log likelihood ratio function

  • API change: BayesianInversion now takes in instance of LogLikelihood, instead of a list of targets and forward functions

  • New API: LogLikelihood.add_targets() method that allows more data to join the inversion

  • New API: BayesianInversion.get_results_from_chains

  • New API: Parameter.sample method

  • Enhancement: __repr__ and __str__ for all classes

  • Fix: bug in nearest index when birth from neighbour

v0.1.1 (15/01/2024)

  • Add pyx file to Manifest.in

v0.1.0 (15/01/2024)

  • First release