gutzwiller

Tools for Gutzwiller projecting MPS to a smaller on-site Hilbert space.

Gutzwiller projections

abrikosov

Projection from Abrikosov fermions to a spin-1/2 Hilbert space.

abrikosov_ph

Projection from particle-hole rotated Abrikosov fermions to a spin-1/2 Hilbert space.

Helper functions

parity_mask

Generates a mask selecting the physical parity blocks for a given fermionic leg.

number_mask

Generates a mask selecting the physical charge block for a fermionic leg.

Gutzwiller projections of Abrikosov fermions

temfpy.gutzwiller.abrikosov(mps, *, inplace=False, return_canonical=True, cutoff=1e-12)[source]

Projection from Abrikosov fermions to a spin-1/2 Hilbert space.

The input MPS must contain an even number of sites, sites \(2i\) and \(2i+1\) representing modes \(f_{i\uparrow}\) and \(f_{i\downarrow}\), respectively. These pairs are projected to a spin-1/2 Hilbert space using the following rules:

  • Single occupation of \(f_{i\uparrow}\) orbital → spin-up state

  • Single occupation of \(f_{i\downarrow}\) orbital → spin-down state

  • Zero and double occupation → unphysical states, dropped

Since the only conserved quantity in the input MPS is expected to be (the parity of) the particle number, no spin quantum numbers are kept in the output.

Parameters:
  • mps (MPS) – MPS representing the wave function to be projected. Must be of even length and every site must be an instance of FermionSite.

  • inplace (bool) – Whether to transform the original MPS in place.

  • return_canonical (bool) – Whether to transform the output MPS to right canonical form.

  • cutoff (float) – Cutoff for Schmidt values to keep in the canonical form.

Return type:

None | MPS

Returns:

The Gutzwiller projected mps, if inplace is False.

Note

Currently, no symmetry quantum numbers other than fermion number or parity can be handled.

temfpy.gutzwiller.abrikosov_ph(mps, *, inplace=False, return_canonical=True, cutoff=1e-12)[source]

Projection from particle-hole rotated Abrikosov fermions to a spin-1/2 Hilbert space.

The input MPS must contain an even number of sites, sites \(2i\) and \(2i+1\) representing modes \(f_{i\uparrow}\) and \(f_{i\downarrow}^\dagger\), respectively. These pairs are projected to a spin-1/2 Hilbert space using the following rules:

  • Zero occupation → spin-down state

  • Double occupation of → spin-up state

  • Single occupation → unphysical states, dropped

Depending on the conserved charge of the input MPS, the following spin quantum numbers are kept in the output:

  • 'N' (particle number) → even 'N' blocks → 'S_z' conserved

  • 'parity' → even 'parity' blocks → no conserved charge

Parameters:
  • mps (MPS) – MPS representing the wave function to be projected. Must be of even length and every site must be an instance of FermionSite.

  • inplace (bool) – Whether to transform the original MPS in place.

  • return_canonical (bool) – Whether to transform the output MPS to right canonical form.

  • cutoff (float) – Cutoff for Schmidt values to keep in the canonical form.

Return type:

None | MPS

Returns:

The Gutzwiller projected mps, if inplace is False.

Note

Currently, no symmetry quantum numbers other than fermion number or parity can be handled.

Helper functions

temfpy.gutzwiller.parity_mask(leg, parity=0)[source]

Generates a mask selecting the physical parity blocks for a given fermionic leg.

The physical parity blocks depend on the conserved charge of the given leg:

  • 'N' → even/odd particle charge blocks

  • 'parity' → even/odd parity charge block

Parameters:
  • leg (LegCharge) – The fermionic leg for which the mask is generated.

  • parity (int) – Particle number parity in the physical sector (default: even)

Return type:

ndarray

Returns:

A boolean mask selecting the physical charge blocks that can be used by iproject.

temfpy.gutzwiller.number_mask(leg, n)[source]

Generates a mask selecting the physical charge block for a fermionic leg.

Only really makes sense for a U(1) conserving leg.

Parameters:
  • leg (LegCharge) – The fermionic leg for which the mask is generated.

  • n (int) – Particle number in the physical sector

Return type:

ndarray

Returns:

A boolean mask selecting the physical charge block that can be used by iproject.