functor (A : ArrayOps->
  sig
    type data = A.data
    type kind = Nvector_custom.kind
    type t = data Nvector_custom.t
    val array_nvec_ops : data Nvector_custom.nvector_ops
    val make : ?context:Sundials.Context.t -> int -> float -> t
    val wrap :
      ?context:Sundials.Context.t -> ?with_fused_ops:bool -> data -> t
    val unwrap : t -> 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_scale_add_multi_vector_array:bool ->
      ?with_linear_combination_vector_array:bool -> t -> unit
    module Any :
      sig
        type Nvector.gdata += Arr of data
        val wrap :
          ?context:Sundials.Context.t ->
          ?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_scale_add_multi_vector_array:bool ->
          ?with_linear_combination_vector_array:bool -> data -> Nvector.any
      end
    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
  end