sig
  type sparse_matrix = (int * int * float) list
  type matrix = float array array
  type 'a block_diag = (int * 'a) list
  val matrix_of_sparse : Sdp.sparse_matrix -> Sdp.matrix
  val matrix_to_sparse : Sdp.matrix -> Sdp.sparse_matrix
  val block_diag_of_sparse :
    Sdp.sparse_matrix Sdp.block_diag -> Sdp.matrix Sdp.block_diag
  val block_diag_to_sparse :
    Sdp.matrix Sdp.block_diag -> Sdp.sparse_matrix Sdp.block_diag
  type solver = Sdp_default.solver = Csdp | Mosek | Sdpa | SdpaGmp | SdpaDd
  type options = {
    solver : Sdp.solver;
    verbose : int;
    max_iteration : int;
    stop_criterion : float;
    initial : float;
    precision : int;
  }
  val default : Sdp.options
  type 'a obj = 'Sdp.block_diag
  type 'a constr =
      Eq of 'Sdp.block_diag * float
    | Le of 'Sdp.block_diag * float
    | Ge of 'Sdp.block_diag * float
  val solve_sparse :
    ?options:Sdp.options ->
    ?solver:Sdp.solver ->
    ?init:Sdp.matrix Sdp.block_diag * float array * Sdp.matrix Sdp.block_diag ->
    Sdp.sparse_matrix Sdp.obj ->
    Sdp.sparse_matrix Sdp.constr list ->
    SdpRet.t * (float * float) *
    (Sdp.matrix Sdp.block_diag * float array * Sdp.matrix Sdp.block_diag)
  val solve :
    ?options:Sdp.options ->
    ?solver:Sdp.solver ->
    ?init:Sdp.matrix Sdp.block_diag * float array * Sdp.matrix Sdp.block_diag ->
    Sdp.matrix Sdp.obj ->
    Sdp.matrix Sdp.constr list ->
    SdpRet.t * (float * float) *
    (Sdp.matrix Sdp.block_diag * float array * Sdp.matrix Sdp.block_diag)
  type vector = (int * float) list
  type 'a obj_ext = Sdp.vector * 'Sdp.block_diag
  type 'a constr_ext = Sdp.vector * 'Sdp.block_diag * float * float
  type bounds = (int * float * float) list
  val solve_ext_sparse :
    ?options:Sdp.options ->
    ?solver:Sdp.solver ->
    Sdp.sparse_matrix Sdp.obj_ext ->
    Sdp.sparse_matrix Sdp.constr_ext list ->
    Sdp.bounds ->
    SdpRet.t * (float * float) *
    (Sdp.vector * Sdp.matrix Sdp.block_diag * float array *
     Sdp.matrix Sdp.block_diag)
  val solve_ext :
    ?options:Sdp.options ->
    ?solver:Sdp.solver ->
    Sdp.matrix Sdp.obj_ext ->
    Sdp.matrix Sdp.constr_ext list ->
    Sdp.bounds ->
    SdpRet.t * (float * float) *
    (Sdp.vector * Sdp.matrix Sdp.block_diag * float array *
     Sdp.matrix Sdp.block_diag)
  val pp_sparse_matrix : Stdlib.Format.formatter -> Sdp.sparse_matrix -> unit
  val pp_matrix : Stdlib.Format.formatter -> Sdp.matrix -> unit
  val pp_block_diag :
    (Stdlib.Format.formatter -> '-> unit) ->
    Stdlib.Format.formatter -> 'Sdp.block_diag -> unit
  val pp_obj :
    (Stdlib.Format.formatter -> '-> unit) ->
    Stdlib.Format.formatter -> 'Sdp.obj -> unit
  val pp_constr :
    (Stdlib.Format.formatter -> '-> unit) ->
    Stdlib.Format.formatter -> 'Sdp.constr -> unit
  val pp_sparse :
    Stdlib.Format.formatter ->
    Sdp.sparse_matrix Sdp.obj * Sdp.sparse_matrix Sdp.constr list -> unit
  val pp :
    Stdlib.Format.formatter ->
    Sdp.matrix Sdp.obj * Sdp.matrix Sdp.constr list -> unit
  val pp_vector : Stdlib.Format.formatter -> Sdp.vector -> unit
  val pp_obj_ext :
    (Stdlib.Format.formatter -> '-> unit) ->
    Stdlib.Format.formatter -> 'Sdp.obj_ext -> unit
  val pp_constr_ext :
    (Stdlib.Format.formatter -> '-> unit) ->
    Stdlib.Format.formatter -> 'Sdp.constr_ext -> unit
  val pp_bounds : Stdlib.Format.formatter -> Sdp.bounds -> unit
  val pp_ext_sparse :
    Stdlib.Format.formatter ->
    Sdp.sparse_matrix Sdp.obj_ext * Sdp.sparse_matrix Sdp.constr_ext list *
    Sdp.bounds -> unit
  val pp_ext :
    Stdlib.Format.formatter ->
    Sdp.matrix Sdp.obj_ext * Sdp.matrix Sdp.constr_ext list * Sdp.bounds ->
    unit
  val pp_ext_sparse_sedumi :
    Stdlib.Format.formatter ->
    Sdp.sparse_matrix Sdp.obj_ext * Sdp.sparse_matrix Sdp.constr_ext list *
    Sdp.bounds -> unit
  val pp_ext_sedumi :
    Stdlib.Format.formatter ->
    Sdp.matrix Sdp.obj_ext * Sdp.matrix Sdp.constr_ext list * Sdp.bounds ->
    unit
  val pfeas_stop_crit :
    ?options:Sdp.options -> ?solver:Sdp.solver -> float list -> float
end