sig
  type bb
  type 'a t =
      Empty
    | Node of (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t) list
    | Leaf of (Rtree_intf.Tree_S.bb * 'a) list
  val empty : 'Rtree_intf.Tree_S.t
  val empty_node : Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t
  val bounding_box_of_nodes :
    (Rtree_intf.Tree_S.bb * 'b) list -> Rtree_intf.Tree_S.bb
  val size : 'Rtree_intf.Tree_S.t -> int
  val partition_by_min_delta :
    (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t) list ->
    Rtree_intf.Tree_S.bb ->
    (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t) *
    (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t) list
  val quadratic_split :
    (Rtree_intf.Tree_S.bb * 'a) list ->
    (Rtree_intf.Tree_S.bb * (Rtree_intf.Tree_S.bb * 'a) list) *
    (Rtree_intf.Tree_S.bb * (Rtree_intf.Tree_S.bb * 'a) list)
  val insert' :
    ?max_nodes:int ->
    'Rtree_intf.Tree_S.t ->
    Rtree_intf.Tree_S.bb ->
    '->
    (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t) *
    (Rtree_intf.Tree_S.bb * 'Rtree_intf.Tree_S.t)
  val insert :
    ?max_nodes:int ->
    'Rtree_intf.Tree_S.t ->
    Rtree_intf.Tree_S.bb -> '-> 'Rtree_intf.Tree_S.t
  val search : 'Rtree_intf.Tree_S.t -> Rtree_intf.Tree_S.bb -> 'a list
end