NetKet 3.12.4__tar.gz → 3.13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {netket-3.12.4 → netket-3.13.0}/PKG-INFO +3 -5
- {netket-3.12.4 → netket-3.13.0}/netket/_version.py +2 -2
- {netket-3.12.4 → netket-3.13.0}/netket/driver/abstract_variational_driver.py +5 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/driver/tdvp_common.py +1 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/rnn/layers_fast.py +1 -2
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/observable/__init__.py +2 -0
- netket-3.13.0/netket/experimental/observable/variance/__init__.py +18 -0
- netket-3.13.0/netket/experimental/observable/variance/exact.py +94 -0
- netket-3.13.0/netket/experimental/observable/variance/expect.py +141 -0
- netket-3.13.0/netket/experimental/observable/variance/variance_operator.py +84 -0
- netket-3.13.0/netket/experimental/sampler/__init__.py +54 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/sampler/rules/fermion_2nd.py +0 -52
- {netket-3.12.4 → netket-3.13.0}/netket/graph/common_lattices.py +1 -1
- {netket-3.12.4 → netket-3.13.0}/netket/graph/graph.py +19 -3
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/discrete_hilbert.py +36 -1
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/doubled_hilbert.py +11 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/homogeneous.py +30 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/tensor_hilbert_discrete.py +14 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/__init__.py +3 -2
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_chunk_utils.py +2 -0
- netket-3.13.0/netket/jax/_expect.py +250 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_utils_tree.py +30 -2
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_vjp_chunked.py +3 -7
- {netket-3.12.4 → netket-3.13.0}/netket/models/slater.py +5 -1
- {netket-3.12.4 → netket-3.13.0}/netket/nn/fast_masked_linear.py +4 -6
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_discrete_operator_jax.py +8 -9
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/jax.py +4 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/spin.py +7 -1
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/preconditioner.py +18 -8
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/__init__.py +1 -2
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/default.py +1 -2
- netket-3.13.0/netket/optimizer/qgt/qgt_jacobian.py +294 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/qgt_jacobian_common.py +1 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/qgt_jacobian_dense.py +2 -136
- netket-3.13.0/netket/optimizer/qgt/qgt_jacobian_pytree.py +225 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/qgt_onthefly.py +57 -27
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/solver/solvers.py +58 -13
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/__init__.py +7 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/autoreg.py +3 -1
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/base.py +18 -9
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/metropolis.py +17 -2
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/metropolis_numpy.py +20 -7
- {netket-3.12.4/netket/experimental → netket-3.13.0/netket}/sampler/metropolis_pt.py +20 -14
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/exchange.py +43 -12
- {netket-3.12.4 → netket-3.13.0}/netket/utils/__init__.py +0 -1
- {netket-3.12.4 → netket-3.13.0}/netket/utils/_dependencies_check.py +6 -7
- netket-3.13.0/netket/utils/api_utils.py +107 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/deprecation.py +13 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/dispatch.py +1 -1
- {netket-3.12.4 → netket-3.13.0}/netket/utils/history.py +18 -2
- {netket-3.12.4 → netket-3.13.0}/netket/utils/mpi/gpu_autorank_util.py +18 -2
- {netket-3.12.4 → netket-3.13.0}/netket/utils/mpi/primitives.py +67 -5
- {netket-3.12.4 → netket-3.13.0}/netket/utils/version_check.py +6 -1
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/__init__.py +10 -2
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/full_summ/state.py +3 -2
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_mixed_state/state.py +3 -2
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect_forces.py +3 -1
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect_forces_chunked.py +3 -2
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect_grad.py +5 -4
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/state.py +14 -8
- {netket-3.12.4 → netket-3.13.0}/pyproject.toml +2 -11
- netket-3.12.4/netket/experimental/sampler/__init__.py +0 -29
- netket-3.12.4/netket/jax/_expect.py +0 -101
- netket-3.12.4/netket/optimizer/qgt/qgt_jacobian_pytree.py +0 -325
- netket-3.12.4/netket/optimizer/qgt/qgt_jacobian_pytree_logic.py +0 -70
- netket-3.12.4/netket/utils/plum/__init__.py +0 -61
- netket-3.12.4/netket/utils/plum/_version.py +0 -17
- netket-3.12.4/netket/utils/plum/alias.py +0 -166
- netket-3.12.4/netket/utils/plum/autoreload.py +0 -77
- netket-3.12.4/netket/utils/plum/dispatcher.py +0 -128
- netket-3.12.4/netket/utils/plum/function.py +0 -487
- netket-3.12.4/netket/utils/plum/method.py +0 -232
- netket-3.12.4/netket/utils/plum/overload.py +0 -9
- netket-3.12.4/netket/utils/plum/parametric.py +0 -421
- netket-3.12.4/netket/utils/plum/promotion.py +0 -169
- netket-3.12.4/netket/utils/plum/py.typed +0 -0
- netket-3.12.4/netket/utils/plum/repr.py +0 -179
- netket-3.12.4/netket/utils/plum/resolver.py +0 -307
- netket-3.12.4/netket/utils/plum/signature.py +0 -424
- netket-3.12.4/netket/utils/plum/type.py +0 -296
- netket-3.12.4/netket/utils/plum/util.py +0 -170
- {netket-3.12.4 → netket-3.13.0}/.gitignore +0 -0
- {netket-3.12.4 → netket-3.13.0}/LICENSE +0 -0
- {netket-3.12.4 → netket-3.13.0}/README.md +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/callbacks/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/callbacks/convergence_stopping.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/callbacks/earlystopping.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/callbacks/invalidlossstopping.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/callbacks/timeout.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/driver/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/driver/steady_state.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/driver/vmc.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/driver/vmc_common.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/errors.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/exact.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/driver/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/driver/tdvp.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/driver/tdvp_schmitt.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/driver/vmc_srt.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/dynamics/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/dynamics/_rk_solver.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/dynamics/_rk_solver_structures.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/dynamics/_rk_tableau.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/hilbert/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/hilbert/spin_orbital_fermions.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/logging/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/logging/hdf5_log.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/models/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/models/fast_rnn.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/models/rnn.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/rnn/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/rnn/cells.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/rnn/layers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/nn/rnn/ordering.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/observable/renyi2/S2_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/observable/renyi2/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/observable/renyi2/exact.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/observable/renyi2/expect.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/_fermion_operator_2nd_base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/_fermion_operator_2nd_jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/_fermion_operator_2nd_numba.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/_fermion_operator_2nd_utils.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/fermion.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/operator/pyscf.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/qsr/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/qsr/dataset.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/qsr/driver.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/qsr/logic_helpers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/sampler/metropolis.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/sampler/metropolis_pmap.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/sampler/rules/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/vqs/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/experimental/vqs/io.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/graph/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/graph/_lattice_edge_logic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/graph/abstract_graph.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/graph/lattice.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/graph/space_group.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/abstract_hilbert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/continuous_hilbert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/custom_hilbert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/fock.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/constraints/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/constraints/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/constraints/sum.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/unconstrained.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/index/uniform_tensor.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/particle.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/qubit.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/custom.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/doubled.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/fock.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/particle.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/qubit.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/spin.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/random/tensor_hilbert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/spin.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/hilbert/tensor_hilbert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_grad.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_jacobian/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_jacobian/default_mode.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_jacobian/jacobian_dense.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_jacobian/jacobian_pytree.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_jacobian/logic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_math.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_scanmap.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_sort.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_utils_dtype.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_utils_random.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_vjp.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/_vmap_chunked.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/jax/sharding.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/json_log.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/runtime_log.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/state_log.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/logging/tensorboard.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/README.md +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/autoreg.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/deepset.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/equivariant.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/fast_autoreg.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/full_space.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/gaussian.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/jastrow.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/mlp.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/ndm.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/rbm.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/tensor_networks/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/tensor_networks/mpdo.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/tensor_networks/mps.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/models/utils.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/activation.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/blocks/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/blocks/deepset.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/blocks/mlp.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/blocks/symmetry_sum.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/deprecation.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/initializers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/masked_linear.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/symmetric_linear.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/nn/utils.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_abstract_observable.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_abstract_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_abstract_super_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_bose_hubbard/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_bose_hubbard/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_bose_hubbard/jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_bose_hubbard/numba.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_continuous_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_discrete_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_graph_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_hamiltonian.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_heisenberg.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_ising/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_ising/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_ising/jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_ising/numba.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_kinetic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_lazy.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_liouvillian.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/compile_helpers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/convert.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/helpers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_local_operator/numba.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_pauli_strings/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_pauli_strings/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_pauli_strings/jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_pauli_strings/numba.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_potential.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/_sumoperators.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/operator/boson.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/linear_operator.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/common.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/qgt/qgt_onthefly_logic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/solver/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/optimizer/sr.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/exact.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/continuous_gaussian.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/custom_numpy.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/fixed.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/hamiltonian.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/hamiltonian_numpy.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/langevin.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/local.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/local_numpy.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/multiple.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/sampler/rules/tensor.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/stats/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/stats/_autocorr.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/stats/mc_stats.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/stats/mc_stats_old.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/stats/mpi_stats.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/_common.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/_cpu_info.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/_mpi_info.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/check_mpi.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/tools/info.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/array.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/config_flags.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/display/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/display/repr.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/float.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/_group.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/_permutation_group.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/_point_group.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/_semigroup.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/axial.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/cubic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/icosa.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/group/planar.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/holomorphic.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/model_frameworks/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/model_frameworks/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/model_frameworks/flax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/model_frameworks/haiku.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/model_frameworks/jax.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/moduletools.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/mpi/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/mpi/mpi.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/numbers.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/optional_deps.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/partial.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/seed.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/static_number.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/static_range.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/struct/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/struct/dataclass.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/struct/fields.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/struct/pytree.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/struct/utils.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/summation.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/timing.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/utils/types.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/base.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/deprecated.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/experimental.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/full_summ/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/full_summ/expect.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/common.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/kernels.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_mixed_state/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_mixed_state/expect.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_mixed_state/expect_chunked.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/__init__.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect_chunked.py +0 -0
- {netket-3.12.4 → netket-3.13.0}/netket/vqs/mc/mc_state/expect_grad_chunked.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: NetKet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.13.0
|
|
4
4
|
Summary: Netket : Machine Learning toolbox for many-body quantum systems.
|
|
5
5
|
Project-URL: homepage, https://www.netket.org
|
|
6
6
|
Project-URL: documentation, https://netket.readthedocs.io/en/latest/#
|
|
@@ -18,7 +18,6 @@ Classifier: Operating System :: Unix
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
|
-
Requires-Dist: beartype>=0.16.2
|
|
22
21
|
Requires-Dist: equinox<0.12,>=0.11.3
|
|
23
22
|
Requires-Dist: flax<0.9,>=0.7.1
|
|
24
23
|
Requires-Dist: igraph<0.12.0,>=0.10.0
|
|
@@ -26,18 +25,17 @@ Requires-Dist: jax<0.5,>=0.4.16
|
|
|
26
25
|
Requires-Dist: jaxlib<0.5,>=0.4.16
|
|
27
26
|
Requires-Dist: numba4jax<0.1,>=0.0.10.post1
|
|
28
27
|
Requires-Dist: numba<0.61,>=0.52
|
|
29
|
-
Requires-Dist: numpy
|
|
28
|
+
Requires-Dist: numpy<3.0,>=1.20
|
|
30
29
|
Requires-Dist: optax<0.3,>=0.1.3
|
|
31
30
|
Requires-Dist: orjson<4,>=3.4
|
|
31
|
+
Requires-Dist: plum-dispatch<3,>=2.4
|
|
32
32
|
Requires-Dist: rich>=10.0
|
|
33
33
|
Requires-Dist: scipy<2,>=1.5.3
|
|
34
34
|
Requires-Dist: tqdm<5,>=4.60
|
|
35
|
-
Requires-Dist: typing-extensions; python_version <= '3.10'
|
|
36
35
|
Provides-Extra: dev
|
|
37
36
|
Requires-Dist: black==23.9.1; extra == 'dev'
|
|
38
37
|
Requires-Dist: build; extra == 'dev'
|
|
39
38
|
Requires-Dist: coverage>=5; extra == 'dev'
|
|
40
|
-
Requires-Dist: ipython; extra == 'dev'
|
|
41
39
|
Requires-Dist: matplotlib>=3; extra == 'dev'
|
|
42
40
|
Requires-Dist: networkx<4,>=2.4; extra == 'dev'
|
|
43
41
|
Requires-Dist: pre-commit>=2.7; extra == 'dev'
|
|
@@ -161,6 +161,11 @@ class AbstractVariationalDriver(abc.ABC):
|
|
|
161
161
|
**modified in-place** adding new keys.
|
|
162
162
|
step: the current step number.
|
|
163
163
|
"""
|
|
164
|
+
# Always log the acceptance.
|
|
165
|
+
if hasattr(self.state, "sampler_state"):
|
|
166
|
+
acceptance = getattr(self.state.sampler_state, "acceptance", None)
|
|
167
|
+
if acceptance is not None:
|
|
168
|
+
log_dict["acceptance"] = acceptance
|
|
164
169
|
|
|
165
170
|
def reset(self):
|
|
166
171
|
"""
|
|
@@ -75,8 +75,7 @@ class FastRNNLayer(RNNLayer):
|
|
|
75
75
|
hidden = self._extract_hidden(outputs, index, prev_neighbors)
|
|
76
76
|
cell_mem, hidden = self.cell(inputs, cell_mem, hidden)
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
if not initializing:
|
|
78
|
+
if not self.is_initializing():
|
|
80
79
|
_cell_mem.value = cell_mem
|
|
81
80
|
_outputs.value = outputs.at[:, index, :].set(hidden)
|
|
82
81
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Copyright 2022 The NetKet Authors - All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from .variance_operator import VarianceObservable
|
|
16
|
+
|
|
17
|
+
from . import expect
|
|
18
|
+
from . import exact
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Copyright 2022 The NetKet Authors - All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import jax.numpy as jnp
|
|
16
|
+
import jax
|
|
17
|
+
from functools import partial
|
|
18
|
+
|
|
19
|
+
from netket.vqs import FullSumState, expect, expect_and_grad
|
|
20
|
+
import netket.jax as nkjax
|
|
21
|
+
from netket.utils import mpi
|
|
22
|
+
from netket.stats import Stats
|
|
23
|
+
|
|
24
|
+
from .variance_operator import VarianceObservable
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@expect.dispatch
|
|
28
|
+
def expect(vstate: FullSumState, variance_operator: VarianceObservable):
|
|
29
|
+
if variance_operator.hilbert != vstate.hilbert:
|
|
30
|
+
raise TypeError("Hilbert spaces should match")
|
|
31
|
+
|
|
32
|
+
operator_mtrx = variance_operator.operator.to_dense()
|
|
33
|
+
operator_squared_mtrx = variance_operator.operator_squared.to_dense()
|
|
34
|
+
|
|
35
|
+
return expect_and_grad_inner_fs(
|
|
36
|
+
vstate._apply_fun,
|
|
37
|
+
vstate.parameters,
|
|
38
|
+
vstate.model_state,
|
|
39
|
+
vstate._all_states,
|
|
40
|
+
operator_mtrx,
|
|
41
|
+
operator_squared_mtrx,
|
|
42
|
+
return_grad=False,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@expect_and_grad.dispatch
|
|
47
|
+
def expect_and_grad(
|
|
48
|
+
vstate: FullSumState,
|
|
49
|
+
variance_operator: VarianceObservable,
|
|
50
|
+
*,
|
|
51
|
+
mutable,
|
|
52
|
+
):
|
|
53
|
+
if variance_operator.hilbert != vstate.hilbert:
|
|
54
|
+
raise TypeError("Hilbert spaces should match")
|
|
55
|
+
|
|
56
|
+
operator_mtrx = variance_operator.operator.to_dense()
|
|
57
|
+
operator_squared_mtrx = variance_operator.operator_squared.to_dense()
|
|
58
|
+
|
|
59
|
+
return expect_and_grad_inner_fs(
|
|
60
|
+
vstate._apply_fun,
|
|
61
|
+
vstate.parameters,
|
|
62
|
+
vstate.model_state,
|
|
63
|
+
vstate._all_states,
|
|
64
|
+
operator_mtrx,
|
|
65
|
+
operator_squared_mtrx,
|
|
66
|
+
return_grad=True,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@partial(jax.jit, static_argnames=("afun", "return_grad"))
|
|
71
|
+
def expect_and_grad_inner_fs(
|
|
72
|
+
afun, params, model_state, sigma, operator_mtrx, operator_squared_mtrx, return_grad
|
|
73
|
+
):
|
|
74
|
+
def expect_kernel_var(params):
|
|
75
|
+
W = {"params": params, **model_state}
|
|
76
|
+
|
|
77
|
+
state = jnp.exp(afun(W, sigma))
|
|
78
|
+
state = state / jnp.linalg.norm(state)
|
|
79
|
+
|
|
80
|
+
O_mean = state.conj() @ (operator_mtrx @ state)
|
|
81
|
+
O2_mean = state.conj() @ (operator_squared_mtrx @ state)
|
|
82
|
+
|
|
83
|
+
return O2_mean - O_mean**2
|
|
84
|
+
|
|
85
|
+
if not return_grad:
|
|
86
|
+
var = expect_kernel_var(params)
|
|
87
|
+
return Stats(mean=var, error_of_mean=0.0, variance=0.0)
|
|
88
|
+
|
|
89
|
+
var, var_vjp_fun = nkjax.vjp(expect_kernel_var, params, conjugate=True)
|
|
90
|
+
|
|
91
|
+
var_grad = var_vjp_fun(jnp.ones_like(var))[0]
|
|
92
|
+
var_grad = jax.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], var_grad)
|
|
93
|
+
|
|
94
|
+
return Stats(mean=var, error_of_mean=0.0, variance=0.0), var_grad
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Copyright 2022 The NetKet Authors - All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import jax.numpy as jnp
|
|
16
|
+
import jax
|
|
17
|
+
from functools import partial
|
|
18
|
+
|
|
19
|
+
from netket.vqs import (
|
|
20
|
+
MCState,
|
|
21
|
+
expect,
|
|
22
|
+
expect_and_grad,
|
|
23
|
+
get_local_kernel,
|
|
24
|
+
get_local_kernel_arguments,
|
|
25
|
+
)
|
|
26
|
+
import netket.jax as nkjax
|
|
27
|
+
from netket.utils import mpi
|
|
28
|
+
|
|
29
|
+
from .variance_operator import VarianceObservable
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@expect.dispatch
|
|
33
|
+
def expect(vstate: MCState, variance_operator: VarianceObservable, chunk_size: None):
|
|
34
|
+
if variance_operator.hilbert != vstate.hilbert:
|
|
35
|
+
raise TypeError("Hilbert spaces should match")
|
|
36
|
+
|
|
37
|
+
local_kernel = get_local_kernel(vstate, variance_operator.operator)
|
|
38
|
+
local_kernel2 = get_local_kernel(vstate, variance_operator.operator_squared)
|
|
39
|
+
|
|
40
|
+
sigma, args = get_local_kernel_arguments(vstate, variance_operator.operator)
|
|
41
|
+
sigma, args2 = get_local_kernel_arguments(
|
|
42
|
+
vstate, variance_operator.operator_squared
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
return expect_and_grad_inner_mc(
|
|
46
|
+
vstate._apply_fun,
|
|
47
|
+
vstate.parameters,
|
|
48
|
+
vstate.model_state,
|
|
49
|
+
local_kernel,
|
|
50
|
+
local_kernel2,
|
|
51
|
+
sigma,
|
|
52
|
+
args,
|
|
53
|
+
args2,
|
|
54
|
+
return_grad=False,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@expect_and_grad.dispatch
|
|
59
|
+
def expect_and_grad(
|
|
60
|
+
vstate: MCState,
|
|
61
|
+
variance_operator: VarianceObservable,
|
|
62
|
+
chunk_size: None,
|
|
63
|
+
*,
|
|
64
|
+
mutable,
|
|
65
|
+
):
|
|
66
|
+
if variance_operator.hilbert != vstate.hilbert:
|
|
67
|
+
raise TypeError("Hilbert spaces should match")
|
|
68
|
+
|
|
69
|
+
local_kernel = get_local_kernel(vstate, variance_operator.operator)
|
|
70
|
+
local_kernel2 = get_local_kernel(vstate, variance_operator.operator_squared)
|
|
71
|
+
|
|
72
|
+
sigma, args = get_local_kernel_arguments(vstate, variance_operator.operator)
|
|
73
|
+
sigma, args2 = get_local_kernel_arguments(
|
|
74
|
+
vstate, variance_operator.operator_squared
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return expect_and_grad_inner_mc(
|
|
78
|
+
vstate._apply_fun,
|
|
79
|
+
vstate.parameters,
|
|
80
|
+
vstate.model_state,
|
|
81
|
+
local_kernel,
|
|
82
|
+
local_kernel2,
|
|
83
|
+
sigma,
|
|
84
|
+
args,
|
|
85
|
+
args2,
|
|
86
|
+
return_grad=True,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@partial(
|
|
91
|
+
jax.jit, static_argnames=("afun", "local_kernel", "local_kernel2", "return_grad")
|
|
92
|
+
)
|
|
93
|
+
def expect_and_grad_inner_mc(
|
|
94
|
+
afun,
|
|
95
|
+
params,
|
|
96
|
+
model_state,
|
|
97
|
+
local_kernel,
|
|
98
|
+
local_kernel2,
|
|
99
|
+
sigma,
|
|
100
|
+
args,
|
|
101
|
+
args2,
|
|
102
|
+
return_grad,
|
|
103
|
+
):
|
|
104
|
+
n_chains = sigma.shape[0]
|
|
105
|
+
|
|
106
|
+
σ = sigma.reshape(-1, sigma.shape[-1])
|
|
107
|
+
|
|
108
|
+
def expect_kernel_var(params):
|
|
109
|
+
log_pdf = lambda params, σ: 2 * afun({"params": params, **model_state}, σ).real
|
|
110
|
+
|
|
111
|
+
def local_kernel_var(params, σ):
|
|
112
|
+
W = {"params": params, **model_state}
|
|
113
|
+
|
|
114
|
+
O_mean = nkjax.expect(
|
|
115
|
+
log_pdf,
|
|
116
|
+
lambda params, σ: local_kernel(
|
|
117
|
+
afun, {"params": params, **model_state}, σ, args
|
|
118
|
+
),
|
|
119
|
+
params,
|
|
120
|
+
σ,
|
|
121
|
+
n_chains=n_chains,
|
|
122
|
+
)[0]
|
|
123
|
+
|
|
124
|
+
O2_loc = local_kernel2(afun, W, σ, args2)
|
|
125
|
+
|
|
126
|
+
return (O2_loc - O_mean**2).real
|
|
127
|
+
|
|
128
|
+
return nkjax.expect(log_pdf, local_kernel_var, params, σ, n_chains=n_chains)
|
|
129
|
+
|
|
130
|
+
if not return_grad:
|
|
131
|
+
var, var_stats = expect_kernel_var(params)
|
|
132
|
+
return var_stats
|
|
133
|
+
|
|
134
|
+
var, var_vjp_fun, var_stats = nkjax.vjp(
|
|
135
|
+
expect_kernel_var, params, has_aux=True, conjugate=True
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
var_grad = var_vjp_fun(jnp.ones_like(var))[0]
|
|
139
|
+
var_grad = jax.tree_map(lambda x: mpi.mpi_sum_jax(x)[0], var_grad)
|
|
140
|
+
|
|
141
|
+
return var_stats, var_grad
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Copyright 2022 The NetKet Authors - All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import netket as nk
|
|
16
|
+
from netket.operator import AbstractOperator
|
|
17
|
+
|
|
18
|
+
from netket.operator._abstract_observable import AbstractObservable
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class VarianceObservable(AbstractObservable):
|
|
22
|
+
r"""
|
|
23
|
+
Observable computing the variance of a quantum operator :math:`O`.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, operator: AbstractOperator, use_Oloc2: bool = False):
|
|
27
|
+
r"""
|
|
28
|
+
Constructs the observable computing the variance of an arbitrary quantum operator :math:`O` as:
|
|
29
|
+
|
|
30
|
+
.. math::
|
|
31
|
+
|
|
32
|
+
\text{Var} = \frac{\langle \Psi | O^2 | \Psi \rangle}{\langle \Psi | \Psi \rangle} - \bigg( \frac{\langle \Psi | O | \Psi \rangle}{\langle \Psi | \Psi \rangle}\bigg)^2
|
|
33
|
+
|
|
34
|
+
It can compute the first term using either the estimator of the squared operator :math:`O^2` (more precise but less efficient, since it requires
|
|
35
|
+
the connected configurations and the matrix elements of :math:`O^2`):
|
|
36
|
+
|
|
37
|
+
.. math::
|
|
38
|
+
|
|
39
|
+
\text{Var} = \mathbb{E}_{\sigma \sim |\Psi(\sigma)|^2}\bigg[\frac{\langle \sigma | O^2 | \Psi \rangle}{\langle \sigma | \Psi \rangle}\bigg] - \bigg(\mathbb{E}_{\sigma \sim |\Psi(\sigma)|^2}\bigg[\frac{\langle \sigma | O | \Psi \rangle}{\langle \sigma | \Psi \rangle}\bigg]\bigg)^2.
|
|
40
|
+
|
|
41
|
+
or using the square modulus of the estimator of :math:`O` (more noisy but more efficient):
|
|
42
|
+
|
|
43
|
+
.. math::
|
|
44
|
+
|
|
45
|
+
\text{Var} = \mathbb{E}_{\sigma \sim |\Psi(\sigma)|^2}\bigg[\bigg(\frac{\langle \sigma | O | \Psi \rangle}{\langle \sigma | \Psi \rangle} - \mathbb{E}_{\sigma \sim |\Psi(\sigma)|^2}\bigg[\frac{\langle \sigma | O | \Psi \rangle}{\langle \sigma | \Psi \rangle}\bigg]\bigg)^2\bigg]
|
|
46
|
+
|
|
47
|
+
This VariationalOperator wraps an operator such that the gradient will not be computed
|
|
48
|
+
with respect to the expectation value, but with respect to the variance.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
operator: The operator for which the variance is to be computed.
|
|
52
|
+
use_Oloc2: If True, uses the local estimator of the squared operator `O^2` for variance computation.
|
|
53
|
+
If False, uses only the operator `O` for variance computation (defaults to False).
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Observable computing the variance of `operator`.
|
|
57
|
+
"""
|
|
58
|
+
super().__init__(operator.hilbert)
|
|
59
|
+
self._operator = operator
|
|
60
|
+
|
|
61
|
+
if use_Oloc2:
|
|
62
|
+
self._operator_squared = nk.operator.Squared(operator)
|
|
63
|
+
else:
|
|
64
|
+
self._operator_squared = operator @ operator
|
|
65
|
+
|
|
66
|
+
@property
|
|
67
|
+
def operator(self) -> AbstractOperator:
|
|
68
|
+
"""
|
|
69
|
+
The operator for which the variance is to be computed.
|
|
70
|
+
"""
|
|
71
|
+
return self._operator
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def operator_squared(self) -> AbstractOperator:
|
|
75
|
+
"""
|
|
76
|
+
The squared of the operator for which the variance is to be computed.
|
|
77
|
+
Depending on the flag `use_Oloc2`, this can be the operator using the local
|
|
78
|
+
estimator of `O^2` (True), or the one using the square modulus of the
|
|
79
|
+
local estimator of `O` (False).
|
|
80
|
+
"""
|
|
81
|
+
return self._operator_squared
|
|
82
|
+
|
|
83
|
+
def __repr__(self):
|
|
84
|
+
return f"VarianceObservable(op={self.operator})"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Copyright 2020, 2021 The NetKet Authors - All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from . import rules
|
|
16
|
+
|
|
17
|
+
from .metropolis_pmap import MetropolisSamplerPmap
|
|
18
|
+
|
|
19
|
+
from .metropolis import MetropolisParticleExchange
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Deprecated bindings from stabilisaation
|
|
23
|
+
from netket.sampler import (
|
|
24
|
+
ParallelTemperingSampler as _deprecated_MetropolisPtSampler,
|
|
25
|
+
ParallelTemperingLocal as _deprecated_MetropolisLocalPtSampler,
|
|
26
|
+
ParallelTemperingExchange as _deprecated_MetropolisExchangePtSampler,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
_deprecations = {
|
|
30
|
+
# May 2024, NetKet 3.12
|
|
31
|
+
"MetropolisPtSampler": (
|
|
32
|
+
"netket.experimental.sampler.MetropolisPtSampler is deprecated: use "
|
|
33
|
+
"netket.sampler.ParallelTemperingSampler (netket >= 3.12)",
|
|
34
|
+
_deprecated_MetropolisPtSampler,
|
|
35
|
+
),
|
|
36
|
+
"MetropolisLocalPt": (
|
|
37
|
+
"netket.experimental.sampler.MetropolisLocalPt is deprecated: use "
|
|
38
|
+
"netket.sampler.ParallelTemperingLocal (netket >= 3.12)",
|
|
39
|
+
_deprecated_MetropolisLocalPtSampler,
|
|
40
|
+
),
|
|
41
|
+
"MetropolisExchangePt": (
|
|
42
|
+
"netket.experimental.sampler.MetropolisExchangePt is deprecated: use "
|
|
43
|
+
"netket.sampler.ParallelTemperingExchange (netket >= 3.12)",
|
|
44
|
+
_deprecated_MetropolisExchangePtSampler,
|
|
45
|
+
),
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
from netket.utils.deprecation import deprecation_getattr as _deprecation_getattr
|
|
49
|
+
from netket.utils import _hide_submodules
|
|
50
|
+
|
|
51
|
+
__getattr__ = _deprecation_getattr(__name__, _deprecations)
|
|
52
|
+
_hide_submodules(__name__)
|
|
53
|
+
|
|
54
|
+
del _deprecation_getattr
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
from functools import partial
|
|
2
|
-
|
|
3
|
-
import jax
|
|
4
|
-
import jax.numpy as jnp
|
|
5
1
|
from typing import Optional
|
|
6
2
|
import numpy as np
|
|
7
3
|
|
|
@@ -9,7 +5,6 @@ from netket.sampler.rules import ExchangeRule
|
|
|
9
5
|
from netket.graph import AbstractGraph
|
|
10
6
|
from netket.graph import disjoint_union
|
|
11
7
|
from netket.experimental.hilbert import SpinOrbitalFermions
|
|
12
|
-
from netket.jax.sharding import sharding_decorator
|
|
13
8
|
|
|
14
9
|
|
|
15
10
|
class ParticleExchangeRule(ExchangeRule):
|
|
@@ -72,52 +67,5 @@ class ParticleExchangeRule(ExchangeRule):
|
|
|
72
67
|
)
|
|
73
68
|
super().__init__(clusters=clusters, graph=graph, d_max=d_max)
|
|
74
69
|
|
|
75
|
-
def transition(rule, sampler, machine, parameters, state, key, σ):
|
|
76
|
-
n_chains = σ.shape[0]
|
|
77
|
-
|
|
78
|
-
# compute a mask for the clusters that can be hopped
|
|
79
|
-
hoppable_clusters = _compute_hoppable_clusters_mask(rule.clusters, σ)
|
|
80
|
-
|
|
81
|
-
keys = jnp.asarray(jax.random.split(key, n_chains))
|
|
82
|
-
|
|
83
|
-
# we use shard_map to avoid the all-gather coming from the batched jnp.take / indexing
|
|
84
|
-
@partial(sharding_decorator, sharded_args_tree=(True, True, True))
|
|
85
|
-
@jax.vmap
|
|
86
|
-
def _update_samples(key, σ, hoppable_clusters):
|
|
87
|
-
# pick a random cluster, taking into account the mask
|
|
88
|
-
n_conn = hoppable_clusters.sum(axis=-1)
|
|
89
|
-
cluster = jax.random.choice(
|
|
90
|
-
key,
|
|
91
|
-
a=jnp.arange(rule.clusters.shape[0]),
|
|
92
|
-
p=hoppable_clusters,
|
|
93
|
-
replace=True,
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
# sites to be exchanged
|
|
97
|
-
si = rule.clusters[cluster, 0]
|
|
98
|
-
sj = rule.clusters[cluster, 1]
|
|
99
|
-
|
|
100
|
-
σp = σ.at[si].set(σ[sj])
|
|
101
|
-
σp = σp.at[sj].set(σ[si])
|
|
102
|
-
|
|
103
|
-
# compute the number of connected sites
|
|
104
|
-
hoppable_clusters_proposed = _compute_hoppable_clusters_mask(
|
|
105
|
-
rule.clusters, σp
|
|
106
|
-
)
|
|
107
|
-
n_conn_proposed = hoppable_clusters_proposed.sum(axis=-1)
|
|
108
|
-
log_prob_corr = jnp.log(n_conn) - jnp.log(n_conn_proposed)
|
|
109
|
-
return σp, log_prob_corr
|
|
110
|
-
|
|
111
|
-
return _update_samples(keys, σ, hoppable_clusters)
|
|
112
|
-
|
|
113
70
|
def __repr__(self):
|
|
114
71
|
return f"ParticleExchangeRule(# of clusters: {len(self.clusters)})"
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
@jax.jit
|
|
118
|
-
def _compute_hoppable_clusters_mask(clusters, σ):
|
|
119
|
-
# mask the clusters to include only feasible moves (occ -> unocc, or the inverse)
|
|
120
|
-
hoppable_clusters_mask = ~jnp.isclose(
|
|
121
|
-
σ[..., clusters[:, 0]], σ[..., clusters[:, 1]]
|
|
122
|
-
)
|
|
123
|
-
return hoppable_clusters_mask
|
|
@@ -508,7 +508,7 @@ def KitaevHoneycomb(
|
|
|
508
508
|
Example:
|
|
509
509
|
Construct a Kitaev honeycomb lattice with 3 × 3 unit cells:
|
|
510
510
|
|
|
511
|
-
>>> from netket.graph import
|
|
511
|
+
>>> from netket.graph import KitaevHoneycomb
|
|
512
512
|
>>> g = KitaevHoneycomb(extent=[3, 3])
|
|
513
513
|
>>> print(g.n_nodes)
|
|
514
514
|
18
|
|
@@ -261,8 +261,24 @@ def DoubledGraph(graph: AbstractGraph) -> Graph:
|
|
|
261
261
|
return Graph(n_nodes=dnodes, edges=dedges)
|
|
262
262
|
|
|
263
263
|
|
|
264
|
-
def disjoint_union(
|
|
264
|
+
def disjoint_union(*graphs: tuple[Graph, ...]) -> Graph:
|
|
265
265
|
"""
|
|
266
|
-
Returns the disjoint union of
|
|
266
|
+
Returns the ordered disjoint union of the input graphs.
|
|
267
|
+
|
|
268
|
+
The ordering of the nodes is the same as the input order, so if
|
|
269
|
+
the I-th input graph has :math:`n_i` nodes, the first `[0, n_1[` nodes
|
|
270
|
+
will correspond to the first graph, the nodes between :math:`[n_1, n_1+n2[`
|
|
271
|
+
will correspond to the second graph, and so on and so forth.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
*graphs: A variable number of NetKet graphs (or lattices).
|
|
275
|
+
|
|
276
|
+
Output:
|
|
277
|
+
A NetKet Graph object.
|
|
267
278
|
"""
|
|
268
|
-
|
|
279
|
+
if len(graphs) == 0:
|
|
280
|
+
raise ValueError("Must provide at least one graph")
|
|
281
|
+
elif len(graphs) == 1:
|
|
282
|
+
return graphs[0]
|
|
283
|
+
else:
|
|
284
|
+
return Graph.from_igraph(igraph.disjoint_union([g._igraph for g in graphs]))
|
|
@@ -24,7 +24,7 @@ import jax.numpy as jnp
|
|
|
24
24
|
|
|
25
25
|
from equinox import error_if
|
|
26
26
|
|
|
27
|
-
from netket.utils.types import Array
|
|
27
|
+
from netket.utils.types import Array, DType
|
|
28
28
|
|
|
29
29
|
from .abstract_hilbert import AbstractHilbert
|
|
30
30
|
from .index import is_indexable
|
|
@@ -35,6 +35,17 @@ class DiscreteHilbert(AbstractHilbert):
|
|
|
35
35
|
|
|
36
36
|
This class defines the common interface that can be used to
|
|
37
37
|
interact with hilbert spaces on lattices.
|
|
38
|
+
|
|
39
|
+
The local degrees of freedom are discrete and numerable, therefore they can always be
|
|
40
|
+
converted to and from integers using the methods `states_to_local_indices` and
|
|
41
|
+
`local_indices_to_states`.
|
|
42
|
+
This can be used to simplify the implementation of operators that might act on the
|
|
43
|
+
hilbert space, to avoid reimplementing the logic for different values of the local
|
|
44
|
+
degrees of freedom.
|
|
45
|
+
|
|
46
|
+
If the Hilbert space is small enough, individual states can be converted to and from
|
|
47
|
+
integers labelling all the basis states. This is done using the methods `numbers_to_states`
|
|
48
|
+
and `states_to_numbers`.
|
|
38
49
|
"""
|
|
39
50
|
|
|
40
51
|
def __init__(self, shape: tuple[int, ...]):
|
|
@@ -236,6 +247,30 @@ class DiscreteHilbert(AbstractHilbert):
|
|
|
236
247
|
f"implemented for Hilbert space {self} of type {type(self)}"
|
|
237
248
|
)
|
|
238
249
|
|
|
250
|
+
def local_indices_to_states(self, x: Array, dtype: DType = None):
|
|
251
|
+
r"""
|
|
252
|
+
Converts a tensor of integers to the corresponding local_values in
|
|
253
|
+
this hilbert space.
|
|
254
|
+
|
|
255
|
+
Equivalent to
|
|
256
|
+
|
|
257
|
+
.. code::py
|
|
258
|
+
|
|
259
|
+
hilbert.local_states[x]
|
|
260
|
+
|
|
261
|
+
The input last dimension must match the size of this Hilbert space.
|
|
262
|
+
This function can be jax-jitted.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
x: a tensor with integer dtype and whose last dimension matches
|
|
266
|
+
the size of this Hilbert space.
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
a tensor with the same shape as the input, and values corresponding
|
|
270
|
+
to the local_state indexed by the input tensor `x`.
|
|
271
|
+
"""
|
|
272
|
+
raise NotImplementedError()
|
|
273
|
+
|
|
239
274
|
@property
|
|
240
275
|
def is_indexable(self) -> bool:
|
|
241
276
|
"""Whether the space can be indexed with an integer"""
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
import jax.numpy as jnp
|
|
16
16
|
|
|
17
17
|
from netket.utils.dispatch import parametric
|
|
18
|
+
from netket.utils.types import Array, DType
|
|
18
19
|
|
|
19
20
|
from .abstract_hilbert import AbstractHilbert
|
|
20
21
|
from .discrete_hilbert import DiscreteHilbert
|
|
22
|
+
from .index import is_indexable
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
@parametric
|
|
@@ -63,6 +65,12 @@ class DoubledHilbert(DiscreteHilbert):
|
|
|
63
65
|
def is_finite(self):
|
|
64
66
|
return self.physical.is_finite
|
|
65
67
|
|
|
68
|
+
@property
|
|
69
|
+
def is_indexable(self) -> bool:
|
|
70
|
+
"""Whether the space can be indexed with an integer"""
|
|
71
|
+
n = self.physical.n_states
|
|
72
|
+
return self.physical.is_indexable and is_indexable([n, n])
|
|
73
|
+
|
|
66
74
|
@property
|
|
67
75
|
def local_size(self):
|
|
68
76
|
return self.physical.local_size
|
|
@@ -143,6 +151,9 @@ class DoubledHilbert(DiscreteHilbert):
|
|
|
143
151
|
def states_to_local_indices(self, x):
|
|
144
152
|
return self.physical.states_to_local_indices(x)
|
|
145
153
|
|
|
154
|
+
def local_indices_to_states(self, x: Array, dtype: DType = None):
|
|
155
|
+
return self.physical.local_indices_to_states(x, dtype=dtype)
|
|
156
|
+
|
|
146
157
|
def __repr__(self):
|
|
147
158
|
return f"DoubledHilbert({self.physical})"
|
|
148
159
|
|