sig
  val ( ~. ) : int -> float
  module Math :
    sig
      val abs : int -> int
      val absf : float -> float
      val ceil : float -> int
      val floor : float -> int
      val constrain : int -> int -> int -> int
      val constrainf : float -> float -> float -> float
      val dist : int -> int -> int -> int -> float
      val distf : float -> float -> float -> float -> float
      val mag : int -> int -> float
      val magf : float -> float -> float
      val lerp : int -> int -> float -> int
      val lerpf : float -> float -> float -> float
      val log : float -> float -> float
      val map : int -> int -> int -> int -> int -> int
      val mapf : float -> float -> float -> float -> float -> float
      val max : int -> int -> int
      val maxf : float -> float -> float
      val min : int -> int -> int
      val minf : float -> float -> float
      val norm : int -> int -> int -> float
      val normf : float -> float -> float -> float
      val round : float -> int
      val sqrt : float -> float
      val acos : float -> float
      val asin : float -> float
      val atan : float -> float
      val atan2 : float -> float -> float
      val cos : float -> float
      val sin : float -> float
      val tan : float -> float
      val degrees : float -> float
      val radians : float -> float
      val angle_avg : float -> float -> float
      val angle_sum : float -> float -> float
      val angle_diff : float -> float -> float
      val pi : float
      val half_pi : float
      val two_pi : float
      val e : float
      val random_int : ?lower_bound:int -> int -> int
      val random_float : ?lower_bound:float -> float -> float
      val random_bool : unit -> bool
    end
  module Vector :
    sig
      type t = float * float
      val to_string : Math.Vector.t -> string
      val ( ~< ) : Math.Vector.t -> float
      val ( ~> ) : Math.Vector.t -> float
      val create : float -> float -> Math.Vector.t
      val of_tuple : float * float -> Math.Vector.t
      val of_angle : float -> Math.Vector.t
      val mag : Math.Vector.t -> float
      val mag_sq : Math.Vector.t -> float
      val add : Math.Vector.t -> Math.Vector.t -> Math.Vector.t
      val sub : Math.Vector.t -> Math.Vector.t -> Math.Vector.t
      val mult : Math.Vector.t -> float -> Math.Vector.t
      val div : Math.Vector.t -> float -> Math.Vector.t
      val dist : Math.Vector.t -> Math.Vector.t -> float
      val dot : Math.Vector.t -> Math.Vector.t -> float
      val norm : Math.Vector.t -> Math.Vector.t
      val with_mag : Math.Vector.t -> float -> Math.Vector.t
      val limit : Math.Vector.t -> float -> Math.Vector.t
      val heading : Math.Vector.t -> float
      val rotate : Math.Vector.t -> float -> Math.Vector.t
      val lerp : Math.Vector.t -> Math.Vector.t -> float -> Math.Vector.t
      val angle_between : Math.Vector.t -> Math.Vector.t -> float
      val project : Math.Vector.t -> Math.Vector.t -> Math.Vector.t
      val ( ++ ) : Math.Vector.t -> Math.Vector.t -> Math.Vector.t
      val ( -- ) : Math.Vector.t -> Math.Vector.t -> Math.Vector.t
      val ( *** ) : Math.Vector.t -> float -> Math.Vector.t
      val ( // ) : Math.Vector.t -> float -> Math.Vector.t
      val ( **. ) : Math.Vector.t -> Math.Vector.t -> float
      val ( ~|| ) : Math.Vector.t -> float
    end
  type vector = Math.Vector.t
end