Skip to content

Commit 652e59e

Browse files
authored
Add weights(::AbstractITensorNetwork), new graph partitioning interface
2 parents 1c45db7 + db6fea1 commit 652e59e

30 files changed

+793
-360
lines changed

README.md

Lines changed: 88 additions & 88 deletions
Large diffs are not rendered by default.

docs/make.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using ITensorNetworks
22
using Documenter
33

4-
DocMeta.setdocmeta!(ITensorNetworks, :DocTestSetup, :(using ITensorNetworks); recursive=true)
4+
DocMeta.setdocmeta!(
5+
ITensorNetworks, :DocTestSetup, :(using ITensorNetworks); recursive=true
6+
)
57

68
makedocs(;
79
modules=[ITensorNetworks],

examples/README.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,8 @@ Z̃ = contract(Z, (1, 1) => (2, 1));
6161
#+ eval=false
6262

6363
using ITensorNetworks, Weave
64-
weave(joinpath(pkgdir(ITensorNetworks), "examples", "README.jl"); doctype="github", out_path=pkgdir(ITensorNetworks))
64+
weave(
65+
joinpath(pkgdir(ITensorNetworks), "examples", "README.jl");
66+
doctype="github",
67+
out_path=pkgdir(ITensorNetworks),
68+
)

examples/belief_propagation/bpexample.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ using ITensors
33
using Metis
44
using ITensorNetworks
55

6-
using ITensorNetworks:
7-
construct_initial_mts,
8-
update_all_mts,
9-
get_single_site_expec
6+
using ITensorNetworks: construct_initial_mts, update_all_mts, get_single_site_expec
107

118
n = 4
129
dims = (n, n)

examples/boundary.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using NamedGraphs
2+
using ITensors
3+
using ITensorNetworks
4+
using ITensorUnicodePlots
5+
using Metis
6+
7+
tn = ITensorNetwork(named_grid((6, 3)); link_space=4)
8+
9+
@visualize tn
10+
11+
g = subgraph_vertices(tn; nvertices_per_partition=2)
12+
sub_vs_1, sub_vs_2 = g[1], g[2]
13+
14+
@show (1, 1) sub_vs_1
15+
@show (6, 3) sub_vs_2
16+
17+
@show boundary_edges(tn, sub_vs_1)
18+
@show boundary_vertices(tn, sub_vs_1)
19+
@show inner_boundary_vertices(tn, sub_vs_1)
20+
@show outer_boundary_vertices(tn, sub_vs_1)

examples/distances.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using NamedGraphs
2+
using ITensors
3+
using ITensorNetworks
4+
using ITensorUnicodePlots
5+
6+
g = named_grid((3, 5))
7+
s = siteinds("S=1/2", g)
8+
ψ = ITensorNetwork(s; link_space=4)
9+
@visualize ψ
10+
@show center(ψ)
11+
@show periphery(ψ)
12+
t = dijkstra_tree(ψ, only(center(ψ)))
13+
@visualize t
14+
@show a_star(ψ, (2, 1), (2, 5))
15+
@show mincut_partitions(ψ)
16+
@show mincut_partitions(ψ, (1, 1), (3, 5))
17+
@show subgraph_vertices(ψ; npartitions=2)

examples/group_partition.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using ITensors
2+
using Graphs
3+
using NamedGraphs
4+
using ITensorNetworks
5+
using SplitApplyCombine
6+
using Metis
7+
8+
s = siteinds("S=1/2", named_grid(8))
9+
tn = ITensorNetwork(s; link_space=2)
10+
Z = prime(tn; sites=[]) tn
11+
vertex_groups = group(v -> v[1], vertices(Z))
12+
# Create two layers of partitioning
13+
Z_p = partition(partition(Z, vertex_groups); nvertices_per_partition=2)
14+
# Flatten the partitioned partitions
15+
Z_verts = [
16+
reduce(vcat, (vertices(Z_p[vp][v]) for v in vertices(Z_p[vp]))) for vp in vertices(Z_p)
17+
]

examples/mincut.jl

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using NamedGraphs
2+
using ITensors
3+
using ITensorNetworks
4+
using ITensorUnicodePlots
5+
6+
g = named_grid(5)
7+
s = siteinds("S=1/2", g)
8+
9+
ψ = ITensorNetwork(s; link_space=10)
10+
11+
# ρ = flatten_networks(dag(ψ), ψ')
12+
13+
# Or:
14+
15+
ss = (dag(s), s'; merge_data=union)
16+
ρ = ITensorNetwork(ss; link_space=2)
17+
18+
tn = ', ρ, ψ)
19+
tn_flattened = flatten_networks', ρ, ψ)
20+
# tn = ρ' ⊗ ρ ⊗ ψ
21+
@visualize tn
22+
23+
@show center(tn)
24+
25+
v = first(center(tn))
26+
27+
dijk_parents = dijkstra_parents(tn, v)
28+
dijk_mst = dijkstra_mst(tn, v)
29+
dijk_tree = dijkstra_tree(tn, v)
30+
31+
bfs_tree_tn = bfs_tree(tn, v)
32+
33+
@show eccentricity(tn, v)
34+
@show radius(tn)
35+
@show radius(tn)
36+
@show diameter(tn)
37+
@show periphery(tn)
38+
39+
s = dijk_tree
40+
t = bfs_tree_tn
41+
@visualize s
42+
@visualize t
43+
44+
v1 = first(periphery(tn))
45+
nds = neighborhood_dists(tn, v1, nv(tn))
46+
d_and_i = findmax(vd -> vd[2], nds)
47+
v2 = nds[d_and_i[2]][1]
48+
@show v1, v2
49+
p1, p2 = mincut_partitions(tn, v1, v2)
50+
@show p1
51+
@show p2
52+
53+
display(adjacency_matrix(tn_flattened))
54+
tn_flattened_p = symrcm_permute(tn_flattened)
55+
display(adjacency_matrix(tn_flattened_p))

examples/partition/kahypar_vs_metis.jl

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,39 @@ using ITensorNetworks
66
g = grid((16,))
77
npartitions = 4
88

9-
kahypar_partitions = partition(g, npartitions; backend="KaHyPar")
10-
metis_partitions = partition(g, npartitions; backend="Metis")
11-
@show kahypar_partitions, length(unique(kahypar_partitions))
12-
@show metis_partitions, length(unique(metis_partitions))
9+
kahypar_partitions = subgraph_vertices(g; npartitions, backend="KaHyPar")
10+
metis_partitions = subgraph_vertices(g; npartitions, backend="Metis")
11+
@show kahypar_partitions, length(kahypar_partitions)
12+
@show metis_partitions, length(metis_partitions)
13+
14+
g_parts = partition(g; npartitions)
15+
@show nv(g_parts) == 4
16+
@show nv(g_parts[1]) == 4
17+
@show nv(g_parts[2]) == 4
18+
@show nv(g_parts[3]) == 4
19+
@show nv(g_parts[4]) == 4
20+
@show issetequal(metis_partitions[2], vertices(g_parts[2]))
21+
22+
using ITensorNetworks
23+
tn = ITensorNetwork(named_grid((4, 2)); link_space=3);
24+
25+
# subgraph_vertices
26+
tn_sv = subgraph_vertices(tn; npartitions=2) # Same as `partition_vertices(tn; nvertices_per_partition=4)`
27+
28+
# partition_vertices
29+
tn_pv = partition_vertices(tn; npartitions=2);
30+
typeof(tn_pv)
31+
tn_pv[1]
32+
edges(tn_pv)
33+
tn_pv[1 => 2]
34+
35+
# subgraphs
36+
tn_sg = subgraphs(tn; npartitions=2);
37+
typeof(tn_sg)
38+
tn_sg[1]
39+
40+
# partition
41+
tn_pg = partition(tn; npartitions=2);
42+
typeof(tn_pg)
43+
tn_pg[1]
44+
tn_pg[1 => 2][:edges]

examples/partition/partitioning.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ neighbor_edges = [v => nv for nv in neighbors(ψ, v)]
2424
@show [e => linkinds(ψ, e) for e in neighbor_edges]
2525

2626
npartitions = 4
27-
partitions = partition, npartitions)
27+
partitions = partition; npartitions)
2828

2929
@show partitions
3030

0 commit comments

Comments
 (0)