class netket.experimental.models.Slater2nd[source]#

Bases: Module

A slater determinant ansatz for second-quantised spinless or spin-full fermions.

When working with spin-full fermionic hilbert spaces (where the number of degrees of freedom is a multiple of the number of orbitals) Slater2nd may behave in 3 different ways, depending on some flags. Those modes differ by how the orbitals are represented.

The more restrictions we impose, the lower the number of parameters, the higher the number of imposed symmetries, but the expressivity will be worse and it will be less likely to attain accurate ground-state energies.

Those options are summarised in this table, while the details are discussed below.

Hartree Fock type

Number of Parameters



\(n_{\mathrm{M}} \times n_{\mathrm{f}}\)

generalized = True


\(n_{\mathrm{S}} \times n_{\mathrm{L}} \times n_{\textrm{f, s}}\)

generalized=False, restricted=False


\(n_{\mathrm{L}} \times n_{\textrm{f, s}}\)

generalized=False, restricted=True

Where we use \(n_{\textrm{M}}\) to denote the number of fermionic modes, \(n_{\textrm{L}}\) the number of spatial orbitals, and \(n_{\textrm{S}}\) the number of spin states. The number of fermions is denoted \(n_{\mathrm{f}}\), or \(n_{\textrm{f}, \alpha}\) for the number of fermions in a given spin sector \(\alpha\). We assume the same number of fermions in each spin sector for simplicity.

Details about different hartree Fock types#

Assume we introduce a set of orbitals \(\phi_\mu(r, s)\) with orbital index \(\mu\).

  • Generalized Hartree-Fock (generalized = True) is the most general case where we impose no restrictions. In particular, we do not restrict the orbitals to have definite spin or orbital quantum numbers. The total number of parameters is \(n_{\mathrm{M}} \times n_{\mathrm{f}}\). Hence, any fermion can occupy any of the fermionic modes.

  • Hartree-Fock (Spin-Conserving) ([generalized=False,] restricted=True/False). Most physical Hamiltonians are spin conserving, and hence we can impose it also on the wave-function. In this case, we separate the orbital index \(\mu \to (l, \alpha)\) into a spin and spatial orbital part: \(\phi_\mu(r, s)=\varphi_{l,\alpha}(r) \chi_{\alpha}(s)\). Here, \(l\) and \(\alpha\) indicate the orbital and spin quantum numbers associated with the orbital, and \((r, s)\) are the position vector and spin quantum number at which we aim to evaluate the orbital (i.e. properties of a given fermion). Furthermore, \(\varphi_{l,\alpha}(r)\) is the spatial orbital at position \(r\), and and \(\chi_\alpha(s)\) the spin part.

    • Unrestricted Hartree Fock (UHF) ([generalized=False,] restricted=False), the orbitals can have a different spatial orbital \(\varphi\) for different spin states. Since e.g. the up spin fermions cannot occupy the down spin orbitals and vice versa, the Slater matrix becomes block diagonal. This allows us to write the determinant as a product of determinants of the two spin sectors. The total number of parameters is \(n_{\mathrm{S}} \times n_{\mathrm{L}} \times n_{\textrm{f, s}}\). For more information, see Wikipedia: Unrestricted Hartree-Fock

    • Restricted Hartree-Fock (RHF) ([generalized=False, restricted=True]), which assumes that different spin states have the same spatial orbitals in \(\phi_\mu(r, s)=\varphi_l(r) \chi_\alpha(s)\), and hence \(\varphi_l\) only depends on the spatial orbital index \(l\). The number of parameters now reduces to \(n_{\mathrm{L}} \times n_{\textrm{f, s}}\).

generalized: bool = False#

Uses Generalized Hartree-Fock if True (defaults to False, corresponding to the standard spin-conserving Hartree-Fock).

restricted: bool = True#

Flag to select the restricted- or unrestricted- Hartree Fock orbitals (Defaults to restricted).

This flag is ignored if generalized=True.

  • If restricted, only one set of orbitals are parametrised, and they are used for all spin subsectors. This only works if every spin subsector holds the same number of fermions.

  • If unrestricted, a different set of orbitals are parametrised and used for each spin subsector.

hilbert: SpinOrbitalFermions#

The Hilbert space upon which this ansatz is defined. Used to determine the number of orbitals and spin subspectors.

kernel_init: Callable[[Any, Sequence[int], Any], Union[ndarray, Array]]#

Initializer for the orbital parameters.


Assumes inputs are strings of 0,1 that specify which orbitals are occupied. Spin sectors are assumed to follow the SpinOrbitalFermion’s factorisation, meaning that the first n_orbitals entries correspond to sector -1, the second n_orbitals correspond to 0 … etc.