Skip to content

Commit 02b2197

Browse files
authored
fix empty graph (#48)
* fix empty graph * bump version
1 parent e0ff104 commit 02b2197

File tree

12 files changed

+47
-18
lines changed

12 files changed

+47
-18
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "GenericTensorNetworks"
22
uuid = "3521c873-ad32-4bb4-b63d-f4f178f42b49"
33
authors = ["GiggleLiu <cacate0129@gmail.com> and contributors"]
4-
version = "1.0.5"
4+
version = "1.0.6"
55

66
[deps]
77
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"

src/networks/Coloring.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ fixedvertices(gp::Coloring) = gp.fixedvertices
4242

4343
function generate_tensors(x::T, c::Coloring{K}) where {K,T}
4444
ixs = getixsv(c.code)
45-
return select_dims(vcat(
46-
add_labels!([coloringv(T, K) for i=1:nv(c.graph)], ixs[1:nv(c.graph)], labels(c)), [coloringb(x, K) .^ get_weights(c, i) for i=1:ne(c.graph)]
47-
), ixs, fixedvertices(c))
45+
return select_dims([
46+
add_labels!(Array{T}[coloringv(T, K) for i=1:nv(c.graph)], ixs[1:nv(c.graph)], labels(c))...,
47+
Array{T}[coloringb(x, K) .^ get_weights(c, i) for i=1:ne(c.graph)]...
48+
], ixs, fixedvertices(c))
4849
end
4950

5051
# coloring bond tensor

src/networks/IndependentSet.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ function generate_tensors(x::T, gp::IndependentSet) where T
5656
nv(gp.graph) == 0 && return []
5757
ixs = getixsv(gp.code)
5858
# we only add labels at vertex tensors
59-
return select_dims(vcat(add_labels!([misv(Ref(x) .^ get_weights(gp, i)) for i=1:nv(gp.graph)], ixs[1:nv(gp.graph)], labels(gp)),
60-
[misb(T, length(ix)) for ix in ixs[nv(gp.graph)+1:end]] # if n!=2, it corresponds to set packing problem.
61-
), ixs, fixedvertices(gp))
59+
return select_dims([
60+
add_labels!(Array{T}[misv(Ref(x) .^ get_weights(gp, i)) for i=1:nv(gp.graph)], ixs[1:nv(gp.graph)], labels(gp))...,
61+
Array{T}[misb(T, length(ix)) for ix in ixs[nv(gp.graph)+1:end]]... # if n!=2, it corresponds to set packing problem.
62+
], ixs, fixedvertices(gp))
6263
end
6364

6465
function misb(::Type{T}, n::Integer=2) where T

src/networks/Matching.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ labels(gp::Matching) = getindex.(terms(gp))
4141
fixedvertices(gp::Matching) = gp.fixedvertices
4242

4343
function generate_tensors(x::T, m::Matching) where T
44-
ne(m.graph) == 0 && return []
44+
ne(m.graph) == 0 && return Array{T}[]
4545
ixs = getixsv(m.code)
46-
tensors = AbstractArray{T}[]
46+
tensors = Array{T}[]
4747
for i=1:length(ixs)
4848
ix = ixs[i]
4949
if i<=ne(m.graph)

src/networks/OpenPitMining.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ function generate_tensors(x::T, gp::OpenPitMining) where T
9898
nblocks == 0 && return []
9999
ixs = getixsv(gp.code)
100100
# we only add labels at vertex tensors
101-
return select_dims(vcat(add_labels!([Ref(x) .^ get_weights(gp, i) for i=1:nblocks], ixs[1:nblocks], labels(gp)),
102-
[mining_tensor(T) for ix in ixs[nblocks+1:end]]), ixs, fixedvertices(gp)
101+
return select_dims([
102+
add_labels!(Array{T}[Ref(x) .^ get_weights(gp, i) for i=1:nblocks], ixs[1:nblocks], labels(gp))...,
103+
Array{T}[mining_tensor(T) for ix in ixs[nblocks+1:end]]...
104+
], ixs, fixedvertices(gp)
103105
)
104106
end
105107

src/networks/PaintShop.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ function PaintShop(sequence::AbstractVector{T}; openvertices=(), fixedvertices=D
5757
@assert all(l->count(==(l), sequence)==2, sequence)
5858
n = length(sequence)
5959
isfirst = [findfirst(==(sequence[i]), sequence) == i for i=1:n]
60-
rawcode = EinCode(vcat(
60+
rawcode = EinCode(
6161
[[sequence[i], sequence[i+1]] for i=1:n-1], # labels for edge tensors
62-
),
6362
collect(T, openvertices))
6463
PaintShop(_optimize_code(rawcode, uniformsize_fix(rawcode, 2, fixedvertices), optimizer, simplifier), sequence, isfirst, Dict{T,Int}(fixedvertices))
6564
end
@@ -73,7 +72,7 @@ fixedvertices(gp::PaintShop) = gp.fixedvertices
7372
function generate_tensors(x::T, c::PaintShop) where T
7473
ixs = getixsv(c.code)
7574
tensors = [paintshop_bond_tensor((Ref(x) .^ get_weights(c, i))...) for i=1:length(ixs)]
76-
return select_dims(add_labels!([flip_labels(tensors[i], c.isfirst[i], c.isfirst[i+1]) for i=1:length(ixs)], ixs, labels(c)), ixs, fixedvertices(c))
75+
return select_dims(add_labels!(Array{T}[flip_labels(tensors[i], c.isfirst[i], c.isfirst[i+1]) for i=1:length(ixs)], ixs, labels(c)), ixs, fixedvertices(c))
7776
end
7877

7978
function paintshop_bond_tensor(a::T, b::T) where T

src/networks/SetCovering.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ function generate_tensors(x::T, gp::SetCovering) where T
8181
nsets == 0 && return []
8282
ixs = getixsv(gp.code)
8383
# we only add labels at vertex tensors
84-
return select_dims(vcat(add_labels!([misv(Ref(x) .^ get_weights(gp, i)) for i=1:nsets], ixs[1:nsets], labels(gp)),
85-
[cover_tensor(T, ix) for ix in ixs[nsets+1:end]]), ixs, fixedvertices(gp)
84+
return select_dims([
85+
add_labels!(Array{T}[misv(Ref(x) .^ get_weights(gp, i)) for i=1:nsets], ixs[1:nsets], labels(gp))...,
86+
Array{T}[cover_tensor(T, ix) for ix in ixs[nsets+1:end]]...], ixs, fixedvertices(gp)
8687
)
8788
end
8889

src/networks/SetPacking.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ function generate_tensors(x::T, gp::SetPacking) where T
5454
length(gp.sets) == 0 && return []
5555
ixs = getixsv(gp.code)
5656
# we only add labels at vertex tensors
57-
return select_dims(vcat(add_labels!([misv(Ref(x) .^ get_weights(gp, i)) for i=1:length(gp.sets)], ixs[1:length(gp.sets)], labels(gp)),
58-
[misb(T, length(ix)) for ix in ixs[length(gp.sets)+1:end]]), ixs, fixedvertices(gp),
57+
return select_dims([
58+
add_labels!(Array{T}[misv(Ref(x) .^ get_weights(gp, i)) for i=1:length(gp.sets)], ixs[1:length(gp.sets)], labels(gp))...,
59+
Array{T}[misb(T, length(ix)) for ix in ixs[length(gp.sets)+1:end]]...], ixs, fixedvertices(gp),
5960
)
6061
end
6162

test/networks/Coloring.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,10 @@ end
2525
@test solve(problem, SizeMax())[].n == 30
2626
res = solve(problem, SingleConfigMax())[].c.data
2727
@test is_vertex_coloring(g, res)
28+
end
29+
30+
@testset "empty graph" begin
31+
g = SimpleGraph(4)
32+
pb = Coloring{3}(g)
33+
@test solve(pb, SizeMax()) !== 4
2834
end

test/networks/DominatingSet.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,10 @@ end
2424
for config in configs
2525
@test is_dominating_set(g, config)
2626
end
27+
end
28+
29+
@testset "empty graph" begin
30+
g = SimpleGraph(4)
31+
pb = MaximalIS(g)
32+
@test solve(pb, SizeMax()) !== 4
2733
end

0 commit comments

Comments
 (0)