sig
  type ast
  type preprocessed_ast
  type compil
  type cache
  type mixture
  type chemical_species
  type canonic_species
  type pattern
  type connected_component
  type rule
  type init = ((connected_component array list, int) Alg_expr.e * rule) list
  val empty_cache : compil -> cache
  val get_init : compil -> init
  val mixture_of_init : compil -> rule -> mixture
  val dummy_chemical_species : compil -> chemical_species
  val compare_connected_component :
    connected_component -> connected_component -> int
  val print_connected_component :
    ?compil:compil -> Format.formatter -> connected_component -> unit
  val print_token : ?compil:compil -> Format.formatter -> int -> unit
  val print_chemical_species :
    ?dotnet:bool ->
    ?compil:compil -> Format.formatter -> chemical_species -> unit
  val print_canonic_species :
    ?dotnet:bool ->
    ?compil:compil -> Format.formatter -> canonic_species -> unit
  val rule_rate_convention :
    compil -> Remanent_parameters_sig.rate_convention
  val reaction_rate_convention :
    compil -> Remanent_parameters_sig.rate_convention option
  val what_do_we_count : compil -> Ode_args.count
  val do_we_count_in_embeddings : compil -> bool
  val do_we_prompt_reactions : compil -> bool
  val nbr_automorphisms_in_chemical_species : chemical_species -> int
  val canonic_form : chemical_species -> canonic_species
  val connected_components_of_patterns : pattern -> connected_component list
  val connected_components_of_mixture :
    compil -> cache -> mixture -> cache * chemical_species list
  type embedding
  type embedding_forest
  val lift_embedding : embedding -> embedding_forest
  val find_embeddings :
    compil -> connected_component -> chemical_species -> embedding list
  val find_all_embeddings :
    compil -> chemical_species -> (connected_component * embedding) list
  val compose_embeddings_unary_binary :
    compil ->
    pattern ->
    embedding list list ->
    chemical_species -> embedding_forest list * mixture
  module type ObsMap =
    sig
      type 'a t
      val empty : '-> 'a t
      val add : connected_component -> '-> 'a list t -> 'a list t
      val get : connected_component -> 'a list t -> 'a list
      val reset : connected_component -> 'a list t -> 'a list t
    end
  module ObsMap : ObsMap
  val disjoint_union :
    compil ->
    (connected_component * embedding * chemical_species) list ->
    pattern * embedding_forest * mixture
  type rule_name = string
  type rule_id = int
  type rule_id_with_mode = rule_id * Rule_modes.arity * Rule_modes.direction
  val valid_modes : cache -> compil -> rule -> cache * rule_id_with_mode list
  val lhs : compil -> rule_id_with_mode -> rule -> pattern
  val token_vector :
    rule ->
    ((connected_component array list, int) Alg_expr.e Locality.annot * int)
    list
  val token_vector_of_init :
    rule ->
    ((connected_component array list, int) Alg_expr.e Locality.annot * int)
    list
  val print_rule_id : Format.formatter -> rule_id -> unit
  val print_rule : ?compil:compil -> Format.formatter -> rule -> unit
  val print_rule_name : ?compil:compil -> Format.formatter -> rule -> unit
  val string_of_var_id :
    ?compil:compil -> ?init_mode:bool -> Loggers.t -> int -> string
  val rate :
    compil ->
    rule ->
    rule_id_with_mode ->
    (connected_component array list, int) Alg_expr.e Locality.annot option
  val rate_name : compil -> rule -> rule_id_with_mode -> rule_name
  val apply : compil -> rule -> embedding_forest -> mixture -> mixture
  val get_preprocessed_ast : Run_cli_args.t -> preprocessed_ast
  val get_ast : Run_cli_args.t -> ast
  val to_ast : ast -> Ast.parsing_compil
  val preprocess : Run_cli_args.t -> ast -> preprocessed_ast
  val get_compil :
    ?bwd_bisim:LKappa_group_action.bwd_bisim_info ->
    rule_rate_convention:Remanent_parameters_sig.rate_convention ->
    ?reaction_rate_convention:Remanent_parameters_sig.rate_convention ->
    show_reactions:bool ->
    count:Ode_args.count ->
    compute_jacobian:bool -> Run_cli_args.t -> preprocessed_ast -> compil
  val get_rules : compil -> rule list
  val get_variables :
    compil ->
    (string * (connected_component array list, int) Alg_expr.e Locality.annot)
    array
  val get_obs :
    compil -> (connected_component array list, int) Alg_expr.e list
  val get_obs_titles : compil -> string list
  val nb_tokens : compil -> int
  val divide_rule_rate_by : cache -> compil -> rule -> cache * int
  val species_of_initial_state_env :
    Model.t ->
    Contact_map.t ->
    Pattern.PreEnv.t ->
    ('b * Primitives.elementary_rule) list ->
    Pattern.PreEnv.t * Pattern.cc list
  val species_of_initial_state :
    compil ->
    cache ->
    ('b * Primitives.elementary_rule) list -> cache * Pattern.cc list
  val detect_symmetries :
    Remanent_parameters_sig.parameters ->
    compil ->
    cache ->
    chemical_species list ->
    Public_data.contact_map -> cache * Symmetries.symmetries
  val print_symmetries :
    Remanent_parameters_sig.parameters ->
    compil -> Symmetries.symmetries -> unit
  val get_rule_cache : cache -> LKappa_auto.cache
  val set_rule_cache : LKappa_auto.cache -> cache -> cache
  val get_representative :
    Remanent_parameters_sig.parameters ->
    compil ->
    cache ->
    Symmetries.reduction -> chemical_species -> cache * chemical_species
  val equiv_class_of_pattern :
    Remanent_parameters_sig.parameters ->
    compil ->
    cache ->
    Symmetries.reduction ->
    connected_component -> cache * (int * (connected_component * int) list)
  val valid_mixture :
    compil -> cache -> ?max_size:int -> mixture -> cache * bool
  val init_bwd_bisim_info :
    compil ->
    Symmetries.equivalence_classes -> LKappa_group_action.bwd_bisim_info
end