diff --git a/Project.toml b/Project.toml index c352657b..49974c0f 100644 --- a/Project.toml +++ b/Project.toml @@ -29,26 +29,29 @@ StructWalk = "31cdf514-beb7-4750-89db-dda9d2eb8d3d" TupleTools = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" [weakdeps] +ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" OMEinsumContractionOrders = "6f22d1fd-8eed-4bb7-9776-e7d684900715" TensorOperations = "6aa20fa7-93e2-5fca-9bc0-fbd0db3c71a2" [extensions] +ITensorNetworksITensorVisualizationBaseExt = "ITensorVisualizationBase" ITensorNetworksOMEinsumContractionOrdersExt = "OMEinsumContractionOrders" ITensorNetworksTensorOperationsExt = "TensorOperations" [compat] Accessors = "0.1.42" Adapt = "4" -DataGraphs = "0.4" +DataGraphs = "0.4.1" Dictionaries = "0.4" DocStringExtensions = "0.9" Graphs = "1.8" +ITensorVisualizationBase = "0.1" ITensors = "0.7, 0.8, 0.9" IsApprox = "0.1, 1, 2" KrylovKit = "0.6, 0.7, 0.8, 0.9, 0.10" MacroTools = "0.5" NDTensors = "0.3, 0.4" -NamedGraphs = "0.11" +NamedGraphs = "0.11.1" OMEinsumContractionOrders = "0.8.3, 0.9, 1" SimpleTraits = "0.9" SplitApplyCombine = "1.2" diff --git a/ext/ITensorNetworksITensorVisualizationBaseExt/ITensorNetworksITensorVisualizationBaseExt.jl b/ext/ITensorNetworksITensorVisualizationBaseExt/ITensorNetworksITensorVisualizationBaseExt.jl new file mode 100644 index 00000000..734b2eeb --- /dev/null +++ b/ext/ITensorNetworksITensorVisualizationBaseExt/ITensorNetworksITensorVisualizationBaseExt.jl @@ -0,0 +1,22 @@ +module ITensorNetworksITensorVisualizationBaseExt + +using Graphs: vertices +using ITensorNetworks: AbstractITensorNetwork +using ITensorVisualizationBase: ITensorVisualizationBase + +function ITensorVisualizationBase.visualize( + tn::AbstractITensorNetwork, + args...; + vertex_labels_prefix = nothing, + vertex_labels = nothing, + kwargs... + ) + if !isnothing(vertex_labels_prefix) + vertex_labels = [vertex_labels_prefix * string(v) for v in vertices(tn)] + end + return ITensorVisualizationBase.visualize( + [tn[v] for v in vertices(tn)], args...; vertex_labels, kwargs... + ) +end + +end diff --git a/src/ITensorNetworks.jl b/src/ITensorNetworks.jl index 0e255c6f..b048a941 100644 --- a/src/ITensorNetworks.jl +++ b/src/ITensorNetworks.jl @@ -1,6 +1,5 @@ module ITensorNetworks -include("visualize.jl") include("abstractindsnetwork.jl") include("indextags.jl") include("indsnetwork.jl") diff --git a/src/abstractitensornetwork.jl b/src/abstractitensornetwork.jl index ade58da5..faddc4c9 100644 --- a/src/abstractitensornetwork.jl +++ b/src/abstractitensornetwork.jl @@ -540,24 +540,6 @@ end Base.show(io::IO, graph::AbstractITensorNetwork) = show(io, MIME"text/plain"(), graph) -# TODO: Move to an `ITensorNetworksVisualizationInterfaceExt` -# package extension (and define a `VisualizationInterface` package -# based on `ITensorVisualizationCore`.). -using ITensors.ITensorVisualizationCore: ITensorVisualizationCore, visualize -function ITensorVisualizationCore.visualize( - tn::AbstractITensorNetwork, - args...; - vertex_labels_prefix = nothing, - vertex_labels = nothing, - kwargs... - ) - if !isnothing(vertex_labels_prefix) - vertex_labels = [vertex_labels_prefix * string(v) for v in vertices(tn)] - end - # TODO: Use `tokenize_vertex`. - return visualize([tn[v] for v in vertices(tn)], args...; vertex_labels, kwargs...) -end - # # Link dimensions # diff --git a/src/visualize.jl b/src/visualize.jl deleted file mode 100644 index 950e48de..00000000 --- a/src/visualize.jl +++ /dev/null @@ -1,28 +0,0 @@ -# TODO: Move to `NamedGraphsITensorVisualizationCoreExt`. -using Graphs: vertices -using ITensors.ITensorVisualizationCore: ITensorVisualizationCore -using NamedGraphs: NamedGraphs, AbstractNamedGraph -function ITensorVisualizationCore.visualize( - graph::AbstractNamedGraph, - args...; - vertex_labels_prefix = nothing, - vertex_labels = nothing, - kwargs... - ) - if !isnothing(vertex_labels_prefix) - vertex_labels = [vertex_labels_prefix * string(v) for v in vertices(graph)] - end - #edge_labels = [string(e) for e in edges(graph)] - return ITensorVisualizationCore.visualize( - NamedGraphs.position_graph(graph), args...; vertex_labels, kwargs... - ) -end - -# TODO: Move to `DataGraphsITensorVisualizationCoreExt`. -using DataGraphs: DataGraphs, AbstractDataGraph -using ITensors.ITensorVisualizationCore: ITensorVisualizationCore -function ITensorVisualizationCore.visualize(graph::AbstractDataGraph, args...; kwargs...) - return ITensorVisualizationCore.visualize( - DataGraphs.underlying_graph(graph), args...; kwargs... - ) -end diff --git a/test/Project.toml b/test/Project.toml index 5fe65649..d0cfa80b 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -10,6 +10,7 @@ GraphsFlows = "06909019-6f44-4949-96fc-b9d9aaa02889" ITensorMPS = "0d1a4710-d33b-49a5-8f18-73bdf49b47e2" ITensorNetworks = "2919e153-833c-4bdc-8836-1ea460a35fc7" ITensorPkgSkeleton = "3d388ab1-018a-49f4-ae50-18094d5f71ea" +ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" ITensors = "9136182c-28ba-11e9-034c-db9fb085ebd5" KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -35,7 +36,7 @@ path = ".." Adapt = "4.3" Aqua = "0.8.11" Compat = "4.16" -DataGraphs = "0.4" +DataGraphs = "0.4.1" Dictionaries = "0.4.4" Glob = "1.3.1" Graphs = "1.12" @@ -43,12 +44,13 @@ GraphsFlows = "0.1.1" ITensorMPS = "0.3.6, 0.4" ITensorNetworks = "0.22" ITensorPkgSkeleton = "0.3.42" +ITensorVisualizationBase = "0.1" ITensors = "0.7, 0.8, 0.9" KrylovKit = "0.8, 0.9, 0.10" LinearAlgebra = "1.10" Metis = "1.5" NDTensors = "0.3, 0.4" -NamedGraphs = "0.11" +NamedGraphs = "0.11.1" OMEinsumContractionOrders = "0.9.5, 1" Pkg = "1.10" Random = "1.10" diff --git a/test/test_itensorvisualizationbase_ext.jl b/test/test_itensorvisualizationbase_ext.jl new file mode 100644 index 00000000..ae4d9770 --- /dev/null +++ b/test/test_itensorvisualizationbase_ext.jl @@ -0,0 +1,12 @@ +using ITensorNetworks: AbstractITensorNetwork, ITensorNetwork +using ITensorVisualizationBase: ITensorVisualizationBase +using ITensors: ITensor, Index +using Test: @test, @testset + +@testset "ITensorNetworksITensorVisualizationBaseExt" begin + i, j, k = Index(2, "i"), Index(2, "j"), Index(2, "k") + tn = ITensorNetwork([ITensor(i, j), ITensor(j, k)]) + @test hasmethod(ITensorVisualizationBase.visualize, Tuple{AbstractITensorNetwork}) + @test isnothing(ITensorVisualizationBase.visualize(tn)) + @test isnothing(ITensorVisualizationBase.visualize(tn; vertex_labels_prefix = "v")) +end