sig
  exception Error of string
  type scope
  type cell
  type port
  type cell_info =
      Input of string * int
    | Output of string * int
    | Name of string * int
    | Dangle
    | Const of string
    | Buf of int
    | Not of int
    | And of int
    | Xor of int
    | Or of int
    | Concat of int * int
    | Select of int * int
    | Eq of int
    | Lt of int
    | Add of int
    | Sub of int
    | Mul of int
    | Mux of int
    | Ff of int
    | Ffc of int
    | Bbox of string * int * int * int list
  type item = Scope of Fnf_core.scope | Cell of Fnf_core.cell
  val create_root_scope : string -> Fnf_core.scope
  val create_sub_scope : Fnf_core.scope -> string -> string -> Fnf_core.scope
  val parent_of_scope : Fnf_core.scope -> Fnf_core.scope
  val root_of_scope : Fnf_core.scope -> Fnf_core.scope
  val items_of_scope : Fnf_core.scope -> Fnf_core.item list
  val all_cells : Fnf_core.scope -> Fnf_core.cell list
  val module_name_of_scope : Fnf_core.scope -> string
  val instance_name_of_scope : Fnf_core.scope -> string
  val scope_of_cell : Fnf_core.cell -> Fnf_core.scope
  val path_of_scope : Fnf_core.scope -> string list
  val path_of_cell : Fnf_core.cell -> string list
  val info_of_cell : Fnf_core.cell -> Fnf_core.cell_info
  val name_of_cell : Fnf_core.cell -> string
  val width_of_cell : Fnf_core.cell -> int
  val width_of_port : Fnf_core.port -> int
  val arity_of_cell : Fnf_core.cell -> int
  val is_port_dangling : Fnf_core.port -> bool
  val is_cell_producer : Fnf_core.cell -> bool
  val id_of_cell : Fnf_core.cell -> int
  val cell_of_port : Fnf_core.port -> Fnf_core.cell
  val ports_of_cell : Fnf_core.cell -> Fnf_core.port list
  val port_of_cell : Fnf_core.cell -> int -> Fnf_core.port
  val connect : Fnf_core.cell -> Fnf_core.port -> unit
  val reconnect : Fnf_core.cell -> Fnf_core.port -> unit
  val consumers_of_cell : Fnf_core.cell -> Fnf_core.port list
  val producer_of_port : Fnf_core.port -> Fnf_core.cell
  val dangle : Fnf_core.scope -> Fnf_core.cell
  val create_input : Fnf_core.scope -> string -> int -> Fnf_core.cell
  val create_output :
    Fnf_core.scope -> string -> int -> Fnf_core.cell * Fnf_core.port
  val create_name :
    Fnf_core.scope -> string -> int -> Fnf_core.cell * Fnf_core.port
  val create_const : Fnf_core.scope -> string -> Fnf_core.cell
  val create_buf : Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port
  val create_not : Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port
  val create_and :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_xor :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_or :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_concat :
    Fnf_core.scope ->
    int -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_select :
    Fnf_core.scope -> int -> int -> Fnf_core.cell * Fnf_core.port
  val create_eq :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_lt :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_add :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_sub :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_mul :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_mux :
    Fnf_core.scope ->
    int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port * Fnf_core.port
  val create_ff :
    Fnf_core.scope -> int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port
  val create_ffc :
    Fnf_core.scope ->
    int -> Fnf_core.cell * Fnf_core.port * Fnf_core.port * Fnf_core.port
  val create_bbox :
    Fnf_core.scope ->
    string -> int -> int -> int list -> Fnf_core.cell * Fnf_core.port
end