o
    Ëý°jÅ  ã                   @   sJ   d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 G dd„ dƒZ
dS )z`Represents a wheel file and provides access to the various parts of the
name that have meaning.
é    N)ÚDictÚIterableÚList)ÚTag)ÚInvalidWheelFilenamec                   @   s�   e Zd ZdZe dej¡Zdeddfdd„Z	de
e fdd	„Zd
e
e defdd„Zd
e
e deeef defdd„Zd
ee defdd„ZdS )ÚWheelzA wheel filez¨^(?P<namever>(?P<name>[^\s-]+?)-(?P<ver>[^\s-]*?))
        ((-(?P<build>\d[^-]*?))?-(?P<pyver>[^\s-]+?)-(?P<abi>[^\s-]+?)-(?P<plat>[^\s-]+?)
        \.whl|\.dist-info)$ÚfilenameÚreturnNc                    s¨   ˆ j  |¡}|st|› d�ƒ‚|ˆ _| d¡ dd¡ˆ _| d¡ dd¡ˆ _| d¡ˆ _| d¡ 	d¡ˆ _
| d	¡ 	d¡ˆ _| d
¡ 	d¡ˆ _‡ fdd„ˆ j
D ƒˆ _dS )zX
        :raises InvalidWheelFilename: when the filename is invalid for a wheel
        z is not a valid wheel filename.ÚnameÚ_ú-ÚverÚbuildÚpyverÚ.ÚabiÚplatc                    s0   h | ]}ˆ j D ]}ˆ jD ]}t|||ƒ’qqqS © )ÚabisÚplatsr   )Ú.0ÚxÚyÚz©Úselfr   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_internal/models/wheel.pyÚ	<setcomp>(   s    ÿÿ
ÿz!Wheel.__init__.<locals>.<setcomp>N)Úwheel_file_reÚmatchr   r   ÚgroupÚreplacer
   ÚversionÚ	build_tagÚsplitÚ
pyversionsr   r   Ú	file_tags)r   r   Ú
wheel_infor   r   r   Ú__init__   s   
ÿzWheel.__init__c                 C   s   t dd„ | jD ƒƒS )z4Return the wheel's tags as a sorted list of strings.c                 s   s   � | ]}t |ƒV  qd S ©N)Ústr©r   Útagr   r   r   Ú	<genexpr>.   s   € z0Wheel.get_formatted_file_tags.<locals>.<genexpr>)Úsortedr&   r   r   r   r   Úget_formatted_file_tags,   s   zWheel.get_formatted_file_tagsÚtagsc                    ó   t ‡ fdd„| jD ƒƒS )aÜ  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.
        c                 3   s"   � | ]}|ˆ v rˆ   |¡V  qd S r)   )Úindexr+   ©r0   r   r   r-   =   s   €  z*Wheel.support_index_min.<locals>.<genexpr>©Úminr&   ©r   r0   r   r3   r   Úsupport_index_min0   s   zWheel.support_index_minÚtag_to_priorityc                    r1   )a¨  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.

        This is used in place of support_index_min in some cases in order to avoid
        an expensive linear scan of a large list of tags.

        :param tags: the PEP 425 tags to check the wheel against.
        :param tag_to_priority: a mapping from tag to priority of that tag, where
            lower is more preferred.

        :raises ValueError: If none of the wheel's file tags match one of
            the supported tags.
        c                 3   s    � | ]}|ˆ v rˆ | V  qd S r)   r   r+   ©r8   r   r   r-   P   s   € ÿz0Wheel.find_most_preferred_tag.<locals>.<genexpr>r4   )r   r0   r8   r   r9   r   Úfind_most_preferred_tag?   s   ÿzWheel.find_most_preferred_tagc                 C   s   | j  |¡ S )zŽReturn whether the wheel is compatible with one of the given tags.

        :param tags: the PEP 425 tags to check the wheel against.
        )r&   Ú
isdisjointr6   r   r   r   Ú	supportedT   s   zWheel.supported)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚreÚcompileÚVERBOSEr   r*   r(   r   r/   r   Úintr7   r   r:   r   Úboolr<   r   r   r   r   r      s"    üÿ
ÿ
þr   )r@   rA   Útypingr   r   r   Úpip._vendor.packaging.tagsr   Úpip._internal.exceptionsr   r   r   r   r   r   Ú<module>   s    