'Returns the result of the call to the solver.
Parameters
objective : LinOp
The canonicalized objective.
constraints : list
The list of canonicalized cosntraints.
cached_data : dict
A map of solver name to cached problem data.
warm_start : bool
Should the previous solver result be used to warm_start?
verbose : bool
Should the solver print output?
solver_opts : dict
Additional arguments for the solver.
Returns
tuple
(status, optimal value, primal, equality dual, inequality dual)'

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

    import scs
    data = self.get_problem_data(objective, constraints, cached_data)
    solver_opts['verbose'] = verbose
    scs_args = {'c': data[s.C], 'A': data[s.A], 'b': data[s.B]}
    solver_cache = cached_data[self.name()]
    if (warm_start and (solver_cache.prev_result is not None)):
        scs_args['x'] = solver_cache.prev_result['x']
        scs_args['y'] = solver_cache.prev_result['y']
        scs_args['s'] = solver_cache.prev_result['s']
    results_dict = scs.solve(scs_args, data[s.DIMS], **solver_opts)
    return self.format_results(results_dict, data, cached_data)
