'Returns the result of the call to the solver.
Parameters
objective : CVXPY objective object
Raw objective passed by CVXPY. Can be convex/concave.
constraints : list
The list of raw constraints.
Returns
tuple
(status, optimal value, primal, equality dual, inequality dual)'

def solve(self, objective, constraints, cached_data, warm_start, verbose, solver_opts):

    sym_data = self.get_sym_data(objective, constraints)
    id_map = sym_data.var_offsets
    N = sym_data.x_length
    extractor = QuadCoeffExtractor(id_map, N)
    (Ps, Q, R) = extractor.get_coeffs(objective.args[0])
    P = Ps[0]
    q = np.asarray(Q.todense()).flatten()
    r = R[0]
    if (len(constraints) > 0):
        Cs = [extractor.get_coeffs(c._expr)[1:] for c in constraints]
        As = sp.vstack([C[0] for C in Cs])
        bs = np.array([C[1] for C in Cs]).flatten()
        lhs = sp.bmat([[(2 * P), As.transpose()], [As, None]], format='csr')
        rhs = np.concatenate([(- q), (- bs)])
    else:
        lhs = (2 * P)
        rhs = (- q)
    warnings.filterwarnings('error')
    try:
        sol = SLA.spsolve(lhs.tocsr(), rhs)
        x = np.array(sol[:N])
        nu = np.array(sol[N:])
        p_star = (np.dot(x.transpose(), ((P * x) + q)) + r)
    except SLA.MatrixRankWarning:
        x = None
        nu = None
        p_star = None
    warnings.resetwarnings()
    result_dict = {s.PRIMAL: x, s.EQ_DUAL: nu, s.VALUE: objective.primal_to_result(p_star)}
    return self.format_results(result_dict, None, cached_data)
