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