Skip to content

Changelog

v0.18.1 (not yet released)

  • ENH: tr_newton_bounded works on arrays of any array-API namespace, e.g. CuPy arrays on a GPU: the iteration stays in the namespace and on the device of x0, and only reduced scalars come to the host
  • ENH: Reduction reduces arrays of other namespaces completely in their own namespace and returns the result on the host
  • ENH: gpu extra (CuPy); a GPU CI job tests the trust region on CuPy arrays
  • BUILD: Requires array-api-compat
  • BUG: Reduction recognizes CuPy arrays (whose class does not carry __array_namespace__) as arrays of another namespace; before, they took the NumPy path, where max/min failed and sum handed MPI a device buffer

v0.18.0 (30Oct26)

  • BUG: The default Steihaug tolerance of tr_newton_bounded is measured relative to the projected gradient at the first iterate, so it no longer depends on the units of the objective; for gradients of order 1/N it had demanded a nearly exact subproblem solve from the first iteration on
  • ENH: tr_newton_bounded(hessp_tol=True) passes the Steihaug tolerance to hessp, so an inexactly evaluated Hessian product need only be as accurate as the subproblem it serves

v0.17.1 (27Oct26)

  • API: Requires Python 3.10 or later; support for Python 3.8 and 3.9 is dropped
  • BUG: load_npy and save_npy failed for data in non-native byte order (e.g. big-endian files) when mpi4py is installed; such files now load and save with their data type preserved, like with numpy.load and numpy.save
  • BUG: load_npy and save_npy failed with mpi4py for data types the MPI library does not provide (e.g. half precision with Ubuntu's Open MPI)
  • BUG: save_npy wrote the header length in native byte order, which produced invalid files on big-endian machines

v0.17.0 (27Oct26)

  • ENH: NuMPI.FFT with FFT engines that share the interface and conventions of muGrid's FFTEngine (muGrid >= 1.6.0). NumpyFFTEngine runs serially on 1D, 2D and 3D grids and needs only numpy; make_fft_engine returns it for a single process and muGrid's engine for multiple processes, so codes written for muGrid's FFTs run serially without muGrid installed.
  • ENH: Testing.Fixtures.MPITestFixture falls back to the MPI stub if mpi4py is not installed, so downstream test suites no longer need their own fallback; new serial_only marker for tests that must run on one process
  • BUILD: New fft extra installing muGrid (requires Python >= 3.10); muGrid must be compiled with MPI support for parallel FFTs

v0.16.0 (27Oct26)

  • ENH: Reduction (and with it the optimizers and Testing.Assertions) accepts communicators that are not mpi4py's, such as muGrid's Communicator, through a small protocol: allreduce(array, op) with op one of "sum", "max", "min", compare, size and rank. mpi4py communicators work as before; mpi4py is not needed for the new path.
  • API: Reduction.any and Reduction.all reduce as max/min over 0/1, which every communicator supports, instead of logical or/and; results are unchanged.
  • ENH: The callback of l_bfgs_bounded can stop the optimization by returning True, which ends it as successful; use it for a custom stopping criterion

v0.15.2 (18Sep26)

  • BUG: tr_newton_bounded kept iterating after it had converged whenever every step was trust-region-limited (near-zero curvature along the gradient), because the convergence test was skipped after a boundary-limited step. It ran to maxiter and returned a result that depended on the iteration budget.

v0.15.1 (28Jul26)

  • BUG: Fix errors while closing file when MPIStub.Read fails.

v0.15.0 (12Jul26)

  • ENH: Bound-constrained trust-region Newton-CG

v0.14.0 (01Jul26)

  • API: L-BFGS support for multi-dimensional x0

v0.13.0 (11Jun26)

  • ENH: Added the pickle-based (lowercase) object communication methods gather, allgather, bcast, scatter, reduce and allreduce to the MPI stub's Intracomm

v0.12.0 (09Jun26)

  • BUG: load_npy no longer requires the subdomains to tile the global grid, restoring partial (sub-region) reads that were rejected since v0.11.0 (closes #85). The tiling check is still enforced on save_npy, where gaps or overlaps would corrupt the output file.
  • ENH: MPI-parallelized the bound constrained conjugate gradient with restart (Polonsky & Keer 1999) and exposed it as constrained_conjugate_gradients_with_restart; it now supports jac, callback, arbitrary lower bounds and a communicator, matching the without-restart variant
  • BUG: Fixed a 0 * inf = nan in the restart variant's conjugate-direction update when the free set empties, and switched its convergence test to the projected (KKT) residual so it converges on fully bound-active solutions

v0.11.0 (20May26)

  • ENH: save_npy/load_npy now validate subdomain bounds and check that subdomains tile the global grid (raise ValueError on malformed input)

v0.10.0 (24Apr26)

  • BUG: Forward optimizer args to CCG Hessian-product callbacks
  • ENH: L-BFGS with simple box bounds
  • ENH: L-BFGS with linear constraint (and box bounds)
  • ENH: CCG now supports gradient-only objective callables via jac=False and split objective/gradient callables via jac=<callable>
  • BUILD: Switched build system to hatchling and hatch-vcs

v0.9.0 (24Nov25)

  • ENH: Support field array with multicomponent quantities

v0.8.3 (14Nov25)

  • BUG: Fixing comm.Allreduce in save_npy
  • MAINT: Add *kwargs to save_npy

v0.8.2 (27Jun25)

  • MAINT: Fix compatibility with numpy 2.3

v0.8.0 (05June25)

  • ENH: suggest_subdivision is now part of the Tools package

v0.7.3 (10Apr25)

  • MAINT: Moved suggest_subdivision to main package

v0.7.2 (26Mar25)

  • API: Allow passing communicator directly to l_bfgs
  • BUG: Fixed parallel write into NPY files when a subdomain is only a single grid point in one dimension
  • MAINT: Return last result when the line search fails
  • MAINT: Throw proper errors and report convergence

v0.7.1 (18Mar25)

  • BUG: Fixed reduce operation of arrays with two entries

v0.7.0 (12Mar25)

  • ENH: Writing and reading decomposed arrays of arbitrary dimension to NPY

v0.6.1 (23Jul24)

  • MAINT: Compatibility with numpy 2.0

v0.6.0 (23Jul24)

  • MAINT: Removed NCStructurdGrid and dependency on NetCDF4 which caused many problems downstream

v0.5.0 (14Apr24)

  • ENH: Added support for passing optional arguments to objective functions of optimizers
  • BUG: Keep shape of optimization target when passing to objective function and jacobian
  • MAINT: Switched to DiscoverVersion package for version discovery
  • MAINT: Refactored file names

v0.4.0 (14Jan24)

  • MAINT: Switched build system to flit

v0.3.1 (07Nov22)

  • MAINT: Made scipy dependency optional

v0.3.0 (11Nov21)

  • ENH: Support for masked arrays

v0.2.0 (28Oct21)

  • ENH: Reduction for computing arithmetic mean

v0.1.7 (22Jun21)

  • Drop support for python3.6 and take python3.9 in testing
  • Fix bug in CI installation

v0.1.6 (22Jun21)

  • ENH: Optimization: parallelized the bound constrained conjugate gradient without restart
  • ENH: Optimization: implement bound constrained conjugate gradient without restart when the constrained set changes
  • ENH: Optimization: implement bound constrained conjugate gradient with restart when the constrained set changes

v0.1.5 (02Mar21)

  • ENH: NetCDF IO : NCStructuredGrid migrated from muspectre to here
  • Drop support for Python3.5

v0.1.4 (16Oct20)

  • BUG: don't close filestream on failure

v0.1.3 (14Oct20)

  • BUG: make_mpi_file_view was not compatible with filestreams

v0.1.2 (29Jun20)

  • Remove usage of xrange (#29)

v0.1.1 (02Dec19)

  • Reader from Stub MPI communicator compatible with filestream input

v0.1.0 (25Aug19)

  • Initial release
  • Stub MPI communicator
  • Helper functions for make reduction operations more numpy-like
  • MPI-parallel IO of npy files
  • MPI-parallel L-BFGS