sig
  val failwithf : ('a, unit, string, 'b) Pervasives.format4 -> 'a
  module Tree :
    sig
      type box = {
        id : string;
        name : string;
        attributes : (string * string) list;
      }
      type arrow = {
        label : string;
        points_to : Biokepi_pipeline_edsl.To_dot.Tree.t;
      }
      and t =
          [ `Apply of
              string * Biokepi_pipeline_edsl.To_dot.Tree.t *
              Biokepi_pipeline_edsl.To_dot.Tree.t
          | `Input_value of Biokepi_pipeline_edsl.To_dot.Tree.box
          | `Lambda of string * string * Biokepi_pipeline_edsl.To_dot.Tree.t
          | `Node of
              Biokepi_pipeline_edsl.To_dot.Tree.box *
              Biokepi_pipeline_edsl.To_dot.Tree.arrow list
          | `String of string
          | `Variable of string * string ]
      val node_count : int Pervasives.ref
      val id_style : [> `Hash ]
      val make_id : [< `Of of '| `Unique ] -> string
      val arrow :
        string ->
        Biokepi_pipeline_edsl.To_dot.Tree.t ->
        Biokepi_pipeline_edsl.To_dot.Tree.arrow
      val variable : '-> '-> [> `Variable of string * 'b ]
      val lambda : '-> '-> [> `Lambda of string * 'a * 'b ]
      val apply : '-> '-> [> `Apply of string * 'a * 'b ]
      val string : '-> [> `String of 'a ]
      val node :
        ?id:string ->
        ?a:(string * string) list ->
        string ->
        Biokepi_pipeline_edsl.To_dot.Tree.arrow list ->
        Biokepi_pipeline_edsl.To_dot.Tree.t
      val input_value :
        ?a:(string * string) list ->
        string -> Biokepi_pipeline_edsl.To_dot.Tree.t
      val to_dot : Biokepi_pipeline_edsl.To_dot.Tree.t -> SmartPrint.t
    end
  type 'a repr = var_count:int -> Biokepi_pipeline_edsl.To_dot.Tree.t
  type 'a observation = SmartPrint.t
  val lambda :
    ((var_count:'-> [> `String of string | `Variable of string * string ]) ->
     var_count:int -> 'b) ->
    var_count:int -> [> `Lambda of string * string * 'b ]
  val apply :
    (var_count:'-> 'b) ->
    (var_count:'-> 'c) -> var_count:'-> [> `Apply of string * 'b * 'c ]
  val observe :
    (unit -> var_count:int -> Biokepi_pipeline_edsl.To_dot.Tree.t) ->
    SmartPrint.t
  val to_unit : '-> 'a
  val list :
    (var_count:'-> Biokepi_pipeline_edsl.To_dot.Tree.t) list ->
    var_count:'-> Biokepi_pipeline_edsl.To_dot.Tree.t
  val list_map :
    (var_count:'-> Biokepi_pipeline_edsl.To_dot.Tree.t) ->
    f:(var_count:'-> Biokepi_pipeline_edsl.To_dot.Tree.t) ->
    var_count:'-> Biokepi_pipeline_edsl.To_dot.Tree.t
  val fastq :
    sample_name:string ->
    ?fragment_id:string ->
    r1:string -> ?r2:string -> unit -> var_count:int -> Tree.t
  val fastq_gz :
    sample_name:string ->
    ?fragment_id:string ->
    r1:string -> ?r2:string -> unit -> var_count:int -> Tree.t
  val bam :
    path:string ->
    ?sorting:[< `Coordinate | `Read_name ] ->
    reference_build:string -> unit -> var_count:int -> Tree.t
  val pair :
    (var_count:int -> Tree.t) ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val pair_first : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val pair_second : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val aligner :
    string ->
    string ->
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val one_to_one :
    string -> string -> (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val bwa_aln :
    ?configuration:To_json.Tools.Bwa.Configuration.Aln.t ->
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val bwa_mem :
    ?configuration:To_json.Tools.Bwa.Configuration.Mem.t ->
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val gunzip : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val gunzip_concat : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val concat : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val merge_bams : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val star :
    ?configuration:To_json.Tools.Star.Configuration.Align.t ->
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val hisat :
    ?configuration:To_json.Tools.Hisat.Configuration.t ->
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val mosaik :
    reference_build:string ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val stringtie :
    ?configuration:To_json.Tools.Stringtie.Configuration.t ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val indel_real_config :
    To_json.Tools.Gatk.Configuration.Indel_realigner.t *
    To_json.Tools.Gatk.Configuration.Realigner_target_creator.t -> string
  val gatk_indel_realigner :
    ?configuration:To_json.Tools.Gatk.Configuration.Indel_realigner.t *
                   To_json.Tools.Gatk.Configuration.Realigner_target_creator.t ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val gatk_indel_realigner_joint :
    ?configuration:To_json.Tools.Gatk.Configuration.Indel_realigner.t *
                   To_json.Tools.Gatk.Configuration.Realigner_target_creator.t ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val picard_mark_duplicates :
    ?configuration:To_json.Tools.Picard.Mark_duplicates_settings.t ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val gatk_bqsr :
    ?configuration:To_json.Tools.Gatk.Configuration.Bqsr.t *
                   To_json.Tools.Gatk.Configuration.Print_reads.t ->
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val seq2hla : (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val optitype :
    [< `DNA | `RNA ] -> (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val gatk_haplotype_caller :
    (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val bam_to_fastq :
    sample_name:string ->
    ?fragment_id:string ->
    [< `PE | `SE ] -> (var_count:int -> Tree.t) -> var_count:int -> Tree.t
  val variant_caller :
    string ->
    string ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val mutect :
    ?configuration:To_json.Tools.Mutect.Configuration.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val mutect2 :
    ?configuration:To_json.Tools.Gatk.Configuration.Mutect2.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val somaticsniper :
    ?configuration:To_json.Tools.Somaticsniper.Configuration.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val strelka :
    ?configuration:To_json.Tools.Strelka.Configuration.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val varscan_somatic :
    ?adjust_mapq:int ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val muse :
    ?configuration:To_json.Tools.Muse.Configuration.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
  val virmid :
    ?configuration:To_json.Tools.Virmid.Configuration.t ->
    normal:(var_count:int -> Tree.t) ->
    tumor:(var_count:int -> Tree.t) -> unit -> var_count:int -> Tree.t
end