Measuring the MPS
TenNetLib.entropy
— Methodfunction entropy(psi::MPS, bond::Int)
Compute von Neumann entropy of a given MPS psi
at bond
.
Note: Since both ITensors.jl and ITensorMPS.jl export a function named entropy()
, this function must be explicitly called as TenNetLib.entropy().
TenNetLib.entropy
— Methodfunction entropy(psi::MPS; bonds = nothing)
Compute von Neumann entropies of a given MPS psi
at all the bonds.
Optionally, for specific bonds, keyword argument bonds
can be specified, e.g., bonds = [1, 2, 3]
.
Note: Since both ITensors.jl and ITensorMPS.jl export a function named entropy()
, this function must be explicitly called as TenNetLib.entropy().
TenNetLib.bond_spectrum
— Methodbond_spectrum(psi::MPS, bond::Int; by_charge = false)
Compute the eigenvalue spectrum $\{ \lambda_k \}$ of the reduced density matrix obtained by cutting the MPS psi
at the specified bond
.
If by_charge == false
, the function returns the full spectrum as a Vector{Float64}
.
If by_charge == true
, the spectrum is grouped into different QN sectors, and the result is returned as a Vector{Pair{QN, Vector{Float64}}}
, where each pair contains a QN label and its associated eigenvalue spectrum.
TenNetLib.bond_spectrum
— Methodbond_spectrum(psi::MPS; bonds = nothing, by_charge = false)
Compute the eigenvalue spectra $\{ \lambda_k \}$ of the reduced density matricies obtained by cutting the MPS psi
at all the bonds.
Optionally, for specific bonds, keyword argument bonds
can be specified, e.g., bonds = [1, 2, 3]
.
Returns a vector of spectra, one for each bonds. The type depends on by_charge
.
If by_charge == false
, the function returns the full spectrum as a Vector{Vector{Float64}}
.
If by_charge == true
, the spectrum is grouped into different QN sectors, and the result is returned as a Vector{Vector{Pair{QN, Vector{Float64}}}}
, where each pair contains a QN label and its associated eigenvalue spectrum.
TenNetLib.measure
— Methodfunction measure(::Type{ElT} = ComplexF64, psi::MPS, opten::ITensor)
Returns (complex / real) local expectation value (::ComplexF64
/ ::Float64
) of a given MPS psi::MPS
. The operator opten::ITensor
must be single-site operator.
For ElT = Float64
, if the expectation value is complex, raises a warning!
TenNetLib.measure
— Methodfunction measure(::Type{ElT} = ComplexF64, psi::MPS, opstr::String, pos::Int)
Returns (complex / real) local expectation value (::ComplexF64
/ ::Float64
) of a given MPS psi::MPS
for a given operator name (opstr::String
) and a site index (pos::Int
)
For ElT = Float64
, if the expectation value is complex, raises a warning!
TenNetLib.measure
— Methodfunction measure(::Type{ElT} = ComplexF64, psi::MPS, opstr::String; kwargs...)
Returns (complex / real) local expectation values (::Vector{ComplexF64}
/ ::Vector{Float64}
) of a given MPS psi::MPS
for a given operator name (opstr::String
) at all the sites.
Optionally, for specific sites, keyword argument sites
can be specified, e.g., sites = [1, 2, 3]
.
For ElT = Float64
, if the expectation value is complex, raises a warning!
TenNetLib.measure
— Methodfunction measure(::Type{ElT} = ComplexF64, psi::MPS, optens::Vector{ITensor})
Returns (complex / real) multi-site expectation value (::ComplexF64
/ ::Float64
) of a given MPS psi::MPS
for a given vector of single-site operators (optens::Vector{ITensor}
).
For ElT = Float64
, if the expectation value is complex, raises a warning!
TenNetLib.measure
— Methodfunction measure(::Type{ElT} = ComplexF64, psi::MPS, oppairs::Vector{Pair{String, Int}};
isfermions::Bool = true)
Returns (complex / real) multi-site expectation value (::ComplexF64
/ ::Float64
) of a given MPS psi::MPS
. oppairs::Vector{Pair{String, Int}}
contains pairs of operator names (String
) and site locations (Int
). E.g., for <ψ|OᵢOⱼOₖ... |ψ>, oppairs = ["O" => i, "O" => j, "O" => k,...]
.
Fermionic JW strings are added automatically for fermionic operators if isfermions::Bool = true
(default).
For ElT = Float64
, if the expectation value is complex, raises a warning!
Example:
valueC = measure(psi, ["Cdag" => 2, "C" => 6, "Cdag" => 9, "C" => 12])
valueR = measure(Float64, psi, ["Cdag" => 2, "C" => 6, "Cdag" => 9, "C" => 12])