sig
  type ('a, 'b) dist_matrix = {
    dist_elements : 'a array;
    dist_matrix : 'b array array;
    dist_samples : int array;
  }
  val make_matrix :
    ?commutative:bool ->
    ('-> '-> 'b) ->
    '-> 'a array -> ('a, 'b) Smatrices.Distances.dist_matrix
  val group_distances :
    ?commutative:bool ->
    ('-> 'b) ->
    intra:('c list list -> 'c) ->
    inter:('c list list -> 'c) ->
    ('a, 'c) Smatrices.Distances.dist_matrix ->
    ('b, 'c) Smatrices.Distances.dist_matrix
  val latex :
    Pervasives.out_channel ->
    ?samples_in_rows:bool ->
    ?cols:int ->
    ?fill:bool ->
    ?rotate_titles:bool ->
    ('-> string) ->
    ('-> string) -> ('a, 'b) Smatrices.Distances.dist_matrix -> unit
  val latex_sorted_dists :
    Pervasives.out_channel ->
    ('-> string) ->
    ('-> string) ->
    ('-> '-> int) -> ('a, 'b) Smatrices.Distances.dist_matrix -> unit
  val store_dist_matrix :
    string -> ('a, 'b) Smatrices.Distances.dist_matrix -> unit
  val load_dist_matrix : string -> ('a, 'b) Smatrices.Distances.dist_matrix
end