sig
  type t
  val dim : int
  type v
  val el : int -> int -> Gg.M.t -> float
  val row : int -> Gg.M.t -> Gg.M.v
  val col : int -> Gg.M.t -> Gg.M.v
  val zero : Gg.M.t
  val id : Gg.M.t
  val neg : Gg.M.t -> Gg.M.t
  val add : Gg.M.t -> Gg.M.t -> Gg.M.t
  val sub : Gg.M.t -> Gg.M.t -> Gg.M.t
  val mul : Gg.M.t -> Gg.M.t -> Gg.M.t
  val emul : Gg.M.t -> Gg.M.t -> Gg.M.t
  val ediv : Gg.M.t -> Gg.M.t -> Gg.M.t
  val smul : float -> Gg.M.t -> Gg.M.t
  val transpose : Gg.M.t -> Gg.M.t
  val trace : Gg.M.t -> float
  val det : Gg.M.t -> float
  val inv : Gg.M.t -> Gg.M.t
  val map : (float -> float) -> Gg.M.t -> Gg.M.t
  val mapi : (int -> int -> float -> float) -> Gg.M.t -> Gg.M.t
  val fold : ('-> float -> 'a) -> '-> Gg.M.t -> 'a
  val foldi : ('-> int -> int -> float -> 'a) -> '-> Gg.M.t -> 'a
  val iter : (float -> unit) -> Gg.M.t -> unit
  val iteri : (int -> int -> float -> unit) -> Gg.M.t -> unit
  val for_all : (float -> bool) -> Gg.M.t -> bool
  val exists : (float -> bool) -> Gg.M.t -> bool
  val equal : Gg.M.t -> Gg.M.t -> bool
  val equal_f : (float -> float -> bool) -> Gg.M.t -> Gg.M.t -> bool
  val compare : Gg.M.t -> Gg.M.t -> int
  val compare_f : (float -> float -> int) -> Gg.M.t -> Gg.M.t -> int
  val to_string : Gg.M.t -> string
  val pp : Format.formatter -> Gg.M.t -> unit
  val pp_f :
    (Format.formatter -> float -> unit) -> Format.formatter -> Gg.M.t -> unit
end