netket.hilbert.CustomHilbert
netket.hilbert.CustomHilbert#
- class netket.hilbert.CustomHilbert#
Bases:
netket.hilbert.HomogeneousHilbert
A custom hilbert space with discrete local quantum numbers.
- Inheritance
- __init__(local_states, N=1, constraint_fn=None, graph=None)[source]#
Constructs a new
CustomHilbert
given a list of eigenvalues of the states and a number of sites, or modes, within this hilbert space.- Parameters
local_states (
list or None
) – Eigenvalues of the states. If the allowed states are an infinite number, None should be passed as an argument.N (
int
) – Number of modes in this hilbert space (default 1).constraint_fn (
Optional
[Callable
]) – A function specifying constraints on the quantum numbers. Given a batch of quantum numbers it should return a vector of bools specifying whether those states are valid or not.graph (Optional[netket.graph.AbstractGraph]) –
Examples
Simple custom hilbert space.
>>> import netket >>> g = netket.graph.Hypercube(length=10,n_dim=2,pbc=True) >>> hi = netket.hilbert.CustomHilbert(local_states=[-1232, 132, 0], N=100) >>> print(hi.size) 100
- Attributes
-
- local_states#
A list of discreet local quantum numbers. If the local states are infinitely many, None is returned.
- n_states#
The total dimension of the many-body Hilbert space. Throws an exception iff the space is not indexable.
- Return type
- Methods
- all_states(out=None)#
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.
- ptrace(sites)#
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.- Parameters
key – rng state from a jax-style functional generator.
size (
Optional
[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(#,)
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)) [1. 0.] >>> print(hi.random_state(key=k2, size=2)) [[0. 0.] [0. 1.]]
- size_at_index(i)#
Size of the local degrees of freedom for the i-th variable.
- states()#
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.
- states_at_index(i)#
A list of discrete local quantum numbers at the site i. If the local states are infinitely many, None is returned.
- Parameters
i (
int
) – The index of the desired site.- Returns
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.