sig
  module type S =
    sig
      module Scalar : Scalar.S
      type vector = (int * Scalar.t) list
      type 'a obj_ext = PreSdp.S.vector * 'Sdp.block_diag
      type 'a constr_ext =
          PreSdp.S.vector * 'Sdp.block_diag * Scalar.t * Scalar.t
      val solve_ext_sparse :
        ?options:Sdp.options ->
        ?solver:Sdp.solver ->
        Sdp.sparse_matrix PreSdp.S.obj_ext ->
        Sdp.sparse_matrix PreSdp.S.constr_ext list ->
        Sdp.bounds ->
        SdpRet.t * (float * float) *
        (PreSdp.S.vector * Sdp.matrix Sdp.block_diag * float array *
         Sdp.matrix Sdp.block_diag)
      val pp_obj_ext :
        (Stdlib.Format.formatter -> '-> unit) ->
        Stdlib.Format.formatter -> 'PreSdp.S.obj_ext -> unit
      val pp_constr_ext :
        (Stdlib.Format.formatter -> '-> unit) ->
        Stdlib.Format.formatter -> 'PreSdp.S.constr_ext -> unit
      val pp_ext_sparse :
        Stdlib.Format.formatter ->
        Sdp.sparse_matrix PreSdp.S.obj_ext *
        Sdp.sparse_matrix PreSdp.S.constr_ext list * Sdp.bounds -> unit
    end
  module Make :
    functor (S : Scalar.S->
      sig
        module Scalar :
          sig
            type t = S.t
            val compare : t -> t -> int
            val zero : t
            val one : t
            val of_float : float -> t
            val to_float : t -> float
            val of_q : Q.t -> t
            val to_q : t -> Q.t
            val add : t -> t -> t
            val sub : t -> t -> t
            val mult : t -> t -> t
            val div : t -> t -> t
            val pp : Format.formatter -> t -> unit
            val minus_one : t
            val of_int : int -> t
            val neg : t -> t
            val inv : t -> t
            val equal : t -> t -> bool
            val leq : t -> t -> bool
            val geq : t -> t -> bool
            val lt : t -> t -> bool
            val gt : t -> t -> bool
            val sign : t -> int
            val ( ~- ) : t -> t
            val ( + ) : t -> t -> t
            val ( - ) : t -> t -> t
            val ( * ) : t -> t -> t
            val ( / ) : t -> t -> t
            val ( = ) : t -> t -> bool
            val ( <> ) : t -> t -> bool
            val ( <= ) : t -> t -> bool
            val ( >= ) : t -> t -> bool
            val ( < ) : t -> t -> bool
            val ( > ) : t -> t -> bool
          end
        type vector = (int * Scalar.t) list
        type 'a obj_ext = vector * 'Sdp.block_diag
        type 'a constr_ext = vector * 'Sdp.block_diag * Scalar.t * Scalar.t
        val solve_ext_sparse :
          ?options:Sdp.options ->
          ?solver:Sdp.solver ->
          Sdp.sparse_matrix obj_ext ->
          Sdp.sparse_matrix constr_ext list ->
          Sdp.bounds ->
          SdpRet.t * (float * float) *
          (vector * Sdp.matrix Sdp.block_diag * float array *
           Sdp.matrix Sdp.block_diag)
        val pp_obj_ext :
          (Format.formatter -> '-> unit) ->
          Format.formatter -> 'a obj_ext -> unit
        val pp_constr_ext :
          (Format.formatter -> '-> unit) ->
          Format.formatter -> 'a constr_ext -> unit
        val pp_ext_sparse :
          Format.formatter ->
          Sdp.sparse_matrix obj_ext * Sdp.sparse_matrix constr_ext list *
          Sdp.bounds -> unit
      end
  module Q :
    sig
      module Scalar :
        sig
          type t = Q.t
          val compare : t -> t -> int
          val zero : t
          val one : t
          val of_float : float -> t
          val to_float : t -> float
          val of_q : Q.t -> t
          val to_q : t -> Q.t
          val add : t -> t -> t
          val sub : t -> t -> t
          val mult : t -> t -> t
          val div : t -> t -> t
          val pp : Format.formatter -> t -> unit
          val minus_one : t
          val of_int : int -> t
          val neg : t -> t
          val inv : t -> t
          val equal : t -> t -> bool
          val leq : t -> t -> bool
          val geq : t -> t -> bool
          val lt : t -> t -> bool
          val gt : t -> t -> bool
          val sign : t -> int
          val ( ~- ) : t -> t
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( = ) : t -> t -> bool
          val ( <> ) : t -> t -> bool
          val ( <= ) : t -> t -> bool
          val ( >= ) : t -> t -> bool
          val ( < ) : t -> t -> bool
          val ( > ) : t -> t -> bool
        end
      type vector = (int * Scalar.t) list
      type 'a obj_ext = vector * 'Sdp.block_diag
      type 'a constr_ext = vector * 'Sdp.block_diag * Scalar.t * Scalar.t
      val solve_ext_sparse :
        ?options:Sdp.options ->
        ?solver:Sdp.solver ->
        Sdp.sparse_matrix obj_ext ->
        Sdp.sparse_matrix constr_ext list ->
        Sdp.bounds ->
        SdpRet.t * (float * float) *
        (vector * Sdp.matrix Sdp.block_diag * float array *
         Sdp.matrix Sdp.block_diag)
      val pp_obj_ext :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a obj_ext -> unit
      val pp_constr_ext :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a constr_ext -> unit
      val pp_ext_sparse :
        Format.formatter ->
        Sdp.sparse_matrix obj_ext * Sdp.sparse_matrix constr_ext list *
        Sdp.bounds -> unit
    end
  module Float :
    sig
      module Scalar :
        sig
          type t = float
          val compare : t -> t -> int
          val zero : t
          val one : t
          val of_float : float -> t
          val to_float : t -> float
          val of_q : Q.t -> t
          val to_q : t -> Q.t
          val add : t -> t -> t
          val sub : t -> t -> t
          val mult : t -> t -> t
          val div : t -> t -> t
          val pp : Format.formatter -> t -> unit
          val minus_one : t
          val of_int : int -> t
          val neg : t -> t
          val inv : t -> t
          val equal : t -> t -> bool
          val leq : t -> t -> bool
          val geq : t -> t -> bool
          val lt : t -> t -> bool
          val gt : t -> t -> bool
          val sign : t -> int
          val ( ~- ) : t -> t
          val ( + ) : t -> t -> t
          val ( - ) : t -> t -> t
          val ( * ) : t -> t -> t
          val ( / ) : t -> t -> t
          val ( = ) : t -> t -> bool
          val ( <> ) : t -> t -> bool
          val ( <= ) : t -> t -> bool
          val ( >= ) : t -> t -> bool
          val ( < ) : t -> t -> bool
          val ( > ) : t -> t -> bool
        end
      type vector = (int * Scalar.t) list
      type 'a obj_ext = vector * 'Sdp.block_diag
      type 'a constr_ext = vector * 'Sdp.block_diag * Scalar.t * Scalar.t
      val solve_ext_sparse :
        ?options:Sdp.options ->
        ?solver:Sdp.solver ->
        Sdp.sparse_matrix obj_ext ->
        Sdp.sparse_matrix constr_ext list ->
        Sdp.bounds ->
        SdpRet.t * (float * float) *
        (vector * Sdp.matrix Sdp.block_diag * float array *
         Sdp.matrix Sdp.block_diag)
      val pp_obj_ext :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a obj_ext -> unit
      val pp_constr_ext :
        (Format.formatter -> '-> unit) ->
        Format.formatter -> 'a constr_ext -> unit
      val pp_ext_sparse :
        Format.formatter ->
        Sdp.sparse_matrix obj_ext * Sdp.sparse_matrix constr_ext list *
        Sdp.bounds -> unit
    end
end