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.
Files changed (307) hide show
  1. {netket-3.11.3 → netket-3.11.4}/PKG-INFO +1 -1
  2. {netket-3.11.3 → netket-3.11.4}/netket/_version.py +2 -2
  3. {netket-3.11.3 → netket-3.11.4}/netket/driver/abstract_variational_driver.py +1 -1
  4. {netket-3.11.3 → netket-3.11.4}/netket/errors.py +4 -4
  5. {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp.py +1 -1
  6. {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp_common.py +1 -1
  7. {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/tdvp_schmitt.py +1 -1
  8. {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/vmc_srt.py +1 -1
  9. {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_solver_structures.py +2 -2
  10. {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_tableau.py +7 -7
  11. {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/driver.py +2 -2
  12. {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/logic_helpers.py +3 -3
  13. {netket-3.11.3 → netket-3.11.4}/netket/jax/_chunk_utils.py +1 -1
  14. {netket-3.11.3 → netket-3.11.4}/netket/jax/_grad.py +3 -1
  15. {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/jacobian_pytree.py +2 -2
  16. {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/logic.py +14 -10
  17. {netket-3.11.3 → netket-3.11.4}/netket/jax/_scanmap.py +5 -3
  18. {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_random.py +4 -2
  19. {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_tree.py +18 -10
  20. {netket-3.11.3 → netket-3.11.4}/netket/jax/_vmap_chunked.py +9 -3
  21. {netket-3.11.3 → netket-3.11.4}/netket/jax/sharding.py +4 -2
  22. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/common.py +6 -4
  23. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_common.py +3 -3
  24. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_dense.py +1 -1
  25. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_pytree.py +6 -6
  26. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_jacobian_pytree_logic.py +3 -3
  27. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_onthefly.py +1 -1
  28. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/qgt_onthefly_logic.py +2 -2
  29. {netket-3.11.3 → netket-3.11.4}/netket/utils/holomorphic.py +6 -6
  30. {netket-3.11.3 → netket-3.11.4}/netket/vqs/base.py +1 -1
  31. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/common.py +1 -1
  32. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_forces.py +5 -1
  33. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_grad.py +2 -2
  34. {netket-3.11.3 → netket-3.11.4}/.gitignore +0 -0
  35. {netket-3.11.3 → netket-3.11.4}/LICENSE +0 -0
  36. {netket-3.11.3 → netket-3.11.4}/README.md +0 -0
  37. {netket-3.11.3 → netket-3.11.4}/netket/__init__.py +0 -0
  38. {netket-3.11.3 → netket-3.11.4}/netket/callbacks/__init__.py +0 -0
  39. {netket-3.11.3 → netket-3.11.4}/netket/callbacks/convergence_stopping.py +0 -0
  40. {netket-3.11.3 → netket-3.11.4}/netket/callbacks/earlystopping.py +0 -0
  41. {netket-3.11.3 → netket-3.11.4}/netket/callbacks/invalidlossstopping.py +0 -0
  42. {netket-3.11.3 → netket-3.11.4}/netket/callbacks/timeout.py +0 -0
  43. {netket-3.11.3 → netket-3.11.4}/netket/driver/__init__.py +0 -0
  44. {netket-3.11.3 → netket-3.11.4}/netket/driver/steady_state.py +0 -0
  45. {netket-3.11.3 → netket-3.11.4}/netket/driver/vmc.py +0 -0
  46. {netket-3.11.3 → netket-3.11.4}/netket/driver/vmc_common.py +0 -0
  47. {netket-3.11.3 → netket-3.11.4}/netket/exact.py +0 -0
  48. {netket-3.11.3 → netket-3.11.4}/netket/experimental/__init__.py +0 -0
  49. {netket-3.11.3 → netket-3.11.4}/netket/experimental/driver/__init__.py +0 -0
  50. {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/__init__.py +0 -0
  51. {netket-3.11.3 → netket-3.11.4}/netket/experimental/dynamics/_rk_solver.py +0 -0
  52. {netket-3.11.3 → netket-3.11.4}/netket/experimental/hilbert/__init__.py +0 -0
  53. {netket-3.11.3 → netket-3.11.4}/netket/experimental/hilbert/spin_orbital_fermions.py +0 -0
  54. {netket-3.11.3 → netket-3.11.4}/netket/experimental/logging/__init__.py +0 -0
  55. {netket-3.11.3 → netket-3.11.4}/netket/experimental/logging/hdf5_log.py +0 -0
  56. {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/__init__.py +0 -0
  57. {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/fast_rnn.py +0 -0
  58. {netket-3.11.3 → netket-3.11.4}/netket/experimental/models/rnn.py +0 -0
  59. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/__init__.py +0 -0
  60. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/__init__.py +0 -0
  61. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/cells.py +0 -0
  62. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/layers.py +0 -0
  63. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/layers_fast.py +0 -0
  64. {netket-3.11.3 → netket-3.11.4}/netket/experimental/nn/rnn/ordering.py +0 -0
  65. {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/__init__.py +0 -0
  66. {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/S2_operator.py +0 -0
  67. {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/__init__.py +0 -0
  68. {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/exact.py +0 -0
  69. {netket-3.11.3 → netket-3.11.4}/netket/experimental/observable/renyi2/expect.py +0 -0
  70. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/__init__.py +0 -0
  71. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_base.py +0 -0
  72. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_jax.py +0 -0
  73. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_numba.py +0 -0
  74. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/_fermion_operator_2nd_utils.py +0 -0
  75. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/fermion.py +0 -0
  76. {netket-3.11.3 → netket-3.11.4}/netket/experimental/operator/pyscf.py +0 -0
  77. {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/__init__.py +0 -0
  78. {netket-3.11.3 → netket-3.11.4}/netket/experimental/qsr/dataset.py +0 -0
  79. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/__init__.py +0 -0
  80. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis.py +0 -0
  81. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis_pmap.py +0 -0
  82. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/metropolis_pt.py +0 -0
  83. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/rules/__init__.py +0 -0
  84. {netket-3.11.3 → netket-3.11.4}/netket/experimental/sampler/rules/fermion_2nd.py +0 -0
  85. {netket-3.11.3 → netket-3.11.4}/netket/experimental/vqs/__init__.py +0 -0
  86. {netket-3.11.3 → netket-3.11.4}/netket/experimental/vqs/io.py +0 -0
  87. {netket-3.11.3 → netket-3.11.4}/netket/graph/__init__.py +0 -0
  88. {netket-3.11.3 → netket-3.11.4}/netket/graph/_lattice_edge_logic.py +0 -0
  89. {netket-3.11.3 → netket-3.11.4}/netket/graph/abstract_graph.py +0 -0
  90. {netket-3.11.3 → netket-3.11.4}/netket/graph/common_lattices.py +0 -0
  91. {netket-3.11.3 → netket-3.11.4}/netket/graph/graph.py +0 -0
  92. {netket-3.11.3 → netket-3.11.4}/netket/graph/lattice.py +0 -0
  93. {netket-3.11.3 → netket-3.11.4}/netket/graph/space_group.py +0 -0
  94. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/__init__.py +0 -0
  95. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/abstract_hilbert.py +0 -0
  96. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/continuous_hilbert.py +0 -0
  97. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/custom_hilbert.py +0 -0
  98. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/discrete_hilbert.py +0 -0
  99. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/doubled_hilbert.py +0 -0
  100. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/fock.py +0 -0
  101. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/homogeneous.py +0 -0
  102. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/__init__.py +0 -0
  103. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/base.py +0 -0
  104. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/constrained.py +0 -0
  105. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/index/unconstrained.py +0 -0
  106. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/particle.py +0 -0
  107. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/qubit.py +0 -0
  108. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/__init__.py +0 -0
  109. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/base.py +0 -0
  110. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/custom.py +0 -0
  111. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/doubled.py +0 -0
  112. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/fock.py +0 -0
  113. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/particle.py +0 -0
  114. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/qubit.py +0 -0
  115. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/spin.py +0 -0
  116. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/random/tensor_hilbert.py +0 -0
  117. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/spin.py +0 -0
  118. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/tensor_hilbert.py +0 -0
  119. {netket-3.11.3 → netket-3.11.4}/netket/hilbert/tensor_hilbert_discrete.py +0 -0
  120. {netket-3.11.3 → netket-3.11.4}/netket/jax/__init__.py +0 -0
  121. {netket-3.11.3 → netket-3.11.4}/netket/jax/_expect.py +0 -0
  122. {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/__init__.py +0 -0
  123. {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/default_mode.py +0 -0
  124. {netket-3.11.3 → netket-3.11.4}/netket/jax/_jacobian/jacobian_dense.py +0 -0
  125. {netket-3.11.3 → netket-3.11.4}/netket/jax/_math.py +0 -0
  126. {netket-3.11.3 → netket-3.11.4}/netket/jax/_utils_dtype.py +0 -0
  127. {netket-3.11.3 → netket-3.11.4}/netket/jax/_vjp.py +0 -0
  128. {netket-3.11.3 → netket-3.11.4}/netket/jax/_vjp_chunked.py +0 -0
  129. {netket-3.11.3 → netket-3.11.4}/netket/logging/__init__.py +0 -0
  130. {netket-3.11.3 → netket-3.11.4}/netket/logging/base.py +0 -0
  131. {netket-3.11.3 → netket-3.11.4}/netket/logging/json_log.py +0 -0
  132. {netket-3.11.3 → netket-3.11.4}/netket/logging/runtime_log.py +0 -0
  133. {netket-3.11.3 → netket-3.11.4}/netket/logging/state_log.py +0 -0
  134. {netket-3.11.3 → netket-3.11.4}/netket/logging/tensorboard.py +0 -0
  135. {netket-3.11.3 → netket-3.11.4}/netket/models/README.md +0 -0
  136. {netket-3.11.3 → netket-3.11.4}/netket/models/__init__.py +0 -0
  137. {netket-3.11.3 → netket-3.11.4}/netket/models/autoreg.py +0 -0
  138. {netket-3.11.3 → netket-3.11.4}/netket/models/deepset.py +0 -0
  139. {netket-3.11.3 → netket-3.11.4}/netket/models/equivariant.py +0 -0
  140. {netket-3.11.3 → netket-3.11.4}/netket/models/fast_autoreg.py +0 -0
  141. {netket-3.11.3 → netket-3.11.4}/netket/models/full_space.py +0 -0
  142. {netket-3.11.3 → netket-3.11.4}/netket/models/gaussian.py +0 -0
  143. {netket-3.11.3 → netket-3.11.4}/netket/models/jastrow.py +0 -0
  144. {netket-3.11.3 → netket-3.11.4}/netket/models/mlp.py +0 -0
  145. {netket-3.11.3 → netket-3.11.4}/netket/models/mps.py +0 -0
  146. {netket-3.11.3 → netket-3.11.4}/netket/models/ndm.py +0 -0
  147. {netket-3.11.3 → netket-3.11.4}/netket/models/rbm.py +0 -0
  148. {netket-3.11.3 → netket-3.11.4}/netket/models/slater.py +0 -0
  149. {netket-3.11.3 → netket-3.11.4}/netket/models/utils.py +0 -0
  150. {netket-3.11.3 → netket-3.11.4}/netket/nn/__init__.py +0 -0
  151. {netket-3.11.3 → netket-3.11.4}/netket/nn/activation.py +0 -0
  152. {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/__init__.py +0 -0
  153. {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/deepset.py +0 -0
  154. {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/mlp.py +0 -0
  155. {netket-3.11.3 → netket-3.11.4}/netket/nn/blocks/symmetry_sum.py +0 -0
  156. {netket-3.11.3 → netket-3.11.4}/netket/nn/deprecation.py +0 -0
  157. {netket-3.11.3 → netket-3.11.4}/netket/nn/fast_masked_linear.py +0 -0
  158. {netket-3.11.3 → netket-3.11.4}/netket/nn/initializers.py +0 -0
  159. {netket-3.11.3 → netket-3.11.4}/netket/nn/masked_linear.py +0 -0
  160. {netket-3.11.3 → netket-3.11.4}/netket/nn/symmetric_linear.py +0 -0
  161. {netket-3.11.3 → netket-3.11.4}/netket/nn/utils.py +0 -0
  162. {netket-3.11.3 → netket-3.11.4}/netket/operator/__init__.py +0 -0
  163. {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_observable.py +0 -0
  164. {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_operator.py +0 -0
  165. {netket-3.11.3 → netket-3.11.4}/netket/operator/_abstract_super_operator.py +0 -0
  166. {netket-3.11.3 → netket-3.11.4}/netket/operator/_bose_hubbard.py +0 -0
  167. {netket-3.11.3 → netket-3.11.4}/netket/operator/_continuous_operator.py +0 -0
  168. {netket-3.11.3 → netket-3.11.4}/netket/operator/_discrete_operator.py +0 -0
  169. {netket-3.11.3 → netket-3.11.4}/netket/operator/_discrete_operator_jax.py +0 -0
  170. {netket-3.11.3 → netket-3.11.4}/netket/operator/_graph_operator.py +0 -0
  171. {netket-3.11.3 → netket-3.11.4}/netket/operator/_hamiltonian.py +0 -0
  172. {netket-3.11.3 → netket-3.11.4}/netket/operator/_heisenberg.py +0 -0
  173. {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/__init__.py +0 -0
  174. {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/base.py +0 -0
  175. {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/jax.py +0 -0
  176. {netket-3.11.3 → netket-3.11.4}/netket/operator/_ising/numba.py +0 -0
  177. {netket-3.11.3 → netket-3.11.4}/netket/operator/_kinetic.py +0 -0
  178. {netket-3.11.3 → netket-3.11.4}/netket/operator/_lazy.py +0 -0
  179. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_liouvillian.py +0 -0
  180. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/__init__.py +0 -0
  181. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/base.py +0 -0
  182. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/compile_helpers.py +0 -0
  183. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/convert.py +0 -0
  184. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/helpers.py +0 -0
  185. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/jax.py +0 -0
  186. {netket-3.11.3 → netket-3.11.4}/netket/operator/_local_operator/numba.py +0 -0
  187. {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/__init__.py +0 -0
  188. {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/base.py +0 -0
  189. {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/jax.py +0 -0
  190. {netket-3.11.3 → netket-3.11.4}/netket/operator/_pauli_strings/numba.py +0 -0
  191. {netket-3.11.3 → netket-3.11.4}/netket/operator/_potential.py +0 -0
  192. {netket-3.11.3 → netket-3.11.4}/netket/operator/_sumoperators.py +0 -0
  193. {netket-3.11.3 → netket-3.11.4}/netket/operator/boson.py +0 -0
  194. {netket-3.11.3 → netket-3.11.4}/netket/operator/spin.py +0 -0
  195. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/__init__.py +0 -0
  196. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/linear_operator.py +0 -0
  197. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/preconditioner.py +0 -0
  198. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/__init__.py +0 -0
  199. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/qgt/default.py +0 -0
  200. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/solver/__init__.py +0 -0
  201. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/solver/solvers.py +0 -0
  202. {netket-3.11.3 → netket-3.11.4}/netket/optimizer/sr.py +0 -0
  203. {netket-3.11.3 → netket-3.11.4}/netket/sampler/__init__.py +0 -0
  204. {netket-3.11.3 → netket-3.11.4}/netket/sampler/autoreg.py +0 -0
  205. {netket-3.11.3 → netket-3.11.4}/netket/sampler/base.py +0 -0
  206. {netket-3.11.3 → netket-3.11.4}/netket/sampler/exact.py +0 -0
  207. {netket-3.11.3 → netket-3.11.4}/netket/sampler/metropolis.py +0 -0
  208. {netket-3.11.3 → netket-3.11.4}/netket/sampler/metropolis_numpy.py +0 -0
  209. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/__init__.py +0 -0
  210. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/base.py +0 -0
  211. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/continuous_gaussian.py +0 -0
  212. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/custom_numpy.py +0 -0
  213. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/exchange.py +0 -0
  214. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/fixed.py +0 -0
  215. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/hamiltonian.py +0 -0
  216. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/hamiltonian_numpy.py +0 -0
  217. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/langevin.py +0 -0
  218. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/local.py +0 -0
  219. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/local_numpy.py +0 -0
  220. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/multiple.py +0 -0
  221. {netket-3.11.3 → netket-3.11.4}/netket/sampler/rules/tensor.py +0 -0
  222. {netket-3.11.3 → netket-3.11.4}/netket/stats/__init__.py +0 -0
  223. {netket-3.11.3 → netket-3.11.4}/netket/stats/_autocorr.py +0 -0
  224. {netket-3.11.3 → netket-3.11.4}/netket/stats/mc_stats.py +0 -0
  225. {netket-3.11.3 → netket-3.11.4}/netket/stats/mc_stats_old.py +0 -0
  226. {netket-3.11.3 → netket-3.11.4}/netket/stats/mpi_stats.py +0 -0
  227. {netket-3.11.3 → netket-3.11.4}/netket/tools/__init__.py +0 -0
  228. {netket-3.11.3 → netket-3.11.4}/netket/tools/_common.py +0 -0
  229. {netket-3.11.3 → netket-3.11.4}/netket/tools/_cpu_info.py +0 -0
  230. {netket-3.11.3 → netket-3.11.4}/netket/tools/_mpi_info.py +0 -0
  231. {netket-3.11.3 → netket-3.11.4}/netket/tools/check_mpi.py +0 -0
  232. {netket-3.11.3 → netket-3.11.4}/netket/tools/info.py +0 -0
  233. {netket-3.11.3 → netket-3.11.4}/netket/utils/__init__.py +0 -0
  234. {netket-3.11.3 → netket-3.11.4}/netket/utils/_dependencies_check.py +0 -0
  235. {netket-3.11.3 → netket-3.11.4}/netket/utils/array.py +0 -0
  236. {netket-3.11.3 → netket-3.11.4}/netket/utils/config_flags.py +0 -0
  237. {netket-3.11.3 → netket-3.11.4}/netket/utils/deprecation.py +0 -0
  238. {netket-3.11.3 → netket-3.11.4}/netket/utils/dispatch.py +0 -0
  239. {netket-3.11.3 → netket-3.11.4}/netket/utils/float.py +0 -0
  240. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/__init__.py +0 -0
  241. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_group.py +0 -0
  242. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_permutation_group.py +0 -0
  243. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_point_group.py +0 -0
  244. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/_semigroup.py +0 -0
  245. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/axial.py +0 -0
  246. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/cubic.py +0 -0
  247. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/icosa.py +0 -0
  248. {netket-3.11.3 → netket-3.11.4}/netket/utils/group/planar.py +0 -0
  249. {netket-3.11.3 → netket-3.11.4}/netket/utils/history.py +0 -0
  250. {netket-3.11.3 → netket-3.11.4}/netket/utils/jax.py +0 -0
  251. {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/__init__.py +0 -0
  252. {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/base.py +0 -0
  253. {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/flax.py +0 -0
  254. {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/haiku.py +0 -0
  255. {netket-3.11.3 → netket-3.11.4}/netket/utils/model_frameworks/jax.py +0 -0
  256. {netket-3.11.3 → netket-3.11.4}/netket/utils/moduletools.py +0 -0
  257. {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/__init__.py +0 -0
  258. {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/mpi.py +0 -0
  259. {netket-3.11.3 → netket-3.11.4}/netket/utils/mpi/primitives.py +0 -0
  260. {netket-3.11.3 → netket-3.11.4}/netket/utils/numbers.py +0 -0
  261. {netket-3.11.3 → netket-3.11.4}/netket/utils/optional_deps.py +0 -0
  262. {netket-3.11.3 → netket-3.11.4}/netket/utils/partial.py +0 -0
  263. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/__init__.py +0 -0
  264. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/_version.py +0 -0
  265. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/alias.py +0 -0
  266. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/autoreload.py +0 -0
  267. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/dispatcher.py +0 -0
  268. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/function.py +0 -0
  269. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/method.py +0 -0
  270. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/overload.py +0 -0
  271. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/parametric.py +0 -0
  272. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/promotion.py +0 -0
  273. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/py.typed +0 -0
  274. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/repr.py +0 -0
  275. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/resolver.py +0 -0
  276. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/signature.py +0 -0
  277. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/type.py +0 -0
  278. {netket-3.11.3 → netket-3.11.4}/netket/utils/plum/util.py +0 -0
  279. {netket-3.11.3 → netket-3.11.4}/netket/utils/seed.py +0 -0
  280. {netket-3.11.3 → netket-3.11.4}/netket/utils/static_number.py +0 -0
  281. {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/__init__.py +0 -0
  282. {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/dataclass.py +0 -0
  283. {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/fields.py +0 -0
  284. {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/pytree.py +0 -0
  285. {netket-3.11.3 → netket-3.11.4}/netket/utils/struct/utils.py +0 -0
  286. {netket-3.11.3 → netket-3.11.4}/netket/utils/summation.py +0 -0
  287. {netket-3.11.3 → netket-3.11.4}/netket/utils/types.py +0 -0
  288. {netket-3.11.3 → netket-3.11.4}/netket/utils/version_check.py +0 -0
  289. {netket-3.11.3 → netket-3.11.4}/netket/vqs/__init__.py +0 -0
  290. {netket-3.11.3 → netket-3.11.4}/netket/vqs/deprecated.py +0 -0
  291. {netket-3.11.3 → netket-3.11.4}/netket/vqs/experimental.py +0 -0
  292. {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/__init__.py +0 -0
  293. {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/expect.py +0 -0
  294. {netket-3.11.3 → netket-3.11.4}/netket/vqs/full_summ/state.py +0 -0
  295. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/__init__.py +0 -0
  296. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/kernels.py +0 -0
  297. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/__init__.py +0 -0
  298. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/expect.py +0 -0
  299. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/expect_chunked.py +0 -0
  300. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_mixed_state/state.py +0 -0
  301. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/__init__.py +0 -0
  302. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect.py +0 -0
  303. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_chunked.py +0 -0
  304. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_forces_chunked.py +0 -0
  305. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/expect_grad_chunked.py +0 -0
  306. {netket-3.11.3 → netket-3.11.4}/netket/vqs/mc/mc_state/state.py +0 -0
  307. {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
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/#
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '3.11.3'
16
- __version_tuple__ = version_tuple = (3, 11, 3)
15
+ __version__ = version = '3.11.4'
16
+ __version_tuple__ = version_tuple = (3, 11, 4)
@@ -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.tree_map(lambda x: x.real, vec)
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.tree_map(lambda x: x.real, vec)
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
 
@@ -4,7 +4,7 @@ from functools import partial
4
4
 
5
5
  def _treeify(f):
6
6
  def _f(x, *args, **kwargs):
7
- return jax.tree_map(lambda y: f(y, *args, **kwargs), x)
7
+ return jax.tree_util.tree_map(lambda y: f(y, *args, **kwargs), x)
8
8
 
9
9
  return _f
10
10
 
@@ -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(lambda re, im: re + 1j * im, grad_r, grad_j)
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.tree_map(jnp.real, pars), 'imag': jax.tree_map(jnp.imag, pars)}
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(lambda x: subtract_mean(x, axis=0), jacobians)
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(lambda x, y: x - y, jacobians, jacobians_avg)
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(jax.tree_map, lambda x: jnp.zeros(x.shape, dtype=x.dtype))
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(lambda k: mpi.mpi_bcast_jax(k, root=root, comm=comm)[0], key)
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(jax.tree_util.tree_leaves(jax.tree_map(jnp.iscomplexobj, pars)))
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(lambda x: jax.lax.conj(x) if jnp.iscomplexobj(x) else x, t)
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.tree_map(jax.numpy.sum, jax.tree_map(jax.numpy.multiply, a, b)),
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(lambda re, im: re + 1j * im if im is not None else re, *x)
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(lambda x_: x_[: n_elements - n_rest, ...], x)
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(lambda x_: x_[n_elements - n_rest :, ...], x)
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(lambda y1, y2: jnp.concatenate((y1, y2)), y_chunks, y_rest)
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(jax.tree_map, partial(o, axis_name="i"))
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(lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype), x)
48
- vec_struct = jax.tree_map(
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
@@ -146,7 +146,7 @@ def QGTJacobianDense(
146
146
  else:
147
147
  scale = None
148
148
 
149
- pars_struct = jax.tree_map(
149
+ pars_struct = jax.tree_util.tree_map(
150
150
  lambda x: jax.ShapeDtypeStruct(x.shape, x.dtype), vstate.parameters
151
151
  )
152
152
 
@@ -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:
@@ -243,7 +243,7 @@ def _solve(
243
243
 
244
244
  # we could cache this...
245
245
  if x0 is None:
246
- x0 = jax.tree_map(jnp.zeros_like, y)
246
+ x0 = jax.tree_util.tree_map(jnp.zeros_like, y)
247
247
 
248
248
  out, info = solve_fun(self, y, x0=x0)
249
249
  return out, info