sig
  val dense :
    ?context:Sundials.Context.t ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    'Sundials.Matrix.dense ->
    (Sundials.Matrix.Dense.t, 'a, [ `Dls ]) Sundials_LinearSolver.serial_t
  val lapack_dense :
    ?context:Sundials.Context.t ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    'Sundials.Matrix.dense ->
    (Sundials.Matrix.Dense.t, 'a, [ `Dls ]) Sundials_LinearSolver.serial_t
  val band :
    ?context:Sundials.Context.t ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    'Sundials.Matrix.band ->
    (Sundials.Matrix.Band.t, 'a, [ `Dls ]) Sundials_LinearSolver.serial_t
  val lapack_band :
    ?context:Sundials.Context.t ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    'Sundials.Matrix.band ->
    (Sundials.Matrix.Band.t, 'a, [ `Dls ]) Sundials_LinearSolver.serial_t
  module Klu :
    sig
      type ordering =
        Sundials_LinearSolver_impl.Klu.ordering =
          Amd
        | ColAmd
        | Natural
      val make :
        ?context:Sundials.Context.t ->
        ?ordering:Sundials_LinearSolver.Direct.Klu.ordering ->
        ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
        ('s, 'a) Sundials.Matrix.sparse ->
        ('Sundials.Matrix.Sparse.t, 'a, [ `Dls | `Klu ])
        Sundials_LinearSolver.serial_t
      val reinit :
        ('Sundials.Matrix.Sparse.t, [> Nvector_serial.kind ] as 'a,
         [> `Klu ])
        Sundials_LinearSolver.serial_t ->
        ('s, 'a) Sundials.Matrix.sparse -> ?nnz:int -> unit -> unit
      val set_ordering :
        ('Sundials.Matrix.Sparse.t, [> Nvector_serial.kind ], [> `Klu ])
        Sundials_LinearSolver.serial_t ->
        Sundials_LinearSolver.Direct.Klu.ordering -> unit
    end
  val klu :
    ?context:Sundials.Context.t ->
    ?ordering:Sundials_LinearSolver.Direct.Klu.ordering ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    ('s, 'a) Sundials.Matrix.sparse ->
    ('Sundials.Matrix.Sparse.t, 'a, [ `Dls | `Klu ])
    Sundials_LinearSolver.serial_t
  module Superlumt :
    sig
      type ordering =
        Sundials_LinearSolver_impl.Superlumt.ordering =
          Natural
        | MinDegreeProd
        | MinDegreeSum
        | ColAmd
      val make :
        ?context:Sundials.Context.t ->
        ?ordering:Sundials_LinearSolver.Direct.Superlumt.ordering ->
        nthreads:int ->
        ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
        ('s, 'a) Sundials.Matrix.sparse ->
        ('Sundials.Matrix.Sparse.t, 'a, [ `Dls | `Slu ])
        Sundials_LinearSolver.serial_t
      val set_ordering :
        ('Sundials.Matrix.Sparse.t, [> Nvector_serial.kind ], [> `Slu ])
        Sundials_LinearSolver.serial_t ->
        Sundials_LinearSolver.Direct.Superlumt.ordering -> unit
    end
  val superlumt :
    ?context:Sundials.Context.t ->
    ?ordering:Sundials_LinearSolver.Direct.Superlumt.ordering ->
    nthreads:int ->
    ([> Nvector_serial.kind ] as 'a) Nvector.serial ->
    ('s, 'a) Sundials.Matrix.sparse ->
    ('Sundials.Matrix.Sparse.t, 'a, [> `Dls | `Slu ])
    Sundials_LinearSolver.serial_t
end