sig
  val dotprod : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val maxnorm : ('d, 'k) Nvector.t -> float
  val min : ('d, 'k) Nvector.t -> float
  val l1norm : ('d, 'k) Nvector.t -> float
  val invtest : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> bool
  val constrmask :
    ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> bool
  val minquotient : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val wsqrsum : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val wsqrsummask :
    ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val dotprodmulti :
    ('d, 'k) Nvector.t ->
    ('d, 'k) Nvector.t array -> Sundials.RealArray.t -> unit
  val dotprodmulti_allreduce :
    ('d, 'k) Nvector.t -> Sundials.RealArray.t -> unit
  external has_dotprod : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_dotprodlocal" [@@noalloc]
  external has_maxnorm : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_maxnormlocal" [@@noalloc]
  external has_min : ('d, 'k) Nvector.t -> bool = "sunml_nvec_has_minlocal"
    [@@noalloc]
  external has_l1norm : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_l1normlocal" [@@noalloc]
  external has_invtest : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_invtestlocal" [@@noalloc]
  external has_constrmask : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_constrmasklocal" [@@noalloc]
  external has_minquotient : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_minquotientlocal" [@@noalloc]
  external has_wsqrsum : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_wsqrsumlocal" [@@noalloc]
  external has_wsqrsummask : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_wsqrsummasklocal" [@@noalloc]
  external has_dotprodmulti : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_dotprodmultilocal" [@@noalloc]
  external has_dotprodmulti_allreduce : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_dotprodmultiallreduce" [@@noalloc]
end