Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 18.119.109.229
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : wheel.cpython-36.pyc
3

���e˘�@s�ddlmZddlZddlZddlZddlZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!dd	l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd
l,m-Z-m.Z.ej/e0�Z1da2e3ed��r4dZ4n*ej5j6d
��rHdZ4nej5dk�rZdZ4ndZ4ej7d�Z8e8�s�dej9dd�Z8de8Z:e4e8Z;ej"j<�j=dd�j=dd�Z>ej7d�Z?e?�r�e?j6d��r�e?j=dd�Z?ndd�Z@e@�Z?[@ejAdejBejCB�ZDejAdejBejCB�ZEejAd�ZFejAd �ZGd!ZHd"ZIe
jJd#k�r>d$d%�ZKnd&d%�ZKGd'd(�d(eL�ZMeM�ZNGd)d*�d*eL�ZOd+d,�ZPeP�ZQ[Pd/d-d.�ZRdS)0�)�unicode_literalsN)�message_from_file�)�__version__�DistlibException)�	sysconfig�ZipFile�fsdecode�	text_type�filter)�InstalledDistribution)�Metadata�METADATA_FILENAME)	�FileOperator�convert_path�	CSVReader�	CSVWriter�Cache�cached_property�get_cache_base�read_exports�tempdir)�NormalizedVersion�UnsupportedVersionErrorZpypy_version_infoZpp�javaZjyZcliZip�cp�py_version_nodotz%s%s��py�-�_�.�SOABIzcpython-cCsRdtg}tjd�r|jd�tjd�r0|jd�tjd�dkrH|jd�d	j|�S)
Nr�Py_DEBUG�d�
WITH_PYMALLOC�mZPy_UNICODE_SIZE��u�)�
VER_SUFFIXr�get_config_var�append�join)�parts�r/�/usr/lib/python3.6/wheel.py�_derive_abi;s




r1zz
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+(\.\w+)*)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s
\s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons	#!pythonw�/cCs|S)Nr/)�or/r/r0�<lambda>]sr4cCs|jtjd�S)Nr2)�replace�os�sep)r3r/r/r0r4_sc@s6eZdZdd�Zdd�Zdd�Zddd	�Zd
d�ZdS)
�MountercCsi|_i|_dS)N)�
impure_wheels�libs)�selfr/r/r0�__init__cszMounter.__init__cCs||j|<|jj|�dS)N)r9r:�update)r;�pathname�
extensionsr/r/r0�addgs
zMounter.addcCs4|jj|�}x"|D]\}}||jkr|j|=qWdS)N)r9�popr:)r;r>r?�k�vr/r/r0�removeks
zMounter.removeNcCs||jkr|}nd}|S)N)r:)r;�fullname�path�resultr/r/r0�find_moduleqs
zMounter.find_modulecCsj|tjkrtj|}nP||jkr,td|��tj||j|�}||_|jdd�}t|�dkrf|d|_	|S)Nzunable to find extension for %sr!rr)
�sys�modulesr:�ImportError�impZload_dynamic�
__loader__�rsplit�len�__package__)r;rErGr.r/r/r0�load_modulexs


zMounter.load_module)N)�__name__�
__module__�__qualname__r<r@rDrHrQr/r/r/r0r8bs

r8c@s�eZdZdZd2ZdZd3dd�Zedd	��Zed
d��Z	edd
��Z
edd��Zdd�Z
edd��Zdd�Zd4dd�Zdd�Zdd�Zdd�Zd5dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd6d*d+�Zd,d-�Zd.d/�Zd7d0d1�ZdS)8�Wheelz@
    Class to build and install from Wheel files (PEP 427).
    rZsha256NFcCs8||_||_d|_tg|_dg|_dg|_tj�|_	|dkrRd|_
d|_|j|_
n�tj|�}|r�|jd�}|d|_
|djd	d
�|_|d|_|j|_
n�tjj|�\}}tj|�}|s�td|��|r�tjj|�|_	||_
|jd�}|d|_
|d|_|d|_|d
jd�|_|djd�|_|djd�|_dS)zB
        Initialise an instance using a (valid) filename.
        r)�none�anyNZdummyz0.1ZnmZvnr rZbnzInvalid name or filename: %rrr!Zbi�ar)�signZ
should_verify�buildver�PYVER�pyver�abi�archr6�getcwd�dirname�name�version�filenameZ	_filename�NAME_VERSION_RE�match�	groupdictr5rF�split�FILENAME_REr�abspath)r;rcrY�verifyr&�infor`r/r/r0r<�sB











zWheel.__init__cCs^|jrd|j}nd}dj|j�}dj|j�}dj|j�}|jjdd�}d|j|||||fS)zJ
        Build and return a filename from the various components.
        rr)r!r z%s-%s%s-%s-%s-%s.whl)rZr-r\r]r^rbr5ra)r;rZr\r]r^rbr/r/r0rc�s
zWheel.filenamecCstjj|j|j�}tjj|�S)N)r6rFr-r`rc�isfile)r;rFr/r/r0�exists�szWheel.existsccs@x:|jD]0}x*|jD] }x|jD]}|||fVq WqWqWdS)N)r\r]r^)r;r\r]r^r/r/r0�tags�sz
Wheel.tagscCs�tjj|j|j�}d|j|jf}d|}tjd�}t	|d���}|j
|�}|djdd�}tdd	�|D��}|d
krzd
}	nt
}	y8tj||	�}
|j|
��}||�}t|d�}
WdQRXWn tk
r�td|	��YnXWdQRX|
S)Nz%s-%sz%s.dist-infozutf-8�rz
Wheel-Versionr!rcSsg|]}t|��qSr/)�int)�.0�ir/r/r0�
<listcomp>�sz"Wheel.metadata.<locals>.<listcomp>ZMETADATA)Zfileobjz$Invalid wheel, because %s is missing)rr)r6rFr-r`rcrarb�codecs�	getreaderr�get_wheel_metadatarg�tupler�	posixpath�openr
�KeyError�
ValueError)r;r>�name_ver�info_dir�wrapper�zf�wheel_metadata�wv�file_version�fn�metadata_filename�bf�wfrGr/r/r0�metadata�s(

zWheel.metadatac	CsXd|j|jf}d|}tj|d�}|j|��}tjd�|�}t|�}WdQRXt|�S)Nz%s-%sz%s.dist-info�WHEELzutf-8)	rarbrxr-ryrtrur�dict)r;rr|r}r�r�r��messager/r/r0rv�szWheel.get_wheel_metadatac	Cs6tjj|j|j�}t|d��}|j|�}WdQRX|S)Nro)r6rFr-r`rcrrv)r;r>rrGr/r/r0rk�sz
Wheel.infocCs�tj|�}|r||j�}|d|�||d�}}d|j�krBt}nt}tj|�}|rfd|j�d
}nd}||}||}nT|jd�}|jd�}	|dks�||	kr�d}
n|||d�d	kr�d	}
nd}
t|
|}|S)Nspythonw� r��
�
rrs
���)	�
SHEBANG_REre�end�lower�SHEBANG_PYTHONW�SHEBANG_PYTHON�SHEBANG_DETAIL_RE�groups�find)r;�datar&r�ZshebangZdata_after_shebangZshebang_python�argsZcrZlfZtermr/r/r0�process_shebang�s,




zWheel.process_shebangcCsh|dkr|j}ytt|�}Wn tk
r<td|��YnX||�j�}tj|�jd�j	d�}||fS)NzUnsupported hash algorithm: %r�=�ascii)
�	hash_kind�getattr�hashlib�AttributeErrorr�digest�base64Zurlsafe_b64encode�rstrip�decode)r;r�r��hasherrGr/r/r0�get_hashszWheel.get_hashc
Csbt|�}ttjj||��}|j|ddf�|j�t|��}x|D]}|j|�qBWWdQRXdS)Nr))	�list�to_posixr6rF�relpathr,�sortrZwriterow)r;�recordsZrecord_path�base�p�writer�rowr/r/r0�write_record's

zWheel.write_recordcCs�g}|\}}tt|j�}xX|D]P\}}	t|	d��}
|
j�}WdQRXd|j|�}tjj|	�}
|j	|||
f�qWtjj
|d�}	|j||	|�ttjj
|d��}|j	||	f�dS)N�rbz%s=%s�RECORD)
r�r�r�ry�readr�r6rF�getsizer,r-r�r�)r;rk�libdir�
archive_pathsr��distinfor}r��apr��fr�r��sizer/r/r0�
write_records0szWheel.write_recordscCsJt|dtj��2}x*|D]"\}}tjd||�|j||�qWWdQRXdS)N�wzWrote %s to %s in wheel)r�zipfileZZIP_DEFLATED�logger�debug�write)r;r>r�rr�r�r/r/r0�	build_zip@szWheel.build_zipc!s�|dkri}tt�fdd�d%��d}|dkrFd}tg}tg}tg}nd}tg}d	g}d
g}|jd|�|_|jd|�|_|jd
|�|_	�|}	d|j
|jf}
d|
}d|
}g}
x�d&D]�}|�kr�q��|}tj
j|�r�x�tj|�D]�\}}}x�|D]�}ttj
j||��}tj
j||�}ttj
j|||��}|
j||f�|dk�r�|jd��r�t|d��}|j�}WdQRX|j|�}t|d��}|j|�WdQRX�q�Wq�Wq�W|	}d}x�tj|�D]�\}}}||k�r"x@t|�D]4\}}t|�}|jd��r�tj
j||�}||=P�q�W|�s"td��xP|D]H}t|�jd'��r@�q(tj
j||�}ttj
j||��}|
j||f��q(W�q�Wtj|�}xJ|D]B}|d(k�r�ttj
j||��}ttj
j||��}|
j||f��q�Wd|�p�|jd td!|g}x*|jD] \}}}|jd"|||f��q�Wtj
j|d�}t|d#��}|jd$j|��WdQRXttj
j|d��}|
j||f�|j ||f|	|
�tj
j|j!|j"�} |j#| |
�| S))z�
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Ncs|�kS)Nr/)r3)�pathsr/r0r4NszWheel.build.<locals>.<lambda>�purelib�platlibrZfalse�truerVrWr\r]r^z%s-%sz%s.dataz%s.dist-infor��headers�scriptsz.exer��wbz
.dist-infoz(.dist-info directory expected, not found�.pyc�.pyor��	INSTALLER�SHAREDr�zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz
Tag: %s-%s-%sr��
)r�r�)r�r�r�)r�r�)r�r�r�r�)$r�r�IMPVER�ABI�ARCHr[�getr\r]r^rarbr6rF�isdir�walkr	r-r�r�r,�endswithryr�r�r��	enumerate�AssertionError�listdir�
wheel_versionrrnr�r`rcr�)!r;r�rnr�ZlibkeyZis_pureZ
default_pyverZdefault_abiZdefault_archr�r|�data_dirr}r��keyrF�root�dirs�filesr�r��rpr�r�r�r�rr�dnr�r\r]r^r>r/)r�r0�buildFs�


"





zWheel.buildcBIKs`|j}|jd�}|jdd�}tjj|j|j�}d|j|jf}d|}	d|}
t	j|
t
�}t	j|
d�}t	j|
d�}
tjd	�}t
|d
����}|j|��}||�}t|�}WdQRX|djd
d�}tdd�|D��}||jkr�|r�||j|�|ddk�r|d}n|d}i}|j|
��<}t|d��&}x|D]}|d}|||<�q.WWdQRXWdQRXt	j|	d�}t	j|
d�}t	j|	dd�}t|d�}d|_tj}g} tj�}!|!|_d|_�z��y^�x�|j�D�]�}"|"j}#t|#t��r�|#}$n
|#jd	�}$|$j d��r��q�||$}|d�r0t!|"j"�|dk�r0t#d|$��|d�r�|djdd�\}%}&|j|#��}|j$�}'WdQRX|j%|'|%�\}(})|)|&k�r�t#d|#��|�r�|$j&||f��r�t'j(d |$��q�|$j&|��o�|$j d!�}*|$j&|��r|$jd"d�\}(}+},tjj||+t)|,��}-n$|$||
fk�r�q�tjj|t)|$��}-|*�s|j|#��}|j*||-�WdQRX| j+|-�|�r�|d�r�t|-d#��4}|j$�}'|j%|'|%�\}(}.|.|)k�r�t#d$|-��WdQRX|�rx|-j d%��rxy|j,|-�}/| j+|/�Wn$t-k
�rt'j.d&dd'�YnXnttjj/t)|#��}0tjj|!|0�}1|j|#��}|j*||1�WdQRXtjj|-�\}2}0|2|_|j0|0�}3|j1|3�| j2|3��q�W|�r�t'j(d(�d}4�n~d}5|j3d}|d)k�r~t	j|
d*�}6y�|j|6��}t4|�}7WdQRXi}5xxd<D]p}8d-|8}9|9|7k�r�i|5d.|8<}:xF|7|9j5�D]6};d/|;j6|;j7f}<|;j8�rB|<d0|;j87}<|<|:|;j<�qW�q�WWn t-k
�rzt'j.d1�YnXndyB|j|��.}||�}t9j:|�jd2�}5|5�r�|5jd3�}5WdQRXWn t-k
�r�t'j.d4�YnX|5�r�|5jd5i�}=|5jd6i�}>|=�s|>�r�|jdd�}?tjj;|?��s.t<d7��|?|_x6|=j=�D]*\}9};d8|9|;f}@|j0|@�}3|j1|3��q>W|>�r�d,di}Ax8|>j=�D],\}9};d8|9|;f}@|j0|@|A�}3|j1|3��q�Wtjj||
�}t>|�}4t?|�}|d=|d=||d9<|4j@||�}|�r| j+|�|4jA| |d:|�|4St-k
�r@t'jBd;�|jC��YnXWdtDjE|!�XWdQRXdS)=a�
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written.

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        �warner�lib_onlyFz%s-%sz%s.dataz%s.dist-infor�r�zutf-8roNz
Wheel-Versionr!rcSsg|]}t|��qSr/)rp)rqrrr/r/r0rs�sz!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibr�r�r�)�streamrr)r�)�dry_runTz/RECORD.jwsrzsize mismatch for %s�=zdigest mismatch for %szlib_only: skipping %sz.exer2r�zdigest mismatch on write for %sz.pyzByte-compilation failed)�exc_infozlib_only: returning Nonez1.0zentry_points.txt�console�guiz
%s_scriptszwrap_%sz%s:%sz %szAUnable to read legacy script metadata, so cannot generate scriptsr?zpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZwrap_consoleZwrap_guizValid script path not specifiedz%s = %s�lib�prefixzinstallation failed.)r�r�)Fr�r�r6rFr-r`rcrarbrxrrtrurryrrgrwr�rr�recordrI�dont_write_bytecode�tempfileZmkdtempZ
source_dirZ
target_dir�infolist�
isinstancer
r�r��str�	file_sizerr�r��
startswithr�r�rZcopy_streamr,Zbyte_compile�	ExceptionZwarning�basenameZmakeZset_executable_mode�extendrkr�valuesr��suffix�flags�json�loadr�r{�itemsrr�Zwrite_shared_locationsZwrite_installed_filesZ	exceptionZrollback�shutilZrmtree)Br;r�Zmaker�kwargsr�r�r�r>r|r�r}�
metadata_name�wheel_metadata_name�record_namer~r�bwfr�r�r�r�r�r�r��readerr�r�Zdata_pfxZinfo_pfxZ
script_pfxZfileopZbcZoutfiles�workdir�zinfo�arcname�	u_arcname�kind�valuer�r r�Z	is_script�wherer�ZoutfileZ	newdigestZpycr�Zworknamer��	filenamesZdistZcommandsZepZepdatar�rBr$rC�sZconsole_scriptsZgui_scriptsZ
script_dirZscriptZoptionsr/r/r0�install�sB



"
















z
Wheel.installcCs4tdkr0tjjt�td�tjdd��}t|�atS)Nzdylib-cache�)	�cacher6rFr-rr�rIrbr)r;r�r/r/r0�_get_dylib_cache�s
zWheel._get_dylib_cachecCsltjj|j|j�}d|j|jf}d|}tj|d�}tj	d�}g}t
|d���}y�|j|���}||�}	tj
|	�}
|j�}|j|�}tjj|j|�}
tjj|
�s�tj|
�x�|
j�D]�\}}tjj|
t|��}tjj|�s�d}n6tj|�j}tjj|�}|j|�}tj|j�}||k}|�r(|j||
�|j||f�q�WWdQRXWntk
�r\YnXWdQRX|S)Nz%s-%sz%s.dist-infoZ
EXTENSIONSzutf-8roT)r6rFr-r`rcrarbrxrtrurryr�r�rZ
prefix_to_dirr�r��makedirsr�rrm�stat�st_mtime�datetimeZ
fromtimestampZgetinfoZ	date_time�extractr,rz)r;r>r|r}rr~rGrr�r�r?rr�Z
cache_baserar��destrZ	file_timerkZ
wheel_timer/r/r0�_get_extensions�s>




 zWheel._get_extensionscCst|�S)zM
        Determine if a wheel is compatible with the running system.
        )�
is_compatible)r;r/r/r0r�szWheel.is_compatiblecCsdS)zP
        Determine if a wheel is asserted as mountable by its metadata.
        Tr/)r;r/r/r0�is_mountable�szWheel.is_mountablecCs�tjjtjj|j|j��}|j�s2d|}t|��|j�sJd|}t|��|t	jkrbt
jd|�nN|rtt	jj|�nt	jj
d|�|j�}|r�tt	jkr�t	jjt�tj||�dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)r6rFrir-r`rcrrrrIr�r�r,�insertr�_hook�	meta_pathr@)r;r,r>�msgr?r/r/r0�mount�s"

zWheel.mountcCsrtjjtjj|j|j��}|tjkr2tjd|�n<tjj	|�|t
jkrRt
j	|�t
jsnt
tjkrntjj	t
�dS)Nz%s not in path)
r6rFrir-r`rcrIr�r�rDrr9r)r;r>r/r/r0�unmount�s



z
Wheel.unmountc'Cstjj|j|j�}d|j|jf}d|}d|}tj|t�}tj|d�}tj|d�}t	j
d�}t|d����}	|	j|��}
||
�}t
|�}WdQRX|djd	d
�}
tdd�|
D��}i}|	j|��:}t|d
��$}x|D]}|d}|||<q�WWdQRXWdQRXx�|	j�D]�}|j}t|t��r*|}n
|jd�}d|k�rJtd|��|jd��rZ�q||}|d�r�t|j�|dk�r�td|��|d
�r|d
jdd
�\}}|	j|��}|j�}WdQRX|j||�\}}||k�rtd|���qWWdQRXdS)Nz%s-%sz%s.dataz%s.dist-infor�r�zutf-8roz
Wheel-Versionr!rcSsg|]}t|��qSr/)rp)rqrrr/r/r0rs�sz Wheel.verify.<locals>.<listcomp>)r�rz..zinvalid entry in wheel: %rz/RECORD.jwsrzsize mismatch for %sr�zdigest mismatch for %s)r6rFr-r`rcrarbrxrrtrurryrrgrwrr�r�r
r�rr�r�r�r�r�)r;r>r|r�r}r�r�rr~rrr�r�r�r�r�r�rr�r�rrrrrr�r r�r/r/r0rj�sT

 



zWheel.verifycKs�dd�}dd�}tjj|j|j�}d|j|jf}d|}tj|d�}	t����}
t	|d���}i}xt|j
�D]h}
|
j}t|t�r�|}n
|j
d	�}||	kr�qjd
|kr�td|��|j|
|
�tjj|
t|��}|||<qjWWdQRX|||�\}}||f|�}|�r�|||�\}}|�r(||k�r(|||�|dk�rRtjd
d|
d�\}}tj|�n*tjj|��sltd|��tjj||j�}t|j��}tjj|
|�}||f}|j||
|�|j||�|dk�r�tj||�WdQRX|S)a�
        Update the contents of a wheel in a generic way. The modifier should
        be a callable which expects a dictionary argument: its keys are
        archive-entry paths, and its values are absolute filesystem paths
        where the contents the corresponding archive entries can be found. The
        modifier is free to change the contents of the files pointed to, add
        new entries and remove entries, before returning. This method will
        extract the entire contents of the wheel to a temporary location, call
        the modifier, and then use the passed (and possibly updated)
        dictionary to write a new wheel. If ``dest_dir`` is specified, the new
        wheel is written there -- otherwise, the original wheel is overwritten.

        The modifier should return True if it updated the wheel, else False.
        This method returns the same value the modifier returns.
        cSsHd}}d|tf}||kr$d|}||kr@||}t|d�j}||fS)Nz%s/%sz%s/PKG-INFO)rF)rr
rb)�path_mapr}rbrFr�r/r/r0�get_version1sz!Wheel.update.<locals>.get_versioncSs�d}y|t|�}|jd�}|dkr*d|}nTdd�||dd�jd�D�}|dd7<d|d|�djd	d
�|D��f}Wn tk
r�tjd|�YnX|r�t|d�}||_|j	t
�}|j||d
�tjd||�dS)Nrrz%s+1cSsg|]}t|��qSr/)rp)rqrr/r/r0rsCsz8Wheel.update.<locals>.update_version.<locals>.<listcomp>rr!z%s+%scss|]}t|�VqdS)N)r�)rqrrr/r/r0�	<genexpr>Fsz7Wheel.update.<locals>.update_version.<locals>.<genexpr>z0Cannot update non-compliant (PEP-440) version %r)rF)rF�legacyzVersion updated from %r to %rr�)rr�rgr-rr�r�r
rbr�rr�)rbrF�updatedrCrrr.Zmdr"r/r/r0�update_version;s(

 
z$Wheel.update.<locals>.update_versionz%s-%sz%s.dist-infor�rozutf-8z..zinvalid entry in wheel: %rNz.whlz
wheel-update-)r�r��dirzNot a directory: %r)r6rFr-r`rcrarbrxrrr�r�r
r�rrrr�Zmkstemp�closer�r�r�r�r�r�Zcopyfile)r;ZmodifierZdest_dirr�r r$r>r|r}rrrrrrrrFZoriginal_versionr ZmodifiedZcurrent_version�fd�newpathr�r�rkr/r/r0r= sX






zWheel.update)rr)NFF)N)NN)F)N)rRrSrT�__doc__r�r�r<�propertyrcrmrnrr�rvrkr�r�r�r�r�r�rrrrrrrrjr=r/r/r/r0rU�s4
)	
	
he	"
6rUcCs�tg}td}x6ttjdddd�D]}|jdj|t|�g��q&Wg}x6tj�D]*\}}}|j	d�rT|j|j
dd�d�qTW|j�tdkr�|j
dt�|jd�g}tg}tjdk�r�tjd	t�}|�r�|j�\}	}}}
t|�}|
g}|
dk�r|jd�|
dk�r|jd�|
dk�r*|jd�|
dk�r>|jd�|
dk�rR|jd�xL|dk�r�x2|D]*}d|	|||f}
|
tk�rd|j|
��qdW|d8}�qTWx<|D]4}x,|D]$}
|jdjt|df�||
f��q�W�q�WxXt|�D]L\}}|jdjt|f�ddf�|dk�r�|jdjt|df�ddf��q�WxXt|�D]L\}}|jdjd|f�ddf�|dk�rB|jdjd|df�ddf��qBWt|�S)zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    rrr)z.abir!rrV�darwinz(\w+)_(\d+)_(\d+)_(\w+)$�i386�ppcZfat�x86_64Zfat3�ppc64Zfat64�intelZ	universalz%s_%s_%s_%srWrr�r�)r,r-)r,r-r.)r/r.)r,r.)r,r.r0r-r/)r*�rangerI�version_infor,r-r�rLZget_suffixesr�rgr�r�rr��platform�rerer�rp�
IMP_PREFIXr��set)Zversions�major�minorZabisr�r rGZarchesr&rar^Zmatchesrerr]rrrbr/r/r0�compatible_tags�s`















*
$
$r9cCs^t|t�st|�}d}|dkr"t}x6|D].\}}}||jkr(||jkr(||jkr(d}Pq(W|S)NFT)r�rU�COMPATIBLE_TAGSr\r]r^)ZwheelrnrGZverr]r^r/r/r0r�s
r)N)SZ
__future__rr�rtrZdistutils.utilZ	distutilsZemailrr�rLr�Zloggingr6rxr4r�rIr�r�r)rr�compatrrr	r
rZdatabaserr�r
r�utilrrrrrrrrrrbrrZ	getLoggerrRr�r�hasattrr5r3r�r+r*r2r[r��get_platformr5r�r�r1�compile�
IGNORECASE�VERBOSErhrdr�r�r�r�r7r��objectr8rrUr9r:rr/r/r/r0�<module>s�,


	


#>
© 2025 GrazzMean