Ejemplo n.º 1
0
def test_canonical_relabel():
    for _ in range(100):
        g = gen_random_connected_graph(4)
        relab_g = random_relabel(g)
        canon_g = canonical_relabel(g)
        canon_relab_g = canonical_relabel(relab_g)
        canon_edges = canonical_edge_order(canon_g.edges())
        canon_relab_edges = canonical_edge_order(canon_relab_g.edges())
        assert canon_edges == canon_relab_edges
Ejemplo n.º 2
0
def get_adjacency_matrix(graph):
    """ Returns the adjacency matrix with a canonical node basis """
    # Canonically orders the nodes and edges
    key = sorted(graph.nodes())
    edges = canonical_edge_order(graph.edges())
    # Creates the adjacency matrix and exports to CSV
    adj_mat = np.array([[int(tuple(sorted((u, v))) in edges) for u in key]
                        for v in key])
    return adj_mat, key
Ejemplo n.º 3
0
def test_qubit_LC():
    """ Tests local complementation works against abp version """
    for _ in range(100):
        # Creates a random NetworkX graph and it's equivalent GraphState
        g = gen_random_connected_graph(15)
        gs = to_GraphState(g)
        # Gets the original edges
        g_edges = canonical_edge_order(g.edges())
        gs_edges = canonical_edge_order(gs.edgelist())
        # Randomly picks a node for local complementation
        lc_node = random.choice(list(g.nodes()))
        # Performs local complementation on both graphs
        lc_g = qubit_LC(g, lc_node, 1)
        lc_gs = to_GraphState(g)
        lc_gs.local_complementation(lc_node)
        # Checks that their edgelists are equal
        lc_g_edges = canonical_edge_order(lc_g.edges())
        lc_gs_edges = canonical_edge_order(lc_gs.edgelist())
        assert lc_g_edges == lc_gs_edges
        # Performs a second local complementation on same node
        lc_lc_g = qubit_LC(lc_g, lc_node, 1)
        lc_lc_gs = to_GraphState(lc_g)
        lc_lc_gs.local_complementation(lc_node)
        # Checks edgelists are equal and also equal to the originals
        lc_lc_g_edges = canonical_edge_order(lc_lc_g.edges())
        lc_lc_gs_edges = canonical_edge_order(lc_lc_gs.edgelist())
        assert lc_lc_g_edges == lc_lc_gs_edges
        assert lc_lc_g_edges == g_edges
        assert lc_lc_gs_edges == gs_edges