From de7fbfb2f8feacc6fa46f6dee8375f1a52950637 Mon Sep 17 00:00:00 2001 From: Matthew Fishman Date: Tue, 12 May 2026 16:19:43 -0400 Subject: [PATCH 1/2] Add NamedGraphsITensorVisualizationBaseExt Move the `visualize(::AbstractNamedGraph, ...)` overload that previously lived in ITensorNetworks.jl (where it was type piracy) into NamedGraphs as a package extension keyed on ITensorVisualizationBase. The method delegates to `visualize(position_graph(graph), ...)` with optional `vertex_labels_prefix` for labeling. Bumps version to 0.11.1. Co-Authored-By: Claude Opus 4.7 (1M context) --- Project.toml | 5 ++++- .../NamedGraphsITensorVisualizationBaseExt.jl | 22 +++++++++++++++++++ test/Project.toml | 1 + test/test_itensorvisualizationbase_ext.jl | 13 +++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ext/NamedGraphsITensorVisualizationBaseExt/NamedGraphsITensorVisualizationBaseExt.jl create mode 100644 test/test_itensorvisualizationbase_ext.jl diff --git a/Project.toml b/Project.toml index ee332a93..f197bbb5 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "NamedGraphs" uuid = "678767b0-92e7-4007-89e4-4527a8725b19" -version = "0.11.0" +version = "0.11.1" authors = ["Matthew Fishman , Joseph Tindall and contributors"] [workspace] @@ -23,12 +23,14 @@ Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" [weakdeps] GraphsFlows = "06909019-6f44-4949-96fc-b9d9aaa02889" +ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" KaHyPar = "2a6221f6-aa48-11e9-3542-2d9e0ef01880" Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b" SymRCM = "286e6d88-80af-4590-acc9-0001b223b9bd" [extensions] NamedGraphsGraphsFlowsExt = "GraphsFlows" +NamedGraphsITensorVisualizationBaseExt = "ITensorVisualizationBase" NamedGraphsKaHyParExt = "KaHyPar" NamedGraphsMetisExt = "Metis" NamedGraphsSimpleGraphAlgorithmsExt = "SimpleGraphAlgorithms" @@ -40,6 +42,7 @@ Combinatorics = "1.0.2" Dictionaries = "0.4" Graphs = "1.8" GraphsFlows = "0.1.1" +ITensorVisualizationBase = "0.1" KaHyPar = "0.3.1" LinearAlgebra = "1.7" Metis = "1.4" diff --git a/ext/NamedGraphsITensorVisualizationBaseExt/NamedGraphsITensorVisualizationBaseExt.jl b/ext/NamedGraphsITensorVisualizationBaseExt/NamedGraphsITensorVisualizationBaseExt.jl new file mode 100644 index 00000000..3695bb59 --- /dev/null +++ b/ext/NamedGraphsITensorVisualizationBaseExt/NamedGraphsITensorVisualizationBaseExt.jl @@ -0,0 +1,22 @@ +module NamedGraphsITensorVisualizationBaseExt + +using Graphs: vertices +using ITensorVisualizationBase: ITensorVisualizationBase +using NamedGraphs: AbstractNamedGraph, position_graph + +function ITensorVisualizationBase.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 + return ITensorVisualizationBase.visualize( + position_graph(graph), args...; vertex_labels, kwargs... + ) +end + +end diff --git a/test/Project.toml b/test/Project.toml index 2d3480db..6728576f 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -5,6 +5,7 @@ Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" GraphsFlows = "06909019-6f44-4949-96fc-b9d9aaa02889" ITensorPkgSkeleton = "3d388ab1-018a-49f4-ae50-18094d5f71ea" +ITensorVisualizationBase = "cd2553d2-8bef-4d93-8a38-c62f17d5ad23" KaHyPar = "2a6221f6-aa48-11e9-3542-2d9e0ef01880" Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b" NamedGraphs = "678767b0-92e7-4007-89e4-4527a8725b19" diff --git a/test/test_itensorvisualizationbase_ext.jl b/test/test_itensorvisualizationbase_ext.jl new file mode 100644 index 00000000..ad1da075 --- /dev/null +++ b/test/test_itensorvisualizationbase_ext.jl @@ -0,0 +1,13 @@ +@eval module $(gensym()) +using ITensorVisualizationBase: ITensorVisualizationBase +using NamedGraphs.NamedGraphGenerators: named_grid +using NamedGraphs: AbstractNamedGraph +using Test: @test, @testset + +@testset "NamedGraphsITensorVisualizationBaseExt" begin + g = named_grid((2, 2)) + @test hasmethod(ITensorVisualizationBase.visualize, Tuple{AbstractNamedGraph}) + @test ITensorVisualizationBase.visualize(g) === nothing + @test ITensorVisualizationBase.visualize(g; vertex_labels_prefix = "v") === nothing +end +end From 86d195c569f41a9e92f028092ab85e37dfe7f6a2 Mon Sep 17 00:00:00 2001 From: Matthew Fishman Date: Tue, 12 May 2026 16:40:33 -0400 Subject: [PATCH 2/2] Use isnothing instead of === nothing in visualize ext test Co-Authored-By: Claude Opus 4.7 (1M context) --- test/test_itensorvisualizationbase_ext.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_itensorvisualizationbase_ext.jl b/test/test_itensorvisualizationbase_ext.jl index ad1da075..72e99da1 100644 --- a/test/test_itensorvisualizationbase_ext.jl +++ b/test/test_itensorvisualizationbase_ext.jl @@ -7,7 +7,7 @@ using Test: @test, @testset @testset "NamedGraphsITensorVisualizationBaseExt" begin g = named_grid((2, 2)) @test hasmethod(ITensorVisualizationBase.visualize, Tuple{AbstractNamedGraph}) - @test ITensorVisualizationBase.visualize(g) === nothing - @test ITensorVisualizationBase.visualize(g; vertex_labels_prefix = "v") === nothing + @test isnothing(ITensorVisualizationBase.visualize(g)) + @test isnothing(ITensorVisualizationBase.visualize(g; vertex_labels_prefix = "v")) end end