sig
  type workspace
  type wavetable
  type direction = Forward | Backward
  val make_workspace : int -> Gsl_fft.Complex.workspace
  val make_wavetable : int -> Gsl_fft.Complex.wavetable
  external forward :
    ?stride:int ->
    Gsl_complex.complex_array ->
    Gsl_fft.Complex.wavetable -> Gsl_fft.Complex.workspace -> unit
    = "ml_gsl_fft_complex_forward"
  external forward_rad2 :
    ?dif:bool -> ?stride:int -> Gsl_complex.complex_array -> unit
    = "ml_gsl_fft_complex_rad2_forward"
  external transform :
    ?stride:int ->
    Gsl_complex.complex_array ->
    Gsl_fft.Complex.wavetable ->
    Gsl_fft.Complex.workspace -> Gsl_fft.Complex.direction -> unit
    = "ml_gsl_fft_complex_transform"
  external transform_rad2 :
    ?dif:bool ->
    ?stride:int ->
    Gsl_complex.complex_array -> Gsl_fft.Complex.direction -> unit
    = "ml_gsl_fft_complex_rad2_transform"
  external backward :
    ?stride:int ->
    Gsl_complex.complex_array ->
    Gsl_fft.Complex.wavetable -> Gsl_fft.Complex.workspace -> unit
    = "ml_gsl_fft_complex_backward"
  external backward_rad2 :
    ?dif:bool -> ?stride:int -> Gsl_complex.complex_array -> unit
    = "ml_gsl_fft_complex_rad2_backward"
  external inverse :
    ?stride:int ->
    Gsl_complex.complex_array ->
    Gsl_fft.Complex.wavetable -> Gsl_fft.Complex.workspace -> unit
    = "ml_gsl_fft_complex_inverse"
  external inverse_rad2 :
    ?dif:bool -> ?stride:int -> Gsl_complex.complex_array -> unit
    = "ml_gsl_fft_complex_rad2_inverse"
end