code: def comparison_graph_py(arr1, arr2):
      
      # timeout is not implemented
      u1, v1, c1 = zip(*arr1)
      u2, v2, c2 = zip(*arr2)
      c1 = np.array(c1, dtype=int)
      c2 = np.array(c2, dtype=int)
      product = nx.Graph()
      c1 = c1[:, np.newaxis]  # transpose
      if NUMEXPR_AVAILABLE:
          m = ne.evaluate("c2 == c1")
      else:
          m = c2 == c1
      edges = []
      for x, y in zip(*np.nonzero(m)):
          edges.append({"u1": u1[x], "v1": v1[x], "u2": u2[y], "v2": v2[y]})
      # Graph.add_edges is expensive. Add adjacency dict manually.
      node = {}
      for e in edges:
          node[(e["u1"], e["u2"])] = {}
          node[(e["v1"], e["v2"])] = {}
      adj = node.copy()
      for e in edges:
          adj[(e["u1"], e["u2"])][(e["v1"], e["v2"])] = {}
          adj[(e["v1"], e["v2"])][(e["u1"], e["u2"])] = {}
      product = nx.Graph()
      product.node = node
      product.adj = adj
      return product
docs: DEPRECATED: Generate comparison graph
      Comparison graph is a modular product of molecule edges