- class netket.experimental.hilbert.SpinOrbitalFermions#
Hilbert space for 2nd quantization fermions with spin s distributed among n_orbital orbitals.
The number of fermions can be fixed globally or fixed on a per spin projection.
This class is simply a convenient wrapper that creates a Fock or TensorHilbert of Fock spaces with occupation numbers 0 or 1. It is mainly useful to avoid needing to specify the n_max=1 each time, and adds convenient functions such as _get_index and _spin_index, which allow one to index the correct TensorHilbert corresponding to the right spin projection.
- __init__(n_orbitals, s=None, n_fermions=None)#
Constructs the hilbert space for spin-s fermions on n_orbitals.
Samples of this hilbert space represent occupation numbers (0,1) of the orbitals. The number of fermions may be fixed to n_fermions. If the spin is different from 0 or None, n_fermions can also be a list to fix the number of fermions per spin component. Using this class, one can generate a tensor product of fermionic hilbert spaces that distinguish particles with different spin.
int) – number of orbitals we store occupation numbers for. If the number of fermions per spin is conserved, the different spin configurations are not counted as orbitals and are handled differently.
None]) – (optional) fixed number of fermions per spin (conserved). In the case n_fermions is an int, the total number of fermions is fixed, while for lists, the number of fermions per spin component is fixed.
A SpinOrbitalFermions object
A list of discreet local quantum numbers. If the local states are infinitely many, None is returned.
Size of the hilbert space. In case the fermions have spin s, the size is (2*s+1)*n_orbitals
- Return type
Returns all valid states of the Hilbert space.
Throws an exception if the space is not indexable.
- numbers_to_states(numbers, out=None)#
Returns the quantum numbers corresponding to the n-th basis state for input n. n is an array of integer indices such that
numbers[k]=Index(states[k]). Throws an exception iff the space is not indexable.
Returns the hilbert space without the selected sites.
Not all hilbert spaces support this operation.
- random_state(key=None, size=None, dtype=<class 'numpy.float32'>)#
Generates either a single or a batch of uniformly distributed random states. Runs as
random_state(self, key, size=None, dtype=np.float32)by default.
key – rng state from a jax-style functional generator.
int]) – If provided, returns a batch of configurations of the form
(size, N)if size is an integer or
(*size, N)if it is a tuple and where \(N\) is the Hilbert space size. By default, a single random configuration with shape
dtype – DType of the resulting vector.
- Return type
A state or batch of states sampled from the uniform distribution on the hilbert space.
>>> import netket, jax >>> hi = netket.hilbert.Qubit(N=2) >>> k1, k2 = jax.random.split(jax.random.PRNGKey(1)) >>> print(hi.random_state(key=k1)) [1. 0.] >>> print(hi.random_state(key=k2, size=2)) [[0. 0.] [0. 1.]]
Size of the local degrees of freedom for the i-th variable.
Returns an iterator over all valid configurations of the Hilbert space. Throws an exception iff the space is not indexable. Iterating over all states with this method is typically inefficient, and
`all_states`should be prefered.
A list of discrete local quantum numbers at the site i. If the local states are infinitely many, None is returned.
int) – The index of the desired site.
A list of values or None if there are infintely many.
- states_to_numbers(states, out=None)#
Returns the basis state number corresponding to given quantum states. The states are given in a batch, such that states[k] has shape (hilbert.size). Throws an exception iff the space is not indexable.