New features
* Hilbert spaces such as {class}`netket.hilbert.Spin` and {class}`netket.hilbert.Fock`, as well as their base class {class}`netket.hilbert.HomogeneousHilbert`, now support arbitrary custom constraints [1908](https://github.com/netket/netket/pull/1908).
* The constraint interface has been stabilised, documented, and made compatible with several utilities. It is now possible to generate random states from arbitrary constrained hilbert spaces automatically, and it is possible to index into those spaces efficiently. Look at the hilbert space documentation for more information [1908](https://github.com/netket/netket/pull/1908).
* Fermionic hilbert spaces {class}`~netket.experimental.hilbert.SpinOrbitalFermions` now support an extra arbitrary constraint that can be specified by passing the keyword argument `constraint=...` [1832](https://github.com/netket/netket/pull/1832)
* Support equinox modules as models in Variational states. Note that equinox models by default only work with scalar inputs, while NetKet requires modules that work with batch inputs, so you will have to modify them slightly.
Breaking Changes
* Jax operators now use the same `chunk_size` as specified by the user when computing the forward pass. Prior to this change, Jax operators would be chunking the sample axis, but if an operator had a lot of connected elements this would end up increasing the effective sample size [1875](https://github.com/netket/netket/pull/1875).
* Metropolis Hamiltonian sampler for numba operators has been greatly simplified in order to remove the dependency on numba4jax. The new implementation will generally be slower than before, so we encourage you to use Jax Operators if possible. In the future, if people ask for it, we may reintroduce this implementation as a separate package [1747](https://github.com/netket/netket/pull/1747).
* Previously-internal hilbert space constraint sub-module located at `netket.hilbert.index.constraints` has been moved to `netket.hilbert.constraint` [1908](https://github.com/netket/netket/pull/1908).
* Due to improvements to the saving logic, it might no longer be possible to load when using MPI the sampler state saved in previous versions using MPI, as those only contained the sampler state of the rank 0 and it was leading silently to having the same sampler state across all ranks [1914](https://github.com/netket/netket/pull/1914).
Improvements
* Specialised lattice constructors like {func}`netket.graph.Grid` now accept a `point_group` argument, overriding the default (usually maximal) point groups [1879](https://github.com/netket/netket/pull/1879).
* Methods to generate random states are automatically implemented for all {class}`netket.hilbert.HomogeneousHilbert`, constrained or not [1911](https://github.com/netket/netket/pull/1911).
* Serialization of metropolis sampler states when using MPI will now serialise the parameters across all MPI ranks, not only rank 0 [1914](https://github.com/netket/netket/pull/1914).
* Our implementation of `netket.sampler.MetropolisSampler` had a sub-optimal complexity of `O((sweep_size+1) * n_samples)` instead of `O(sweep_size * n_samples)` because it was recomputing the variational function at the beginning of every sweep. This has now been fixed [1915](https://github.com/netket/netket/pull/1915).
Bug fixes
* Fix the function {meth}`netket.graph.SpaceGroupBuilder.space_group_irreps` throwing away the imaginary part of point-group characters, which led to incorrect space-group characters in some rare cases [1876](https://github.com/netket/netket/pull/1876).
* Fixed bug [1811](https://github.com/netket/netket/pull/1811), and it is now possible to serialise sampler states that have new-style jax random number generators [#1914](https://github.com/netket/netket/pull/1914).
Finalized deprecations
Some features that have been deprecated for the last ~24 months have been finally removed from NetKet and will now raise errors. If this is a problem for you, you should install an older version of NetKet.
* Finalized deprecation for `netket.nn.update_dense_symm` utility used to change the format of stored parameters for DenseSymm layers. The method was used to update from a format used in NetKet v3.2, released in 2021.
* Finalized deprecation for `netket.nn.initializers` which has been deprecated in favor of `jax.nn.initializers` in 2021.
* Finalized deprecation for `netket.nn.Module`, `netket.nn.compact`, `netket.nn.Dense` and similar methods that have been aliasing to `flax.linen` since NetKet 3.5 (released in august 2022).
* Finalized deprecation for `rescale_shift` argument of `QGTJacobian***` implementations, which was superseeded by `diag_scale`. This was deprecated since NetKet v3.6 released in november 2022.
* Finalized deprecation for preconditioner signatures with only 2 arguments in favour of the new format using 3 arguments, which have been deprecated since NetKet v3.6 released in november 2022.