class netket.hilbert.Particle[source]#

Bases: ContinuousHilbert

Hilbert space derived from ContinuousHilbert defining N particles in continuous space with or without periodic boundary conditions.

Inheritance diagram of netket.hilbert.Particle
__init__(N, L=None, pbc=None, *, D=None)[source]#

Constructs new Particles given specifications of the continuous space they are defined in.

  • N (Union[int, tuple[int, ...]]) – Number of particles. If int all have the same spin. If Tuple the entry indicates how many particles there are with a certain spin-projection.

  • L (Optional[tuple[float, ...]]) – Tuple indicating the maximum of the continuous quantum number(s) in the configurations. Each entry in the tuple corresponds to a different physical dimension. If np.inf is used an infinite box is considered and pbc=False is mandatory (because what are PBC if there are no boundaries?). If a finite value is given, a minimum value of zero is assumed for the quantum number(s). A particle in a 3D box of size L would take (L,L,L). A rotor model would take e.g. (2pi,).

  • pbc (Union[bool, tuple[bool, ...], None]) – Tuple or bool indicating whether to use periodic boundary conditions in a given physical dimension. If tuple it must have the same length as domain. If bool the same value is used for all the dimensions defined in domain.

  • D (Optional[int]) – (Optional) Number of dimensions. Can be specified instead of L and pbc in order to construct a Particle in a $D-$ dimensional infinite box. Equivalent to Particle(N, L=(np.inf,) * D, pbc=False).


Spatial extension in each spatial dimension


Whether the space can be indexed with an integer


The number of particles


Gives the number of particles in a specific spin projection.

The length of this tuple indicates the total spin whereas the position in the tuple indicates the spin projection.

Example: (10,5,3) describes 18 particles of total spin 1 where 10 of those have spin-projection -1, 5 have spin-projection 0 and 3 have spin-projection 1.


Whether or not to use periodic boundary conditions for each spatial dimension


Returns the hilbert space without the selected sites.

Not all hilbert spaces support this operation.


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

Return type:



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'>)#

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.

  • 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:



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