functor (G : Graph.Sig.G->
  sig
    module VS :
      sig
        type elt = G.V.t
        type t = Set.Make(G.V).t
        val empty : t
        val is_empty : t -> bool
        val mem : elt -> t -> bool
        val add : elt -> t -> t
        val singleton : elt -> t
        val remove : elt -> t -> t
        val union : t -> t -> t
        val inter : t -> t -> t
        val diff : t -> t -> t
        val compare : t -> t -> int
        val equal : t -> t -> bool
        val subset : t -> t -> bool
        val iter : (elt -> unit) -> t -> unit
        val fold : (elt -> '-> 'a) -> t -> '-> 'a
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val filter : (elt -> bool) -> t -> t
        val partition : (elt -> bool) -> t -> t * t
        val cardinal : t -> int
        val elements : t -> elt list
        val min_elt : t -> elt
        val max_elt : t -> elt
        val choose : t -> elt
        val split : elt -> t -> t * bool * t
      end
    module UndG :
      sig
        type t = Graph.Imperative.Graph.Concrete(G.V).t
        module V :
          sig
            type t = G.V.t
            val compare : t -> t -> int
            val hash : t -> int
            val equal : t -> t -> bool
            type label = G.V.t
            val create : label -> t
            val label : t -> label
          end
        type vertex = V.t
        module E :
          sig
            type t = G.V.t * G.V.t
            val compare : t -> t -> int
            type vertex = vertex
            val src : t -> vertex
            val dst : t -> vertex
            type label = unit
            val create : vertex -> label -> vertex -> t
            val label : t -> label
          end
        type edge = E.t
        val is_directed : bool
        val is_empty : t -> bool
        val nb_vertex : t -> int
        val nb_edges : t -> int
        val out_degree : t -> vertex -> int
        val in_degree : t -> vertex -> int
        val mem_vertex : t -> vertex -> bool
        val mem_edge : t -> vertex -> vertex -> bool
        val mem_edge_e : t -> edge -> bool
        val find_edge : t -> vertex -> vertex -> edge
        val find_all_edges : t -> vertex -> vertex -> edge list
        val succ : t -> vertex -> vertex list
        val pred : t -> vertex -> vertex list
        val succ_e : t -> vertex -> edge list
        val pred_e : t -> vertex -> edge list
        val iter_vertex : (vertex -> unit) -> t -> unit
        val fold_vertex : (vertex -> '-> 'a) -> t -> '-> 'a
        val iter_edges : (vertex -> vertex -> unit) -> t -> unit
        val fold_edges : (vertex -> vertex -> '-> 'a) -> t -> '-> 'a
        val iter_edges_e : (edge -> unit) -> t -> unit
        val fold_edges_e : (edge -> '-> 'a) -> t -> '-> 'a
        val map_vertex : (vertex -> vertex) -> t -> t
        val iter_succ : (vertex -> unit) -> t -> vertex -> unit
        val iter_pred : (vertex -> unit) -> t -> vertex -> unit
        val fold_succ : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
        val fold_pred : (vertex -> '-> 'a) -> t -> vertex -> '-> 'a
        val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
        val fold_succ_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
        val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
        val fold_pred_e : (edge -> '-> 'a) -> t -> vertex -> '-> 'a
        val create : ?size:int -> unit -> t
        val clear : t -> unit
        val copy : t -> t
        val add_vertex : t -> vertex -> unit
        val remove_vertex : t -> vertex -> unit
        val add_edge : t -> vertex -> vertex -> unit
        val add_edge_e : t -> edge -> unit
        val remove_edge : t -> vertex -> vertex -> unit
        val remove_edge_e : t -> edge -> unit
      end
    val undirect : G.t -> Statistics.Make.UndG.t
    val clustering_coefficient : G.t -> G.vertex -> float
    val average_distance : G.t -> Statistics.Make.VS.elt -> float
    val _maxindegree : int option Pervasives.ref
    val _maxoutdegree : int option Pervasives.ref
    val _avgindegree : float option Pervasives.ref
    val _avgoutdegree : float option Pervasives.ref
    val _outdata : (int, int) ExtLib.Hashtbl.t option Pervasives.ref
    val _indata : (int, int) ExtLib.Hashtbl.t option Pervasives.ref
    val degree :
      G.t ->
      (G.t -> G.vertex -> 'a list) ->
      float * int * (int, int) ExtLib.Hashtbl.t
    val computeOutDegree : G.t -> unit
    val computeInDegree : G.t -> unit
    val get_option : 'a option -> 'a
    val maxOutDegree : G.t -> int
    val maxInDegree : G.t -> int
    val averageOutDegree : G.t -> float
    val averageInDegree : G.t -> float
    val zdp : G.t -> int
    val scatteredPlotIn : G.t -> (int, int) ExtLib.Hashtbl.t
    val scatteredPlotOut : G.t -> (int, int) ExtLib.Hashtbl.t
    val scatteredPlotBoth : G.t -> (int * int, int) ExtLib.Hashtbl.t
    val centralityDegree : G.t -> (G.t -> G.vertex -> 'a list) -> float
    val centralityOutDegree : G.t -> float
    val centralityInDegree : G.t -> float
    val clustering : G.t -> float
    val averageShortestPathLength : G.t -> float
    val components : G.t -> G.V.t list array
    val weaklycomponents : G.t -> Statistics.Make.UndG.V.t list array
    val numberComponents : ('-> 'b array) -> '-> int
    val averageComponents : ('-> 'b list array) -> '-> float
    val largestComponent : ('-> 'b list array) -> '-> int
    val numberComponentsSC : G.t -> int
    val averageComponentsSC : G.t -> float
    val largestComponentSC : G.t -> int
    val numberComponentsWC : G.t -> int
    val averageComponentsWC : G.t -> float
    val largestComponentWC : G.t -> int
    val density : G.t -> float
    val averageTwoStepReach : G.t -> float
  end