Introduction
The model-construction component uses a Potts Hamiltonian to transform Ising graphs into clustered representations. Instead of treating individual spins as separate variables, spins are grouped into clusters corresponding to unit cells of a given lattice geometry. This process reduces the number of variables while increasing their dimensionality, making the system more manageable for tensor-network-based approaches.
SpinGlassPEPS.SpinGlassNetworks.potts_hamiltonian — Function
potts_hamiltonian(
ig::LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, T}} where T,
num_states_cl::Int64;
spectrum,
cluster_assignment_rule
)
Construct a Potts Hamiltonian.
This function converts an Ising graph into a Potts Hamiltonian by clustering spins into groups defined by a given lattice geometry. Each cluster is assigned a fixed number of states.
Arguments:
ig::IsingGraph: The input Ising graph, representing the spin system as a set of vertices (spins) and edges (interactions).num_states_cl::Int: The number of states assigned to each cluster. All clusters are assigned the same number of states.spectrum::Function: A function for computing the spectrum of the Potts Hamiltonian. Options include:full_spectrumbrute_force: A direct approach for spectrum calculation, suitable for smaller systems.
cluster_assignment_rule::Dict{Int, L}: A dictionary mapping Ising graph vertices to clusters. Supported lattice geometries include:super_square_lattice: Maps linear indices to a 2D square lattice with nearest and next-nearest neighbor interactions.pegasus_lattice: Supports the Pegasus topology used in quantum annealing systems.zephyr_lattice: Supports the Zephyr topology used in quantum annealing systems.
Returns:
potts_h::LabelledGraph{S, T}: A labelled graph representing the Potts Hamiltonian, where:- Nodes correspond to clusters of spins.
- Edges represent interactions between clusters.
potts_hamiltonian(
ig::LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, T}} where T,
num_states_cl::Dict{T, Int64};
spectrum,
cluster_assignment_rule
)
Construct a Potts Hamiltonian.
This function converts an Ising graph into a Potts Hamiltonian by clustering Ising spins into groups defined by a specified lattice geometry. Each cluster is assigned a fixed number of states, and inter-cluster interactions are computed based on the structure of the Ising graph.
Arguments:
ig::IsingGraph: The input Ising graph, where vertices represent spins and edges represent interactions between them.num_states_cl::Dict{T, Int}: A dictionary mapping cluster indices to the number of states for each cluster. If a cluster is not explicitly listed, the function uses the cluster's default basis size.spectrum::Function: A function for calculating the spectrum of the Potts Hamiltonian for each cluster. Defaults tofull_spectrum. Alternatives, such asbrute_force, may also be provided.cluster_assignment_rule::Dict{Int, T}: A dictionary mapping Ising graph vertices to clusters. Supported cluster geometries include:super_square_latticepegasus_latticezephyr_lattice
Returns:
potts_h::LabelledGraph{S, T}: A labelled graph representing the Potts Hamiltonian, with:- Nodes: Corresponding to spin clusters, including their spectrum and configuration data.
- Edges: Representing inter-cluster interactions.
potts_hamiltonian(
ig::LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, T}} where T;
spectrum,
cluster_assignment_rule
)
Construct a Potts Hamiltonian with default cluster sizes.
This function converts an Ising graph into a Potts Hamiltonian using a specified cluster assignment rule. By default, this version of the function does not truncate cluster states, as it assigns the full basis size for each cluster during spectrum calculation. It is useful when no custom cluster sizes are required.
Arguments:
ig::IsingGraph: The input Ising graph, where vertices represent spins and edges represent interactions.spectrum::Function: A function for calculating the spectrum of the Potts Hamiltonian. Options include:full_spectrum(default): Computes the complete spectrum for all cluster configurations.brute_force: Suitable for smaller systems, uses direct enumeration to calculate the spectrum.
cluster_assignment_rule::Dict{Int, T}: A dictionary mapping Ising graph vertices to clusters. Supported cluster geometries include:super_square_latticepegasus_latticezephyr_lattice
Returns:
potts_h::LabelledGraph{MetaDiGraph}: A labelled graph representing the Potts Hamiltonian, where:- Nodes: Correspond to clusters of spins, with properties such as the spectrum and configuration details.
- Edges: Capture inter-cluster interactions, including coupling strengths and energy terms.
potts_hamiltonian(fname::String)
potts_hamiltonian(
fname::String,
Nx::Union{Nothing, Integer}
)
potts_hamiltonian(
fname::String,
Nx::Union{Nothing, Integer},
Ny::Union{Nothing, Integer}
)
Construct a Potts Hamiltonian for a Random Markov Field (RMF) model.
This function creates a Potts Hamiltonian from a Random Markov Field specified in an OpenGM-compatible file. It maps the RMF variables and their pairwise interactions onto a 2D grid structure, constructing the corresponding Potts Hamiltonian using a super square lattice representation. The function supports optional resizing of the grid dimensions.
Arguments
fname::String: Path to the OpenGM-compatible file containing the RMF definition. This file includes functions, factors, and variable dimensions.Nx::Union{Integer, Nothing}: (Optional) Number of columns in the 2D grid. Ifnothing, the dimensions are inferred from the file.Ny::Union{Integer, Nothing}: (Optional) Number of rows in the 2D grid. Ifnothing, the dimensions are inferred from the file.
Returns
potts_h::LabelledGraph{MetaDiGraph}: A labelled graph representing the Potts Hamiltonian, where:- Vertices correspond to individual clusters in the super square lattice.
- Edges represent interactions between clusters, annotated with energy and projector information.
Simple example
using SpinGlassPEPS
# Load instance
instance = joinpath(
pkgdir(SpinGlassPEPS), "docs", "src", "instances", "square_diagonal", "5x5", "diagonal.txt",
)
ig = ising_graph(instance)
# Create Potts Hamiltonian
potts_h = potts_hamiltonian(
ig,
cluster_assignment_rule = super_square_lattice((5,5,4))
)PottsHamiltonian{Tuple{Int64, Int64}, Float64, LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}, Spectrum{Float64, Vector{Vector{Int64}}}, Vector{LabelledGraphs.LabelledEdge{Int64}}}(LabelledGraphs.LabelledGraph{Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Tuple{Int64, Int64}}([(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5) … (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)], Graphs.SimpleGraphs.SimpleDiGraph{Int64}(72, [[2, 6, 7], [3, 6, 7, 8], [4, 7, 8, 9], [5, 8, 9, 10], [9, 10], [7, 11, 12], [8, 11, 12, 13], [9, 12, 13, 14], [10, 13, 14, 15], [14, 15] … [17, 21, 22], [18, 21, 22, 23], [19, 22, 23, 24], [20, 23, 24, 25], [24, 25], [22], [23], [24], [25], Int64[]], [Int64[], [1], [2], [3], [4], [1, 2], [1, 2, 3, 6], [2, 3, 4, 7], [3, 4, 5, 8], [4, 5, 9] … [11, 12], [11, 12, 13, 16], [12, 13, 14, 17], [13, 14, 15, 18], [14, 15, 19], [16, 17], [16, 17, 18, 21], [17, 18, 19, 22], [18, 19, 20, 23], [19, 20, 24]]), Dict((4, 5) => 20, (1, 2) => 2, (3, 1) => 11, (2, 5) => 10, (1, 3) => 3, (1, 4) => 4, (5, 5) => 25, (3, 2) => 12, (3, 3) => 13, (4, 1) => 16…)), Dict{Tuple{Int64, Int64}, LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}}((4, 5) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([77, 78, 79, 80], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(78 => 2, 79 => 3, 77 => 1, 80 => 4)), (1, 2) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([5, 6, 7, 8], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(5 => 1, 6 => 2, 7 => 3, 8 => 4)), (3, 1) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([41, 42, 43, 44], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(41 => 1, 43 => 3, 44 => 4, 42 => 2)), (2, 5) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([37, 38, 39, 40], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(39 => 3, 38 => 2, 37 => 1, 40 => 4)), (1, 3) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([9, 10, 11, 12], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(11 => 3, 10 => 2, 9 => 1, 12 => 4)), (1, 4) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([13, 14, 15, 16], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(13 => 1, 15 => 3, 16 => 4, 14 => 2)), (5, 5) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([97, 98, 99, 100], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(97 => 1, 99 => 3, 98 => 2, 100 => 4)), (3, 2) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([45, 46, 47, 48], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(47 => 3, 45 => 1, 46 => 2, 48 => 4)), (3, 3) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([49, 50, 51, 52], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(51 => 3, 49 => 1, 50 => 2, 52 => 4)), (4, 1) => LabelledGraphs.LabelledGraph{MetaGraphs.MetaGraph{Int64, Float64}, Int64}([61, 62, 63, 64], {4, 6} undirected Int64 metagraph with Float64 weights defined by :weight (default weight 1.0), Dict(64 => 4, 61 => 1, 63 => 3, 62 => 2))…), Dict{Tuple{Int64, Int64}, Spectrum{Float64, Vector{Vector{Int64}}}}((4, 5) => Spectrum{Float64, Vector{Vector{Int64}}}([-0.26562167560828764, -1.6861588434880155, 0.31799042473853967, -1.9338679628142625, 0.25866336214245345, 0.12996047191485505, 2.069529166507695, 1.1095050566070224, 1.1095050566070224, 2.069529166507695, 0.12996047191485505, 0.25866336214245345, -1.9338679628142625, 0.31799042473853967, -1.6861588434880155, -0.26562167560828764], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (1, 2) => Spectrum{Float64, Vector{Vector{Int64}}}([-2.1545678050474812, 0.2872285009236131, -0.13292086264073744, 1.6214237359338144, -0.2289698691403439, 1.0589745146989826, -0.5258304455853158, 0.07466223085746826, 0.07466223085746826, -0.5258304455853158, 1.0589745146989826, -0.2289698691403439, 1.6214237359338144, -0.13292086264073744, 0.2872285009236131, -2.1545678050474812], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (3, 1) => Spectrum{Float64, Vector{Vector{Int64}}}([-0.11510686832735662, 1.0368655817869872, -0.3420872359856877, 1.0395429058261905, 0.7413774060028238, 0.5325273119599232, -1.456963349458757, -1.4361557518041232, -1.4361557518041232, -1.456963349458757, 0.5325273119599232, 0.7413774060028238, 1.0395429058261905, -0.3420872359856877, 1.0368655817869872, -0.11510686832735662], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (2, 5) => Spectrum{Float64, Vector{Vector{Int64}}}([-0.3662879809815056, 0.4529351687672363, 0.971548702332151, 0.4467613191535267, -0.41627818565042585, 0.9609766206197619, -1.041449958791783, -1.0082056854489614, -1.0082056854489614, -1.041449958791783, 0.9609766206197619, -0.41627818565042585, 0.4467613191535267, 0.971548702332151, 0.4529351687672363, -0.3662879809815056], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (1, 3) => Spectrum{Float64, Vector{Vector{Int64}}}([0.2654848721069152, -0.17012099916467727, 0.9462661398220467, 0.8304294719763685, -1.9862279142844537, 1.3499555829890675, -2.4458699270723514, 1.2100827736270843, 1.2100827736270843, -2.4458699270723514, 1.3499555829890675, -1.9862279142844537, 0.8304294719763685, 0.9462661398220467, -0.17012099916467727, 0.2654848721069152], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (1, 4) => Spectrum{Float64, Vector{Vector{Int64}}}([-0.6075123392548918, 2.356477551083918, -1.7288756931039446, 1.101829893046373, -0.8575761420364076, -1.2216062488349861, 0.7272886950435049, 0.2299742840564345, 0.2299742840564345, 0.7272886950435049, -1.2216062488349861, -0.8575761420364076, 1.101829893046373, -1.7288756931039446, 2.356477551083918, -0.6075123392548918], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (5, 5) => Spectrum{Float64, Vector{Vector{Int64}}}([-0.05493150535196145, -1.2220745103633335, -1.6615188251528492, 0.25330097162501364, 2.7487097120765642, 1.5547301440211778, -1.75309961029423, 0.13488362343961846, 0.13488362343961846, -1.75309961029423, 1.5547301440211778, 2.7487097120765642, 0.25330097162501364, -1.6615188251528492, -1.2220745103633335, -0.05493150535196145], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (3, 2) => Spectrum{Float64, Vector{Vector{Int64}}}([0.05303573687163965, 0.4082011291179781, 1.9596871774831328, -1.21648286199413, -0.4448462298114282, 3.378645663985343, -2.2151985388628526, -1.9230420767896828, -1.9230420767896828, -2.2151985388628526, 3.378645663985343, -0.4448462298114282, -1.21648286199413, 1.9596871774831328, 0.4082011291179781, 0.05303573687163965], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (3, 3) => Spectrum{Float64, Vector{Vector{Int64}}}([-2.5842179179646942, -1.0755685102577255, 0.7546560024061484, 0.20430055930871882, -0.29324780541904794, 2.152398799023807, 0.2275185596321685, 0.614160313270625, 0.614160313270625, 0.2275185596321685, 2.152398799023807, -0.29324780541904794, 0.20430055930871882, 0.7546560024061484, -1.0755685102577255, -2.5842179179646942], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), (4, 1) => Spectrum{Float64, Vector{Vector{Int64}}}([1.3942938830376979, -1.049804260925442, -0.07395726465471908, -1.4571984915032132, 0.23302866617891071, 0.37912211467046664, -0.31621750620495126, 0.8907328594012505, 0.8907328594012505, -0.31621750620495126, 0.37912211467046664, 0.23302866617891071, -1.4571984915032132, -0.07395726465471908, -1.049804260925442, 1.3942938830376979], [[-1, -1, -1, -1], [1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, -1], [-1, -1, 1, -1], [1, -1, 1, -1], [-1, 1, 1, -1], [1, 1, 1, -1], [-1, -1, -1, 1], [1, -1, -1, 1], [-1, 1, -1, 1], [1, 1, -1, 1], [-1, -1, 1, 1], [1, -1, 1, 1], [-1, 1, 1, 1], [1, 1, 1, 1]], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])…), Dict{Tuple{Tuple{Int64, Int64}, Tuple{Int64, Int64}}, SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}}(((4, 4), (5, 3)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([3.567793340797884 0.23430314826010878 … -0.23430314826010878 -3.567793340797884; -2.1767971720577215 -2.6180929035420855 … 2.6180929035420855 2.1767971720577215; … ; 2.1767971720577215 2.6180929035420855 … -2.6180929035420855 -2.1767971720577215; -3.567793340797884 -0.23430314826010878 … 0.23430314826010878 3.567793340797884], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(73, 89), LabelledGraphs.LabelledEdge{Int64}(74, 89), LabelledGraphs.LabelledEdge{Int64}(75, 89), LabelledGraphs.LabelledEdge{Int64}(76, 89), LabelledGraphs.LabelledEdge{Int64}(73, 90), LabelledGraphs.LabelledEdge{Int64}(74, 90), LabelledGraphs.LabelledEdge{Int64}(75, 90), LabelledGraphs.LabelledEdge{Int64}(76, 90), LabelledGraphs.LabelledEdge{Int64}(73, 91), LabelledGraphs.LabelledEdge{Int64}(74, 91), LabelledGraphs.LabelledEdge{Int64}(75, 91), LabelledGraphs.LabelledEdge{Int64}(76, 91), LabelledGraphs.LabelledEdge{Int64}(73, 92), LabelledGraphs.LabelledEdge{Int64}(74, 92), LabelledGraphs.LabelledEdge{Int64}(75, 92), LabelledGraphs.LabelledEdge{Int64}(76, 92)]), ((2, 3), (3, 3)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([1.3138746488521946 -1.2789230479639029 … 1.2789230479639029 -1.3138746488521946; -2.976230583885211 -3.194030827999189 … 3.194030827999189 2.976230583885211; … ; 2.976230583885211 3.194030827999189 … -3.194030827999189 -2.976230583885211; -1.3138746488521946 1.2789230479639029 … -1.2789230479639029 1.3138746488521946], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(29, 49), LabelledGraphs.LabelledEdge{Int64}(30, 49), LabelledGraphs.LabelledEdge{Int64}(31, 49), LabelledGraphs.LabelledEdge{Int64}(32, 49), LabelledGraphs.LabelledEdge{Int64}(29, 50), LabelledGraphs.LabelledEdge{Int64}(30, 50), LabelledGraphs.LabelledEdge{Int64}(31, 50), LabelledGraphs.LabelledEdge{Int64}(32, 50), LabelledGraphs.LabelledEdge{Int64}(29, 51), LabelledGraphs.LabelledEdge{Int64}(30, 51), LabelledGraphs.LabelledEdge{Int64}(31, 51), LabelledGraphs.LabelledEdge{Int64}(32, 51), LabelledGraphs.LabelledEdge{Int64}(29, 52), LabelledGraphs.LabelledEdge{Int64}(30, 52), LabelledGraphs.LabelledEdge{Int64}(31, 52), LabelledGraphs.LabelledEdge{Int64}(32, 52)]), ((3, 3), (4, 4)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([-2.647083482151187 0.42171180219981874 … -0.42171180219981874 2.647083482151187; -4.246895279929512 -1.5317869697934792 … 1.5317869697934792 4.246895279929512; … ; 4.246895279929512 1.5317869697934792 … -1.5317869697934792 -4.246895279929512; 2.647083482151187 -0.42171180219981874 … 0.42171180219981874 -2.647083482151187], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(49, 73), LabelledGraphs.LabelledEdge{Int64}(50, 73), LabelledGraphs.LabelledEdge{Int64}(51, 73), LabelledGraphs.LabelledEdge{Int64}(52, 73), LabelledGraphs.LabelledEdge{Int64}(49, 74), LabelledGraphs.LabelledEdge{Int64}(50, 74), LabelledGraphs.LabelledEdge{Int64}(51, 74), LabelledGraphs.LabelledEdge{Int64}(52, 74), LabelledGraphs.LabelledEdge{Int64}(49, 75), LabelledGraphs.LabelledEdge{Int64}(50, 75), LabelledGraphs.LabelledEdge{Int64}(51, 75), LabelledGraphs.LabelledEdge{Int64}(52, 75), LabelledGraphs.LabelledEdge{Int64}(49, 76), LabelledGraphs.LabelledEdge{Int64}(50, 76), LabelledGraphs.LabelledEdge{Int64}(51, 76), LabelledGraphs.LabelledEdge{Int64}(52, 76)]), ((5, 2), (5, 3)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([-2.7632531738493737 2.0182418870673944 … -2.0182418870673944 2.7632531738493737; -1.1886986049306643 1.132735375478056 … -1.132735375478056 1.1886986049306643; … ; 1.1886986049306643 -1.132735375478056 … 1.132735375478056 -1.1886986049306643; 2.7632531738493737 -2.0182418870673944 … 2.0182418870673944 -2.7632531738493737], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(85, 89), LabelledGraphs.LabelledEdge{Int64}(86, 89), LabelledGraphs.LabelledEdge{Int64}(87, 89), LabelledGraphs.LabelledEdge{Int64}(88, 89), LabelledGraphs.LabelledEdge{Int64}(85, 90), LabelledGraphs.LabelledEdge{Int64}(86, 90), LabelledGraphs.LabelledEdge{Int64}(87, 90), LabelledGraphs.LabelledEdge{Int64}(88, 90), LabelledGraphs.LabelledEdge{Int64}(85, 91), LabelledGraphs.LabelledEdge{Int64}(86, 91), LabelledGraphs.LabelledEdge{Int64}(87, 91), LabelledGraphs.LabelledEdge{Int64}(88, 91), LabelledGraphs.LabelledEdge{Int64}(85, 92), LabelledGraphs.LabelledEdge{Int64}(86, 92), LabelledGraphs.LabelledEdge{Int64}(87, 92), LabelledGraphs.LabelledEdge{Int64}(88, 92)]), ((2, 4), (3, 3)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([3.2389543471798925 0.6245450431978332 … -0.6245450431978332 -3.2389543471798925; 0.42994083343845313 0.5404597558783695 … -0.5404597558783695 -0.42994083343845313; … ; -0.42994083343845313 -0.5404597558783695 … 0.5404597558783695 0.42994083343845313; -3.2389543471798925 -0.6245450431978332 … 0.6245450431978332 3.2389543471798925], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(33, 49), LabelledGraphs.LabelledEdge{Int64}(34, 49), LabelledGraphs.LabelledEdge{Int64}(35, 49), LabelledGraphs.LabelledEdge{Int64}(36, 49), LabelledGraphs.LabelledEdge{Int64}(33, 50), LabelledGraphs.LabelledEdge{Int64}(34, 50), LabelledGraphs.LabelledEdge{Int64}(35, 50), LabelledGraphs.LabelledEdge{Int64}(36, 50), LabelledGraphs.LabelledEdge{Int64}(33, 51), LabelledGraphs.LabelledEdge{Int64}(34, 51), LabelledGraphs.LabelledEdge{Int64}(35, 51), LabelledGraphs.LabelledEdge{Int64}(36, 51), LabelledGraphs.LabelledEdge{Int64}(33, 52), LabelledGraphs.LabelledEdge{Int64}(34, 52), LabelledGraphs.LabelledEdge{Int64}(35, 52), LabelledGraphs.LabelledEdge{Int64}(36, 52)]), ((3, 4), (4, 4)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([2.719171102949527 -1.3258521646588126 … 1.3258521646588126 -2.719171102949527; -0.8842431033700908 -1.6793526284131426 … 1.6793526284131426 0.8842431033700908; … ; 0.8842431033700908 1.6793526284131426 … -1.6793526284131426 -0.8842431033700908; -2.719171102949527 1.3258521646588126 … -1.3258521646588126 2.719171102949527], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(53, 73), LabelledGraphs.LabelledEdge{Int64}(54, 73), LabelledGraphs.LabelledEdge{Int64}(55, 73), LabelledGraphs.LabelledEdge{Int64}(56, 73), LabelledGraphs.LabelledEdge{Int64}(53, 74), LabelledGraphs.LabelledEdge{Int64}(54, 74), LabelledGraphs.LabelledEdge{Int64}(55, 74), LabelledGraphs.LabelledEdge{Int64}(56, 74), LabelledGraphs.LabelledEdge{Int64}(53, 75), LabelledGraphs.LabelledEdge{Int64}(54, 75), LabelledGraphs.LabelledEdge{Int64}(55, 75), LabelledGraphs.LabelledEdge{Int64}(56, 75), LabelledGraphs.LabelledEdge{Int64}(53, 76), LabelledGraphs.LabelledEdge{Int64}(54, 76), LabelledGraphs.LabelledEdge{Int64}(55, 76), LabelledGraphs.LabelledEdge{Int64}(56, 76)]), ((4, 4), (4, 5)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([1.3249463927098997 -1.3467068780125164 … 1.3467068780125164 -1.3249463927098997; 3.1547237062720788 -2.4757515818380575 … 2.4757515818380575 -3.1547237062720788; … ; -3.1547237062720788 2.4757515818380575 … -2.4757515818380575 3.1547237062720788; -1.3249463927098997 1.3467068780125164 … -1.3467068780125164 1.3249463927098997], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(73, 77), LabelledGraphs.LabelledEdge{Int64}(74, 77), LabelledGraphs.LabelledEdge{Int64}(75, 77), LabelledGraphs.LabelledEdge{Int64}(76, 77), LabelledGraphs.LabelledEdge{Int64}(73, 78), LabelledGraphs.LabelledEdge{Int64}(74, 78), LabelledGraphs.LabelledEdge{Int64}(75, 78), LabelledGraphs.LabelledEdge{Int64}(76, 78), LabelledGraphs.LabelledEdge{Int64}(73, 79), LabelledGraphs.LabelledEdge{Int64}(74, 79), LabelledGraphs.LabelledEdge{Int64}(75, 79), LabelledGraphs.LabelledEdge{Int64}(76, 79), LabelledGraphs.LabelledEdge{Int64}(73, 80), LabelledGraphs.LabelledEdge{Int64}(74, 80), LabelledGraphs.LabelledEdge{Int64}(75, 80), LabelledGraphs.LabelledEdge{Int64}(76, 80)]), ((5, 1), (5, 2)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([-3.782108379115782 0.5216574471897721 … -0.5216574471897721 3.782108379115782; -3.1083182817549093 -0.5406177879518332 … 0.5406177879518332 3.1083182817549093; … ; 3.1083182817549093 0.5406177879518332 … -0.5406177879518332 -3.1083182817549093; 3.782108379115782 -0.5216574471897721 … 0.5216574471897721 -3.782108379115782], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(81, 85), LabelledGraphs.LabelledEdge{Int64}(82, 85), LabelledGraphs.LabelledEdge{Int64}(83, 85), LabelledGraphs.LabelledEdge{Int64}(84, 85), LabelledGraphs.LabelledEdge{Int64}(81, 86), LabelledGraphs.LabelledEdge{Int64}(82, 86), LabelledGraphs.LabelledEdge{Int64}(83, 86), LabelledGraphs.LabelledEdge{Int64}(84, 86), LabelledGraphs.LabelledEdge{Int64}(81, 87), LabelledGraphs.LabelledEdge{Int64}(82, 87), LabelledGraphs.LabelledEdge{Int64}(83, 87), LabelledGraphs.LabelledEdge{Int64}(84, 87), LabelledGraphs.LabelledEdge{Int64}(81, 88), LabelledGraphs.LabelledEdge{Int64}(82, 88), LabelledGraphs.LabelledEdge{Int64}(83, 88), LabelledGraphs.LabelledEdge{Int64}(84, 88)]), ((2, 2), (2, 3)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([1.3020170483016518 -3.0250094653517148 … 3.0250094653517148 -1.3020170483016518; -2.2921768726981986 -5.203790024456543 … 5.203790024456543 2.2921768726981986; … ; 2.2921768726981986 5.203790024456543 … -5.203790024456543 -2.2921768726981986; -1.3020170483016518 3.0250094653517148 … -3.0250094653517148 1.3020170483016518], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(25, 29), LabelledGraphs.LabelledEdge{Int64}(26, 29), LabelledGraphs.LabelledEdge{Int64}(27, 29), LabelledGraphs.LabelledEdge{Int64}(28, 29), LabelledGraphs.LabelledEdge{Int64}(25, 30), LabelledGraphs.LabelledEdge{Int64}(26, 30), LabelledGraphs.LabelledEdge{Int64}(27, 30), LabelledGraphs.LabelledEdge{Int64}(28, 30), LabelledGraphs.LabelledEdge{Int64}(25, 31), LabelledGraphs.LabelledEdge{Int64}(26, 31), LabelledGraphs.LabelledEdge{Int64}(27, 31), LabelledGraphs.LabelledEdge{Int64}(28, 31), LabelledGraphs.LabelledEdge{Int64}(25, 32), LabelledGraphs.LabelledEdge{Int64}(26, 32), LabelledGraphs.LabelledEdge{Int64}(27, 32), LabelledGraphs.LabelledEdge{Int64}(28, 32)]), ((4, 3), (5, 2)) => SpinGlassPEPS.SpinGlassNetworks.ClusterInteraction{Float64, Vector{LabelledGraphs.LabelledEdge{Int64}}}([-4.613773525310781 -5.0011721604338275 … 5.0011721604338275 4.613773525310781; -2.114485205351995 -1.0579932254594138 … 1.0579932254594138 2.114485205351995; … ; 2.114485205351995 1.0579932254594138 … -1.0579932254594138 -2.114485205351995; 4.613773525310781 5.0011721604338275 … -5.0011721604338275 -4.613773525310781], 1, 1, LabelledGraphs.LabelledEdge{Int64}[LabelledGraphs.LabelledEdge{Int64}(69, 85), LabelledGraphs.LabelledEdge{Int64}(70, 85), LabelledGraphs.LabelledEdge{Int64}(71, 85), LabelledGraphs.LabelledEdge{Int64}(72, 85), LabelledGraphs.LabelledEdge{Int64}(69, 86), LabelledGraphs.LabelledEdge{Int64}(70, 86), LabelledGraphs.LabelledEdge{Int64}(71, 86), LabelledGraphs.LabelledEdge{Int64}(72, 86), LabelledGraphs.LabelledEdge{Int64}(69, 87), LabelledGraphs.LabelledEdge{Int64}(70, 87), LabelledGraphs.LabelledEdge{Int64}(71, 87), LabelledGraphs.LabelledEdge{Int64}(72, 87), LabelledGraphs.LabelledEdge{Int64}(69, 88), LabelledGraphs.LabelledEdge{Int64}(70, 88), LabelledGraphs.LabelledEdge{Int64}(71, 88), LabelledGraphs.LabelledEdge{Int64}(72, 88)])…), PoolOfProjectors{Int64}(Dict{Symbol, Dict{Int64, Union{Vector{Int64}, CUDA.CuVector{Int64}, CUDA.DenseCuVector{Int64}}}}(:CPU => Dict(1 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])), :CPU, Dict(1 => 16), Dict{Tuple, Any}(), Dict{NTuple{5, Any}, Tuple{Union{Vector{Int64}, CUDA.CuVector{Int64}, CUDA.DenseCuVector{Int64}}, Union{Vector{Int64}, CUDA.CuVector{Int64}, CUDA.DenseCuVector{Int64}}, Int64}}(), Dict([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] => 1)))