sig
  type ('data, 'kind) t
  type ('data, 'kind) nvector = ('data, 'kind) Nvector.t
  val unwrap : ('data, 'kind) Nvector.t -> 'data
  exception IncompatibleNvector
  val check : ('data, 'kind) Nvector.t -> ('data, 'kind) Nvector.t -> unit
  module type NVECTOR_OPS =
    sig
      type t
      val n_vclone : Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t
      val n_vlinearsum :
        float ->
        Nvector.NVECTOR_OPS.t ->
        float -> Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vconst : float -> Nvector.NVECTOR_OPS.t -> unit
      val n_vprod :
        Nvector.NVECTOR_OPS.t ->
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vdiv :
        Nvector.NVECTOR_OPS.t ->
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vscale :
        float -> Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vabs : Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vinv : Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vaddconst :
        Nvector.NVECTOR_OPS.t -> float -> Nvector.NVECTOR_OPS.t -> unit
      val n_vdotprod :
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> float
      val n_vmaxnorm : Nvector.NVECTOR_OPS.t -> float
      val n_vwrmsnorm :
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> float
      val n_vmin : Nvector.NVECTOR_OPS.t -> float
      val n_vcompare :
        float -> Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> unit
      val n_vinvtest : Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> bool
      val n_vwl2norm :
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> float
      val n_vl1norm : Nvector.NVECTOR_OPS.t -> float
      val n_vwrmsnormmask :
        Nvector.NVECTOR_OPS.t ->
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> float
      val n_vconstrmask :
        Nvector.NVECTOR_OPS.t ->
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> bool
      val n_vminquotient :
        Nvector.NVECTOR_OPS.t -> Nvector.NVECTOR_OPS.t -> float
      val n_vspace : Nvector.NVECTOR_OPS.t -> int * int
    end
  module type NVECTOR =
    sig
      type kind
      type data
      type t = (Nvector.NVECTOR.data, Nvector.NVECTOR.kind) Nvector.nvector
      val wrap : Nvector.NVECTOR.data -> Nvector.NVECTOR.t
      module Ops :
        sig
          type t = t
          val n_vclone : t -> t
          val n_vlinearsum : float -> t -> float -> t -> t -> unit
          val n_vconst : float -> t -> unit
          val n_vprod : t -> t -> t -> unit
          val n_vdiv : t -> t -> t -> unit
          val n_vscale : float -> t -> t -> unit
          val n_vabs : t -> t -> unit
          val n_vinv : t -> t -> unit
          val n_vaddconst : t -> float -> t -> unit
          val n_vdotprod : t -> t -> float
          val n_vmaxnorm : t -> float
          val n_vwrmsnorm : t -> t -> float
          val n_vmin : t -> float
          val n_vcompare : float -> t -> t -> unit
          val n_vinvtest : t -> t -> bool
          val n_vwl2norm : t -> t -> float
          val n_vl1norm : t -> float
          val n_vwrmsnormmask : t -> t -> t -> float
          val n_vconstrmask : t -> t -> t -> bool
          val n_vminquotient : t -> t -> float
          val n_vspace : t -> int * int
        end
      module DataOps :
        sig
          type t = data
          val n_vclone : t -> t
          val n_vlinearsum : float -> t -> float -> t -> t -> unit
          val n_vconst : float -> t -> unit
          val n_vprod : t -> t -> t -> unit
          val n_vdiv : t -> t -> t -> unit
          val n_vscale : float -> t -> t -> unit
          val n_vabs : t -> t -> unit
          val n_vinv : t -> t -> unit
          val n_vaddconst : t -> float -> t -> unit
          val n_vdotprod : t -> t -> float
          val n_vmaxnorm : t -> float
          val n_vwrmsnorm : t -> t -> float
          val n_vmin : t -> float
          val n_vcompare : float -> t -> t -> unit
          val n_vinvtest : t -> t -> bool
          val n_vwl2norm : t -> t -> float
          val n_vl1norm : t -> float
          val n_vwrmsnormmask : t -> t -> t -> float
          val n_vconstrmask : t -> t -> t -> bool
          val n_vminquotient : t -> t -> float
          val n_vspace : t -> int * int
        end
    end
end