@@ -4,6 +4,27 @@ struct GenericNamedGraph{V,G<:AbstractSimpleGraph{Int}} <: AbstractNamedGraph{V}
44 vertex_to_parent_vertex:: Dictionary{V,Int}
55end
66
7+ function convert_vertextype (V:: Type , graph:: GenericNamedGraph )
8+ return GenericNamedGraph (parent_graph (graph), convert (Vector{V}, vertices (graph)))
9+ end
10+
11+ #
12+ # Convert inputs to vertex list
13+ #
14+
15+ function to_vertices (vertices)
16+ return Vector (vertices)
17+ end
18+ to_vertices (vertices:: Vector ) = vertices
19+ to_vertices (vertices:: Array ) = vec (vertices)
20+ # Treat tuple inputs as cartesian grid sizes
21+ function to_vertices (vertices:: Tuple{Vararg{Integer}} )
22+ return vec (Tuple .(CartesianIndices (vertices)))
23+ end
24+ function to_vertices (V:: Type , vertices)
25+ return convert (Vector{V}, to_vertices (vertices))
26+ end
27+
728#
829# Constructors from `AbstractSimpleGraph`
930#
1233function GenericNamedGraph {V,G} (
1334 parent_graph:: AbstractSimpleGraph , vertices:: Vector
1435) where {V,G}
36+ @assert length (vertices) == nv (parent_graph)
1537 # Need to copy the vertices here, otherwise the Dictionary uses a view of the vertices
1638 return GenericNamedGraph {V,G} (
1739 parent_graph, vertices, Dictionary (copy (vertices), eachindex (vertices))
1840 )
1941end
2042
21- function GenericNamedGraph {V} (parent_graph:: AbstractSimpleGraph , vertices:: Vector ) where {V}
43+ function GenericNamedGraph {V,G} (
44+ parent_graph:: AbstractSimpleGraph , vertices
45+ ) where {V,G}
46+ return GenericNamedGraph {V,G} (parent_graph, to_vertices (V, vertices))
47+ end
48+
49+ function GenericNamedGraph {V} (parent_graph:: AbstractSimpleGraph , vertices) where {V}
2250 return GenericNamedGraph {V,typeof(parent_graph)} (parent_graph, vertices)
2351end
2452
@@ -28,28 +56,37 @@ function GenericNamedGraph{<:Any,G}(
2856 return GenericNamedGraph {eltype(vertices),G} (parent_graph, vertices)
2957end
3058
59+ function GenericNamedGraph {<:Any,G} (
60+ parent_graph:: AbstractSimpleGraph , vertices
61+ ) where {G}
62+ return GenericNamedGraph {<:Any,G} (parent_graph, to_vertices (vertices))
63+ end
64+
3165function GenericNamedGraph (parent_graph:: AbstractSimpleGraph , vertices:: Vector )
32- # Need to copy the vertices here, otherwise the Dictionary uses a view of the vertices
3366 return GenericNamedGraph {eltype(vertices)} (parent_graph, vertices)
3467end
3568
69+ function GenericNamedGraph (parent_graph:: AbstractSimpleGraph , vertices)
70+ return GenericNamedGraph (parent_graph, to_vertices (vertices))
71+ end
72+
3673#
3774# Constructors from vertex names
3875#
3976
40- function GenericNamedGraph {V,G} (vertices:: Vector ) where {V,G}
77+ function GenericNamedGraph {V,G} (vertices) where {V,G}
4178 return GenericNamedGraph (G (length (vertices)), vertices)
4279end
4380
44- function GenericNamedGraph {V} (vertices:: Vector ) where {V}
81+ function GenericNamedGraph {V} (vertices) where {V}
4582 return GenericNamedGraph {V,SimpleGraph{Int}} (vertices)
4683end
4784
48- function GenericNamedGraph {<:Any,G} (vertices:: Vector ) where {G}
85+ function GenericNamedGraph {<:Any,G} (vertices) where {G}
4986 return GenericNamedGraph {Any,G} (vertices)
5087end
5188
52- function GenericNamedGraph (vertices:: Vector )
89+ function GenericNamedGraph (vertices)
5390 return GenericNamedGraph {eltype(vertices)} (vertices)
5491end
5592
@@ -93,34 +130,6 @@ function GenericNamedGraph(
93130 return GenericNamedGraph (parent_graph, vertices)
94131end
95132
96- #
97- # Convenient cartesian index constructor
98- #
99-
100- function GenericNamedGraph {V,G} (
101- parent_graph:: AbstractSimpleGraph , grid_size:: Tuple{Vararg{Int}}
102- ) where {V,G}
103- vertices = Tuple .(CartesianIndices (grid_size))
104- @assert prod (grid_size) == nv (parent_graph)
105- return GenericNamedGraph {V,G} (parent_graph, vec (vertices))
106- end
107-
108- function GenericNamedGraph {V} (
109- parent_graph:: AbstractSimpleGraph , grid_size:: Tuple{Vararg{Int}}
110- ) where {V}
111- return GenericNamedGraph {V,typeof(parent_graph)} (parent_graph, grid_size)
112- end
113-
114- function GenericNamedGraph {<:Any,G} (
115- parent_graph:: AbstractSimpleGraph , grid_size:: Tuple{Vararg{Int}}
116- ) where {G}
117- return GenericNamedGraph {typeof(grid_size),G} (parent_graph, grid_size)
118- end
119-
120- function GenericNamedGraph (parent_graph:: AbstractSimpleGraph , grid_size:: Tuple{Vararg{Int}} )
121- return GenericNamedGraph {typeof(grid_size),typeof(parent_graph)} (parent_graph, grid_size)
122- end
123-
124133# AbstractNamedGraph required interface.
125134# TODO : rename `parent_graph` (type is implied by input)
126135parent_graph_type (:: Type{<:GenericNamedGraph{V,G}} ) where {V,G} = G
0 commit comments