
0c@_
                 @   sr   d  Z  d d l Z d d l m Z d d l m Z d d l m Z e rX d d l m	 Z	 Gd d   d e
  Z d S)	z`Represents a wheel file and provides access to the various parts of the
name that have meaning.
    N)Tag)InvalidWheelFilename)MYPY_CHECK_RUNNING)Listc               @   s[   e  Z d  Z d Z e j d e j  Z d d   Z d d   Z	 d d   Z
 d	 d
   Z d S)WheelzA wheel filez^(?P<namever>(?P<name>.+?)-(?P<ver>.*?))
        ((-(?P<build>\d[^-]*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?)
        \.whl|\.dist-info)$c                s     j  j |  } | s- t d j |    |   _ | j d  j d d    _ | j d  j d d    _ | j d    _	 | j d  j
 d    _ | j d	  j
 d    _ | j d
  j
 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                sB   h  |  ]8 }   j  D]( }   j D] } t | | |   q  q q S )abisplatsr   ).0xyz)selfr   9/tmp/pip-build-jynh7p1z/pip/pip/_internal/models/wheel.py	<setcomp>.   s   	z!Wheel.__init__.<locals>.<setcomp>N)wheel_file_rematchr   formatfilenamegroupreplacer   versionZ	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>6   s    z0Wheel.get_formatted_file_tags.<locals>.<genexpr>)sortedr#   )r   r   r   r   get_formatted_file_tags3   s    zWheel.get_formatted_file_tagsc                s    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*   |  ]  } |   k r   j  |  Vq d  S)N)index)r   r'   )tagsr   r   r(   F   s    z*Wheel.support_index_min.<locals>.<genexpr>)minr#   )r   r,   r   )r,   r   support_index_min8   s    zWheel.support_index_minc             C   s   |  j  j |  S)zReturn whether the wheel is compatible with one of the given tags.

        :param tags: the PEP 425 tags to check the wheel against.
        )r#   
isdisjoint)r   r,   r   r   r   	supportedH   s    zWheel.supportedN)__name__
__module____qualname____doc__recompileVERBOSEr   r%   r*   r.   r0   r   r   r   r   r      s   r   )r4   r5   Zpip._vendor.packaging.tagsr   Zpip._internal.exceptionsr   Zpip._internal.utils.typingr   Ztypingr   objectr   r   r   r   r   <module>   s   