From 286a048e8602219b97be7f14f289b75ba3387040 Mon Sep 17 00:00:00 2001 From: Matt Fishman Date: Thu, 2 May 2024 07:42:07 -0400 Subject: [PATCH] Fix `ProjTTN` constructor for mixed input vertex types (#165) --- Project.toml | 2 +- src/treetensornetworks/projttns/projttn.jl | 16 +++++++++++++++- test/test_treetensornetworks/Project.toml | 2 ++ test/test_treetensornetworks/test_position.jl | 15 ++++++++++++--- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Project.toml b/Project.toml index bd434c6b..fd6518f2 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ITensorNetworks" uuid = "2919e153-833c-4bdc-8836-1ea460a35fc7" authors = ["Matthew Fishman and contributors"] -version = "0.10.1" +version = "0.10.2" [deps] AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" diff --git a/src/treetensornetworks/projttns/projttn.jl b/src/treetensornetworks/projttns/projttn.jl index dcf10bbb..f4e1f200 100644 --- a/src/treetensornetworks/projttns/projttn.jl +++ b/src/treetensornetworks/projttns/projttn.jl @@ -12,10 +12,24 @@ struct ProjTTN{V,Pos<:Union{Indices{V},NamedEdge{V}}} <: AbstractProjTTN{V} pos::Pos operator::TTN{V} environments::Dictionary{NamedEdge{V},ITensor} + global function _ProjTTN(pos, operator::TTN, environments::Dictionary) + return new{vertextype(operator),Indices{vertextype(operator)}}( + Indices{vertextype(operator)}(pos), + operator, + convert(Dictionary{NamedEdge{vertextype(operator)},ITensor}, environments), + ) + end + global function _ProjTTN(pos::NamedEdge, operator::TTN, environments::Dictionary) + return new{vertextype(operator),NamedEdge{vertextype(operator)}}( + convert(NamedEdge{vertextype(operator)}, pos), + operator, + convert(Dictionary{NamedEdge{vertextype(operator)},ITensor}, environments), + ) + end end function ProjTTN(pos, operator::TTN, environments::Dictionary) - return ProjTTN(Indices(pos), operator, environments) + return _ProjTTN(pos, operator, environments) end function ProjTTN(operator::TTN) diff --git a/test/test_treetensornetworks/Project.toml b/test/test_treetensornetworks/Project.toml index bc880f8b..05ed66f7 100644 --- a/test/test_treetensornetworks/Project.toml +++ b/test/test_treetensornetworks/Project.toml @@ -1,4 +1,6 @@ [deps] +Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" ITensorNetworks = "2919e153-833c-4bdc-8836-1ea460a35fc7" +ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" NamedGraphs = "678767b0-92e7-4007-89e4-4527a8725b19" diff --git a/test/test_treetensornetworks/test_position.jl b/test/test_treetensornetworks/test_position.jl index 6e5fdd44..86916881 100644 --- a/test/test_treetensornetworks/test_position.jl +++ b/test/test_treetensornetworks/test_position.jl @@ -1,9 +1,11 @@ @eval module $(gensym()) +using Dictionaries: Dictionary, Indices using Graphs: vertices -using ITensors: ITensors -using ITensorNetworks: ProjTTN, ttn, environments, position, siteinds +using ITensors: ITensors, ITensor +using ITensorNetworks: ITensorNetwork, ProjTTN, ttn, environments, position, siteinds using ITensorNetworks.ModelHamiltonians: ModelHamiltonians -using NamedGraphs.NamedGraphGenerators: named_comb_tree +using NamedGraphs: NamedEdge +using NamedGraphs.NamedGraphGenerators: named_comb_tree, named_path_graph using Test: @test, @testset @testset "ProjTTN position" begin @@ -47,4 +49,11 @@ using Test: @test, @testset ITensors.disable_auto_fermion() end end +@testset "ProjTTN construction regression test" begin + pos = Indices{Tuple{String,Int}}() + g = named_path_graph(2) + operator = ttn(ITensorNetwork{Any}(g)) + environments = Dictionary{NamedEdge{Any},ITensor}() + @test ProjTTN(pos, operator, environments) isa ProjTTN{Any,Indices{Any}} +end end