class_docstr: Summary representation of a graph.
  
  The summary representation includes a header line and the list of
  edges. The header line consists of C{IGRAPH}, followed by a
  four-character long code, the number of vertices, the number of
  edges, two dashes (C{--}) and the name of the graph (i.e.
  the contents of the C{name} attribute, if any). For instance,
  a header line may look like this::
  
      IGRAPH U--- 4 5 --
  
  The four-character code describes some basic properties of the
  graph. The first character is C{U} if the graph is undirected,
  C{D} if it is directed. The second letter is C{N} if the graph
  has a vertex attribute called C{name}, or a dash otherwise. The
  third letter is C{W} if the graph is weighted (i.e. it has an
  edge attribute called C{weight}), or a dash otherwise. The
  fourth letter is C{B} if the graph has a vertex attribute called
  C{type}; this is usually used for bipartite graphs.
  
  Edges may be presented as an ordinary edge list or an adjacency
  list. By default, this depends on the number of edges; however,
  you can control it with the appropriate constructor arguments.
docstr: Returns the summary representation as a string.
docstr_tok: ["Returns","the","summary","representation","as","a","string","."]
code: def __str__(self):
      """Returns the summary representation as a string."""
      output = self._construct_header()
  
      if self.print_graph_attributes:
          output.extend(self._construct_graph_attributes())
      if self.print_vertex_attributes:
          output.extend(self._construct_vertex_attributes())
  
      if self.verbosity <= 0:
          return "\n".join(output)
  
      if self._graph.ecount() > 0:
          # Add the edge list
          if self.edge_list_format == "auto":
              if (
                  self.print_edge_attributes
                  and self._graph.edge_attributes()
              ):
                  format = "edgelist"
              elif median(self._graph.degree(mode="out")) < 3:
                  format = "compressed"
              else:
                  format = "adjlist"
          else:
              format = self.edge_list_format
  
          method_name = "_construct_edgelist_%s" % format
          if hasattr(self, method_name):
              output.extend(getattr(self, method_name)())
  
      if self.wrapper is not None:
          return "\n".join(
              "\n".join(self.wrapper.wrap(line)) for line in output
          )
  
      return "\n".join(output)
  
imports: import sys
  from igraph.statistics import median
  from itertools import islice
  from math import ceil
  from texttable import Texttable
  from textwrap import TextWrapper
label_desc: Use image node_id 12 for calling the GraphSummary obj's underlying member method code with example usage: obj.__str__() and returns: str, str, str