Maps and Symmetrizers
Not every workflow stays inside one basis. Sometimes you want to move amplitudes between a full tensor-product basis and a symmetry-reduced basis, or between two different symmetry sectors that share the same local Hilbert space.
That is what DoubleBasis is for.
DoubleBasis
DoubleBasis(B1, B2) creates a basis-like object representing maps from coordinates in B2 to coordinates in B1.
Typical uses:
- project a full-space vector into a symmetry sector,
- lift sector amplitudes back into a less reduced basis,
- compare two sector descriptions through their common embedding.
The two bases must have the same chain length and local on-site dimension.
Symmetrizers
The most direct basis-only map is symmetrizer(B), where B is a DoubleBasis.
It returns the overlap map between the embeddings of the two bases into the full tensor-product basis.
In the common case where B2 is less symmetric than B1, it behaves like a projection or symmetrization matrix into the target sector.
Example: Full Space To A Symmetry Sector
using EDKit
L = 8
Bfull = TensorBasis(L = L, base = 2)
Bsector = basis(L = L, N = 4, p = 1)
T = DoubleBasis(Bsector, Bfull)
P = symmetrizer(T)P now maps coordinates from the full basis into the chosen symmetry sector.
Applying A DoubleBasis
DoubleBasis itself can also act on a vector:
v_sector = T(v_full)This is convenient when you want the basis map as an operation, not just as an explicit matrix.
When To Reach For This Layer
Use DoubleBasis and symmetrizer when:
- you want to compare states across basis choices,
- you need an explicit projection map,
- you want to verify that reduced-basis calculations agree with full-space calculations,
- or you want to build inter-basis operators.
If you only need a Hamiltonian inside one symmetry sector, you usually do not need this layer at all.