
    k"g                     P    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      Z
y)z`Represents a wheel file and provides access to the various parts of the
name that have meaning.
    N)DictIterableList)Tag)InvalidWheelFilenamec                       e Zd ZdZ ej
                  dej                        ZdeddfdZ	de
e   fdZde
e   defd	Zde
e   d
eeef   defdZdee   defdZy)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                    | j                   j                  |      }|st        | d      || _        |j	                  d      j                  dd      | _        |j	                  d      j                  dd      | _        |j	                  d      | _        |j	                  d      j                  d      | _
        |j	                  d	      j                  d      | _        |j	                  d
      j                  d      | _        | j                  D ch c]1  }| j                  D ]   }| j                  D ]  }t        |||       " 3 c}}}| _        yc c}}}w )zX
        :raises InvalidWheelFilename: when the filename is invalid for a wheel
        z is not a valid wheel filename.name_-verbuildpyver.abiplatN)wheel_file_rematchr   r
   groupreplacer   version	build_tagsplit
pyversionsabisplatsr   	file_tags)selfr
   
wheel_infoxyzs         S/var/www/html/djangosite/lib/python3.12/site-packages/pip/_internal/models/wheel.py__init__zWheel.__init__   s;    ''--h7
&(3R'STT $$V,44S#>	 "''.66sC@#))'2$**7399#>$$U+11#6	%%f-33C8
 #'//
 
499
67djj
IJC1aL


 
s   6Ec                 :    t        d | j                  D              S )z4Return the wheel's tags as a sorted list of strings.c              3   2   K   | ]  }t        |        y wN)str).0tags     r&   	<genexpr>z0Wheel.get_formatted_file_tags.<locals>.<genexpr>.   s     93c#h9s   )sortedr    )r!   s    r&   get_formatted_file_tagszWheel.get_formatted_file_tags,   s    9$..999    tagsc                 n     	 t         fdt        |      D              S # t        $ r t               w xY w)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   F   K   | ]  \  }}|j                   v s|  y wr*   )r    )r,   itr!   s      r&   r.   z*Wheel.support_index_min.<locals>.<genexpr>>   s      Mdadnn9LMs   !!)next	enumerateStopIteration
ValueErrorr!   r2   s   ` r&   support_index_minzWheel.support_index_min0   s4    	MioMMM 	,	s     4tag_to_priorityc                 @    t        f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   2   K   | ]  }|v s|     y wr*    )r,   r-   r=   s     r&   r.   z0Wheel.find_most_preferred_tag.<locals>.<genexpr>S   s"      
%(c_>TOC 
s   	
)minr    )r!   r2   r=   s     `r&   find_most_preferred_tagzWheel.find_most_preferred_tagB   s#    "  
,0NN
 
 	
r1   c                 :    | 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    
isdisjointr;   s     r&   	supportedzWheel.supportedW   s    
 >>,,T222r1   )__name__
__module____qualname____doc__recompileVERBOSEr   r+   r'   r   r0   r   intr<   r   rB   r   boolrE   r@   r1   r&   r	   r	      s    BJJ	 	

	M
 
 
,:c :d3i C $
I
04S#X
	
*3hsm 3 3r1   r	   )rI   rJ   typingr   r   r   pip._vendor.packaging.tagsr   pip._internal.exceptionsr   r	   r@   r1   r&   <module>rR      s'    
 ' ' * 9P3 P3r1   