sig
  val clone : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t
  val linearsum :
    float ->
    ('d, 'k) Nvector.t ->
    float -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val const : float -> ('d, 'k) Nvector.t -> unit
  val prod :
    ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val div :
    ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val scale : float -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val abs : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val inv : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val addconst : ('d, 'k) Nvector.t -> float -> ('d, 'k) Nvector.t -> unit
  val dotprod : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val maxnorm : ('d, 'k) Nvector.t -> float
  val wrmsnorm : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val min : ('d, 'k) Nvector.t -> float
  val compare : float -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit
  val invtest : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> bool
  val wl2norm : ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  val l1norm : ('d, 'k) Nvector.t -> float
  val wrmsnormmask :
    ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float
  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 space : ('d, 'k) Nvector.t -> int * int
  val getlength : ('d, 'k) Nvector.t -> int
  val print : ?logfile:Sundials.Logfile.t -> ('d, 'k) Nvector.t -> unit
  val linearcombination :
    Sundials.RealArray.t ->
    ('d, 'k) Nvector.t array -> ('d, 'k) Nvector.t -> unit
  val scaleaddmulti :
    Sundials.RealArray.t ->
    ('d, 'k) Nvector.t ->
    ('d, 'k) Nvector.t array -> ('d, 'k) Nvector.t array -> unit
  val dotprodmulti :
    ('d, 'k) Nvector.t ->
    ('d, 'k) Nvector.t array -> Sundials.RealArray.t -> unit
  val linearsumvectorarray :
    float ->
    ('d, 'k) Nvector.t array ->
    float -> ('d, 'k) Nvector.t array -> ('d, 'k) Nvector.t array -> unit
  val scalevectorarray :
    Sundials.RealArray.t ->
    ('d, 'k) Nvector.t array -> ('d, 'k) Nvector.t array -> unit
  val constvectorarray : float -> ('d, 'k) Nvector.t array -> unit
  val wrmsnormvectorarray :
    ('d, 'k) Nvector.t array ->
    ('d, 'k) Nvector.t array -> Sundials.RealArray.t -> unit
  val wrmsnormmaskvectorarray :
    ('d, 'k) Nvector.t array ->
    ('d, 'k) Nvector.t array ->
    ('d, 'k) Nvector.t -> Sundials.RealArray.t -> unit
  val scaleaddmultivectorarray :
    Sundials.RealArray.t ->
    ('d, 'k) Nvector.t array ->
    ('d, 'k) Nvector.t array array -> ('d, 'k) Nvector.t array array -> unit
  val linearcombinationvectorarray :
    Sundials.RealArray.t ->
    ('d, 'k) Nvector.t array array -> ('d, 'k) Nvector.t array -> unit
  external has_linearcombination : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_linearcombination" [@@noalloc]
  external has_scaleaddmulti : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_scaleaddmulti" [@@noalloc]
  external has_dotprodmulti : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_dotprodmulti" [@@noalloc]
  external has_linearsumvectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_linearsumvectorarray" [@@noalloc]
  external has_scalevectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_scalevectorarray" [@@noalloc]
  external has_constvectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_constvectorarray" [@@noalloc]
  external has_wrmsnormvectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_wrmsnormvectorarray" [@@noalloc]
  external has_wrmsnormmaskvectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_wrmsnormmaskvectorarray" [@@noalloc]
  external has_scaleaddmultivectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_scaleaddmultivectorarray" [@@noalloc]
  external has_linearcombinationvectorarray : ('d, 'k) Nvector.t -> bool
    = "sunml_nvec_has_linearcombinationvectorarray" [@@noalloc]
  module Local :
    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
end