Replace double for loop

I have a tensor which contains indices that correspond to nodes in two different graphs that were chosen based of some criteria. So let’s say indices = tensor([[0, 1], [3, 2]]. This means that in the first graph, the node with index 0 and in the second graph the node with index 1 were chosen. Also, in the first graph the node with index 3 and in the second graph the node with index 2 were chosen. This kind of format is necessary in my case.

Now i need to compare each element in indices with each other with a function called is_adjacent to see which pair of nodes i still need.

My current solution:

    edge_index = []
    for k, i in enumerate(indices):
        for l, j in enumerate(indices):
            if _is_adjacent(i[0], j[0], graph_1) and _is_adjacent(i[1], j[1], graph_2):
                edge_index.append([k,l])
    
    edge_index = torch.tensor(edge_index, dtype=torch.float)

Where the following function is used:

def _is_adjacent(id_a, id_b, graph):
    tens = [id_a, id_b]
    adjacency_matrix = torch.reshape(graph.edge_index, (-1,2)).tolist()

    return tens in adjacency_matrix

This works as it should, but it is not really fast. i would like to replace my for loops with some kind of vectorization.

I hope this makes sense.