Repository: pypa/pip
File: src/pip/_internal/models/wheel.py (Python)

Code before:
                    "fail to recognise this wheel."
                ),
                replacement=(
                    "rename the wheel to use a correctly normalised version part "
                    "(this may require updating the version in the project metadata)"
                ),
                gone_in="25.1",
                issue=12914,
            )
            _version = _version.replace("_", "-")

        self.version = _version
        self.build_tag = wheel_info.group("build")
        self.pyversions = wheel_info.group("pyver").split(".")
        self.abis = wheel_info.group("abi").split(".")
        self.plats = wheel_info.group("plat").split(".")

        # All the tag combinations from this file
        self.file_tags = {
            Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats
        }

    def get_formatted_file_tags(self) -> List[str]:
        """Return the wheel's tags as a sorted list of strings."""
        return sorted(str(tag) for tag in self.file_tags)

    def support_index_min(self, tags: List[Tag]) -> int:
        """Return the lowest index that one of the wheel's file_tag combinations
        achieves in the given list of supported tags.

        For example, if there are 8 supported tags and one of the file tags
        is first in the list, then return 0.

        :param tags: the PEP 425 tags to check the wheel against, in order
            with most preferred first.

        :raises ValueError: If none of the wheel's file tags match one of
            the supported tags.
        """
        try:
            return next(i for i, t in enumerate(tags) if t in self.file_tags)
        except StopIteration:
            raise ValueError()

    def find_most_preferred_tag(
        self, tags: List[Tag], tag_to_priority: Dict[Tag, int]
    ) -> int:
        """Return the priority of the most preferred tag that one of the wheel's file
        tag combinations achieves in the given list of supported tags using the given
        tag_to_priority mapping, where lower priorities are more-preferred.


Review comment (bug):
This reads poorly:

```
DEPRECATION: The wheel filename 'six-1.16.0_build1-py3-none-any.whl' is not correctly normalised. Future versions of pip will fail to recognise this wheel. and report the error: Invalid wheel filename (invalid version): six-1.16.0_build1-py3-none-any. pip 25.1 will enforce this behaviour change. A possible replacement is rename the wheel to use a correctly normalised name (this may require updating the version in the project metadata). Discussion can be found at https://github.com/pypa/pip/issues/12938
ERROR: Invalid requirement: 'six==1.16.0-build1': Expected end or semicolon (after version specifier)
    six==1.16.0-build1
       ~~~~~~~~~~^
```

That period seems superfluous? "pip will fail to recognise this wheel. and report the error"

Code after:
        _version = wheel_info.group("ver")
        if "_" in _version:
            try:
                parse_wheel_filename(filename)
            except InvalidVersion as e:
                deprecated(
                    reason=(
                        f"Wheel filename version part {_version!r} is not correctly "
                        "normalised, and contained an underscore character in the "
                        "version part. Future versions of pip will fail to recognise "
                        f"this wheel and report the error: {e.args[0]}."
                    ),
                    replacement=(
                        "rename the wheel to use a correctly normalised "
                        "version part (this may require updating the version "
                        "in the project metadata)"
                    ),
                    gone_in="25.1",
                    issue=12938,
                )
            except PackagingInvalidWheelName as e:
                deprecated(
                    reason=(
                        f"The wheel filename {filename!r} is not correctly normalised. "
                        "Future versions of pip will fail to recognise this wheel. "
                        f"and report the error: {e.args[0]}."
                    ),
                    replacement=(
                        "rename the wheel to use a correctly normalised "
                        "name (this may require updating the version in "
                        "the project metadata)"
                    ),
                    gone_in="25.1",
                    issue=12938,
                )

            _version = _version.replace("_", "-")

        self.version = _version
        self.build_tag = wheel_info.group("build")
        self.pyversions = wheel_info.group("pyver").split(".")
        self.abis = wheel_info.group("abi").split(".")
        self.plats = wheel_info.group("plat").split(".")

        # All the tag combinations from this file
        self.file_tags = {
            Tag(x, y, z) for x in self.pyversions for y in self.abis for z in self.plats
        }

    def get_formatted_file_tags(self) -> List[str]:
        """Return the wheel's tags as a sorted list of strings."""