netket.hilbert.DiscreteHilbert#
- class netket.hilbert.DiscreteHilbert[source]#
Bases:
AbstractHilbert
Abstract class for an hilbert space defined on a lattice.
This class defines the common interface that can be used to interact with hilbert spaces on lattices.
The local degrees of freedom are discrete and numerable, therefore they can always be converted to and from integers using the methods states_to_local_indices and local_indices_to_states. This can be used to simplify the implementation of operators that might act on the hilbert space, to avoid reimplementing the logic for different values of the local degrees of freedom.
If the Hilbert space is small enough, individual states can be converted to and from integers labelling all the basis states. This is done using the methods numbers_to_states and states_to_numbers.
- Inheritance
- Attributes
- constrained#
The hilbert space does not contains prod(hilbert.shape) basis states.
Typical constraints are population constraints (such as fixed number of bosons, fixed magnetization…) which ensure that only a subset of the total unconstrained space is populated.
Typically, objects defined in the constrained space cannot be converted to QuTiP or other formats.
- is_finite#
Whether the local hilbert space is finite.
- is_indexable#
Whether the space can be indexed with an integer
- n_states#
The total dimension of the many-body Hilbert space. Throws an exception iff the space is not indexable.
- shape#
The size of the hilbert space on every site.
- size#
The number number of degrees of freedom in the basis of this Hilbert space.
- Methods
- all_states()[source]#
Returns all valid states of the Hilbert space.
Throws an exception if the space is not indexable.
- local_indices_to_states(x, dtype=None)[source]#
Converts a tensor of integers to the corresponding local_values in this hilbert space.
Equivalent to
The input last dimension must match the size of this Hilbert space. This function can be jax-jitted.
- Parameters:
- Returns:
a tensor with the same shape as the input, and values corresponding to the local_state indexed by the input tensor x.
- numbers_to_states(numbers)[source]#
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.This function validates the inputs by checking that the numbers provided are smaller than the Hilbert space size, and throws an error if that condition is not met. When called from within a jax.jit context, this uses {func}`equinox.error_if` to throw runtime errors.
- Parameters:
numbers (
numpy.array
) – Batch of input numbers to be converted into arrays of quantum numbers.- Return type:
- ptrace(sites)[source]#
Returns the hilbert space without the selected sites.
Not all hilbert spaces support this operation.
- random_state(key=None, size=None, dtype=None)[source]#
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.- Parameters:
key (
Any
) – rng state from a jax-style functional generator.size (
int
|None
) – 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(#,)
is returned.dtype – DType of the resulting vector.
- Return type:
- Returns:
A state or batch of states sampled from the uniform distribution on the hilbert space.
Example
>>> import netket, jax >>> hi = netket.hilbert.Qubit(N=2) >>> k1, k2 = jax.random.split(jax.random.PRNGKey(1)) >>> print(hi.random_state(key=k1)) [0 0] >>> print(hi.random_state(key=k2, size=2)) [[0 0] [0 0]]
- states()[source]#
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 preferred.
- states_at_index(i)[source]#
A list of discrete local quantum numbers at the site i.
If the local states are infinitely many, None is returned.
- states_to_local_indices(x)[source]#
Returns a tensor with the same shape of x, where all local values are converted to indices in the range 0…self.shape[i]. This function is guaranteed to be jax-jittable.
For the Fock space this returns x, but for other hilbert spaces such as Spin this returns an array of indices.
Warning
This function is experimental. Use at your own risk.