class_docstr: Basic topological (non-weighted) directed Graph class
  
  Member variables:
  
  * V (int > 0): the number of vertices
  * E (int >= 0): the number of edges
  
  Properties:
  
  * vertices (list, type=int, shape=(V,))  vertices id
  * edges (list, type=int, shape=(E,2)): edges as vertices id tuples
class_docstr_tok: ["Basic","topological","(","non-weighted",")","directed","Graph","class","Member","variables",":","*","V","(","int",">","0",")",":","the","number","of","vertices","*","E","(","int",">","=","0",")",":","the","number","of","edges","Properties",":","*","vertices","(","list",",","type=int",",","shape=","(","V",",",")",")","vertices","id","*","edges","(","list",",","type=int",",","shape=","(","E,2",")",")",":","edges","as","vertices","id","tuples"]
docstr: Constructor
  
  Parameters
  ----------
  V : int
      the number of vertices
  E : int, optional
      the number of edges
  edges : None or shape (E, 2) array, optional
      edges of graph
docstr_tok: ["Constructor","Parameters","--","--","--","--","--","V",":","int","the","number","of","vertices","E",":","int",",","optional","the","number","of","edges","edges",":","None","or","shape","(","E",",","2",")","array",",","optional","edges","of","graph"]
code: def __init__(self, V, E=0, edges=None):
      """
      Constructor
  
      Parameters
      ----------
      V : int
          the number of vertices
      E : int, optional
          the number of edges
      edges : None or shape (E, 2) array, optional
          edges of graph
      """
      # deal with vertices
      self.__set_V(V)
      self.vertices = np.arange(self.V)
  
      # deal with edges
      if not isinstance(edges, None.__class__):
          self.__set_E(np.shape(edges)[0])
          self.set_edges(edges)
      else:
          self.__set_E(E)
          self.set_edges(np.zeros((self.E, 2), dtype=int))
  
imports: import numpy
  from scipy.sparse import coo_matrix
label_desc: Use image node_id 1 to create a new Graph object  with example: obj = Graph(V, E, edges)