NetKet 3.11.2__tar.gz → 3.11.3__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.2 → netket-3.11.3}/PKG-INFO +4 -3
- {netket-3.11.2 → netket-3.11.3}/netket/_version.py +2 -2
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/observable/renyi2/exact.py +6 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/_fermion_operator_2nd_base.py +38 -18
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/_fermion_operator_2nd_utils.py +21 -5
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_discrete_operator_jax.py +25 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/struct/pytree.py +14 -9
- {netket-3.11.2 → netket-3.11.3}/pyproject.toml +2 -1
- {netket-3.11.2 → netket-3.11.3}/.gitignore +0 -0
- {netket-3.11.2 → netket-3.11.3}/LICENSE +0 -0
- {netket-3.11.2 → netket-3.11.3}/README.md +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/callbacks/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/callbacks/convergence_stopping.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/callbacks/earlystopping.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/callbacks/invalidlossstopping.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/callbacks/timeout.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/driver/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/driver/abstract_variational_driver.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/driver/steady_state.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/driver/vmc.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/driver/vmc_common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/errors.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/exact.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/driver/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/driver/tdvp.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/driver/tdvp_common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/driver/tdvp_schmitt.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/driver/vmc_srt.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/dynamics/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/dynamics/_rk_solver.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/dynamics/_rk_solver_structures.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/dynamics/_rk_tableau.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/hilbert/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/hilbert/spin_orbital_fermions.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/logging/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/logging/hdf5_log.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/models/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/models/fast_rnn.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/models/rnn.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/rnn/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/rnn/cells.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/rnn/layers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/rnn/layers_fast.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/nn/rnn/ordering.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/observable/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/observable/renyi2/S2_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/observable/renyi2/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/observable/renyi2/expect.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/_fermion_operator_2nd_jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/_fermion_operator_2nd_numba.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/fermion.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/operator/pyscf.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/qsr/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/qsr/dataset.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/qsr/driver.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/qsr/logic_helpers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/metropolis.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/metropolis_pmap.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/metropolis_pt.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/rules/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/sampler/rules/fermion_2nd.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/vqs/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/experimental/vqs/io.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/_lattice_edge_logic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/abstract_graph.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/common_lattices.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/graph.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/lattice.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/graph/space_group.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/abstract_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/continuous_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/custom_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/discrete_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/doubled_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/fock.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/homogeneous.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/index/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/index/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/index/constrained.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/index/unconstrained.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/particle.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/qubit.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/custom.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/doubled.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/fock.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/particle.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/qubit.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/spin.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/random/tensor_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/spin.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/tensor_hilbert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/hilbert/tensor_hilbert_discrete.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_chunk_utils.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_expect.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_grad.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_jacobian/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_jacobian/default_mode.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_jacobian/jacobian_dense.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_jacobian/jacobian_pytree.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_jacobian/logic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_math.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_scanmap.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_utils_dtype.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_utils_random.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_utils_tree.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_vjp.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_vjp_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/_vmap_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/jax/sharding.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/json_log.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/runtime_log.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/state_log.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/logging/tensorboard.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/README.md +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/autoreg.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/deepset.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/equivariant.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/fast_autoreg.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/full_space.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/gaussian.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/jastrow.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/mlp.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/mps.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/ndm.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/rbm.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/slater.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/models/utils.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/activation.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/blocks/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/blocks/deepset.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/blocks/mlp.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/blocks/symmetry_sum.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/deprecation.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/fast_masked_linear.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/initializers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/masked_linear.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/symmetric_linear.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/nn/utils.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_abstract_observable.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_abstract_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_abstract_super_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_bose_hubbard.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_continuous_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_discrete_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_graph_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_hamiltonian.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_heisenberg.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_ising/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_ising/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_ising/jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_ising/numba.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_kinetic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_lazy.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_liouvillian.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/compile_helpers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/convert.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/helpers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_local_operator/numba.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_pauli_strings/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_pauli_strings/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_pauli_strings/jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_pauli_strings/numba.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_potential.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/_sumoperators.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/boson.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/operator/spin.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/linear_operator.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/preconditioner.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/default.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_jacobian_common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_jacobian_dense.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_jacobian_pytree.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_jacobian_pytree_logic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_onthefly.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/qgt/qgt_onthefly_logic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/solver/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/solver/solvers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/optimizer/sr.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/autoreg.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/exact.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/metropolis.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/metropolis_numpy.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/continuous_gaussian.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/custom_numpy.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/exchange.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/fixed.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/hamiltonian.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/hamiltonian_numpy.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/langevin.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/local.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/local_numpy.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/multiple.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/sampler/rules/tensor.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/stats/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/stats/_autocorr.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/stats/mc_stats.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/stats/mc_stats_old.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/stats/mpi_stats.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/_common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/_cpu_info.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/_mpi_info.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/check_mpi.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/tools/info.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/_dependencies_check.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/array.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/config_flags.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/deprecation.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/dispatch.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/float.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/_group.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/_permutation_group.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/_point_group.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/_semigroup.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/axial.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/cubic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/icosa.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/group/planar.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/history.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/holomorphic.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/model_frameworks/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/model_frameworks/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/model_frameworks/flax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/model_frameworks/haiku.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/model_frameworks/jax.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/moduletools.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/mpi/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/mpi/mpi.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/mpi/primitives.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/numbers.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/optional_deps.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/partial.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/_version.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/alias.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/autoreload.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/dispatcher.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/function.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/method.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/overload.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/parametric.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/promotion.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/py.typed +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/repr.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/resolver.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/signature.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/type.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/plum/util.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/seed.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/static_number.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/struct/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/struct/dataclass.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/struct/fields.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/struct/utils.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/summation.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/types.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/utils/version_check.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/base.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/deprecated.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/experimental.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/full_summ/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/full_summ/expect.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/full_summ/state.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/common.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/kernels.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_mixed_state/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_mixed_state/expect.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_mixed_state/expect_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_mixed_state/state.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/__init__.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect_forces.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect_forces_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect_grad.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/expect_grad_chunked.py +0 -0
- {netket-3.11.2 → netket-3.11.3}/netket/vqs/mc/mc_state/state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: NetKet
|
|
3
|
-
Version: 3.11.
|
|
3
|
+
Version: 3.11.3
|
|
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/#
|
|
@@ -26,7 +26,7 @@ Requires-Dist: jaxlib<0.5,>=0.4.3
|
|
|
26
26
|
Requires-Dist: numba4jax<0.1,>=0.0.10.post1
|
|
27
27
|
Requires-Dist: numba<0.60,>=0.52
|
|
28
28
|
Requires-Dist: numpy~=1.20
|
|
29
|
-
Requires-Dist: optax<0.
|
|
29
|
+
Requires-Dist: optax<0.3,>=0.1.3
|
|
30
30
|
Requires-Dist: orjson<4,>=3.4
|
|
31
31
|
Requires-Dist: rich>=10.0
|
|
32
32
|
Requires-Dist: scipy<2,>=1.5.3
|
|
@@ -44,6 +44,7 @@ Requires-Dist: pytest-cov>=2.10.1; extra == 'dev'
|
|
|
44
44
|
Requires-Dist: pytest-json-report>=1.3; extra == 'dev'
|
|
45
45
|
Requires-Dist: pytest-xdist[psutil]>=2; extra == 'dev'
|
|
46
46
|
Requires-Dist: pytest>=6; extra == 'dev'
|
|
47
|
+
Requires-Dist: qutip>=5; extra == 'dev'
|
|
47
48
|
Requires-Dist: ruff==0.1.0; extra == 'dev'
|
|
48
49
|
Requires-Dist: wheel; extra == 'dev'
|
|
49
50
|
Provides-Extra: docs
|
|
@@ -16,6 +16,7 @@ import numpy as np
|
|
|
16
16
|
|
|
17
17
|
from netket.vqs import FullSumState, expect
|
|
18
18
|
from netket.stats import Stats
|
|
19
|
+
from netket.utils import module_version
|
|
19
20
|
|
|
20
21
|
from .S2_operator import Renyi2EntanglementEntropy
|
|
21
22
|
|
|
@@ -37,6 +38,11 @@ def Renyi2(vstate: FullSumState, op: Renyi2EntanglementEntropy):
|
|
|
37
38
|
|
|
38
39
|
rdm = state_qutip.ptrace(np.arange(N)[mask])
|
|
39
40
|
|
|
41
|
+
# TODO: when we drop support for qutip older versions, always keep this
|
|
42
|
+
# qutip 5 was released in march 2024
|
|
43
|
+
if module_version("qutip") >= (5, 0, 0):
|
|
44
|
+
rdm = rdm.data.to_array()
|
|
45
|
+
|
|
40
46
|
n = 2
|
|
41
47
|
out = np.log2(np.trace(np.linalg.matrix_power(rdm, n))) / (1 - n)
|
|
42
48
|
out = np.absolute(out.real)
|
|
@@ -19,9 +19,9 @@ import numpy as np
|
|
|
19
19
|
from numbers import Number
|
|
20
20
|
|
|
21
21
|
from netket.utils.types import DType
|
|
22
|
-
from netket.operator
|
|
22
|
+
from netket.operator import DiscreteOperator, Transpose
|
|
23
23
|
from netket.operator._pauli_strings.base import _count_of_locations
|
|
24
|
-
from netket.hilbert
|
|
24
|
+
from netket.hilbert import AbstractHilbert
|
|
25
25
|
from netket.utils.numbers import is_scalar, dtype as _dtype
|
|
26
26
|
from netket.utils.optional_deps import import_optional_dependency
|
|
27
27
|
|
|
@@ -31,7 +31,7 @@ from ._fermion_operator_2nd_utils import (
|
|
|
31
31
|
_convert_terms_to_spin_blocks,
|
|
32
32
|
_canonicalize_input,
|
|
33
33
|
_check_hermitian,
|
|
34
|
-
|
|
34
|
+
transpose_term,
|
|
35
35
|
_remove_dict_zeros,
|
|
36
36
|
_verify_input,
|
|
37
37
|
OperatorDict,
|
|
@@ -267,10 +267,18 @@ class FermionOperator2ndBase(DiscreteOperator):
|
|
|
267
267
|
def operators(self) -> OperatorDict:
|
|
268
268
|
"""Returns a dictionary with (term, weight) key-value pairs, with terms in tuple notation.
|
|
269
269
|
|
|
270
|
-
The constant diagonal shift of the operator is associated with a term represented as an
|
|
270
|
+
The constant diagonal shift of the operator is associated with a term represented as an
|
|
271
|
+
empty tuple.
|
|
271
272
|
"""
|
|
272
273
|
return self._operators
|
|
273
274
|
|
|
275
|
+
@property
|
|
276
|
+
def cutoff(self) -> float:
|
|
277
|
+
"""Threshold for the weights, if the absolute value of a weight is below the
|
|
278
|
+
cutoff, it's discarded.
|
|
279
|
+
"""
|
|
280
|
+
return self._cutoff
|
|
281
|
+
|
|
274
282
|
def copy(self, *, dtype: Optional[DType] = None, cutoff=None):
|
|
275
283
|
"""
|
|
276
284
|
Creates a deep copy of this operator, potentially changing the dtype of the
|
|
@@ -458,23 +466,35 @@ class FermionOperator2ndBase(DiscreteOperator):
|
|
|
458
466
|
op = self.copy(dtype=dtype)
|
|
459
467
|
return op.__imul__(scalar)
|
|
460
468
|
|
|
469
|
+
def transpose(self, *, concrete=False):
|
|
470
|
+
r"""Returns the transpose of this operator.
|
|
471
|
+
|
|
472
|
+
For real operators, this is equivalent to complex conjugation.
|
|
473
|
+
This implementation always returns the concrete version of the operator.
|
|
474
|
+
"""
|
|
475
|
+
if concrete:
|
|
476
|
+
new = type(self)(self.hilbert, dtype=self.dtype, cutoff=self._cutoff)
|
|
477
|
+
# operators (c,c†) are real already. Only conjugate coefficients if needed.
|
|
478
|
+
new._operators = {transpose_term(k): v for k, v in self._operators.items()}
|
|
479
|
+
return new
|
|
480
|
+
else:
|
|
481
|
+
return Transpose(self)
|
|
482
|
+
|
|
461
483
|
def conjugate(self, *, concrete=False):
|
|
462
|
-
r"""Returns the complex conjugate of this operator.
|
|
484
|
+
r"""Returns the complex conjugate of this operator.
|
|
463
485
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
486
|
+
This implementation always returns the concrete version of the operator.
|
|
487
|
+
"""
|
|
488
|
+
del concrete
|
|
467
489
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
self.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
new._cutoff = self._cutoff
|
|
477
|
-
return new
|
|
490
|
+
# if operator is real dtype, then just return a copy
|
|
491
|
+
if not np.issubdtype(self.dtype, np.complex_):
|
|
492
|
+
return self.copy()
|
|
493
|
+
else:
|
|
494
|
+
new = type(self)(self.hilbert, dtype=self.dtype, cutoff=self._cutoff)
|
|
495
|
+
# operators (c,c†) are real already. Only conjugate coefficients if needed.
|
|
496
|
+
new._operators = {k: np.conjugate(v) for k, v in self._operators.items()}
|
|
497
|
+
return new
|
|
478
498
|
|
|
479
499
|
def to_normal_order(self):
|
|
480
500
|
"""Reoder the operators to normal order.
|
|
@@ -224,13 +224,29 @@ def _herm_conj(
|
|
|
224
224
|
terms: OperatorTermsList, weights: OperatorWeightsList = 1
|
|
225
225
|
) -> tuple[OperatorTermsList, OperatorWeightsList]:
|
|
226
226
|
"""Returns the hermitian conjugate of the terms and weights."""
|
|
227
|
+
conj_term = transpose_terms(terms)
|
|
228
|
+
conj_weight = [np.conjugate(weight) for weight in weights]
|
|
229
|
+
return conj_term, conj_weight
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def transpose_terms(terms: OperatorTermsList) -> OperatorTermsList:
|
|
233
|
+
"""Returns the transpose of the terms (creation/destruction operators).
|
|
234
|
+
The transpose is equivalent to the hermitian transpose because they are
|
|
235
|
+
real.
|
|
236
|
+
"""
|
|
227
237
|
conj_term = []
|
|
228
|
-
|
|
229
|
-
# loop over all terms and weights and get the hermitian conjugate
|
|
230
|
-
for term, weight in zip(terms, weights):
|
|
238
|
+
for term in terms:
|
|
231
239
|
conj_term.append([(op, 1 - int(dag)) for (op, dag) in reversed(term)])
|
|
232
|
-
|
|
233
|
-
|
|
240
|
+
return conj_term
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def transpose_term(term: OperatorTerm) -> OperatorTerm:
|
|
244
|
+
"""Returns the transpose of a single term (creation/destruction operators).
|
|
245
|
+
The transpose is equivalent to the hermitian transpose because they are
|
|
246
|
+
real.
|
|
247
|
+
"""
|
|
248
|
+
# equivalent to transpose_terms
|
|
249
|
+
return tuple((op, 1 - int(dag)) for (op, dag) in reversed(term))
|
|
234
250
|
|
|
235
251
|
|
|
236
252
|
def _convert_terms_to_spin_blocks(
|
|
@@ -15,10 +15,13 @@
|
|
|
15
15
|
import abc
|
|
16
16
|
|
|
17
17
|
import numpy as np
|
|
18
|
+
from scipy import sparse
|
|
19
|
+
|
|
18
20
|
import jax.numpy as jnp
|
|
19
21
|
from jax.experimental.sparse import JAXSparse, BCOO
|
|
20
22
|
|
|
21
23
|
from netket.operator import AbstractOperator, DiscreteOperator
|
|
24
|
+
from netket.utils.optional_deps import import_optional_dependency
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
class DiscreteJaxOperator(DiscreteOperator):
|
|
@@ -220,6 +223,28 @@ class DiscreteJaxOperator(DiscreteOperator):
|
|
|
220
223
|
"""
|
|
221
224
|
return self.to_sparse().todense()
|
|
222
225
|
|
|
226
|
+
def to_qobj(self): # -> "qutip.Qobj"
|
|
227
|
+
r"""Convert the operator to a qutip's Qobj.
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
A :class:`qutip.Qobj` object.
|
|
231
|
+
"""
|
|
232
|
+
qutip = import_optional_dependency("qutip", descr="to_qobj")
|
|
233
|
+
|
|
234
|
+
# QuTiP does not like jax sparse matrices, so we convert to scipy sparse
|
|
235
|
+
# by hand
|
|
236
|
+
sparse_mat_jax = self.to_sparse()
|
|
237
|
+
sparse_mat_scipy = sparse.coo_matrix(
|
|
238
|
+
(
|
|
239
|
+
sparse_mat_jax.data,
|
|
240
|
+
(sparse_mat_jax.indices[:, 0], sparse_mat_jax.indices[:, 1]),
|
|
241
|
+
),
|
|
242
|
+
shape=sparse_mat_jax.shape,
|
|
243
|
+
)
|
|
244
|
+
return qutip.Qobj(
|
|
245
|
+
sparse_mat_scipy, dims=[list(self.hilbert.shape), list(self.hilbert.shape)]
|
|
246
|
+
)
|
|
247
|
+
|
|
223
248
|
def __matmul__(self, other):
|
|
224
249
|
if (
|
|
225
250
|
isinstance(other, np.ndarray)
|
|
@@ -372,17 +372,22 @@ class Pytree(metaclass=PytreeMeta):
|
|
|
372
372
|
type as the original object.
|
|
373
373
|
"""
|
|
374
374
|
if dataclasses.is_dataclass(self):
|
|
375
|
-
|
|
375
|
+
pytree = dataclasses.replace(self, **kwargs)
|
|
376
|
+
else:
|
|
377
|
+
unknown_keys = set(kwargs) - set(vars(self))
|
|
378
|
+
if unknown_keys:
|
|
379
|
+
raise ValueError(
|
|
380
|
+
f"Trying to replace unknown fields {unknown_keys} "
|
|
381
|
+
f"for '{type(self).__name__}'"
|
|
382
|
+
)
|
|
376
383
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
)
|
|
384
|
+
pytree = copy(self)
|
|
385
|
+
pytree.__dict__.update(kwargs)
|
|
386
|
+
|
|
387
|
+
# Reset cached properties
|
|
388
|
+
for fname in pytree._pytree__cachedprop_fields:
|
|
389
|
+
setattr(pytree, fname, Uninitialized)
|
|
383
390
|
|
|
384
|
-
pytree = copy(self)
|
|
385
|
-
pytree.__dict__.update(kwargs)
|
|
386
391
|
return pytree
|
|
387
392
|
|
|
388
393
|
if not tp.TYPE_CHECKING:
|
|
@@ -40,7 +40,7 @@ dependencies = [
|
|
|
40
40
|
"jaxlib>=0.4.3, <0.5",
|
|
41
41
|
"flax>=0.7.1, <0.9",
|
|
42
42
|
"orjson>=3.4, <4",
|
|
43
|
-
"optax>=0.1.3, <0.
|
|
43
|
+
"optax>=0.1.3, <0.3",
|
|
44
44
|
"numba4jax>=0.0.10.post1, <0.1",
|
|
45
45
|
# vendored plum dependencies.
|
|
46
46
|
# TODO: Remove once we unvendor plum
|
|
@@ -78,6 +78,7 @@ dev = [
|
|
|
78
78
|
"pre-commit>=2.7",
|
|
79
79
|
"black==23.9.1",
|
|
80
80
|
"ruff==0.1.0",
|
|
81
|
+
"qutip>=5",
|
|
81
82
|
"wheel",
|
|
82
83
|
"build",
|
|
83
84
|
# TODO remove vendoring plum
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|