sig
  type permut = (int, Bigarray.int_elt, Bigarray.c_layout) Bigarray.Array1.t
  val of_array : int array -> Permut.permut
  val to_array : Permut.permut -> int array
  val init : Permut.permut -> unit
  val create : int -> Permut.permut
  val make : int -> Permut.permut
  val swap : Permut.permut -> int -> int -> unit
  val size : Permut.permut -> int
  val valid : Permut.permut -> bool
  external reverse : Permut.permut -> unit = "ml_gsl_permutation_reverse"
  val inverse : Permut.permut -> Permut.permut
  external next : Permut.permut -> unit = "ml_gsl_permutation_next"
  external prev : Permut.permut -> unit = "ml_gsl_permutation_prev"
  external permute : Permut.permut -> 'a array -> unit = "ml_gsl_permute"
  external permute_barr :
    Permut.permut -> ('a, 'b, 'c) Bigarray.Array1.t -> unit
    = "ml_gsl_permute_barr"
  external permute_complex :
    Permut.permut -> Gsl_complex.complex_array -> unit
    = "ml_gsl_permute_complex"
  external permute_inverse : Permut.permut -> 'a array -> unit
    = "ml_gsl_permute_inverse"
  external permute_inverse_barr :
    Permut.permut -> ('a, 'b, 'c) Bigarray.Array1.t -> unit
    = "ml_gsl_permute_inverse_barr"
  external permute_inverse_complex :
    Permut.permut -> Gsl_complex.complex_array -> unit
    = "ml_gsl_permute_inverse_complex"
  val mul : Permut.permut -> Permut.permut -> Permut.permut
  val linear_to_canonical : Permut.permut -> Permut.permut
  val canonical_to_linear : Permut.permut -> Permut.permut
  external inversions : Permut.permut -> int = "ml_gsl_permute_inversions"
  external canonical_cycles : Permut.permut -> int
    = "ml_gsl_permute_canonical_cycles"
  external linear_cycles : Permut.permut -> int
    = "ml_gsl_permute_linear_cycles"
end