sig
  type parallel_bsession =
      (Nvector_parallel.data, Nvector_parallel.kind) Idas.Adjoint.bsession
  type parallel_preconditioner =
      (Nvector_parallel.data, Nvector_parallel.kind)
      Idas.Adjoint.Spils.preconditioner
  type bandwidths =
    Ida_bbd.bandwidths = {
    mudq : int;
    mldq : int;
    mukeep : int;
    mlkeep : int;
  }
  type local_fn =
      Nvector_parallel.data Idas.Adjoint.bresfn_args ->
      Nvector_parallel.data -> unit
  type comm_fn = Nvector_parallel.data Idas.Adjoint.bresfn_args -> unit
  val prec_left :
    ?dqrely:float ->
    Idas_bbd.bandwidths ->
    ?comm:Idas_bbd.comm_fn ->
    Idas_bbd.local_fn -> Idas_bbd.parallel_preconditioner
  val reinit :
    Idas_bbd.parallel_bsession -> ?dqrely:float -> int -> int -> unit
  val get_work_space : Idas_bbd.parallel_bsession -> int * int
  val get_num_gfn_evals : Idas_bbd.parallel_bsession -> int
end