def eval(self, expr, n, extra_constraints=(), solver=None, model_callback=None):
if self._solver_required and solver is None:<EOL><INDENT>raise BackendError("<STR_LIT>" % self.__class__.__name__)<EOL><DEDENT>return self._eval(<EOL>self.convert(expr), n, extra_constraints=self.convert_list(extra_constraints),<EOL>solver=solver, model_callback=model_callback<EOL>)<EOL>
This function returns up to `n` possible solutions for expression `expr`.

:param expr: expression (an AST) to evaluate
:param n: number of results to return
:param solver: a solver object, native to the backend, to assist in
               the evaluation (for example, a z3.Solver)
:param extra_constraints: extra constraints (as ASTs) to add to the solver for this solve
:param model_callback:      a function that will be executed with recovered models (if any)
:return:              A sequence of up to n results (backend objects)