sig
  exception Bad of string
  type sb_math_operator =
      MPlus
    | MMinus
    | MTimes
    | MDivide
    | MPower
    | MRoot
    | MAbs
    | MExp
    | MLn
    | MLog
    | MFloor
    | MCeiling
    | MFactorial
    | MEq
    | MNeq
    | MGt
    | MLt
    | MGeq
    | MLeq
    | MAnd
    | MOr
    | MXor
    | MNot
    | MSin
    | MCos
    | MTan
    | MArcsin
    | MArccos
    | MArctan
    | MDelay
    | MFundef of string
  type sb_math =
      MApply of Biocaml_sbml.sb_math_operator * Biocaml_sbml.sb_math list
    | MLambda of string list * Biocaml_sbml.sb_math
    | MPiecewise of (string * Biocaml_sbml.sb_math) list * string
    | MFloatNumber of float
    | MIntNumber of int
    | MIdentifier of string
    | MTime
    | MTrue
    | MFalse
    | MNAN
    | MPi
    | MExponent
    | MInfinity
    | MNoMath
  type sb_unit = {
    unit_kind : string;
    unit_exponent : int;
    unit_scale : int;
    unit_multiplier : float;
  }
  type sb_function_definition = {
    fundef_id : string;
    fundef_name : string;
    fundef_math : Biocaml_sbml.sb_math;
  }
  type sb_unit_definition = {
    unitdef_id : string;
    unitdef_name : string;
    unitdef_unitlist : Biocaml_sbml.sb_unit list;
  }
  type sb_compartment = {
    compart_id : string;
    compart_name : string;
    compart_spatialDimensions : int;
    compart_size : float;
    compart_units : string;
    compart_outside : string;
    compart_constant : bool;
  }
  type sb_species_ref = {
    specref_species : string;
    specref_id : string;
    specref_name : string;
    specref_stoichiometry : int;
  }
  type sb_species = {
    species_id : string;
    species_name : string;
    species_type : string;
    species_compartment : string;
    species_initialAmount : float;
    species_initialConcentration : float;
    species_substanceUnits : string;
    species_hasOnlySubstanceUnits : bool;
    species_boundaryCondition : bool;
    species_constant : bool;
  }
  type sb_parameter = {
    param_id : string;
    param_name : string;
    param_value : float;
    param_units : string;
    param_constant : bool;
  }
  type sb_kinetic_law = {
    klaw_math : Biocaml_sbml.sb_math;
    klaw_parameters : Biocaml_sbml.sb_parameter list;
  }
  type sb_reaction = {
    react_id : string;
    react_name : string;
    react_boundaryCondition : bool;
    react_fast : bool;
    react_reactants : Biocaml_sbml.sb_species_ref list;
    react_products : Biocaml_sbml.sb_species_ref list;
    react_kineticLaw : Biocaml_sbml.sb_kinetic_law;
  }
  type sb_initial_assignment = {
    ia_symbol : string;
    ia_math : Biocaml_sbml.sb_math;
  }
  type sb_algebraic_rule = { ar_math : Biocaml_sbml.sb_math; }
  type sb_generic_rule = {
    gr_variable : string;
    gr_math : Biocaml_sbml.sb_math;
  }
  type sb_rule =
      RateRule of Biocaml_sbml.sb_generic_rule
    | AssignmentRule of Biocaml_sbml.sb_generic_rule
    | AlgebraicRule of Biocaml_sbml.sb_algebraic_rule
  type sb_math_container = { math : Biocaml_sbml.sb_math; }
  type sb_delay = Delay of Biocaml_sbml.sb_math_container
  type sb_trigger = Trigger of Biocaml_sbml.sb_math_container
  type sb_event_assignment = {
    ea_variable : string;
    ea_math : Biocaml_sbml.sb_math;
  }
  type sb_event = {
    event_id : string;
    event_name : string;
    event_useValuesFromTriggerTime : bool;
    event_trigger : Biocaml_sbml.sb_trigger;
    event_delay : Biocaml_sbml.sb_delay;
    event_assignments : Biocaml_sbml.sb_event_assignment list;
  }
  type sb_model = {
    sbm_id : string;
    sbm_name : string;
    sbm_functionDefinitions : Biocaml_sbml.sb_function_definition list;
    sbm_unitDefinitions : Biocaml_sbml.sb_unit_definition list;
    sbm_compartments : Biocaml_sbml.sb_compartment list;
    sbm_species : Biocaml_sbml.sb_species list;
    sbm_reactions : Biocaml_sbml.sb_reaction list;
    sbm_parameters : Biocaml_sbml.sb_parameter list;
    sbm_initialAssignments : Biocaml_sbml.sb_initial_assignment list;
    sbm_rules : Biocaml_sbml.sb_rule list;
    sbm_events : Biocaml_sbml.sb_event list;
  }
  val math_to_string : Biocaml_sbml.sb_math -> string
  val in_sbml : Pervasives.in_channel -> Biocaml_sbml.sb_model
end