sig
  type 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
  val unwrap : gdata -> t
  val wrap : t -> gdata
end ->
  sig
    type t = gdata
    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