sig
  type data = Nvector.any Sundials.ROArray.t * int
  type kind
  type t = (Nvector_many.data, Nvector_many.kind) Nvector.t
  type Nvector.gdata += Many of Nvector_many.data
  val wrap :
    ?context:Sundials.Context.t ->
    Nvector.any Sundials.ROArray.t -> Nvector_many.t
  val unwrap : Nvector_many.t -> Nvector_many.data
  val length : Nvector_many.t -> int
  val num_subvectors : Nvector_many.t -> int
  val enable :
    ?with_fused_ops:bool ->
    ?with_linear_combination:bool ->
    ?with_scale_add_multi:bool ->
    ?with_dot_prod_multi:bool ->
    ?with_linear_sum_vector_array:bool ->
    ?with_scale_vector_array:bool ->
    ?with_const_vector_array:bool ->
    ?with_wrms_norm_vector_array:bool ->
    ?with_wrms_norm_mask_vector_array:bool ->
    ?with_dot_prod_multi_local:bool -> Nvector_many.t -> unit
  module Ops :
    sig
      type t = t
      val clone : t -> t
      val linearsum : float -> t -> float -> t -> t -> unit
      val const : float -> t -> unit
      val prod : t -> t -> t -> unit
      val div : t -> t -> t -> unit
      val scale : float -> t -> t -> unit
      val abs : t -> t -> unit
      val inv : t -> t -> unit
      val addconst : t -> float -> t -> unit
      val dotprod : t -> t -> float
      val maxnorm : t -> float
      val wrmsnorm : t -> t -> float
      val min : t -> float
      val compare : float -> t -> t -> unit
      val invtest : t -> t -> bool
      val wl2norm : t -> t -> float
      val l1norm : t -> float
      val wrmsnormmask : t -> t -> t -> float
      val constrmask : t -> t -> t -> bool
      val minquotient : t -> t -> float
      val space : t -> int * int
      val getlength : t -> int
      val print : ?logfile:Sundials.Logfile.t -> t -> unit
      val linearcombination : Sundials.RealArray.t -> t array -> t -> unit
      val scaleaddmulti :
        Sundials.RealArray.t -> t -> t array -> t array -> unit
      val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
      val linearsumvectorarray :
        float -> t array -> float -> t array -> t array -> unit
      val scalevectorarray :
        Sundials.RealArray.t -> t array -> t array -> unit
      val constvectorarray : float -> t array -> unit
      val wrmsnormvectorarray :
        t array -> t array -> Sundials.RealArray.t -> unit
      val wrmsnormmaskvectorarray :
        t array -> t array -> t -> Sundials.RealArray.t -> unit
      val scaleaddmultivectorarray :
        Sundials.RealArray.t ->
        t array -> t array array -> t array array -> unit
      val linearcombinationvectorarray :
        Sundials.RealArray.t -> t array array -> t array -> unit
      module Local :
        sig
          val dotprod : t -> t -> float
          val maxnorm : t -> float
          val min : t -> float
          val l1norm : t -> float
          val invtest : t -> t -> bool
          val constrmask : t -> t -> t -> bool
          val minquotient : t -> t -> float
          val wsqrsum : t -> t -> float
          val wsqrsummask : t -> t -> t -> float
          val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
          val dotprodmulti_allreduce : t -> Sundials.RealArray.t -> unit
        end
    end
  module DataOps :
    sig
      type t = data
      val clone : t -> t
      val linearsum : float -> t -> float -> t -> t -> unit
      val const : float -> t -> unit
      val prod : t -> t -> t -> unit
      val div : t -> t -> t -> unit
      val scale : float -> t -> t -> unit
      val abs : t -> t -> unit
      val inv : t -> t -> unit
      val addconst : t -> float -> t -> unit
      val dotprod : t -> t -> float
      val maxnorm : t -> float
      val wrmsnorm : t -> t -> float
      val min : t -> float
      val compare : float -> t -> t -> unit
      val invtest : t -> t -> bool
      val wl2norm : t -> t -> float
      val l1norm : t -> float
      val wrmsnormmask : t -> t -> t -> float
      val constrmask : t -> t -> t -> bool
      val minquotient : t -> t -> float
      val space : t -> int * int
      val getlength : t -> int
      val print : ?logfile:Sundials.Logfile.t -> t -> unit
      val linearcombination : Sundials.RealArray.t -> t array -> t -> unit
      val scaleaddmulti :
        Sundials.RealArray.t -> t -> t array -> t array -> unit
      val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
      val linearsumvectorarray :
        float -> t array -> float -> t array -> t array -> unit
      val scalevectorarray :
        Sundials.RealArray.t -> t array -> t array -> unit
      val constvectorarray : float -> t array -> unit
      val wrmsnormvectorarray :
        t array -> t array -> Sundials.RealArray.t -> unit
      val wrmsnormmaskvectorarray :
        t array -> t array -> t -> Sundials.RealArray.t -> unit
      val scaleaddmultivectorarray :
        Sundials.RealArray.t ->
        t array -> t array array -> t array array -> unit
      val linearcombinationvectorarray :
        Sundials.RealArray.t -> t array array -> t array -> unit
      module Local :
        sig
          val dotprod : t -> t -> float
          val maxnorm : t -> float
          val min : t -> float
          val l1norm : t -> float
          val invtest : t -> t -> bool
          val constrmask : t -> t -> t -> bool
          val minquotient : t -> t -> float
          val wsqrsum : t -> t -> float
          val wsqrsummask : t -> t -> t -> float
          val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
          val dotprodmulti_allreduce : t -> Sundials.RealArray.t -> unit
        end
    end
  module Any :
    sig
      val wrap :
        ?context:Sundials.Context.t ->
        Nvector.any Sundials.ROArray.t -> Nvector.any
      val unwrap : Nvector.any -> Nvector_many.data
      val enable :
        ?with_fused_ops:bool ->
        ?with_linear_combination:bool ->
        ?with_scale_add_multi:bool ->
        ?with_dot_prod_multi:bool ->
        ?with_linear_sum_vector_array:bool ->
        ?with_scale_vector_array:bool ->
        ?with_const_vector_array:bool ->
        ?with_wrms_norm_vector_array:bool ->
        ?with_wrms_norm_mask_vector_array:bool ->
        ?with_dot_prod_multi_local:bool -> Nvector.any -> unit
    end
end