a
    b€aih  ã                   @  s^   d Z ddlmZ ddlmZ ddlmZ ddl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.
é    )Úannotations)ÚIterable)ÚTag)ÚInvalidWheelFilename)Úparse_wheel_filenamec                   @  s`   e Zd ZdZdddœdd„Zddœd	d
„Zdddœdd„Zddddœdd„Zdddœdd„ZdS )ÚWheelzA wheel fileÚstrÚNone)ÚfilenameÚreturnc              
   C  sh   || _ zt|ƒ}W n4 tyF } zt|jd ƒd ‚W Y d }~n
d }~0 0 |\| _}| _| _t|ƒ| _	d S )Nr   )
r
   r   Ú_PackagingInvalidWheelFilenamer   ÚargsÚnameÚ	build_tagÚ	file_tagsr   Úversion)Úselfr
   Ú
wheel_infoÚeÚ_version© r   úT/var/www/html/SiteWeb/venv/lib/python3.9/site-packages/pip/_internal/models/wheel.pyÚ__init__   s    &zWheel.__init__z	list[str])r   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)r   ©Ú.0Útagr   r   r   Ú	<genexpr>"   ó    z0Wheel.get_formatted_file_tags.<locals>.<genexpr>)Úsortedr   ©r   r   r   r   Úget_formatted_file_tags    s    zWheel.get_formatted_file_tagsz	list[Tag]Úint)Útagsr   c                   s:   zt ‡ fdd„t|ƒD ƒƒW S  ty4   tƒ ‚Y n0 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    | ]\}}|ˆ j v r|V  qd S r   )r   )r   ÚiÚtr    r   r   r   2   r   z*Wheel.support_index_min.<locals>.<genexpr>N)ÚnextÚ	enumerateÚStopIterationÚ
ValueError©r   r#   r   r    r   Úsupport_index_min$   s    zWheel.support_index_minzdict[Tag, int])r#   Útag_to_priorityr   c                   s   t ‡ fdd„| jD ƒƒS )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   ©r,   r   r   r   G   s   z0Wheel.find_most_preferred_tag.<locals>.<genexpr>)Úminr   )r   r#   r,   r   r-   r   Úfind_most_preferred_tag6   s    ÿzWheel.find_most_preferred_tagzIterable[Tag]Úboolc                 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   Ú
isdisjointr*   r   r   r   Ú	supportedK   s    zWheel.supportedN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r+   r/   r2   r   r   r   r   r      s   r   N)r6   Ú
__future__r   Úcollections.abcr   Zpip._vendor.packaging.tagsr   Úpip._vendor.packaging.utilsr   r   r   Úpip._internal.exceptionsr   r   r   r   r   Ú<module>   s   