Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
SparseIR = "4fe2279e-80f0-4adb-8463-ee114ff56b7d"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
T4AITensorCompat = "864b39ca-388c-4f43-a593-a1076cf4b253"
T4APartitionedMPSs = "f7a3e09c-877e-4116-af24-45397c1413c2"
T4APartitionedTT = "7ada5264-53d5-494a-9572-4199565888e0"
TensorCrossInterpolation = "b261b2ec-6378-4871-b32e-9173bb050604"

[compat]
EllipsisNotation = "1"
QuanticsTCI = "0.7"
SparseIR = "^0.96, 0.97, 1"
StaticArrays = "1"
T4APartitionedMPSs = "0.7.3"
T4APartitionedTT = "0.8"
julia = "1"

[extras]
Expand All @@ -30,9 +30,9 @@ QuanticsTCI = "b11687fd-3a1c-4c41-97d0-998ab401d50e"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
ReTestItems = "817f1d60-ba6b-4fd5-9520-3cf149f6a823"
SparseIR = "4fe2279e-80f0-4adb-8463-ee114ff56b7d"
T4APartitionedMPSs = "f7a3e09c-877e-4116-af24-45397c1413c2"
T4APartitionedTT = "7ada5264-53d5-494a-9572-4199565888e0"
TensorCrossInterpolation = "b261b2ec-6378-4871-b32e-9173bb050604"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "Random", "ReTestItems", "Aqua", "T4APartitionedMPSs", "TensorCrossInterpolation", "QuanticsTCI", "QuanticsGrids", "SparseIR"]
test = ["Test", "Random", "ReTestItems", "Aqua", "T4APartitionedTT", "TensorCrossInterpolation", "QuanticsTCI", "QuanticsGrids", "SparseIR"]
1 change: 1 addition & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[deps]
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
T4APartitionedTT = "7ada5264-53d5-494a-9572-4199565888e0"
T4AQuantics = "99202d80-6772-4c79-995b-f2660cf2bd6d"
1 change: 1 addition & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ makedocs(;
modules=[T4AQuantics],
authors="Hiroshi Shinaoka <[email protected]> and contributors",
sitename="T4AQuantics.jl",
remotes=nothing,
format=Documenter.HTML(;
canonical="https://github.com/tensor4all/T4AQuantics.jl",
edit_link="main",
Expand Down
4 changes: 2 additions & 2 deletions src/T4AQuantics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import SparseArrays: sparse

import QuanticsTCI
import TensorCrossInterpolation as TCI
import T4APartitionedMPSs
import T4APartitionedTT
using T4AITensorCompat: contract, Algorithm, apply, product

using EllipsisNotation
Expand All @@ -32,6 +32,6 @@ include("fouriertransform.jl")
include("imaginarytime.jl")
include("transformer.jl")
include("affine.jl")
include("partitionedmps.jl")
include("partitionedtt.jl")

end
64 changes: 32 additions & 32 deletions src/partitionedmps.jl → src/partitionedtt.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Integration with T4APartitionedMPSs
# This file contains methods for T4APartitionedMPSs types (SubDomainMPS, PartitionedMPS)
# Integration with T4APartitionedTT
# This file contains methods for T4APartitionedTT types (SubDomainTT, PartitionedTT)

using ITensors
import ITensors
Expand All @@ -8,20 +8,20 @@ import ITensors.NDTensors: Tensor, BlockSparseTensor, blockview
using T4AITensorCompat: TensorTrain
using T4AITensorCompat: findsite, linkinds, linkind, findsites

import T4APartitionedMPSs: T4APartitionedMPSs, SubDomainMPS, PartitionedMPS, isprojectedat,
import T4APartitionedTT: T4APartitionedTT, SubDomainTT, PartitionedTT, isprojectedat,
project

function makesitediagonal(subdmps::SubDomainMPS, site::Index)
function makesitediagonal(subdmps::SubDomainTT, site::Index)
return _makesitediagonal(subdmps, site; baseplev=0)
end

function makesitediagonal(subdmps::SubDomainMPS, sites::AbstractVector{Index})
function makesitediagonal(subdmps::SubDomainTT, sites::AbstractVector{Index})
return _makesitediagonal(subdmps, sites; baseplev=0)
end

function makesitediagonal(subdmps::SubDomainMPS, tag::String)
mps_diagonal = makesitediagonal(TensorTrain(subdmps), tag)
subdmps_diagonal = SubDomainMPS(mps_diagonal)
function makesitediagonal(subdmps::SubDomainTT, tag::String)
tt_diagonal = makesitediagonal(TensorTrain(subdmps), tag)
subdmps_diagonal = SubDomainTT(tt_diagonal)

target_sites = findallsiteinds_by_tag(
unique(ITensors.noprime.(Iterators.flatten(siteinds(subdmps)))); tag=tag
Expand All @@ -38,7 +38,7 @@ function makesitediagonal(subdmps::SubDomainMPS, tag::String)
end

function _makesitediagonal(
subdmps::SubDomainMPS, sites::AbstractVector{Index{IndsT}}; baseplev=0
subdmps::SubDomainTT, sites::AbstractVector{Index{IndsT}}; baseplev=0
) where {IndsT}
M_ = deepcopy(TensorTrain(subdmps))
for site in sites
Expand All @@ -48,12 +48,12 @@ function _makesitediagonal(
return project(M_, subdmps.projector)
end

function _makesitediagonal(subdmps::SubDomainMPS, site::Index; baseplev=0)
function _makesitediagonal(subdmps::SubDomainTT, site::Index; baseplev=0)
return _makesitediagonal(subdmps, [site]; baseplev=baseplev)
end

function extractdiagonal(
subdmps::SubDomainMPS, sites::AbstractVector{Index{IndsT}}
subdmps::SubDomainTT, sites::AbstractVector{Index{IndsT}}
) where {IndsT}
tensors = collect(subdmps.data)
for i in eachindex(tensors)
Expand All @@ -73,55 +73,55 @@ function extractdiagonal(
delete!(projector.data, site')
end
end
return SubDomainMPS(TensorTrain(Vector{ITensor}(tensors)), projector)
return SubDomainTT(TensorTrain(Vector{ITensor}(tensors)), projector)
end

function extractdiagonal(subdmps::SubDomainMPS, site::Index{IndsT}) where {IndsT}
function extractdiagonal(subdmps::SubDomainTT, site::Index{IndsT}) where {IndsT}
return extractdiagonal(subdmps, [site])
end

function extractdiagonal(subdmps::SubDomainMPS, tag::String)::SubDomainMPS
function extractdiagonal(subdmps::SubDomainTT, tag::String)::SubDomainTT
targetsites = findallsiteinds_by_tag(
unique(ITensors.noprime.(T4APartitionedMPSs._allsites(subdmps))); tag=tag
unique(ITensors.noprime.(T4APartitionedTT._allsites(subdmps))); tag=tag
)
return extractdiagonal(subdmps, targetsites)
end

function rearrange_siteinds(subdmps::SubDomainMPS, sites)
return T4APartitionedMPSs.rearrange_siteinds(subdmps, sites)
function rearrange_siteinds(subdmps::SubDomainTT, sites)
return T4APartitionedTT.rearrange_siteinds(subdmps, sites)
end

function rearrange_siteinds(partmps::PartitionedMPS, sites)
return T4APartitionedMPSs.rearrange_siteinds(partmps, sites)
function rearrange_siteinds(partmps::PartitionedTT, sites)
return T4APartitionedTT.rearrange_siteinds(partmps, sites)
end

"""
Make the PartitionedMPS diagonal for a given site index `s` by introducing a dummy index `s'`.
Make the PartitionedTT diagonal for a given site index `s` by introducing a dummy index `s'`.
"""
function makesitediagonal(obj::PartitionedMPS, site)
return PartitionedMPS([_makesitediagonal(prjmps, site; baseplev=0)
function makesitediagonal(obj::PartitionedTT, site)
return PartitionedTT([_makesitediagonal(prjmps, site; baseplev=0)
for prjmps in values(obj)])
end

function _makesitediagonal(obj::PartitionedMPS, site; baseplev=0)
return PartitionedMPS([_makesitediagonal(prjmps, site; baseplev=baseplev)
function _makesitediagonal(obj::PartitionedTT, site; baseplev=0)
return PartitionedTT([_makesitediagonal(prjmps, site; baseplev=baseplev)
for prjmps in values(obj)])
end

"""
Extract diagonal of the PartitionedMPS for `s`, `s'`, ... for a given site index `s`,
Extract diagonal of the PartitionedTT for `s`, `s'`, ... for a given site index `s`,
where `s` must have a prime level of 0.
"""
function extractdiagonal(obj::PartitionedMPS, site)
return PartitionedMPS([extractdiagonal(prjmps, site) for prjmps in values(obj)])
function extractdiagonal(obj::PartitionedTT, site)
return PartitionedTT([extractdiagonal(prjmps, site) for prjmps in values(obj)])
end

"""
By default, elementwise multiplication will be performed.
"""
function automul(
M1::PartitionedMPS,
M2::PartitionedMPS;
M1::PartitionedTT,
M2::PartitionedTT;
tag_row::String="",
tag_shared::String="",
tag_col::String="",
Expand Down Expand Up @@ -155,7 +155,7 @@ function automul(
M2 = rearrange_siteinds(
M2, combinesites(sites_M2_diag, Vector{Index{Int}}(sites_shared), Vector{Index{Int}}(sites_col)))

M = T4APartitionedMPSs.contract(M1, M2; alg=alg, kwargs...)
M = T4APartitionedTT.contract(M1, M2; alg=alg, kwargs...)

M = extractdiagonal(M, sites1_ewmul)

Expand All @@ -174,11 +174,11 @@ function automul(
end
end
end
return T4APartitionedMPSs.truncate(
return T4APartitionedTT.truncate(
rearrange_siteinds(M, ressites); cutoff=cutoff, maxdim=maxdim)
end

function _findallsiteinds_by_tag(M::PartitionedMPS; tag::String="")
function _findallsiteinds_by_tag(M::PartitionedTT; tag::String="")
return findallsiteinds_by_tag(only.(siteinds(M)); tag=tag)
end

8 changes: 4 additions & 4 deletions test/mul_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ end

@testitem "mul_tests.jl/batchedmatmul" begin
using Test
import T4APartitionedMPSs: project, Projector, SubDomainMPS, PartitionedMPS, isprojectedat
import T4APartitionedTT: project, Projector, SubDomainTT, PartitionedTT, isprojectedat
import T4AQuantics
using ITensors
import T4AITensorCompat: random_mps, TensorTrain, siteinds
Expand Down Expand Up @@ -170,7 +170,7 @@ end
@test ab_arr ≈ ab_arr_reconst
end

@testset "PartitionedMPS" begin
@testset "PartitionedTT" begin
@testset "batchedmatmul" for T in [Float64, ComplexF64]
"""
C(x, z, k) = sum_y A(x, y, k) * B(y, z, k)
Expand Down Expand Up @@ -198,14 +198,14 @@ end
ab_arr[:, :, k] .= a_arr[:, :, k] * b_arr[:, :, k]
end

a_ = PartitionedMPS([
a_ = PartitionedTT([
project(a, Projector(Dict(sx[1] => 1, sy[1] => 1))),
project(a, Projector(Dict(sx[1] => 1, sy[1] => 2))),
project(a, Projector(Dict(sx[1] => 2, sy[1] => 1))),
project(a, Projector(Dict(sx[1] => 2, sy[1] => 2)))
])

b_ = PartitionedMPS([
b_ = PartitionedTT([
project(b, Projector(Dict(sy[1] => 1, sz[1] => 1))),
project(b, Projector(Dict(sy[1] => 1, sz[1] => 2))),
project(b, Projector(Dict(sy[1] => 2, sz[1] => 1))),
Expand Down
12 changes: 6 additions & 6 deletions test/util_tests.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@testitem "util.jl" begin
using Test
import T4APartitionedMPSs: T4APartitionedMPSs, SubDomainMPS, PartitionedMPS, project,
import T4APartitionedTT: T4APartitionedTT, SubDomainTT, PartitionedTT, project,
isprojectedat
import T4AQuantics
using ITensors
Expand Down Expand Up @@ -267,7 +267,7 @@
end
end

@testset "SubDomainMPS" begin
@testset "SubDomainTT" begin
@testset "rearrange_siteinds" begin
N = 3
sitesx = [Index(2, "x=$n") for n in 1:N]
Expand All @@ -277,7 +277,7 @@

Ψ = _random_mpo(sites)

prjΨ = SubDomainMPS(Ψ)
prjΨ = SubDomainTT(Ψ)
prjΨ1 = project(prjΨ, Dict(sitesx[1] => 1))

sitesxy = collect(collect.(zip(sitesx, sitesy)))
Expand All @@ -289,7 +289,7 @@
prjΨ1_rearranged = T4AQuantics.rearrange_siteinds(prjΨ1, sites_rearranged)

@test reduce(*, TensorTrain(prjΨ1)) ≈ reduce(*, TensorTrain(prjΨ1_rearranged))
@test T4APartitionedMPSs.siteinds(prjΨ1_rearranged) == sites_rearranged
@test T4APartitionedTT.siteinds(prjΨ1_rearranged) == sites_rearranged
end

@testset "makesitediagonal and extractdiagonal" begin
Expand All @@ -304,11 +304,11 @@

Ψ = _random_mpo(sites)

prjΨ = SubDomainMPS(Ψ)
prjΨ = SubDomainTT(Ψ)
prjΨ1 = project(prjΨ, Dict(sitesx[1] => 1))

prjΨ1_diagonalz = T4AQuantics.makesitediagonal(prjΨ1, "y")
sites_diagonalz = Iterators.flatten(T4APartitionedMPSs.siteinds(prjΨ1_diagonalz))
sites_diagonalz = Iterators.flatten(T4APartitionedTT.siteinds(prjΨ1_diagonalz))

psi_diag = prod(prjΨ1_diagonalz.data)
psi = prod(prjΨ1.data)
Expand Down
Loading