NetKet 3.11.3__tar.gz → 3.11.4__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.11.3 → netket-3.11.4}/PKG-INFO +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/_version.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/netket/driver/abstract_variational_driver.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/errors.py +4 -4
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp_common.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp_schmitt.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/vmc_srt.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_solver_structures.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_tableau.py +7 -7
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/driver.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/logic_helpers.py +3 -3
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_chunk_utils.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_grad.py +3 -1
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/jacobian_pytree.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/logic.py +14 -10
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_scanmap.py +5 -3
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_random.py +4 -2
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_tree.py +18 -10
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_vmap_chunked.py +9 -3
- {netket-3.11.3 → netket-3.11.4}/netket/jax/sharding.py +4 -2
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/common.py +6 -4
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_common.py +3 -3
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_dense.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_pytree.py +6 -6
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_pytree_logic.py +3 -3
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_onthefly.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_onthefly_logic.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/netket/utils/holomorphic.py +6 -6
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/base.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/common.py +1 -1
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_forces.py +5 -1
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_grad.py +2 -2
- {netket-3.11.3 → netket-3.11.4}/.gitignore +0 -0
- {netket-3.11.3 → netket-3.11.4}/LICENSE +0 -0
- {netket-3.11.3 → netket-3.11.4}/README.md +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/callbacks/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/callbacks/convergence_stopping.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/callbacks/earlystopping.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/callbacks/invalidlossstopping.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/callbacks/timeout.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/driver/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/driver/steady_state.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/driver/vmc.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/driver/vmc_common.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/exact.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_solver.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/hilbert/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/hilbert/spin_orbital_fermions.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/logging/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/logging/hdf5_log.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/fast_rnn.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/rnn.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/cells.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/layers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/layers_fast.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/ordering.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/S2_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/exact.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/expect.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_numba.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_utils.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/fermion.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/pyscf.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/dataset.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis_pmap.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis_pt.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/rules/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/rules/fermion_2nd.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/vqs/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/experimental/vqs/io.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/_lattice_edge_logic.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/abstract_graph.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/common_lattices.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/graph.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/lattice.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/graph/space_group.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/abstract_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/continuous_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/custom_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/discrete_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/doubled_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/fock.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/homogeneous.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/constrained.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/unconstrained.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/particle.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/qubit.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/custom.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/doubled.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/fock.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/particle.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/qubit.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/spin.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/tensor_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/spin.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/tensor_hilbert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/hilbert/tensor_hilbert_discrete.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_expect.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/default_mode.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/jacobian_dense.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_math.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_dtype.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_vjp.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/jax/_vjp_chunked.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/json_log.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/runtime_log.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/state_log.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/logging/tensorboard.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/README.md +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/autoreg.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/deepset.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/equivariant.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/fast_autoreg.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/full_space.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/gaussian.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/jastrow.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/mlp.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/mps.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/ndm.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/rbm.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/slater.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/models/utils.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/activation.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/deepset.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/mlp.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/symmetry_sum.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/deprecation.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/fast_masked_linear.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/initializers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/masked_linear.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/symmetric_linear.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/nn/utils.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_observable.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_super_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_bose_hubbard.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_continuous_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_discrete_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_discrete_operator_jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_graph_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_hamiltonian.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_heisenberg.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/numba.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_kinetic.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_lazy.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_liouvillian.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/compile_helpers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/convert.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/helpers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/numba.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/numba.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_potential.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/_sumoperators.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/boson.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/operator/spin.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/linear_operator.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/preconditioner.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/default.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/solver/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/solver/solvers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/optimizer/sr.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/autoreg.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/exact.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/metropolis.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/metropolis_numpy.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/continuous_gaussian.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/custom_numpy.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/exchange.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/fixed.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/hamiltonian.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/hamiltonian_numpy.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/langevin.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/local.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/local_numpy.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/multiple.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/tensor.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/stats/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/stats/_autocorr.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/stats/mc_stats.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/stats/mc_stats_old.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/stats/mpi_stats.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/_common.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/_cpu_info.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/_mpi_info.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/check_mpi.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/tools/info.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/_dependencies_check.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/array.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/config_flags.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/deprecation.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/dispatch.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/float.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_group.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_permutation_group.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_point_group.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_semigroup.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/axial.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/cubic.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/icosa.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/group/planar.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/history.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/base.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/flax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/haiku.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/jax.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/moduletools.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/mpi.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/primitives.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/numbers.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/optional_deps.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/partial.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/_version.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/alias.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/autoreload.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/dispatcher.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/function.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/method.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/overload.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/parametric.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/promotion.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/py.typed +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/repr.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/resolver.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/signature.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/type.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/util.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/seed.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/static_number.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/dataclass.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/fields.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/pytree.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/utils.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/summation.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/types.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/utils/version_check.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/deprecated.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/experimental.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/expect.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/state.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/kernels.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/expect.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/expect_chunked.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/state.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/__init__.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_chunked.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_forces_chunked.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_grad_chunked.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/state.py +0 -0
- {netket-3.11.3 → netket-3.11.4}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: NetKet
|
|
3
|
-
Version: 3.11.
|
|
3
|
+
Version: 3.11.4
|
|
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/#
|
|
@@ -376,7 +376,7 @@ class AbstractVariationalDriver(abc.ABC):
|
|
|
376
376
|
|
|
377
377
|
# Do not unpack operators, even if they are pytrees!
|
|
378
378
|
# this is necessary to support jax operators.
|
|
379
|
-
return jax.tree_map(
|
|
379
|
+
return jax.tree_util.tree_map(
|
|
380
380
|
self._estimate_stats,
|
|
381
381
|
observables,
|
|
382
382
|
is_leaf=lambda x: isinstance(x, AbstractObservable),
|
|
@@ -587,7 +587,7 @@ class RealQGTComplexDomainError(NetketError):
|
|
|
587
587
|
>>> _, vec = vstate.expect_and_grad(nk.operator.spin.sigmax(vstate.hilbert, 1))
|
|
588
588
|
>>> G = nk.optimizer.qgt.QGTOnTheFly(vstate, holomorphic=False)
|
|
589
589
|
>>>
|
|
590
|
-
>>> vec_real = jax.
|
|
590
|
+
>>> vec_real = jax.tree.map(lambda x: x.real, vec)
|
|
591
591
|
>>> sol = G@vec_real
|
|
592
592
|
|
|
593
593
|
Or, if you used the QGT in a linear solver, try using:
|
|
@@ -601,7 +601,7 @@ class RealQGTComplexDomainError(NetketError):
|
|
|
601
601
|
>>> _, vec = vstate.expect_and_grad(nk.operator.spin.sigmax(vstate.hilbert, 1))
|
|
602
602
|
>>>
|
|
603
603
|
>>> G = nk.optimizer.qgt.QGTOnTheFly(vstate, holomorphic=False)
|
|
604
|
-
>>> vec_real = jax.
|
|
604
|
+
>>> vec_real = jax.tree.map(lambda x: x.real, vec)
|
|
605
605
|
>>>
|
|
606
606
|
>>> linear_solver = jax.scipy.sparse.linalg.cg
|
|
607
607
|
>>> solution, info = G.solve(linear_solver, vec_real)
|
|
@@ -624,14 +624,14 @@ class RealQGTComplexDomainError(NetketError):
|
|
|
624
624
|
|
|
625
625
|
.. code:: python
|
|
626
626
|
|
|
627
|
-
>>> vec_real = jax.tree_map(lambda x: x.real, vec)
|
|
627
|
+
>>> vec_real = jax.tree_util.tree_map(lambda x: x.real, vec)
|
|
628
628
|
>>> G@vec_real
|
|
629
629
|
|
|
630
630
|
If you used the QGT in a linear solver, try using:
|
|
631
631
|
|
|
632
632
|
.. code:: python
|
|
633
633
|
|
|
634
|
-
>>> vec_real = jax.tree_map(lambda x: x.real, vec)
|
|
634
|
+
>>> vec_real = jax.tree_util.tree_map(lambda x: x.real, vec)
|
|
635
635
|
>>> G.solve(linear_solver, vec_real)
|
|
636
636
|
|
|
637
637
|
to fix this error.
|
|
@@ -162,7 +162,7 @@ def odefun_tdvp( # noqa: F811
|
|
|
162
162
|
|
|
163
163
|
@partial(jax.jit, static_argnums=(3, 4))
|
|
164
164
|
def _map_parameters(forces, parameters, loss_grad_factor, propagation_type, state_T):
|
|
165
|
-
forces = jax.tree_map(
|
|
165
|
+
forces = jax.tree_util.tree_map(
|
|
166
166
|
lambda x, target: loss_grad_factor * x,
|
|
167
167
|
forces,
|
|
168
168
|
parameters,
|
|
@@ -478,7 +478,7 @@ def odefun_host_callback(state, driver, *args, **kwargs):
|
|
|
478
478
|
if config.netket_experimental_disable_ode_jit:
|
|
479
479
|
return odefun(state, driver, *args, **kwargs)
|
|
480
480
|
|
|
481
|
-
result_shape = jax.tree_map(
|
|
481
|
+
result_shape = jax.tree_util.tree_map(
|
|
482
482
|
lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype),
|
|
483
483
|
state.parameters,
|
|
484
484
|
)
|
|
@@ -280,7 +280,7 @@ def odefun_schmitt(state: MCState, self: TDVPSchmitt, t, w, *, stage=0): # noqa
|
|
|
280
280
|
|
|
281
281
|
@partial(jax.jit, static_argnums=(3, 4))
|
|
282
282
|
def _map_parameters(forces, parameters, loss_grad_factor, propagation_type, state_T):
|
|
283
|
-
forces = jax.tree_map(
|
|
283
|
+
forces = jax.tree_util.tree_map(
|
|
284
284
|
lambda x, target: loss_grad_factor * x,
|
|
285
285
|
forces,
|
|
286
286
|
parameters,
|
|
@@ -210,7 +210,7 @@ class VMC_SRt(AbstractVariationalDriver):
|
|
|
210
210
|
self.jacobian_mode = jacobian_mode
|
|
211
211
|
self._linear_solver_fn = linear_solver_fn
|
|
212
212
|
|
|
213
|
-
self._params_structure = jax.tree_map(
|
|
213
|
+
self._params_structure = jax.tree_util.tree_map(
|
|
214
214
|
lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype), self.state.parameters
|
|
215
215
|
)
|
|
216
216
|
if not nkjax.tree_ishomogeneous(self._params_structure):
|
|
@@ -104,7 +104,7 @@ def euclidean_norm(x: Union[PyTree, Array]):
|
|
|
104
104
|
return jnp.sqrt(
|
|
105
105
|
jax.tree_util.tree_reduce(
|
|
106
106
|
lambda x, y: x + y,
|
|
107
|
-
jax.tree_map(lambda x: jnp.sum(jnp.abs(x) ** 2), x),
|
|
107
|
+
jax.tree_util.tree_map(lambda x: jnp.sum(jnp.abs(x) ** 2), x),
|
|
108
108
|
)
|
|
109
109
|
)
|
|
110
110
|
|
|
@@ -119,7 +119,7 @@ def maximum_norm(x: Union[PyTree, Array]):
|
|
|
119
119
|
return jnp.sqrt(
|
|
120
120
|
jax.tree_util.tree_reduce(
|
|
121
121
|
jnp.maximum,
|
|
122
|
-
jax.tree_map(lambda x: jnp.max(jnp.abs(x)), x),
|
|
122
|
+
jax.tree_util.tree_map(lambda x: jnp.max(jnp.abs(x)), x),
|
|
123
123
|
)
|
|
124
124
|
)
|
|
125
125
|
|
|
@@ -32,7 +32,7 @@ def expand_dim(tree: PyTree, sz: int):
|
|
|
32
32
|
def _expand(x):
|
|
33
33
|
return jnp.zeros((sz, *x.shape), dtype=x.dtype)
|
|
34
34
|
|
|
35
|
-
return jax.tree_map(_expand, tree)
|
|
35
|
+
return jax.tree_util.tree_map(_expand, tree)
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
@dataclass
|
|
@@ -114,19 +114,19 @@ class TableauRKExplicit:
|
|
|
114
114
|
|
|
115
115
|
k = expand_dim(y_t, self.stages)
|
|
116
116
|
for l in range(self.stages):
|
|
117
|
-
dy_l = jax.tree_map(
|
|
117
|
+
dy_l = jax.tree_util.tree_map(
|
|
118
118
|
lambda k: jnp.tensordot(
|
|
119
119
|
jnp.asarray(self.a[l], dtype=k.dtype), k, axes=1
|
|
120
120
|
),
|
|
121
121
|
k,
|
|
122
122
|
)
|
|
123
|
-
y_l = jax.tree_map(
|
|
123
|
+
y_l = jax.tree_util.tree_map(
|
|
124
124
|
lambda y_t, dy_l: jnp.asarray(y_t + dt * dy_l, dtype=dy_l.dtype),
|
|
125
125
|
y_t,
|
|
126
126
|
dy_l,
|
|
127
127
|
)
|
|
128
128
|
k_l = f(times[l], y_l, stage=l)
|
|
129
|
-
k = jax.tree_map(lambda k, k_l: k.at[l].set(k_l), k, k_l)
|
|
129
|
+
k = jax.tree_util.tree_map(lambda k, k_l: k.at[l].set(k_l), k, k_l)
|
|
130
130
|
|
|
131
131
|
return k
|
|
132
132
|
|
|
@@ -141,7 +141,7 @@ class TableauRKExplicit:
|
|
|
141
141
|
k = self._compute_slopes(f, t, dt, y_t)
|
|
142
142
|
|
|
143
143
|
b = self.b[0] if self.b.ndim == 2 else self.b
|
|
144
|
-
y_tp1 = jax.tree_map(
|
|
144
|
+
y_tp1 = jax.tree_util.tree_map(
|
|
145
145
|
lambda y_t, k: y_t
|
|
146
146
|
+ jnp.asarray(dt, dtype=y_t.dtype)
|
|
147
147
|
* jnp.tensordot(jnp.asarray(b, dtype=k.dtype), k, axes=1),
|
|
@@ -167,7 +167,7 @@ class TableauRKExplicit:
|
|
|
167
167
|
|
|
168
168
|
k = self._compute_slopes(f, t, dt, y_t)
|
|
169
169
|
|
|
170
|
-
y_tp1 = jax.tree_map(
|
|
170
|
+
y_tp1 = jax.tree_util.tree_map(
|
|
171
171
|
lambda y_t, k: y_t
|
|
172
172
|
+ jnp.asarray(dt, dtype=y_t.dtype)
|
|
173
173
|
* jnp.tensordot(jnp.asarray(self.b[0], dtype=k.dtype), k, axes=1),
|
|
@@ -175,7 +175,7 @@ class TableauRKExplicit:
|
|
|
175
175
|
k,
|
|
176
176
|
)
|
|
177
177
|
db = self.b[0] - self.b[1]
|
|
178
|
-
y_err = jax.tree_map(
|
|
178
|
+
y_err = jax.tree_util.tree_map(
|
|
179
179
|
lambda k: jnp.asarray(dt, dtype=k.dtype)
|
|
180
180
|
* jnp.tensordot(jnp.asarray(db, dtype=k.dtype), k, axes=1),
|
|
181
181
|
k,
|
|
@@ -268,7 +268,7 @@ class QSR(AbstractVariationalDriver):
|
|
|
268
268
|
|
|
269
269
|
# gather gradient
|
|
270
270
|
# grad <- grad - grad_cv + E[grad_cv]
|
|
271
|
-
self._grad_pos = jax.tree_map(
|
|
271
|
+
self._grad_pos = jax.tree_util.tree_map(
|
|
272
272
|
lambda x, y, Ey: x - y + Ey,
|
|
273
273
|
self._grad_pos,
|
|
274
274
|
self._grad_pos_cv,
|
|
@@ -281,7 +281,7 @@ class QSR(AbstractVariationalDriver):
|
|
|
281
281
|
|
|
282
282
|
# restore the square in prob = |psi|^2
|
|
283
283
|
if not self.mixed_states:
|
|
284
|
-
self._loss_grad = jax.tree_map(lambda x: x * 2.0, self._loss_grad)
|
|
284
|
+
self._loss_grad = jax.tree_util.tree_map(lambda x: x * 2.0, self._loss_grad)
|
|
285
285
|
|
|
286
286
|
# If parameters are real, then take only real part of the gradient (if it's complex)
|
|
287
287
|
self._loss_grad = tree_cast(self._loss_grad, self.state.parameters)
|
|
@@ -49,7 +49,7 @@ def _avg_O(afun, pars, model_state, sigma):
|
|
|
49
49
|
sigma = sigma.reshape((-1, sigma.shape[-1]))
|
|
50
50
|
_, vjp = nkjax.vjp(lambda W: afun({"params": W, **model_state}, sigma), pars)
|
|
51
51
|
(O_avg,) = vjp(jnp.ones(sigma.shape[0]) / sigma.shape[0])
|
|
52
|
-
return jax.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
52
|
+
return jax.tree_util.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
@dispatch
|
|
@@ -84,7 +84,7 @@ def _avg_O_exact(hilbert: AbstractHilbert, afun, pars, model_state):
|
|
|
84
84
|
psi_2 = jnp.abs(jnp.exp(afun({"params": pars, **model_state}, sigma))) ** 2
|
|
85
85
|
psi_2 /= jnp.sum(psi_2)
|
|
86
86
|
(O_avg,) = vjp(psi_2)
|
|
87
|
-
return jax.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
87
|
+
return jax.tree_util.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
@dispatch
|
|
@@ -181,7 +181,7 @@ def _grad_local_value_rotated(log_psi, pars, model_state, sigma_p, mel, secs):
|
|
|
181
181
|
|
|
182
182
|
(O_avg,) = vjp(jnp.ones_like(log_val_rotated) / log_val_rotated.size)
|
|
183
183
|
|
|
184
|
-
O_avg = jax.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
184
|
+
O_avg = jax.tree_util.tree_map(lambda x: mpi.mpi_mean_jax(x)[0], O_avg)
|
|
185
185
|
|
|
186
186
|
return log_val_rotated, O_avg
|
|
187
187
|
|
|
@@ -188,7 +188,9 @@ def value_and_grad(
|
|
|
188
188
|
)(*args, **kwargs)
|
|
189
189
|
|
|
190
190
|
out = out_r + 1j * out_j
|
|
191
|
-
grad = jax.tree_map(
|
|
191
|
+
grad = jax.tree_util.tree_map(
|
|
192
|
+
lambda re, im: re + 1j * im, grad_r, grad_j
|
|
193
|
+
)
|
|
192
194
|
|
|
193
195
|
if has_aux:
|
|
194
196
|
return out, grad, aux
|
|
@@ -50,7 +50,7 @@ def _jacobian_cplx(
|
|
|
50
50
|
params: PyTree,
|
|
51
51
|
samples: Array,
|
|
52
52
|
*,
|
|
53
|
-
_build_fn: Callable = partial(jax.tree_map, jax.lax.complex),
|
|
53
|
+
_build_fn: Callable = partial(jax.tree_util.tree_map, jax.lax.complex),
|
|
54
54
|
) -> PyTree:
|
|
55
55
|
"""Calculates Jacobian entries by vmapping grad.
|
|
56
56
|
Assumes the function is R→C, backpropagates 1 and -1j
|
|
@@ -85,7 +85,7 @@ def stack_jacobian_tuple(ok_re_im):
|
|
|
85
85
|
centered_oks_re_im : a tuple (ΔOᵣ, ΔOᵢ) of two PyTrees representing the real and imag part of ΔOⱼₖ
|
|
86
86
|
"""
|
|
87
87
|
re, im = ok_re_im
|
|
88
|
-
return jax.tree_map(lambda re, im: jnp.stack([re, im], axis=0), re, im)
|
|
88
|
+
return jax.tree_util.tree_map(lambda re, im: jnp.stack([re, im], axis=0), re, im)
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
jacobian_real_holo_fun = jacobian_real_holo
|
|
@@ -158,7 +158,7 @@ def jacobian(
|
|
|
158
158
|
.. code:: python
|
|
159
159
|
|
|
160
160
|
samples = samples.reshape(-1, samples.shape[-1])
|
|
161
|
-
parameters = jax.tree_map(lambda x: x.real, parameters)
|
|
161
|
+
parameters = jax.tree_util.tree_map(lambda x: x.real, parameters)
|
|
162
162
|
O_k = jax.jacrev(lambda pars: logpsi(pars, samples).real, parameters)
|
|
163
163
|
|
|
164
164
|
The jacobian that is returned is a PyTree with the same shape
|
|
@@ -201,7 +201,7 @@ def jacobian(
|
|
|
201
201
|
samples = samples.reshape(-1, samples.shape[-1])
|
|
202
202
|
Or_k = jax.jacrev(lambda pars: logpsi(pars, samples).real, parameters)
|
|
203
203
|
Oi_k = jax.jacrev(lambda pars: logpsi(pars, samples).imag, parameters)
|
|
204
|
-
O_k = jax.tree_map(lambda jr, ji: jnp.concatenate([jr, ji]], axis=1),
|
|
204
|
+
O_k = jax.tree_util.tree_map(lambda jr, ji: jnp.concatenate([jr, ji]], axis=1),
|
|
205
205
|
Or_k, Oi_k)
|
|
206
206
|
|
|
207
207
|
As both :code:`Or_k` and :code:`Oi_k` are real, instead of concatenating we
|
|
@@ -220,7 +220,7 @@ def jacobian(
|
|
|
220
220
|
|
|
221
221
|
.. code:: python
|
|
222
222
|
|
|
223
|
-
O_k_cmplx = jax.tree_map(lambda jri: jri[:, 0, :] + 1j* jri[:, 1, :], O_k)
|
|
223
|
+
O_k_cmplx = jax.tree_util.tree_map(lambda jri: jri[:, 0, :] + 1j* jri[:, 1, :], O_k)
|
|
224
224
|
|
|
225
225
|
|
|
226
226
|
**If some parameters** :math:`\theta_k` **are complex**, this mode splits the
|
|
@@ -249,13 +249,13 @@ def jacobian(
|
|
|
249
249
|
|
|
250
250
|
samples = samples.reshape(-1, samples.shape[-1])
|
|
251
251
|
# tree_to_real splits the parameters in a tuple like
|
|
252
|
-
# {'real': jax.
|
|
252
|
+
# {'real': jax.tree.map(jnp.real, pars), 'imag': jax.tree.map(jnp.imag, pars)}
|
|
253
253
|
pars_real, reconstruct = nk.jax.tree_to_real(parameters)
|
|
254
254
|
Or_k = jax.jacrev(lambda pars_re: logpsi(reconstruct(pars_re), samples).real,
|
|
255
255
|
pars_real)
|
|
256
256
|
Oi_k = jax.jacrev(lambda pars_re: logpsi(reconstruct(pars_re), samples).imag,
|
|
257
257
|
pars_real)
|
|
258
|
-
O_k = jax.tree_map(lambda jr, ji: jnp.concatenate([jr, ji]], axis=1),
|
|
258
|
+
O_k = jax.tree_util.tree_map(lambda jr, ji: jnp.concatenate([jr, ji]], axis=1),
|
|
259
259
|
Or_k, Oi_k)
|
|
260
260
|
|
|
261
261
|
This code is also valid if all parameters are real, in which case :code:`O_k.real`
|
|
@@ -352,20 +352,24 @@ def jacobian(
|
|
|
352
352
|
|
|
353
353
|
if pdf is None:
|
|
354
354
|
if center:
|
|
355
|
-
jacobians = jax.tree_map(
|
|
355
|
+
jacobians = jax.tree_util.tree_map(
|
|
356
|
+
lambda x: subtract_mean(x, axis=0), jacobians
|
|
357
|
+
)
|
|
356
358
|
|
|
357
359
|
if _sqrt_rescale:
|
|
358
360
|
sqrt_n_samp = math.sqrt(
|
|
359
361
|
samples.shape[0] * mpi.n_nodes
|
|
360
362
|
) # maintain weak type
|
|
361
|
-
jacobians = jax.tree_map(lambda x: x / sqrt_n_samp, jacobians)
|
|
363
|
+
jacobians = jax.tree_util.tree_map(lambda x: x / sqrt_n_samp, jacobians)
|
|
362
364
|
|
|
363
365
|
else:
|
|
364
366
|
if center:
|
|
365
|
-
jacobians_avg = jax.tree_map(
|
|
367
|
+
jacobians_avg = jax.tree_util.tree_map(
|
|
366
368
|
partial(sum_mpi, axis=0), _multiply_by_pdf(jacobians, pdf)
|
|
367
369
|
)
|
|
368
|
-
jacobians = jax.tree_map(
|
|
370
|
+
jacobians = jax.tree_util.tree_map(
|
|
371
|
+
lambda x, y: x - y, jacobians, jacobians_avg
|
|
372
|
+
)
|
|
369
373
|
|
|
370
374
|
if _sqrt_rescale:
|
|
371
375
|
jacobians = _multiply_by_pdf(jacobians, jnp.sqrt(pdf))
|
|
@@ -379,7 +383,7 @@ def _multiply_by_pdf(oks, pdf):
|
|
|
379
383
|
Used to multiply the log-derivatives by the probability density.
|
|
380
384
|
"""
|
|
381
385
|
|
|
382
|
-
return jax.tree_map(
|
|
386
|
+
return jax.tree_util.tree_map(
|
|
383
387
|
lambda x: jax.lax.broadcast_in_dim(pdf, x.shape, (0,)) * x,
|
|
384
388
|
oks,
|
|
385
389
|
)
|
|
@@ -10,8 +10,10 @@ if jax.__version_info__ >= (0, 4, 16):
|
|
|
10
10
|
else:
|
|
11
11
|
from jax import linear_util as lu
|
|
12
12
|
|
|
13
|
-
_tree_add = partial(jax.tree_map, jax.lax.add)
|
|
14
|
-
_tree_zeros_like = partial(
|
|
13
|
+
_tree_add = partial(jax.tree_util.tree_map, jax.lax.add)
|
|
14
|
+
_tree_zeros_like = partial(
|
|
15
|
+
jax.tree_util.tree_map, lambda x: jnp.zeros(x.shape, dtype=x.dtype)
|
|
16
|
+
)
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
# TODO put it somewhere
|
|
@@ -62,7 +64,7 @@ def scan_append_reduce(f, x, append_cond, op=_tree_add, zero_fun=_tree_zeros_lik
|
|
|
62
64
|
"""
|
|
63
65
|
# TODO: different op for each result
|
|
64
66
|
|
|
65
|
-
x0 = jax.tree_map(lambda x: x[0], x)
|
|
67
|
+
x0 = jax.tree_util.tree_map(lambda x: x[0], x)
|
|
66
68
|
|
|
67
69
|
# special code path if there is only one element
|
|
68
70
|
# to avoid having to rely on xla/llvm to optimize the overhead away
|
|
@@ -36,7 +36,9 @@ def PRNGKey(
|
|
|
36
36
|
else:
|
|
37
37
|
key = seed
|
|
38
38
|
|
|
39
|
-
key = jax.tree_map(
|
|
39
|
+
key = jax.tree_util.tree_map(
|
|
40
|
+
lambda k: mpi.mpi_bcast_jax(k, root=root, comm=comm)[0], key
|
|
41
|
+
)
|
|
40
42
|
|
|
41
43
|
return key
|
|
42
44
|
|
|
@@ -90,7 +92,7 @@ def mpi_split(key, *, root=0, comm=MPI_jax_comm) -> PRNGKeyT:
|
|
|
90
92
|
# on all MPI nodes?
|
|
91
93
|
keys = jax.random.split(key, mpi.n_nodes)
|
|
92
94
|
|
|
93
|
-
keys = jax.tree_map(lambda k: mpi.mpi_bcast_jax(k, root=root)[0], keys)
|
|
95
|
+
keys = jax.tree_util.tree_map(lambda k: mpi.mpi_bcast_jax(k, root=root)[0], keys)
|
|
94
96
|
|
|
95
97
|
return keys[mpi.rank]
|
|
96
98
|
|
|
@@ -76,14 +76,16 @@ def tree_leaf_iscomplex(pars: PyTree) -> bool:
|
|
|
76
76
|
"""
|
|
77
77
|
Returns true if at least one leaf in the tree has complex dtype.
|
|
78
78
|
"""
|
|
79
|
-
return any(
|
|
79
|
+
return any(
|
|
80
|
+
jax.tree_util.tree_leaves(jax.tree_util.tree_map(jnp.iscomplexobj, pars))
|
|
81
|
+
)
|
|
80
82
|
|
|
81
83
|
|
|
82
84
|
def tree_leaf_isreal(pars: PyTree) -> bool:
|
|
83
85
|
"""
|
|
84
86
|
Returns true if at least one leaf in the tree has real dtype.
|
|
85
87
|
"""
|
|
86
|
-
return any(jax.tree_util.tree_leaves(jax.tree_map(jnp.isrealobj, pars)))
|
|
88
|
+
return any(jax.tree_util.tree_leaves(jax.tree_util.tree_map(jnp.isrealobj, pars)))
|
|
87
89
|
|
|
88
90
|
|
|
89
91
|
def tree_ishomogeneous(pars: PyTree) -> bool:
|
|
@@ -100,7 +102,9 @@ def tree_conj(t: PyTree) -> PyTree:
|
|
|
100
102
|
Args:
|
|
101
103
|
t: pytree
|
|
102
104
|
"""
|
|
103
|
-
return jax.tree_map(
|
|
105
|
+
return jax.tree_util.tree_map(
|
|
106
|
+
lambda x: jax.lax.conj(x) if jnp.iscomplexobj(x) else x, t
|
|
107
|
+
)
|
|
104
108
|
|
|
105
109
|
|
|
106
110
|
@jax.jit
|
|
@@ -116,7 +120,9 @@ def tree_dot(a: PyTree, b: PyTree) -> Scalar:
|
|
|
116
120
|
"""
|
|
117
121
|
return jax.tree_util.tree_reduce(
|
|
118
122
|
jax.numpy.add,
|
|
119
|
-
jax.
|
|
123
|
+
jax.tree_util.tree_map(
|
|
124
|
+
jax.numpy.sum, jax.tree_util.tree_map(jax.numpy.multiply, a, b)
|
|
125
|
+
),
|
|
120
126
|
)
|
|
121
127
|
|
|
122
128
|
|
|
@@ -135,7 +141,7 @@ def tree_cast(x: PyTree, target: PyTree) -> PyTree:
|
|
|
135
141
|
"""
|
|
136
142
|
# astype alone would also work, however that raises ComplexWarning when casting complex to real
|
|
137
143
|
# therefore the real is taken first where needed
|
|
138
|
-
return jax.tree_map(
|
|
144
|
+
return jax.tree_util.tree_map(
|
|
139
145
|
lambda x, target: (x if jnp.iscomplexobj(target) else x.real).astype(
|
|
140
146
|
target.dtype
|
|
141
147
|
),
|
|
@@ -157,9 +163,9 @@ def tree_axpy(a: Scalar, x: PyTree, y: PyTree) -> PyTree:
|
|
|
157
163
|
where the leaves of x are first scaled with a.
|
|
158
164
|
"""
|
|
159
165
|
if is_scalar(a):
|
|
160
|
-
return jax.tree_map(lambda x_, y_: a * x_ + y_, x, y)
|
|
166
|
+
return jax.tree_util.tree_map(lambda x_, y_: a * x_ + y_, x, y)
|
|
161
167
|
else:
|
|
162
|
-
return jax.tree_map(lambda a_, x_, y_: a_ * x_ + y_, a, x, y)
|
|
168
|
+
return jax.tree_util.tree_map(lambda a_, x_, y_: a_ * x_ + y_, a, x, y)
|
|
163
169
|
|
|
164
170
|
|
|
165
171
|
class RealImagTuple(tuple):
|
|
@@ -188,8 +194,8 @@ def _tree_to_real(x):
|
|
|
188
194
|
if tree_leaf_iscomplex(x):
|
|
189
195
|
# TODO find a way to make it a nop?
|
|
190
196
|
# return jax.vmap(lambda y: jnp.array((y.real, y.imag)))(x)
|
|
191
|
-
r = jax.tree_map(lambda x: x.real if jnp.iscomplexobj(x) else x, x)
|
|
192
|
-
i = jax.tree_map(lambda x: x.imag if jnp.iscomplexobj(x) else None, x)
|
|
197
|
+
r = jax.tree_util.tree_map(lambda x: x.real if jnp.iscomplexobj(x) else x, x)
|
|
198
|
+
i = jax.tree_util.tree_map(lambda x: x.imag if jnp.iscomplexobj(x) else None, x)
|
|
193
199
|
return RealImagTuple((r, i))
|
|
194
200
|
else:
|
|
195
201
|
return x
|
|
@@ -198,7 +204,9 @@ def _tree_to_real(x):
|
|
|
198
204
|
def _tree_to_real_inverse(x):
|
|
199
205
|
if isinstance(x, RealImagTuple):
|
|
200
206
|
# not using jax.lax.complex because it would convert scalars to arrays
|
|
201
|
-
return jax.tree_map(
|
|
207
|
+
return jax.tree_util.tree_map(
|
|
208
|
+
lambda re, im: re + 1j * im if im is not None else re, *x
|
|
209
|
+
)
|
|
202
210
|
else:
|
|
203
211
|
return x
|
|
204
212
|
|
|
@@ -20,12 +20,16 @@ def _eval_fun_in_chunks(vmapped_fun, chunk_size, argnums, *args, **kwargs):
|
|
|
20
20
|
else:
|
|
21
21
|
# split inputs
|
|
22
22
|
def _get_chunks(x):
|
|
23
|
-
x_chunks = jax.tree_map(
|
|
23
|
+
x_chunks = jax.tree_util.tree_map(
|
|
24
|
+
lambda x_: x_[: n_elements - n_rest, ...], x
|
|
25
|
+
)
|
|
24
26
|
x_chunks = _chunk(x_chunks, chunk_size)
|
|
25
27
|
return x_chunks
|
|
26
28
|
|
|
27
29
|
def _get_rest(x):
|
|
28
|
-
x_rest = jax.tree_map(
|
|
30
|
+
x_rest = jax.tree_util.tree_map(
|
|
31
|
+
lambda x_: x_[n_elements - n_rest :, ...], x
|
|
32
|
+
)
|
|
29
33
|
return x_rest
|
|
30
34
|
|
|
31
35
|
args_chunks = [
|
|
@@ -41,7 +45,9 @@ def _eval_fun_in_chunks(vmapped_fun, chunk_size, argnums, *args, **kwargs):
|
|
|
41
45
|
y = y_chunks
|
|
42
46
|
else:
|
|
43
47
|
y_rest = vmapped_fun(*args_rest, **kwargs)
|
|
44
|
-
y = jax.tree_map(
|
|
48
|
+
y = jax.tree_util.tree_map(
|
|
49
|
+
lambda y1, y2: jnp.concatenate((y1, y2)), y_chunks, y_rest
|
|
50
|
+
)
|
|
45
51
|
return y
|
|
46
52
|
|
|
47
53
|
|
|
@@ -237,7 +237,7 @@ def extract_replicated(t):
|
|
|
237
237
|
else:
|
|
238
238
|
return x
|
|
239
239
|
|
|
240
|
-
return jax.tree_map(_extract_replicated, t)
|
|
240
|
+
return jax.tree_util.tree_map(_extract_replicated, t)
|
|
241
241
|
|
|
242
242
|
|
|
243
243
|
def gather(x):
|
|
@@ -466,7 +466,9 @@ def sharding_decorator(f, sharded_args_tree, reduction_op_tree=False):
|
|
|
466
466
|
if o is True:
|
|
467
467
|
return lambda x: Partial(partial(lambda x: x, x))
|
|
468
468
|
else:
|
|
469
|
-
return partial(
|
|
469
|
+
return partial(
|
|
470
|
+
jax.tree_util.tree_map, partial(o, axis_name="i")
|
|
471
|
+
)
|
|
470
472
|
|
|
471
473
|
reductions = [_sele_op(o) for o in reduction_op]
|
|
472
474
|
res = out_treedef.flatten_up_to(res)
|
|
@@ -39,13 +39,15 @@ def check_valid_vector_type(x: PyTree, target: PyTree):
|
|
|
39
39
|
|
|
40
40
|
try:
|
|
41
41
|
if isinstance(target, RealImagTuple):
|
|
42
|
-
jax.tree_map(check, x, target.real, target.imag)
|
|
42
|
+
jax.tree_util.tree_map(check, x, target.real, target.imag)
|
|
43
43
|
else:
|
|
44
|
-
jax.tree_map(check, x, target)
|
|
44
|
+
jax.tree_util.tree_map(check, x, target)
|
|
45
45
|
except ValueError:
|
|
46
46
|
# catches jax tree map errors
|
|
47
|
-
pars_struct = jax.tree_map(
|
|
48
|
-
|
|
47
|
+
pars_struct = jax.tree_util.tree_map(
|
|
48
|
+
lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype), x
|
|
49
|
+
)
|
|
50
|
+
vec_struct = jax.tree_util.tree_map(
|
|
49
51
|
lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype), target
|
|
50
52
|
)
|
|
51
53
|
|
|
@@ -82,7 +82,7 @@ def rescale(centered_oks, offset, *, ndims: int = 1):
|
|
|
82
82
|
# should be (0,) for standard, (0,1) when we have 2 jacobians in complex mode
|
|
83
83
|
axis = tuple(range(ndims))
|
|
84
84
|
|
|
85
|
-
scale = jax.tree_map(
|
|
85
|
+
scale = jax.tree_util.tree_map(
|
|
86
86
|
lambda x: (
|
|
87
87
|
mpi.mpi_sum_jax(jnp.sum((x * x.conj()).real, axis=axis, keepdims=True))[0]
|
|
88
88
|
+ offset
|
|
@@ -90,6 +90,6 @@ def rescale(centered_oks, offset, *, ndims: int = 1):
|
|
|
90
90
|
** 0.5,
|
|
91
91
|
centered_oks,
|
|
92
92
|
)
|
|
93
|
-
centered_oks = jax.tree_map(jnp.divide, centered_oks, scale)
|
|
94
|
-
scale = jax.tree_map(partial(jnp.squeeze, axis=axis), scale)
|
|
93
|
+
centered_oks = jax.tree_util.tree_map(jnp.divide, centered_oks, scale)
|
|
94
|
+
scale = jax.tree_util.tree_map(partial(jnp.squeeze, axis=axis), scale)
|
|
95
95
|
return centered_oks, scale
|
|
@@ -253,12 +253,12 @@ def _matmul(
|
|
|
253
253
|
vec, reassemble = nkjax.tree_to_real(vec)
|
|
254
254
|
|
|
255
255
|
if self.scale is not None:
|
|
256
|
-
vec = jax.tree_map(jnp.multiply, vec, self.scale)
|
|
256
|
+
vec = jax.tree_util.tree_map(jnp.multiply, vec, self.scale)
|
|
257
257
|
|
|
258
258
|
result = mat_vec(vec, self.O, self.diag_shift)
|
|
259
259
|
|
|
260
260
|
if self.scale is not None:
|
|
261
|
-
result = jax.tree_map(jnp.multiply, result, self.scale)
|
|
261
|
+
result = jax.tree_util.tree_map(jnp.multiply, result, self.scale)
|
|
262
262
|
|
|
263
263
|
# Reassemble real-imaginary split as needed
|
|
264
264
|
if reassemble is not None:
|
|
@@ -284,9 +284,9 @@ def _solve(
|
|
|
284
284
|
x0, _ = nkjax.tree_to_real(x0)
|
|
285
285
|
|
|
286
286
|
if self.scale is not None:
|
|
287
|
-
y = jax.tree_map(jnp.divide, y, self.scale)
|
|
287
|
+
y = jax.tree_util.tree_map(jnp.divide, y, self.scale)
|
|
288
288
|
if x0 is not None:
|
|
289
|
-
x0 = jax.tree_map(jnp.multiply, x0, self.scale)
|
|
289
|
+
x0 = jax.tree_util.tree_map(jnp.multiply, x0, self.scale)
|
|
290
290
|
|
|
291
291
|
# to pass the object LinearOperator itself down
|
|
292
292
|
# but avoid rescaling, we pass down an object with
|
|
@@ -297,7 +297,7 @@ def _solve(
|
|
|
297
297
|
out, info = solve_fun(unscaled_self, y, x0=x0)
|
|
298
298
|
|
|
299
299
|
if self.scale is not None:
|
|
300
|
-
out = jax.tree_map(jnp.divide, out, self.scale)
|
|
300
|
+
out = jax.tree_util.tree_map(jnp.divide, out, self.scale)
|
|
301
301
|
|
|
302
302
|
# Reassemble real-imaginary split as needed
|
|
303
303
|
if self.mode != "holomorphic":
|
|
@@ -311,7 +311,7 @@ def _to_dense(self: QGTJacobianPyTreeT) -> jnp.ndarray:
|
|
|
311
311
|
O = self.O
|
|
312
312
|
if self.mode == "complex":
|
|
313
313
|
# I want to iterate across the samples and real/imaginary part
|
|
314
|
-
O = jax.tree_map(lambda x: x.reshape(-1, *x.shape[2:]), O)
|
|
314
|
+
O = jax.tree_util.tree_map(lambda x: x.reshape(-1, *x.shape[2:]), O)
|
|
315
315
|
O = jax.vmap(lambda l: nkjax.tree_ravel(l)[0])(O)
|
|
316
316
|
|
|
317
317
|
if self.scale is None:
|
|
@@ -32,7 +32,7 @@ def _jvp(oks: PyTree, v: PyTree) -> Array:
|
|
|
32
32
|
Compute the matrix-vector product between the pytree jacobian oks and the pytree vector v
|
|
33
33
|
"""
|
|
34
34
|
td = lambda x, y: jnp.tensordot(x, y, axes=y.ndim)
|
|
35
|
-
t = jax.tree_map(td, oks, v)
|
|
35
|
+
t = jax.tree_util.tree_map(td, oks, v)
|
|
36
36
|
return jax.tree_util.tree_reduce(jnp.add, t)
|
|
37
37
|
|
|
38
38
|
|
|
@@ -40,8 +40,8 @@ def _vjp(oks: PyTree, w: Array) -> PyTree:
|
|
|
40
40
|
"""
|
|
41
41
|
Compute the vector-matrix product between the vector w and the pytree jacobian oks
|
|
42
42
|
"""
|
|
43
|
-
res = jax.tree_map(partial(jnp.tensordot, w, axes=w.ndim), oks)
|
|
44
|
-
return jax.tree_map(lambda x: mpi.mpi_sum_jax(x)[0], res) # MPI
|
|
43
|
+
res = jax.tree_util.tree_map(partial(jnp.tensordot, w, axes=w.ndim), oks)
|
|
44
|
+
return jax.tree_util.tree_map(lambda x: mpi.mpi_sum_jax(x)[0], res) # MPI
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def _mat_vec(v: PyTree, oks: PyTree) -> PyTree:
|