code: def test_longcycle(self):
      vertices = {}
      for x in "abcdefgh":
          v = Vertex(x)
          vertices[x] = v
      edges = []
      for e in ("ab", "bc", "cd", "de", "eb", "bf", "dg", "gh", "fh"):
          edges.append(Edge(vertices[e[0]], vertices[e[1]]))
      g = Graph(vertices.values(), edges)
      layout = SugiyamaLayout(g.components[0])
      layout.initialize()
      assert len(layout.inverted_edges) == 1
      assert layout.inverted_edges[0] == edges[4]
      assert layout.layoutVertices[vertices["e"]].layer == 4
      assert sum((v.dummy for v in layout.layoutVertices.values())) == 4
      print([v for v in layout.layoutVertices.values()])
  
imports: from pickle import dumps, loads, HIGHEST_PROTOCOL
  import numpy, pandas, pytest, unittest
  from graphistry.compute import ComputeMixin
  from graphistry.layouts import LayoutsMixin
  from graphistry.layout.graph import Edge, Graph, Vertex, GraphBase
  from graphistry.layout.sugiyama import SugiyamaLayout
  from graphistry.layout.utils import EdgeViewer, Layer, Rectangle, DummyVertex, route_with_rounded_corners, Poset
  from graphistry.plotter import PlotterBase
label_desc: Use image node_id 4 for calling the TestLayout obj's underlying member method code with example usage: obj.test_longcycle() without return types