def intersect(self, range_):
new_slice = None<EOL>if self.package_request.conflict:<EOL><INDENT>if self.package_request.range is None:<EOL><INDENT>new_slice = self.solver._get_variant_slice(<EOL>self.package_name, range_)<EOL><DEDENT>else:<EOL><INDENT>new_range = range_ - self.package_request.range<EOL>if new_range is not None:<EOL><INDENT>new_slice = self.solver._get_variant_slice(<EOL>self.package_name, new_range)<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>new_slice = self.variant_slice.intersect(range_)<EOL><DEDENT>if new_slice is None:<EOL><INDENT>if self.pr:<EOL><INDENT>self.pr("<STR_LIT>",<EOL>self, range_)<EOL><DEDENT>return None<EOL><DEDENT>if new_slice is not self.variant_slice:<EOL><INDENT>scope = self._copy(new_slice)<EOL>if self.pr:<EOL><INDENT>self.pr("<STR_LIT>",<EOL>self, scope, range_)<EOL><DEDENT>return scope<EOL><DEDENT>return self<EOL>
Intersect this scope with a package range.

        Returns:
            A new copy of this scope, with variants whos version fall outside
            of the given range removed. If there were no removals, self is
            returned. If all variants were removed, None is returned.