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: 3.16.129.167
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : wheel.cpython-312.pyc
�


f������ddlmZddlZddlZddlZddlmZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlmZmZmZdd	l m!Z!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\e/�Z0da1e2ed�rdZ3n2ejhjkd
�rdZ3nejhdk(rdZ3ndZ3ejld�Z7e7sdejpddzZ7de7zZ9e3e7zZ:e*�jwdd�jwdd�Z<ejld�Z=e=r6e=jkd�r%e=jwdd�j}d�dZ=nd�Z?e?�Z=[?ej�dej�ej�z�ZCej�dej�ej�z�ZDej�d�ZEej�d�ZFd ZGd!ZHe
j�d"k(rd#�ZJnd$�ZJejpdd%krddlKZKn
dZKddlLZMddlNZMd&�ZOd'�ZPGd(�d)eQ�ZReR�ZSGd*�d+eQ�ZTd,�ZUd-�ZVeV�ZW[Vd/d.�ZXy)0�)�unicode_literalsN)�message_from_file�)�__version__�DistlibException)�	sysconfig�ZipFile�fsdecode�	text_type�filter)�InstalledDistribution)�Metadata�WHEEL_METADATA_FILENAME�LEGACY_METADATA_FILENAME)
�FileOperator�convert_path�	CSVReader�	CSVWriter�Cache�cached_property�get_cache_base�read_exports�tempdir�get_platform)�NormalizedVersion�UnsupportedVersionError�pypy_version_info�pp�java�jy�cli�ip�cp�py_version_nodotz%s%s��py�-�_�.�SOABIzcpython-c��dtg}tjd�r|jd�tdk(r�t
jdd}|dkrqtjd�}|�d}|r|jd�|d	kr@tjd
�}|dk(s|�$t
jdk(r|jd
�dj|�S)Nr#�Py_DEBUG�dr%)���
WITH_PYMALLOCT�m)r.r.�Py_UNICODE_SIZE�i���u�)	�
VER_SUFFIXr�get_config_var�append�
IMP_PREFIX�sys�version_info�
maxunicode�join)�parts�vi�wpm�uss    �D/usr/local/python-3.12/lib/python3.12/site-packages/distlib/wheel.py�_derive_abirC;s����z�"���#�#�J�/��L�L�������!�!�"�1�%�B��F�{��.�.��?���;��C���L�L��%���;�"�1�1�2C�D�B��Q�w�2�:�#�.�.�H�2L����S�)��w�w�u�~��zz
(?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�/c��|S�N���os rB�<lambda>rKhs���rDc�B�|jtjd�S)NrE)�replace�os�seprIs rBrKrKjs�����2�6�6�3�/�rDr.c��tr%tj�D�cgc]}|d��	c}StjjScc}w)Nr)�imp�get_suffixes�	importlib�	machinery�EXTENSION_SUFFIXES)�ss rB�
_get_suffixesrWts:��
�!�.�.�0�1���!��1�1��"�"�5�5�5��2s�Ac��trtj||�Stjj	||�}tjj|�}|tj|<|jj|�|SrG)
rQ�load_dynamicrS�util�spec_from_file_location�module_from_specr:�modules�loader�exec_module)�name�path�spec�modules    rB�
_load_dynamicrd{sg��
�����d�+�+��~�~�5�5�d�D�A�����0�0��6��"����D��������'��
rDc�,�eZdZd�Zd�Zd�Zdd�Zd�Zy)�Mounterc� �i|_i|_yrG)�
impure_wheels�libs��selfs rB�__init__zMounter.__init__�s�������	rDc�X�||j|<|jj|�yrG)rhri�update)rk�pathname�
extensionss   rB�addzMounter.add�s$��'1����8�$��	�	����$rDc��|jj|�}|D]!\}}||jvs�|j|=�#yrG)rh�popri)rkrorp�k�vs     rB�removezMounter.remove�sA���'�'�+�+�H�5�
��	!�D�A�q��D�I�I�~��I�I�a�L�	!rDNc�.�||jvr|}|Sd}|SrG)ri)rk�fullnamera�results    rB�find_modulezMounter.find_module�s&���t�y�y� ��F��
��F��
rDc� �|tjvrtj|}|S||jvrtd|z��t	||j|�}||_|j
dd�}t|�dkDr
|d|_|S)Nzunable to find extension for %sr)rr)	r:r]ri�ImportErrorrd�
__loader__�rsplit�len�__package__)rkrxryr>s    rB�load_modulezMounter.load_module�s����s�{�{�"��[�[��*�F��
��t�y�y�(�!�"C�h�"N�O�O�"�8�T�Y�Y�x�-@�A�F� $�F���O�O�C��+�E��5�z�A�~�%*�1�X��"��
rDrG)�__name__�
__module__�__qualname__rlrqrvrzr�rHrDrBrfrf�s���%�!��rDrfc���eZdZdZdZdZdd�Zed��Zed��Z	ed��Z
ed	��Zd
�Z
ed��Zd�Zdd
�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Zdd�Zy) �Wheelz@
    Class to build and install from Wheel files (PEP 427).
    )rr�sha256Nc��||_||_d|_tg|_dg|_dg|_tj�|_	|� d|_
d|_|j|_
ytj|�}|rQ|j!d�}|d|_
|dj#d	d
�|_|d|_|j|_
ytj$j'|�\}}t(j|�}|st+d|z��|r$tj$j-|�|_	||_
|j!d�}|d|_
|d|_|d|_|d
j'd�|_|dj'd�|_|dj'd�|_y)zB
        Initialise an instance using a (valid) filename.
        r5�none�anyN�dummyz0.1�nm�vnr(r'�bnzInvalid name or filename: %rr&r)�bi�ar)�sign�
should_verify�buildver�PYVER�pyver�abi�archrN�getcwd�dirnamer`�version�filename�	_filename�NAME_VERSION_RE�match�	groupdictrMra�split�FILENAME_REr�abspath)rkr�r��verifyr1�infor�s       rBrlzWheel.__init__�s�����	�#�����
��W��
��8����G��	��y�y�{������D�I� �D�L�!�]�]�D�N��%�%�h�/�A���{�{�2��� ��J��	�#�D�z�1�1�#�s�;��� $�T�
��
�!%�����$&�G�G�M�M�(�$;�!����%�%�h�/���*�,:�<D�,E�F�F��#%�7�7�?�?�7�#;�D�L�!)����{�{�2��� ��J��	�#�D�z��� $�T�
��
�!�$�Z�-�-�c�2��
���:�+�+�C�0��� ��J�,�,�S�1��	rDc�R�|jrd|jz}nd}dj|j�}dj|j�}dj|j�}|j
j
dd�}|j�d|�|�d|�d|�d|�d�S)zJ
        Build and return a filename from the various components.
        r'r5r)r(�.whl)r�r=r�r�r�r�rMr`)rkr�r�r�r�r�s      rBr�zWheel.filename�s���
�=�=��T�]�]�*�H��H�������$���h�h�t�x�x� ���x�x��	�	�"���,�,�&�&�s�C�0��)-���G�X�u�),�d�4�	4rDc��tjj|j|j�}tjj|�SrG)rNrar=r�r��isfile)rkras  rB�existszWheel.exists�s1���w�w�|�|�D�L�L�$�-�-�8���w�w�~�~�d�#�#rDc#�K�|jD]+}|jD]}|jD]	}|||f�����-y�wrG)r�r�r�)rkr�r�r�s    rB�tagsz
Wheel.tags�sL�����Z�Z�	+�E��x�x�
+�� �I�I�+�D���d�*�*�+�
+�	+�s�<>c��tjj|j|j�}|j
�d|j��}d|z}tjd�}t|d�5}|j|�ttg}d}|D]U}	tj||�}	|j|	�5}
||
�}t|��}|r	ddd�n	ddd��W|st#ddj|�z��	ddd�|S#1swY�5xYw#t $rY��wxYw#1swYSxYw)Nr'�%s.dist-info�utf-8�r)�fileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rNrar=r�r�r`r��codecs�	getreaderr	�get_wheel_metadatarr�	posixpath�openr�KeyError�
ValueError)rkro�name_ver�info_dir�wrapper�zf�fnsry�fn�metadata_filename�bf�wfs            rB�metadatazWheel.metadata�sK���7�7�<�<����d�m�m�<��"�i�i����6��!�H�,���"�"�7�+��
�X�s�
#�	K�r��#�#�B�'�+�,D�E�C��F��	
���(1���x��(D�%����!2�3�"�r�$�R�[��!)�"�!5��!�!�	"�"�"�"��	
�� �"9�;?�9�9�S�>�"J�K�K��+	K�0�
�"�"��
 �����'	K�0�
�sT�6%D5�'D&�D�D&�#D5�&D&�.!D5�D#�D&�&	D2�/D5�1D2�2D5�5D?c�0�|j�d|j��}d|z}tj|d�}|j	|�5}tjd�|�}t|�}ddd�t|�S#1swYt�SxYw)Nr'r��WHEELr�)	r`r�r�r=r�r�r�r�dict)rkr�r�r�r�r�r��messages        rBr�zWheel.get_wheel_metadatas���"�i�i����6��!�H�,��%�N�N�8�W�=��
�W�W�&�
'�	,�2�*��!�!�'�*�2�.�B�'��+�G�	,��G�}��	,��G�}��s�'B�Bc���tjj|j|j�}t|d�5}|j
|�}ddd�|S#1swYSxYw)Nr�)rNrar=r�r�r	r�)rkror�rys    rBr�z
Wheel.info&sT���7�7�<�<����d�m�m�<��
�X�s�
#�	1�r��,�,�R�0�F�	1��
�	1��
�s�A�A'c��tj|�}|ru|j�}|d|||d}}d|j�vrt}nt
}tj|�}|rd|j�dz}nd}||z}||z}|S|jd�}|jd�}	|dks||	kDrd}
n|||dzd	k(rd	}
nd}
t
|
z|z}|S)
Nspythonw� ���rD�
�
rr%s
)	�
SHEBANG_REr��end�lower�SHEBANG_PYTHONW�SHEBANG_PYTHON�SHEBANG_DETAIL_RE�groups�find)rk�datar1r��shebang�data_after_shebang�shebang_python�args�cr�lf�terms           rB�process_shebangzWheel.process_shebang-s������T�"����%�%�'�C�*.�t��*�d�3�4�j�'�G��W�]�]�_�,�!0��!/��!�'�'��0�A���a�h�h�j��n�,����$�t�+�G��/�/�D������5�!�B����5�!�B��A�v��b������2��6�?�g�-�"�D� �D�!�D�(�4�/�D��rDc��|�|j}	tt|�}||�j�}t
j|�jd�jd�}||fS#t$rt	d|z��wxYw)NzUnsupported hash algorithm: %r�=�ascii)
�	hash_kind�getattr�hashlib�AttributeErrorr�digest�base64�urlsafe_b64encode�rstrip�decode)rkr�r��hasherrys     rB�get_hashzWheel.get_hashKs��������I�	.��W�i�0�F����$�$�&���)�)�&�1�8�8��>�E�E�g�N���&� � ���	.�"�#C�#,�$-�.�
.�	.�s�A-�-Bc��t|�}|j|ddf�t|�5}|D]}|j|��	ddd�y#1swYyxYw)Nr5)�listr8r�writerow)rk�records�record_path�archive_record_path�writer�rows      rB�write_recordzWheel.write_recordWsY���w�-�����+�R��4�5�
�{�
#�	%�v��
%������$�
%�	%�	%�	%�s�A�Ac���g}|\}}|D]q\}}t|d�5}	|	j�}
ddd�d|j
�z}tjj|�}|j
|||f��stjj|d�}ttjj|d��}|j|||�|j
||f�y#1swY��xYw)N�rbz%s=%s�RECORD)
r��readr�rNra�getsizer8r=�to_posixr�)
rkr��libdir�
archive_pathsr��distinfor��ap�p�fr�r��sizes
             rB�
write_recordszWheel.write_records^s�����!���(�"�	/�E�B���a���
 �!��v�v�x��
 ��t�}�}�T�2�2�F��7�7�?�?�1�%�D��N�N�B���-�.�	/�
�G�G�L�L��8�,��
�b�g�g�l�l�8�X�6�
7�����'�1�b�)����b�!�W�%�
 �
 �s�C.�.C7	c���t|dtj�5}|D].\}}tj	d||�|j||��0	ddd�y#1swYyxYw)N�wzWrote %s to %s in wheel)r	�zipfile�ZIP_DEFLATED�logger�debug�write)rkror�r�r�r�s      rB�	build_zipzWheel.build_zipns\��
�X�s�G�$8�$8�
9�	 �R�&�
 ���A����6��2�>�����B��
 �	 �	 �	 �s�4A�A#c
�
��|�i}tt�fd�d��d}|dk(rd}tg}tg}tg}nd}t
g}dg}d	g}|j
d
|�|_|j
d|�|_|j
d|�|_	�|}	|j�d
|j��}
d|
z}d|
z}g}
dD�]N}|�vr�	�|}tjj|�s�.tj|�D�]\}}}|D]�}t!tjj#||��}tjj%||�}t'tjj#|||��}|
j)||f�|dk(s��|j+d�r��t-|d�5}|j/�}ddd�|j1�}t-|d�5}|j3|�ddd�������Q|	}d}tj|�D]�\}}}||k(r]t5|�D]F\}}t!|�}|j+d�s�#tjj#||�}||=n|sJd��|D]y}t!|�j+d�r�tjj#||�}t'tjj%||��}|
j)||f��{��tj6|�}|D]l}|dvs�t!tjj#||��}t'tjj#||��}|
j)||f��nd|xs|j8zdt:zd|zg}|j<D] \}}}|j)d|�d
|�d
|����"tjj#|d�}t-|d�5}|j3dj#|��ddd�t'tjj#|d��}|
j)||f�d �} t?|
| �!�}
|jA||f|	|
�tjj#|jB|jD�}!|jG|!|
�|!S#1swY��xYw#1swY���xYw#1swY��xYw)"z�
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Nc���|�vSrGrH)rJ�pathss �rBrKzWheel.build.<locals>.<lambda>|s���q�E�z�rD)�purelib�platlibrr�false�truer�r�r�r�r�r'�%s.datar�)r��headers�scriptsr�.exer��wb�
.dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r��	INSTALLER�SHAREDr�zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: r�r�
c�H�|d}|jd�}d|vr|dz
}||fS)NrrEri')�count)�tr��ns   rB�sorterzWheel.build.<locals>.sorter�s2���1��B�����
�A��r�!��U�
���r�7�NrD)�key)$r�r�IMPVER�ABI�ARCHr��getr�r�r�r`r�rNra�isdir�walkr
r=�relpathr�r8�endswithr�r�r�r�	enumerate�listdir�
wheel_versionrr��sortedrr�r�r	)"rkrr�r*�libkey�is_pure�
default_pyver�default_abi�default_archr�r��data_dirr�r�rra�root�dirs�filesr�r��rpr�r�r�r��i�dn�wheel_metadatar�r�r�rros" `                                rB�buildzWheel.buildts����
�<��D��f�1�3I�J�K�A�N���Y���G�#�H�M��%�K� �6�L��G�"�G�M�!�(�K�!�7�L��X�X�g�}�5��
��8�8�E�;�/����H�H�V�\�2��	��v���"�i�i����6���x�'��!�H�,���
�2�	.�C��%�����:�D��w�w�}�}�T�"�)+�����.�%�D�$��#�
.��$�R�W�W�\�\�$��%;�<���W�W�_�_�Q��5��%�b�g�g�l�l�8�S�"�&E�F��%�,�,�b�!�W�5��)�+�A�J�J�v�4F�!%�a���0�!�'(�v�v�x��0�#'�#7�#7��#=�D�!%�a���.�!� !����
�.�.�
.�.�	.�(����!#�����	.��D�$���t�|�'�t�_��E�A�r�!�"��B��{�{�<�0�#%�7�7�<�<��b�#9�� ��G��� �K�!K�K�x��
.���B�<�(�(�)9�:���G�G�L�L��r�*���b�g�g�o�o�a��6�7���$�$�b�!�W�-�

.�	.�*�
�
�8�$���	.�B��C�C��R�W�W�\�\�(�B�7�8���b�g�g�l�l�8�R�8�9���$�$�b�!�W�-�		.�
#�m�&I�t�7I�7I�J�#�k�1�!�G�+�
��
!%�	�	�	H��E�3���!�!�U�C��"F�G�	H��G�G�L�L��7�+��
�!�S�\�	/�Q�
�G�G�D�I�I�n�-�.�	/�
�b�g�g�l�l�8�W�5�
6�����b�!�W�%�	��}�&�9�
�	
���H�h�/���G��7�7�<�<����d�m�m�<�����x��/���M0�0��.�.��V	/�	/�s$�:S'	�0S4	�!T�'S1
�4S>
�T
c�$�|jd�S)zl
        Determine whether an archive entry should be skipped when verifying
        or installing.
        )rEz/RECORD.jws)r')rk�arcnames  rB�
skip_entryzWheel.skip_entry�s����� 4�5�5rDc	��|j}|jd�}|jdd�}|jdd�}tjj	|j
|j�}|j�d|j��}	d|	z}
d|	z}tj|t�}tj|d�}
tj|d	�}tjd
�}t|d�5}|j|
�5}||�}t|�}ddd�d
j!dd�}t#|D�cgc]
}t%|���c}�}||j&k7r|r||j&|�|ddk(r|d}n|d}i}|j|�5}t)|��5}|D]}|d}|||<�	ddd�ddd�tj|
d�}tj|d�}tj|
dd�}t+|��} d| _t.j0}!g}"t3j4�}#|#|_d|_	|j;�D�]�}$|$j}%t=|%t>�r|%}&n|%jAd
�}&|jC|&�r�F||&}|dr)tE|$jF�|dk7rtId|&z��|drj|dj!dd�\}'}(|j|%�5}|jK�})ddd�|jM)|'�\}*}+|+|(k7rtId|%z��|r+|&jO||f�rtPjSd|&���|&jO|�xr|&jUd�},|&jO|�rC|&j!d d�\}*}-}.tjj	||-tW|.��}/n1|&|
|fvr���tjj	|tW|&��}/|,�s	|j|%�5}| jY||/�ddd�tjd!k(r&tjZ|/|$j\d"z	d#z�|"j_|/�|sS|drNt|/d$�5}|jK�})|jM|)'�\}*}0|0+k7rtId%|/z��	ddd�|!s���|/jUd&�s���	| ja|/|�'�}1|"j_|1����tjjgtW|%��}2tjj	|#|2�}3|j|%�5}| jY||3�ddd�tjj!|/�\}4}2|4|_|ji|2�}5| jk|5�|"jm|5����|rtPjSd*�d}6�n�d}7|jnd
}|d+k(r�tj|d,�}8	|j|8�5}tq|�}9ddd�i}7d-D]�}:d.|:z};|;9vs�
ix|7d/|:z<}<|9|;js�D]Y}=|=jt�d0|=jv��}>|=jxr!|>d1d2j	|=jx�zz
}>|>|<|=j<�[��nZ	|j|�5}||�}t{j||�jd4�}7|7r|7jd5�}7ddd�|7r�|7jd7i�}?|7jd8i�}@|?s@r�|jdd�}Atjj|A�st�d9��A|_|?j��D].\};}=|;�d:|=��}B|ji|B�}5| jk|5��0@rFd;di}C@j��D]/\};}=|;�d:|=��}B|ji|BC�}5| jk|5��1tjj	||�}t�|�}6t�|�}|d=|d=||d<<|6j�||�}|r|"j_|�|6j�|"|d=|�|6t�j�|#�cddd�S#1swY���xYwcc}w#1swY��DxYw#1swY��IxYw#1swY���xYw#1swY���xYw#1swY��GxYw#tb$rtPjed(d�)�Y���wxYw#1swY���xYw#1swY��
xYw#tb$rtPjed3�Y��GwxYw#1swY��UxYw#tb$rtPjed6�Y��ywxYw#tb$r'tPj�d>�| j���wxYw#t�j�|#�wxYw#1swYyxYw)?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. If kwarg ``bytecode_hashed_invalidation`` is True, written
        bytecode will try to use file-hash based invalidation (PEP-552) on
        supported interpreter versions (CPython 2.7+).

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        �warner�lib_onlyF�bytecode_hashed_invalidationr'rr�r�r�r�r�Nz
Wheel-Versionr)rzRoot-Is-Purelibrr
r��streamrr5r)�dry_runTr%�size mismatch for %s�=�digest mismatch for %szlib_only: skipping %srrE�posix�i�r�zdigest mismatch on write for %sz.py)�hashed_invalidationzByte-compilation failed)�exc_infozlib_only: returning Nonez1.0zentry_points.txt)�console�guiz
%s_scriptszwrap_%s�:z [%s]�,zAUnable to read legacy script metadata, so cannot generate scriptsrpzpython.commandsz8Unable to read JSON metadata, so cannot generate scripts�wrap_console�wrap_guizValid script path not specifiedz = rL�lib�prefixzinstallation failed.)JrCr#rNrar=r�r�r`r�r�rr�r�r	r�rr��tuple�intr*rr�recordr:�dont_write_bytecode�tempfile�mkdtemp�
source_dir�
target_dir�infolist�
isinstancerr�r<�str�	file_sizerr�r��
startswithrrr'r�copy_stream�chmod�
external_attrr8�byte_compile�	Exception�warning�basename�make�set_executable_mode�extendr�r�valuesrR�suffix�flags�json�loadr$r��itemsr
r��write_shared_locations�write_installed_files�shutil�rmtree�	exception�rollback)Drkr�maker�kwargsrCr>r?�bc_hashed_invalidationror�r1r��
metadata_name�wheel_metadata_name�record_namer�r��bwfr�r��wvr6�file_versionr�r�r��readerr�r��data_pfx�info_pfx�
script_pfx�fileop�bc�outfiles�workdir�zinfor;�	u_arcname�kind�valuer�r(r��	is_script�wherer5�outfile�	newdigest�pycr��worknamer7�	filenames�dist�commands�ep�epdatarrtr-rurV�console_scripts�gui_scripts�
script_dir�script�optionssD                                                                    rB�installz
Wheel.install�s�	��"�-�-�����H�%���:�:�j�%�0��!'���,J�,1�"3���7�7�<�<����d�m�m�<��"�i�i����6���x�'��!�H�,��!���x�1I�J�
�'�n�n�X�w�?���n�n�X�x�8���"�"�7�+��
�X�s�
#�L	'�r����,�-�
0���S�\��+�B�/��
0���)�/�/��Q�7�B� �"�!5�Q�#�a�&�!5�6�L��� 2� 2�2���t�)�)�<�8��(�)�V�3��y�)���y�)���G�����%�
)���b�)�)�V�%�)����F��%(���
�)�)�
)�!�~�~�h��3�H� �~�~�h��3�H�"����)�R�@�J�"�'�2�F� �F�M��,�,�,�B��H��&�&�(�G� '�E��#�E��c
'��[�[�]�M3�E�#�n�n�G�!�'�9�5�$+�	�$+�N�N�7�$;�	����y�1� �!�)�,�C��1�v�#�e�o�o�"6�#�a�&�"@�.�04�6?�0@�A�A��1�v�&)�!�f�l�l�3��&:���e��W�W�W�-�-��#%�7�7�9�D�-�$(�M�M�$��$=�	��6�!�U�?�"2�48�:A�4B�#C�C� �I�$8�$8�(�H�9M�$N����%<�i�H� �!*�!5�!5�j�!A�"D�)2�);�);�F�)C�%C��!�+�+�H�5�'0���s�A�'>���5�"�"$�'�'�,�,�u�U�|�\�"�=M�"N��%�)<�k�(J�J�$�"$�'�'�,�,�v�|�I�7N�"O��$��W�W�W�-�<��"�.�.�r�7�;�<��7�7�g�-��H�H�W�&+�&9�&9�R�&?�5�%H�J� ����0�&�3�q�6�!%�g�t�!4�K��')�w�w�y��/3�}�}�T�4�/H���9�#,��#6�*:�<@�BI�<J�+K�%K�$7�K��'�"2�"2�5�"9�	>�&,�&9�&9�$+�8N�':�'P��!)���� 4� �W�W�-�-�l�7�.C�D��#%�7�7�<�<���#<���W�W�W�-�=��"�.�.�r�8�<�=�"$�����w�!7���B�+-��(�$)�J�J�r�N�	��2�2�9�=� ���	�2�[M3�^��L�L�!;�<��D� $�H�#'�9�9�_�#=�L�#�u�,�&�^�^�H�6H�I��6�!#�����;��)5�c�):��;�')�H�'9�6��$0�3�$6��#$��;�DF�$F�H�Y��_�$=��-3�A�Y�-=�-=�-?�%6��78�x�x����,J��+,�7�7�,-��3�8�8�A�G�G�;L�1L�,L�A�45��!�&�&�	�	%6�	6�F�!#����!7�O�3�%,�S�\��+/�9�9�R�=�+<�+<�\�+J��#+�/7�|�|�<M�/N�H�	O� �*2�,�,�~�r�*J��&.�l�l�:�r�&B��*�k�).���9�b�)A�J�#%�7�7�=�=��#<�&0�2=�'>�!>�/9�E�,�(7�(=�(=�(?�F���1�67��);��,1�J�J�v�,>�	� &� :� :�9� E�F�
 +�+0�$�-��,7�,=�,=�,?�!J�D�A�q�:;�Q�-?�F�05�
�
�6�7�0K�I�$*�$>�$>�y�$I�!J�
�����V�X�6�A�0��3�D�!��K�E��i�(��i�(�#)�E�%�L��3�3�E�7�C�A�� ����*��.�.�x��x��/6�8���
�
�g�&�YL	'�L	'�
0�
0��"6�)�)��
)�
)��R-�-��,<�<��K�K��$-�>�!'���/H�8<�!/�!>�>��=�=��0;�;�� )�6�"�N�N�,5�6�6��O�O��
 )�F�"�N�N�,E�F�F��P�
�� � �!7�8����!��
��
�
�
�g�&��YL	'�L	'�s��h9�d�(&h9�d
� Ah9�1
d �>d�d �Bh9�-B7g,�$d-�5Dg,�d:�#A%g,�9e�
g,�g,�"$e�Ag,�!e;�4B.g,�#f�4f�f�A;f�g,�g�'Af:�'g�/E3g,�"h9�d	�
h9�d�d � d*	�%h9�-d7�2g,�:e�?g,�e�g,� e8�4g,�7e8�8g,�;f�g,�f	�
f�f7�3g,�6f7�7g,�:g	�?g�g)�%g,�(g)�)g,�,0h�h�h6�6h9�9ic��t�Qtjjt	�td�dtjddz�}t|�atS)Nzdylib-cachez%s.%sr%)	�cacherNrar=rr]r:r;r)rk�bases  rB�_get_dylib_cachezWheel._get_dylib_cache�sI���=��7�7�<�<�� 0�#�m�2D� '�#�*:�*:�2�A�*>� >�@�D��$�K�E��rDc	���tjj|j|j�}|j
�d|j��}d|z}tj|d�}tjd�}g}t|d�5}	|j|�5}||�}	tj|	�}
|j�}|j|�}tjj|j |�}
tjj#|
�stj$|
�|
j'�D]�\}}tjj|
t)|��}tjj+|�sd}nptj,|�j.}t0j0j3|�}|j5|�}t1j0|j6�}||kD}|r|j9||
�|j;||f���	ddd�ddd�|S#1swY�xYw#t<$rY�!wxYw#1swY|SxYw)Nr'r��
EXTENSIONSr�r�T)rNrar=r�r�r`r�r�r�r�r	r�rmrnr��
prefix_to_dirr�r$�makedirsrorr��stat�st_mtime�datetime�
fromtimestamp�getinfo�	date_time�extractr8r�)rkror�r�r;r�ryr�r�r�rpr�rR�
cache_baser`r&�destr��	file_timer��
wheel_times                     rB�_get_extensionszWheel._get_extensions�s����7�7�<�<����d�m�m�<��"�i�i����6��!�H�,���.�.��<�8���"�"�7�+����
�X�s�
#�	�r�
��W�W�W�%�4�� ���B�!%���2��J� �1�1�3�E�"�0�0��:�F�!#�����e�j�j�&�!A�J��7�7�=�=��4����J�/�)3�)9�)9�);�
4�
��g�!�w�w�|�|�J��W�8M�N��!�w�w�~�~�d�3�&*�G�(*����
�(>�(>�I�(0�(9�(9�(G�(G� )�)+�I�#%�:�:�g�#6�D�)1�):�):�D�N�N�)K�J�&0�9�&<�G�"��J�J�w�
�;��
�
�t�T�l�3�
4�4�	�4�
�14�4��,�
��
��1	�4�
�sC�I&�I�!FI�9I�I	�I�	I#� I&�"I#�#I&�&I0c��t|�S)zM
        Determine if a wheel is compatible with the running system.
        )�
is_compatiblerjs rBr�zWheel.is_compatibles���T�"�"rDc��y)zP
        Determine if a wheel is asserted as mountable by its metadata.
        TrHrjs rB�is_mountablezWheel.is_mountables��rDc��tjjtjj|j|j
��}|j
�sd|z}t|��|j�sd|z}t|��|tjvrtjd|�y|r tjj|�n tjjd|�|j�}|rPttj vr#tj jt�tj#||�yy)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)rNrar�r=r�r�r�rr�r:rrr8�insertr��_hook�	meta_pathrq)rkr8ro�msgrps     rB�mountzWheel.mount!s����7�7�?�?�2�7�7�<�<����d�m�m�#L�M���!�!�#�=��H�C�"�3�'�'�� � �"�8�8�C�C�"�3�'�'��s�x�x���L�L�-�x�8��������)�������8�,��-�-�/�J����
�
�-��M�M�(�(��/��	�	�(�J�/�rDc��tjjtjj|j|j
��}|tjvrtjd|�ytjj|�|tjvrtj|�tjs;ttjvr$tjjt�yyy)Nz%s not in path)
rNrar�r=r�r�r:rrrvr�rhr�)rkros  rB�unmountz
Wheel.unmount6s����7�7�?�?�2�7�7�<�<����d�m�m�#L�M���3�8�8�#��L�L�)�8�4��H�H�O�O�H�%��5�.�.�.����X�&��&�&��C�M�M�)��M�M�(�(��/�*�'rDc���tjj|j|j�}|j
�d|j��}d|z}tj|d�}tj|d�}tjd�}t|d�5}|j|�5}||�}	t|	�ddd�i}
|j|�5}t|��5}|D]}
|
d}|
|
|<�	ddd�ddd�|j�D�]
}|j}t|t �r|}n|j#d�}|j%d	�}d
|vrt'd|z��|j)|�r�i|
|}
|
dr)t+|j,�|
dk7rt'd
|z��|
ds��|
dj%dd�\}}|j|�5}|j/�}ddd�|j1|�\}}||k7s��t'd|z��	ddd�y#1swY��uxYw#1swY��GxYw#1swY��LxYw#1swY�dxYw#1swYyxYw)Nr'r�r�r�r�r�rArrE�..�invalid entry in wheel: %rr%rDrrErF)rNrar=r�r�r`r�r�r�r�r	r�rrr[r\rr�r�rr<r]r^r�r�)rkror�r�rzr{r�r�r|r�r�r�rr�r�r�r;r�r�r�r�r(r�s                       rBr�zWheel.verifyBsv���7�7�<�<����d�m�m�<��"�i�i����6��!�H�,��(�n�n�X�w�?���n�n�X�x�8���"�"�7�+��
�X�s�
#�*	?�r����,�-�
&���S�\��!�"�%�
&��G�����%�
)���b�)�)�V�%�)����F��%(���
�)�)�
)�����
?���.�.���g�y�1� '�I� '���w� 7�I��O�O�C�(���1�9�*�,7�9B�,C�D�D��?�?�9�-���i�(���q�6�c�%�/�/�2�c�!�f�<�*�,0�2;�,<�=�=��q�6�"%�a�&�,�,�s�A�"6�K�D�%�����)�)�R�!�w�w�y��)� $�
�
�d�D� 9�I�A�v����.�04�6=�0>�?�?�5
?�*	?�*	?�
&�
&��)�)��
)�
)��8)�)��K*	?�*	?�sy�"I.�4H;�I.�#
I�0I�I�B9I.�)I.�.I"�?"I.�"I.�;I	�I.�I�
I�I	�I.�"I+�'I.�.I7c	��d�}d�}tjj|j|j�}|j
�d|j��}d|z}tj|d�}	t�5}
t|d�5}i}|j�D]�}
|
j}t|t�r|}n|jd�}||	k(r�9d|vrtd	|z��|j|
|
�tjj|
t!|��}|||<��	d
d
d
�||�\}}||fi|��}|�r |||�\}}|r||k(r	|||�|�1t#j$dd|
�
�\}}tj&|�nWtjj)|�std|z��tjj||j�}t+|j-��}tjj|
|�}||f}|j/||
|�|j1||�|�t3j4||�d
d
d
�|S#1swY��LxYw#1swYSxYw)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.
        c�x�dx}}|�dt��}||vrd|z}||vr||}t|��j}||fS)NrEz%s/PKG-INFO�ra)rrr�)�path_mapr�r�rars     rB�get_versionz!Wheel.update.<locals>.get_version�sS��!�!�G�d�%�'?�@�C��(�"�#�h�.���h����}��"��-�5�5���D�=� rDc�
�d}	t|�|jd�}|dkrd|z}nZ||dzdjd�D�cgc]
}t|���}}|dxxdz
cc<|d|�ddj	d�|D����}|rSt|�
�}||_	|jt�}|j||��tjd||�yycc}w#t
$rtjd	|�Y�|wxYw)
Nr'rz%s+1rr)r��+c3�2K�|]}t|����y�wrG)r])�.0r6s  rB�	<genexpr>z7Wheel.update.<locals>.update_version.<locals>.<genexpr>�s����?/�#$��A��?/�s�z0Cannot update non-compliant (PEP-440) version %rr�)ra�legacyzVersion updated from %r to %r)
rr�r�rTr=rrrrr�r'rr)r�ra�updatedr6rVr>�mdr�s        rB�update_versionz$Wheel.update.<locals>.update_version�s
���G�

+�!�'�*��L�L��%���q�5�$�w�.�G�-4�Q��U�V�_�-B�-B�3�-G�H��S��V�H�E�H��"�I��N�I�)0��!��c�h�h�?/�(-�?/�7/�0�G���4�(��$��
����'?�@�����d�6��2����<�g�w�O���I��+�
+����!�")�+�
+�s$�AC �C�/C �C � D�Dr'r�r�r�r�r�r�Nr�z
wheel-update-)rkrR�dirzNot a directory: %r)rNrar=r�r�r`r�r�rr	r[r\rr�rr�rrW�mkstemp�closer$r�rorr	rr�copyfile)rk�modifier�dest_dirrwr�r�ror�r�r{r�r�r�r�r;r�ra�original_versionr(�modified�current_version�fd�newpathr�r�r�s                          rBrnzWheel.updatezsa��"	!�	P�.�7�7�<�<����d�m�m�<��"�i�i����6��!�H�,���n�n�X�x�8��
�Y�-	7�'���3�'�
/�2����[�[�]�
/�E�#�n�n�G�!�'�9�5�$+�	�$+�N�N�7�$;�	� �K�/� ��y�(�.�0;�=F�0G�H�H��J�J�u�g�.��7�7�<�<���i�1H�I�D�*.�H�Y�'�
/�
/�$#.�h��"A���a���3�F�3�H��(3�H�h�(G�%���"��;K�(K�"�?�D�9��#�"*�"2�"2�&�:I�7>�#@�K�B���H�H�R�L��7�7�=�=��2�.�/D�/7�08�9�9� �g�g�l�l�8�T�]�]�C�G� $�X�^�^�%5� 6�
��7�7�<�<���:����)���"�"�4��-�@����w�
�6��#��O�O�G�X�6�[-	7�\��[
/�
/��-	7�\��s&�;
J�B I3�)EJ�3I=	�8J�J
)NFFrG)NN)F)r�r�r��__doc__r*r�rl�propertyr�r�r�rr�r�r�r�r�r�rr	r9r<r�r�r�r�r�r�r�r�rnrHrDrBr�r��s�����M��I�'2�R�4��4� �$��$��+��+�����>������<
!�%�&�  �s�j6� n'�`�!�F#��0�*
0�6?�pdrDr�c���ddl}|j�}g}|ddk(rP|djd�D].}|j|j	�rt|�nd��0t
|�}|S)Nr�glibcrr))�platform�libc_verr�r8�isdigitrTrS)r��verryrVs    rB�_get_glibc_versionr��sh���
�
�
�
�C�
�F�
�1�v����Q����c�"�	8�A��M�M�A�I�I�K�#�a�&�Q�7�	8��v����MrDc�b�tg}td}ttjddz
dd�D]-}|j	dj|t
|�g���/g}t�D]8}|jd�s�|j	|jdd�d��:|j�tdk7r|jdt�|j	d�g}tg}tjd	k(r�tj d
t�}|r�|j#�\}}}}	t%|�}|	g}
|	dvr|
j	d�|	d
vr|
j	d�|	dvr|
j	d�|	dvr|
j	d�|	dvr|
j	d�|dk\r:|
D]*}|�d|�d|�d|��}|tk7s�|j	|��,|dz}|dk\r�:|D�]`}
|D�]W}	|j	djt&|df�|
|	f�|
dk7s�6tjjd�s�V|	j)dd�}	t+�}t-|�dk(s��|dk\r/|j	djt&|df�|
d|	zf�|dk\r/|j	djt&|df�|
d|	zf�|dk\r/|j	djt&|df�|
d|	zf�|j	djt&|df�|
d|d�d|d�d|	��f���Z��ct/|�D]`\}}|j	djt&|f�ddf�|dk(s�5|j	djt&|df�ddf��bt/|�D]X\}}|j	djd |f�ddf�|dk(s�1|j	djd |df�ddf��Zt1|�S)!zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    rrr�r5z.abir)r%r��darwinz(\w+)_(\d+)_(\d+)_(\w+)$)�i386�ppc�fat)r�r��x86_64�fat3)�ppc64r��fat64)r�r��intel)r�r�r�r�r��	universalr(�linux�linux_)r%�z
manylinux1_%s)r%�zmanylinux2010_%s)r%�zmanylinux2014_%s�
manylinux_r�r&)r6�ranger:r;r8r=r]rWr_r��sortr!r�r"r��rer�r�rTr9rMr�rr(�set)�versions�major�minor�abisrkry�archesr1r`r��matchesr�rVr�r>r6r�s                 rB�compatible_tagsr��s���|�H��q�M�E��s�'�'��*�Q�.��B�7�6����������E�
� 3�4�5�6��D��/�1�����V�$��K�K����S�!�,�Q�/�0�1�	�I�I�K�
�f�}����A�s���K�K���
�F��V�F�
�|�|�x���H�H�0�$�7���'(�x�x�z�$�D�%�����J�E��f�G���&����u�%��0�0����v�&��*�*����w�'��)�)����w�'��B�B����{�+��1�*�$�)�E�)-�u�e�U�C�A��D�y��
�
�a�(�)���
���1�*��M���	M�D��M�M�2�7�7�J����#<�=�s�D�I�J��f�}����!8�!8��!A��|�|�H�b�1��*�,���u�:��?�����
�
�r�w�w�
�H�Q�K�/H�'I�3�'6��'=�'?�@���'��
�
�r�w�w�
�H�Q�K�/H�'I�3�'9�D�'@�'B�C���'��
�
�r�w�w�
�H�Q�K�/H�'I�3�'9�D�'@�'B�C��M�M����*�h�q�k�!:�;�S�16�q��5��8�T�J�L�M�!	M�M�, ��)�N�
��7��
�
�r�w�w�
�G�4�5�v�u�E�F���6��M�M�2�7�7�J���
�#;�<�f�e�L�M�N� ��)�H�
��7��
�
�r�w�w��g��/���?�@���6��M�M�2�7�7�D�'�!�*�#5�6���F�G�H�
�v�;�rDc���t|t�st|�}d}|�t}|D]7\}}}||jvs�||jvs�%||j
vs�4d}|S|S)NFT)r\r��COMPATIBLE_TAGSr�r�r�)�wheelr�ryr�r�r�s      rBr�r�Aso���e�U�#��e���
�F��|�������S�$��%�+�+��#����"2�t�u�z�z�7I��F���M�	��MrDrG)Y�
__future__rr�r�r��emailrr�rm�loggingrNr�r�rrr:rWrr5rr�compatrr	r
rr�databaser
r�rrrrZrrrrrrrrrrr�rr�	getLoggerr�rr��hasattrr9r�r_r7r6r;r�r rMr"r!r�rC�compile�
IGNORECASE�VERBOSEr�r�r�r�r�r�rOr�rQ�importlib.machineryrS�importlib.utilrWrd�objectrfr�r�r�r�r�r�rHrDrB�<module>r
sd��(�
�
��#����	��	�
�
���+�C�C�+�Q�Q�!�!�!�@�	��	�	�8�	$����
�3�#�$��J��\�\���V�$��J��\�\�U���J��J�
%�Y�
%�
%�&8�
9�
���#�*�*�2�A�.�.�J��z���	�j�	 ���~���c�3�'�/�/��S�9���i���w�'���3�>�>�*�%�

�+�+�j�$�
'�
-�
-�c�
2�1�
5�C��$�-�C���b�j�j���]�]�R�Z�Z��	!���"�*�*���]�]�R�Z�Z��!���R�Z�Z�)�
*�
��B�J�J�@�A�������6�6�S�=��H�/�H����A�����
�C���6�	�"�f�"�J	�	��o�F�o�d�M�`"�#���
rD
© 2025 GrazzMean