netket.hilbert.AbstractHilbert#

class netket.hilbert.AbstractHilbert#

Bases: abc.ABC

Abstract class for NetKet hilbert objects.

This class definese the common interface used to interact with Hilbert spaces.

An AbstractHilbert object identifies an Hilbert space and a computational basis on such hilbert space, such as the z-basis for spins on a lattice, or the position-basis for particles in a box.

Hilbert Spaces are generally immutable python objects that must be hashable in order to be used as static arguments to jax.jit functions.

Inheritance
Inheritance diagram of netket.hilbert.AbstractHilbert
Attributes
is_indexable#

Whever the space can be indexed with an integer

Return type

bool

size#

The number number of degrees of freedom in the basis of this Hilbert space.

Return type

int

Methods
ptrace(sites)[source]#

Returns the hilbert space without the selected sites.

Not all hilbert spaces support this operation.

Parameters

sites (Union[int, Iterable]) – a site or list of sites to trace away

Return type

AbstractHilbert

Returns

The partially-traced hilbert space. The type of the resulting hilbert space might be different from the starting one.

random_state(key=None, size=None, dtype=<class 'numpy.float32'>)[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 – 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

ndarray

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.]]