'Determines the appropriate solver.
Parameters
constraints: list
The list of canonicalized constraints.
Returns
str
The solver that will be used.'

@staticmethod
def choose_solver(constraints):

    constr_map = SymData.filter_constraints(constraints)
    if (len(constraints) == 0):
        return s.ECOS
    elif (constr_map[s.BOOL] or constr_map[s.INT]):
        return s.ECOS_BB
    elif constr_map[s.SDP]:
        try:
            import cvxopt
            cvxopt
            return s.CVXOPT
        except ImportError:
            return s.SCS
    else:
        return s.ECOS
