rustworkx.generators.heavy_square_graph#

heavy_square_graph(d, multigraph=True)#

Generate an undirected heavy square graph.

Fig. 6 of https://arxiv.org/abs/1907.09528. An ASCII diagram of the graph is given by:

...       S   ...
   \     / \
   ... D   D   D ...
       |   |   |
   ... F-S-F-S-F-...
       |   |   |
   ... D   D   D ...
       |   |   |
   ... F-S-F-S-F-...
       |   |   |
       .........
       |   |   |
   ... D   D   D ...
        \ /     \
   ...   S       ...

Note

This function generates the four-frequency variant of the heavy square code. This function implements Fig 10.b left of the paper. This function doesn’t support the variant Fig 10.b right.

Note that if d is set to 1 a PyGraph with a single node will be returned.

Parameters:
  • d (int) – distance of the code. If d is set to 1 a PyGraph with a single node will be returned. d must be an odd number.

  • multigraph (bool) – When set to False the output PyGraph object will not be not be a multigraph and won’t allow parallel edges to be added. Instead calls which would create a parallel edge will update the existing edge.

Returns:

The generated heavy square graph

Return type:

PyGraph

Raises:

IndexError – If d is even.

import rustworkx.generators
from rustworkx.visualization import graphviz_draw

graph = rustworkx.generators.heavy_square_graph(3)
graphviz_draw(graph, lambda node: dict(
        color='black', fillcolor='lightblue', style='filled'))
../_images/rustworkx.generators.heavy_square_graph_0_0.png