sig
  type complex = Complex.t = { re : float; im : float; }
  val complex : re:float -> im:float -> Gsl_complex.complex
  type complex_array = float array
  val set : Gsl_complex.complex_array -> int -> Gsl_complex.complex -> unit
  val get : Gsl_complex.complex_array -> int -> Gsl_complex.complex
  val unpack : Gsl_complex.complex_array -> Gsl_complex.complex array
  val pack : Gsl_complex.complex array -> Gsl_complex.complex_array
  val mult : Gsl_complex.complex_array -> Gsl_complex.complex_array -> unit
  val rect : float -> float -> Gsl_complex.complex
  val polar : float -> float -> Gsl_complex.complex
  val arg : Gsl_complex.complex -> float
  val abs : Gsl_complex.complex -> float
  val abs2 : Gsl_complex.complex -> float
  external logabs : Gsl_complex.complex -> float = "ml_gsl_complex_logabs"
  val add : Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
  val sub : Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
  val mul : Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
  val div : Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
  val add_real : Gsl_complex.complex -> float -> Gsl_complex.complex
  val sub_real : Gsl_complex.complex -> float -> Gsl_complex.complex
  val mul_real : Gsl_complex.complex -> float -> Gsl_complex.complex
  val div_real : Gsl_complex.complex -> float -> Gsl_complex.complex
  val add_imag : Gsl_complex.complex -> float -> Gsl_complex.complex
  val sub_imag : Gsl_complex.complex -> float -> Gsl_complex.complex
  val mul_imag : Gsl_complex.complex -> float -> Gsl_complex.complex
  val div_imag : Gsl_complex.complex -> float -> Gsl_complex.complex
  val conjugate : Gsl_complex.complex -> Gsl_complex.complex
  val inverse : Gsl_complex.complex -> Gsl_complex.complex
  val negative : Gsl_complex.complex -> Gsl_complex.complex
  external sqrt : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_sqrt"
  external sqrt_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_sqrt_real"
  external pow :
    Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_pow"
  external pow_real : Gsl_complex.complex -> float -> Gsl_complex.complex
    = "ml_gsl_complex_pow_real"
  external exp : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_exp"
  external log : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_log"
  external log10 : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_log10"
  external log_b :
    Gsl_complex.complex -> Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_log_b"
  external sin : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_sin"
  external cos : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_cos"
  external tan : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_tan"
  external sec : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_sec"
  external csc : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_csc"
  external cot : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_cot"
  external arcsin : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arcsin"
  external arcsin_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arcsin_real"
  external arccos : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccos"
  external arccos_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arccos_real"
  external arctan : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arctan"
  external arcsec : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arcsec"
  external arcsec_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arcsec_real"
  external arccsc : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccsc"
  external arccsc_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arccsc_real"
  external arccot : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccot"
  external sinh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_sinh"
  external cosh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_cosh"
  external tanh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_tanh"
  external sech : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_sech"
  external csch : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_csch"
  external coth : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_coth"
  external arcsinh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arcsinh"
  external arccosh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccosh"
  external arccosh_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arccosh_real"
  external arctanh : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arctanh"
  external arctanh_real : float -> Gsl_complex.complex
    = "ml_gsl_complex_arctanh_real"
  external arcsech : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arcsech"
  external arccsch : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccsch"
  external arccoth : Gsl_complex.complex -> Gsl_complex.complex
    = "ml_gsl_complex_arccoth"
end