Skip to content

MPS Initialization

Construct a symmetry-aware initial MPS for tensor network algorithms.

init_mps

init_mps(
    L: int,
    Spc: Index,
    Op: Dict[str, Tensor],
    bond_dim: int = 1,
    *,
    config: Optional[list[int]] = None,
    seed: int = 42,
) -> MPS

Construct an initial MPS for DMRG.

Works for all three particle types (bosonic, fermionic, conductor) without a particle-type argument. The (Spc, Op) pair from load_space carries all required symmetry information.

Parameters:

Name Type Description Default
L int

Chain length.

required
Spc Index

Physical Index returned by load_space.

required
Op Dict[str, Tensor]

Operator dictionary returned by load_space.

required
bond_dim int

Target bond dimension.

  • bond_dim=1: deterministic product state, bond dimension 1. Best used with CBE (scheme='1sp') or 2-site (scheme='2s') DMRG.
  • bond_dim>1: random MPS with group-derived bond sectors. Bond sectors are chosen by BFS from the center-bond charge to depth 2, fixing the sector count regardless of L.
1
config Optional[list[int]]

Optional list of physical-sector indices (0-based into Spc.sectors), one per site. When None (default) an auto-balanced configuration is selected: alternating high/low sectors for 2-sector spaces, single neutral-charge sector for 3-sector spaces, alternating neutral-pair for 4-sector spaces, and the SU2 dimer path for pure-SU2 spaces. The auto-config is designed for even L and balanced (half-filled) systems; pass an explicit config for odd L or unusual fillings.

None
seed int

Base random seed used when bond_dim>1. Site i uses seed+i.

42

Returns:

Type Description
MPS

Right-canonical MPS with orthogonality center at site 0.

Raises:

Type Description
ValueError

If bond_dim < 1 or if an explicit config has the wrong length.

Examples:

Product state for Heisenberg spin-½ (U1), ready for 1sp DMRG:

>>> from nicole import load_space
>>> from alice import init_mps
>>> Spc, Op = load_space('Spin', 'U1', {'J': 0.5})
>>> mps = init_mps(20, Spc, Op, bond_dim=1)

Random MPS for spinless fermions (U1), bond dimension 32:

>>> Spc, Op = load_space('Ferm', 'U1')
>>> mps = init_mps(20, Spc, Op, bond_dim=32)

Notes

init_mps operates in two modes selected by bond_dim:

Product state (bond_dim=1) — every virtual bond carries a single sector whose charge is determined by propagating the physical charges of the chosen site configuration through the group fusion rules. For Abelian groups this is additive; for SU(2) and product groups containing SU(2) the minimum-branch (dimer/VBS) rule selects the lowest-spin channel at each step. The result is a bond-dimension-1 MPS in a definite target sector. This mode pairs naturally with CBE (scheme='1sp') or 2-site (scheme='2s') DMRG, which grow the bond dimension during the first few sweeps.

Random MPS (bond_dim>1) — bond sectors are discovered by a breadth-first search (BFS) of depth 2 from the center-bond charge, so the sector set is independent of chain length and contains only charges reachable by physical fusion steps. Tensors are filled with random entries and the MPS is canonicalized with a two-pass sweep (right to site L-1, then left back to site 0) to compress spurious bond dimension from both ends.

Both modes are particle-type agnostic: no spin=, symmetry=, or particle_type= argument is required. The (Spc, Op) pair returned by Nicole's load_space encodes all symmetry information.

Charge Conventions

All standard Nicole physical spaces define charges relative to the half-filled reference, so the center-bond charge for a balanced auto-config is always zero regardless of chain length:

Space Sectors Q_vac
Spin U(1) Sz = ±½ → charges ±1 0
Spin SU(2) multiplet label 2J 0
Ferm U(1) empty/occupied → charges ±1 0
Ferm Z₂ even/odd parity 0
Band U(1)⊗U(1) (±1, ±1) (0, 0)
Band Z₂⊗U(1) (parity, spin) (0, 0)
Band U(1)⊗SU(2) (charge, spin) (0, 0)
Band Z₂⊗SU(2) (parity, spin) (0, 0)

Bond Sectors in Random Mode

Bond sectors for the random MPS (bond_dim>1) are found by BFS of depth 2 from Q_vac. The table below lists the resulting sector sets (for spin-½ where applicable):

Space Bond sectors Count
Spin U(1) −2, −1, 0, +1, +2 5
Spin SU(2) 2J = 0, 1, 2 3
Ferm U(1) −2, −1, 0, +1, +2 5
Ferm Z₂ 0, 1 2
Band U(1)⊗U(1) (c, s) with |c| + |s| ≤ 2 13
Band Z₂⊗U(1) (0, 0), (0, ±2), (1, ±1) 5
Band U(1)⊗SU(2) (c, 2J) with |c| ≤ 2, 2J ≤ 2 9
Band Z₂⊗SU(2) (0, 0), (0, 2), (1, 1) 3

See Also