def reduce_by(self, package_request):
self.solver.reduction_broad_tests_count += <NUM_LIT:1><EOL>if self.package_request.conflict:<EOL><INDENT>return (self, [])<EOL><DEDENT>new_slice, reductions = self.variant_slice.reduce_by(package_request)<EOL>if new_slice is None:<EOL><INDENT>self.solver.reductions_count += <NUM_LIT:1><EOL>if self.pr:<EOL><INDENT>reqstr = _short_req_str(package_request)<EOL>self.pr("<STR_LIT>", self, reqstr)<EOL>self.pr.br()<EOL><DEDENT>return (None, reductions)<EOL><DEDENT>if new_slice is not self.variant_slice:<EOL><INDENT>self.solver.reductions_count += <NUM_LIT:1><EOL>scope = self._copy(new_slice)<EOL>if self.pr:<EOL><INDENT>reqstr = _short_req_str(package_request)<EOL>self.pr("<STR_LIT>", self, scope, reqstr)<EOL>self.pr.br()<EOL><DEDENT>return (scope, reductions)<EOL><DEDENT>return (self, [])<EOL>
Reduce this scope wrt a package request.

        Returns:
            A (_PackageScope, [Reduction]) tuple, where the scope is a new
            scope copy with reductions applied, or self if there were no
            reductions, or None if the scope was completely reduced.