@@ -5,52 +5,53 @@ abstract type GraphProblem end
55
66"""
77 Independence{CT<:EinTypes} <: GraphProblem
8- Independence(graph; kwargs...)
8+ Independence(graph; openvertices=(), kwargs...)
99
1010Independent set problem. `kwargs` is forwarded to `optimize_code`.
1111"""
1212struct Independence{CT<: EinTypes } <: GraphProblem
1313 code:: CT
1414end
1515
16- function Independence (g:: SimpleGraph ; outputs = (), kwargs... )
16+ function Independence (g:: SimpleGraph ; openvertices = (), kwargs... )
1717 rawcode = EinCode (([(i,) for i in LightGraphs. vertices (g)]. .. , # labels for vertex tensors
18- [minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ), outputs) # labels for edge tensors
19- Independence (optimize_code (rawcode; kwargs... ))
18+ [minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ), openvertices) # labels for edge tensors
19+ code = optimize_code (rawcode; kwargs... )
20+ Independence (code)
2021end
2122
2223"""
2324 MaxCut{CT<:EinTypes} <: GraphProblem
24- MaxCut(graph; kwargs...)
25+ MaxCut(graph; openvertices=(), kwargs...)
2526
2627Max cut problem (or spin glass problem). `kwargs` is forwarded to `optimize_code`.
2728"""
2829struct MaxCut{CT<: EinTypes } <: GraphProblem
2930 code:: CT
3031end
31- function MaxCut (g:: SimpleGraph ; outputs = (), kwargs... )
32- rawcode = EinCode (([minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ,), outputs ) # labels for edge tensors
32+ function MaxCut (g:: SimpleGraph ; openvertices = (), kwargs... )
33+ rawcode = EinCode (([minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ,), openvertices ) # labels for edge tensors
3334 MaxCut (optimize_code (rawcode; kwargs... ))
3435end
3536
3637"""
3738 MaximalIndependence{CT<:EinTypes} <: GraphProblem
38- MaximalIndependence(graph; kwargs...)
39+ MaximalIndependence(graph; openvertices=(), kwargs...)
3940
4041Maximal independent set problem. `kwargs` is forwarded to `optimize_code`.
4142"""
4243struct MaximalIndependence{CT<: EinTypes } <: GraphProblem
4344 code:: CT
4445end
4546
46- function MaximalIndependence (g:: SimpleGraph ; outputs = (), kwargs... )
47- rawcode = EinCode (([(LightGraphs. neighbors (g, v)... , v) for v in LightGraphs. vertices (g)]. .. ,), outputs )
47+ function MaximalIndependence (g:: SimpleGraph ; openvertices = (), kwargs... )
48+ rawcode = EinCode (([(LightGraphs. neighbors (g, v)... , v) for v in LightGraphs. vertices (g)]. .. ,), openvertices )
4849 MaximalIndependence (optimize_code (rawcode; kwargs... ))
4950end
5051
5152"""
5253 Matching{CT<:EinTypes} <: GraphProblem
53- Matching(graph; kwargs...)
54+ Matching(graph; openvertices=(), kwargs...)
5455
5556Vertex matching problem. `kwargs` is forwarded to `optimize_code`.
5657The matching polynomial adopts the first definition in wiki page: https://en.wikipedia.org/wiki/Matching_polynomial
@@ -63,15 +64,15 @@ struct Matching{CT<:EinTypes} <: GraphProblem
6364 code:: CT
6465end
6566
66- function Matching (g:: SimpleGraph ; outputs = (), kwargs... )
67+ function Matching (g:: SimpleGraph ; openvertices = (), kwargs... )
6768 rawcode = EinCode (([(minmax (e. src,e. dst),) for e in LightGraphs. edges (g)]. .. , # labels for edge tensors
68- [([minmax (i,j) for j in neighbors (g, i)]. .. ,) for i in LightGraphs. vertices (g)]. .. ,), outputs ) # labels for vertex tensors
69+ [([minmax (i,j) for j in neighbors (g, i)]. .. ,) for i in LightGraphs. vertices (g)]. .. ,), openvertices ) # labels for vertex tensors
6970 Matching (optimize_code (rawcode; kwargs... ))
7071end
7172
7273"""
7374 Coloring{K,CT<:EinTypes} <: GraphProblem
74- Coloring{K}(graph; kwargs...)
75+ Coloring{K}(graph; openvertices=(), kwargs...)
7576
7677K-Coloring problem. `kwargs` is forwarded to `optimize_code`.
7778"""
@@ -80,7 +81,7 @@ struct Coloring{K,CT<:EinTypes} <: GraphProblem
8081end
8182Coloring {K} (code:: ET ) where {K,ET<: EinTypes } = Coloring {K,ET} (code)
8283# same network layout as independent set.
83- Coloring {K} (g:: SimpleGraph ; outputs = (), kwargs... ) where K = Coloring {K} (Independence (g; outputs = outputs , kwargs... ). code)
84+ Coloring {K} (g:: SimpleGraph ; openvertices = (), kwargs... ) where K = Coloring {K} (Independence (g; openvertices = openvertices , kwargs... ). code)
8485
8586"""
8687 labels(code)
@@ -89,7 +90,7 @@ Return a vector of unique labels in an Einsum token.
8990"""
9091function labels (code:: EinTypes )
9192 res = []
92- for ix in OMEinsum . getixs (OMEinsum . flatten ( code) )
93+ for ix in collect_ixs ( code)
9394 for l in ix
9495 if l ∉ res
9596 push! (res, l)
0 commit comments