def get_solver_name(mip=False, qp=False):
if len(solvers) == <NUM_LIT:0>:<EOL><INDENT>raise SolverNotFound("<STR_LIT>")<EOL><DEDENT>mip_order = ["<STR_LIT>", "<STR_LIT>", "<STR_LIT>"]<EOL>lp_order = ["<STR_LIT>", "<STR_LIT>", "<STR_LIT>"]<EOL>qp_order = ["<STR_LIT>", "<STR_LIT>"]<EOL>if mip is False and qp is False:<EOL><INDENT>for solver_name in lp_order:<EOL><INDENT>if solver_name in solvers:<EOL><INDENT>return solver_name<EOL><DEDENT><DEDENT>return list(solvers)[<NUM_LIT:0>]<EOL><DEDENT>elif qp:  <EOL><INDENT>for solver_name in qp_order:<EOL><INDENT>if solver_name in solvers:<EOL><INDENT>return solver_name<EOL><DEDENT><DEDENT>raise SolverNotFound("<STR_LIT>")<EOL><DEDENT>else:<EOL><INDENT>for solver_name in mip_order:<EOL><INDENT>if solver_name in solvers:<EOL><INDENT>return solver_name<EOL><DEDENT><DEDENT><DEDENT>raise SolverNotFound("<STR_LIT>")<EOL>
Select a solver for a given optimization problem.

    Parameters
    ----------
    mip : bool
        Does the solver require mixed integer linear programming capabilities?
    qp : bool
        Does the solver require quadratic programming capabilities?

    Returns
    -------
    string
        The name of feasible solver.

    Raises
    ------
    SolverNotFound
        If no suitable solver could be found.