sig
  exception InvalidArgument of string
  type feature = int
  exception BadContinuity of feature
  exception DiscreteFeatOutOfBounds of feature * int
  type category = int
  type contData = int
  type dataVal = Discrete of int | Continuous of contData
  type data = dataVal array
  type trainVal = { data : data; category : category; }
  type trainSet
  type decisionTree
  val c45 : trainSet -> decisionTree
  val classify : decisionTree -> data -> category
  val emptyTrainSet : int -> int -> bool array -> trainSet
  val addData : trainVal -> trainSet -> trainSet
  val addDataList : trainVal list -> trainSet -> trainSet
  val getSet : trainSet -> trainVal list
  val setFeatureMax : int -> int -> trainSet -> unit
  val getNbFeatures : trainSet -> int
  val getFeatureMax : trainSet -> int array
  val getFeatContinuity : trainSet -> bool array
  val getNbCategories : trainSet -> int
  val getSetSize : trainSet -> int
  val toDot :
    Format.formatter ->
    (Format.formatter -> contData -> unit) -> decisionTree -> unit
  val toDotStdout :
    (Format.formatter -> contData -> unit) -> decisionTree -> unit
end