import networkx as nx import numpy as np import graphstate import clifford import util class NXGraphState(graphstate.GraphState, nx.Graph): """ This is GraphState with NetworkX-like abilities """ def __init__(self, *args, **kwargs): graphstate.GraphState.__init__(self, *args, **kwargs) def layout(self): """ Automatically lay out the graph """ pos = nx.spring_layout(self, dim=3, scale=np.sqrt(self.order())) middle = np.average(pos.values(), axis=0) pos = {key: value - middle for key, value in pos.items()} for key, (x, y, z) in pos.items(): self.node[key]["position"] = util.xyz(x, y, z)