-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Description
What should we add?
Right now the plot_gate_map()
visualization function (and similar functions like plot_circuit_layout()
use rustworkx's spring_layout()
function when there a backend is passed in and there isn't a hardcoded layout available and passes that to a mpl visualization. For moderate numbers of qubits this works reasonably well, but for large numbers of qubits the layout doesn't scale positions appropriately and the output is typically cluttered and not a useful visualization. Graphviz is particularly well suited for doing this type of graph visualization (as it is a specialized tool for doing graph visualization). So instead of trying to rebuild what we get from graphviz we should just call out to graphviz if it's available and leverage the rustwork function for graph visualization using graphivz to generate the visualization. The only potential issue is potentially plot_error_map
which has histograms and color bars built using matplotlib and integrating the two different visualization tools might prove difficult.
Here is some example code I used to leverage graphviz_draw()
to build a view like plot_circuit_layout()
:
from rustworkx.visualization import graphviz_draw
graph = target.build_coupling_map().graph
for node in graph.node_indices():
graph[node] = node
for edge, triple in graph.edge_index_map().items():
graph.update_edge_by_index(edge, (triple[0], triple[1]))
physical_bits = layout.get_physical_bits()
qubit_indices = {bit: index for index, bit in enumerate(linear_circuit.qubits)}
def color_node(node):
if node in physical_bits:
out_dict = {
"label": str(qubit_indices[physical_bits[node]]),
"color": "red",
"fillcolor": "red",
"style": "filled",
"shape": "circle",
}
else:
out_dict = {
"label": "",
"color": "blue",
"fillcolor": "blue",
"style": "filled",
"shape": "circle",
}
return out_dict
def color_edge(edge):
if all(x in physical_bits for x in edge):
out_dict = {
"color": "red",
"fillcolor": "red",
}
else:
out_dict = {
"color": "blue",
"fillcolor": "blue",
}
return out_dict
graphviz_draw(graph, method="neato", node_attr_fn=color_node, edge_attr_fn=color_edge)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status