code: def testIsomorphic(self):
      g1 = Graph(
          8,
          [
              (0, 4),
              (0, 5),
              (0, 6),
              (1, 4),
              (1, 5),
              (1, 7),
              (2, 4),
              (2, 6),
              (2, 7),
              (3, 5),
              (3, 6),
              (3, 7),
          ],
      )
      g2 = Graph(
          8,
          [
              (0, 1),
              (0, 3),
              (0, 4),
              (2, 3),
              (2, 1),
              (2, 6),
              (5, 1),
              (5, 4),
              (5, 6),
              (7, 3),
              (7, 6),
              (7, 4),
          ],
      )
  
      # Test the isomorphism of g1 and g2
      self.assertTrue(g1.isomorphic(g2))
      self.assertTrue(
          g2.isomorphic_vf2(g1, return_mapping_21=True)
          == (True, None, [0, 2, 5, 7, 1, 3, 4, 6])
      )
      self.assertTrue(
          g2.isomorphic_bliss(g1, return_mapping_21=True, sh1="fl")
          == (True, None, [0, 2, 5, 7, 1, 3, 4, 6])
      )
      self.assertRaises(
          ValueError, g2.isomorphic_bliss, g1, sh2="nonexistent"
      )
  
      # Test the automorphy of g1
      self.assertTrue(g1.isomorphic())
      self.assertTrue(
          g1.isomorphic_vf2(return_mapping_21=True)
          == (True, None, [0, 1, 2, 3, 4, 5, 6, 7])
      )
  
      # Test VF2 with colors
      self.assertTrue(
          g1.isomorphic_vf2(
              g2,
              color1=[0, 1, 0, 1, 0, 1, 0, 1],
              color2=[0, 0, 1, 1, 0, 0, 1, 1],
          )
      )
      g1.vs["color"] = [0, 1, 0, 1, 0, 1, 0, 1]
      g2.vs["color"] = [0, 0, 1, 1, 0, 1, 1, 0]
      self.assertTrue(not g1.isomorphic_vf2(g2, "color", "color"))
  
      # Test bliss with colors
      self.assertTrue(
          g1.isomorphic_bliss(
              g2,
              color1=[0, 0, 0, 0, 0, 0, 0, 0],
              color2=[0, 0, 0, 0, 0, 0, 0, 0],
          )
      )
  
      self.assertTrue(
          g1.isomorphic_bliss(
              g2,
              color1=[1, 0, 2, 0, 0, 0, 0, 0],
              color2=[1, 0, 2, 0, 0, 0, 0, 0],
          )
      )
  
      self.assertTrue(
          g1.isomorphic_bliss(
              g2,
              color1=[0, 1, 0, 1, 0, 1, 0, 1],
              color2=[0, 0, 1, 1, 0, 0, 1, 1],
          )
      )
  
      # Test VF2 with vertex and edge colors
      self.assertTrue(
          g1.isomorphic_vf2(
              g2,
              color1=[0, 1, 0, 1, 0, 1, 0, 1],
              color2=[0, 0, 1, 1, 0, 0, 1, 1],
          )
      )
      g1.es["color"] = list(range(12))
      g2.es["color"] = [0] * 6 + [1] * 6
      self.assertTrue(
          not g1.isomorphic_vf2(g2, "color", "color", "color", "color")
      )
  
      # Test VF2 with node compatibility function
      g2.vs["color"] = [0, 0, 1, 1, 0, 0, 1, 1]
      self.assertTrue(g1.isomorphic_vf2(g2, node_compat_fn=node_compat))
      g2.vs["color"] = [0, 0, 1, 1, 0, 1, 1, 0]
      self.assertTrue(
          not g1.isomorphic_vf2(g2, node_compat_fn=node_compat)
      )
  
      # Test VF2 with node edge compatibility function
      g2.vs["color"] = [0, 0, 1, 1, 0, 0, 1, 1]
      g1.es["color"] = list(range(12))
      g2.es["color"] = [0] * 6 + [1] * 6
      self.assertTrue(
          not g1.isomorphic_vf2(
              g2, node_compat_fn=node_compat, edge_compat_fn=edge_compat
          )
      )
  
imports: import unittest
  from random import shuffle
  from igraph import Graph
label_desc: Use image node_id 1 for calling the IsomorphismTests obj's underlying member method code with example usage: obj.testIsomorphic() without return types