§
    !@Äj#:  ã                  óz  — d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZ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mZ ddlmZmZ ddl m Z  erddl!m"Z"m#Z#  e"d¦  «        Z$ej%        Z%ej&        Z&ej'        Z'ej(        Z)ej*        Z+ej,        Z-ej.        Z/dCd„Z0edDd„¦   «         Z1dEd„Z2ej3        dFd„¦   «         Z4dGd„Z5d„ Z6dHdId#„Z7 ej8        d$e	j9        › d%�¦  «        Z: ej8        d&¦  «        Z; ej8        d'¦  «        Z<dJd)„Z=	 	 dKdLd2„Z>dMd4„Z?	 	 	 	 	 	 dNdOd?„Z@dPdA„ZAdQdB„ZBdS )Rzudistutils.util

Miscellaneous utility functions -- anything that doesn't fit into
one of the other *util.py modules.
é    )ÚannotationsN)ÚCallableÚIterableÚMapping)ÚTYPE_CHECKING)Ú	pass_noneé   )Úlog)Únewer)ÚdetectÚmacos)ÚDistutilsByteCompileErrorÚDistutilsPlatformError)Úspawn)ÚTypeVarTupleÚUnpackÚ_TsÚsÚstrÚreturnú	list[int]c                ó@   — d„ |                       d¦  «        D ¦   «         S )zEConvert a dot-separated string into a list of numbers for comparisonsc                ó,   — g | ]}t          |¦  «        ‘ŒS © )Úint)Ú.0Úns     úKC:\Projects\Historical\venv\Lib\site-packages\setuptools/_distutils/util.pyú
<listcomp>z!split_version.<locals>.<listcomp>0   s   € Ð)Ð)Ð)�q�C�‰FŒFÐ)Ð)Ð)ó    ú.)Úsplit)r   s    r   Úsplit_versionr#   .   s    € à)Ð)˜AŸGšG C™LœLÐ)Ñ)Ô)Ð)r    Úpathnameústr | os.PathLike[str]c                óN   — t          j        t          j        | ¦  «        ¦  «        S )a.  
    Allow for pathlib.Path inputs, coax to a native path string.

    If None is passed, will just pass it through as
    Setuptools relies on this behavior.

    >>> convert_path(None) is None
    True

    Removes empty paths.

    >>> convert_path('foo/./bar').replace('\\', '/')
    'foo/bar'
    )ÚosÚfspathÚpathlibÚPurePath)r$   s    r   Úconvert_pathr+   3   s   € õ  Œ9•WÔ% hÑ/Ô/Ñ0Ô0Ð0r    Únew_rootc                ó(  — t           j        dk    rtt           j                             |¦  «        s t           j                             | |¦  «        S t           j                             | t          |¦  «        dd…         ¦  «        S t           j        dk    rbt           j                             |¦  «        \  }}|d         t           j        k    r
|dd…         }t           j                             | |¦  «        S t          dt           j        › d�¦  «        ‚)a	  Return 'pathname' with 'new_root' prepended.  If 'pathname' is
    relative, this is equivalent to "os.path.join(new_root,pathname)".
    Otherwise, it requires making 'pathname' relative and then joining the
    two, which is tricky on DOS/Windows and Mac OS.
    Úposixr	   NÚntr   znothing known about platform 'ú')	r'   ÚnameÚpathÚisabsÚjoinr   Ú
splitdriveÚsepr   )r,   r$   Ú_driver2   s       r   Úchange_rootr8   F   sØ   € õ 
„w�'ÒÐÝŒw�}Š}˜XÑ&Ô&ð 	=Ý”7—<’< ¨(Ñ3Ô3Ð3õ ”7—<’< ­#¨h©-¬-¸¸¸Ô*;Ñ<Ô<Ð<å	Œ�DŠˆÝœ×+Ò+¨HÑ5Ô5‰ˆ�Ø�Œ7•b”fÒÐØ˜˜˜”8ˆDÝŒw�|Š|˜H dÑ+Ô+Ð+å
 Ð!LÅ"Ä'Ð!LÐ!LÐ!LÑ
MÔ
MÐMr    ÚNonec                 óD  — t           j        dk    rddt           j        vrV	 ddl} |                      t          j        ¦   «         ¦  «        d         t           j        d<   n# t          t          f$ r Y nw xY wdt           j        vrt          ¦   «         t           j        d<   dS dS )aL  Ensure that 'os.environ' has all the environment variables we
    guarantee that users can use in config files, command-line options,
    etc.  Currently this includes:
      HOME - user's home directory (Unix only)
      PLAT - description of the current platform, including hardware
             and OS (see 'get_platform()')
    r.   ÚHOMEr   Né   ÚPLAT)	r'   r1   ÚenvironÚpwdÚgetpwuidÚgetuidÚImportErrorÚKeyErrorÚget_platform)r?   s    r   Úcheck_environrE   `   s¥   € õ 
„w�'ÒÐ˜f­B¬JÐ6Ð6ð	ØˆJˆJˆJà!$§¢­b¬i©k¬kÑ!:Ô!:¸1Ô!=�BŒJ�vÑÐøÝ�XÐ&ð 	ð 	ð 	ð ˆDð	øøøð
 •R”ZÐÐÝ)™^œ^�Œ
�6ÑÐÐð  Ðs    =A ÁA2Á1A2Ú
local_varsúMapping[str, object]c                ó@  — t          ¦   «          t          t          j        ¦  «        }|                     d„ |                     ¦   «         D ¦   «         ¦  «         	 t          | ¦  «                             |¦  «        S # t          $ r}t          d|› �¦  «        ‚d}~ww xY w)aÃ  
    Perform variable substitution on 'string'.
    Variables are indicated by format-style braces ("{var}").
    Variable is substituted by the value found in the 'local_vars'
    dictionary or in 'os.environ' if it's not in 'local_vars'.
    'os.environ' is first checked/augmented to guarantee that it contains
    certain values: see 'check_environ()'.  Raise ValueError for any
    variables not found in either 'local_vars' or 'os.environ'.
    c              3  ó>   K  — | ]\  }}|t          |¦  «        fV — Œd S ©N©r   )r   r1   Úvalues      r   ú	<genexpr>zsubst_vars.<locals>.<genexpr>ƒ   s1   è è € ÐKÐK©¨¨u�4�˜U™œÐ$ÐKÐKÐKÐKÐKÐKr    zinvalid variable N)
rE   Údictr'   r>   ÚupdateÚitemsÚ_subst_compatÚ
format_maprC   Ú
ValueError)r   rF   ÚlookupÚvars       r   Ú
subst_varsrV   w   s    € õ �O„O€OÝ•"”*ÑÔ€FØ
‡M‚MÐKÐK¸
×8HÒ8HÑ8JÔ8JÐKÑKÔKÑKÔKÐKð4Ý˜QÑÔ×*Ò*¨6Ñ2Ô2Ð2øÝð 4ð 4ð 4ÝÐ2¨SÐ2Ð2Ñ3Ô3Ð3øøøøð4øøøs   Á!A< Á<
BÂBÂBc                ó‚   — d„ }t          j        d|| ¦  «        }|| k    rddl}|                     dt          ¦  «         |S )zb
    Replace shell/Perl-style variable substitution with
    format-style. For compatibility.
    c                ó4   — d|                       d¦  «        › d�S )NÚ{r	   Ú})Úgroup)Úmatchs    r   Ú_substz_subst_compat.<locals>._subst�   s   € Ø&�E—K’K ‘N”NÐ&Ð&Ð&Ð&r    z\$([a-zA-Z_][a-zA-Z_0-9]*)r   Nz-shell/Perl-style substitutions are deprecated)ÚreÚsubÚwarningsÚwarnÚDeprecationWarning)r   r]   Úreplr`   s       r   rQ   rQ   Š   s\   € ð'ð 'ð 'õ Œ6Ð/°¸Ñ;Ô;€DØˆq‚y€yØˆˆˆà�ŠØ;Ýñ	
ô 	
ð 	
ð €Kr    úerror: ÚexcÚobjectÚprefixc                ó&   — |t          | ¦  «        z   S rJ   rK   )re   rg   s     r   Úgrok_environment_errorri   ž   s   € ð •C˜‘H”HÑÐr    z[^\\\'\"z ]*z'(?:[^'\\]|\\.)*'z"(?:[^"\\]|\\.)*"ú	list[str]c                ó  — |                       ¦   «         } g }d}| �rät                               | |¦  «        }|€J ‚|                     ¦   «         }|t	          | ¦  «        k    r|                     | d|…         ¦  «         �n| |         t          j        v r=|                     | d|…         ¦  «         | |d…                              ¦   «         } d}�n| |         dk    r| d|…         | |dz   d…         z   } |dz   }nØ| |         dk    rt                               | |¦  «        }nA| |         dk    rt                               | |¦  «        }nt          d| |         › d�¦  «        ‚|€t          d	| |         › d
�¦  «        ‚|                     ¦   «         \  }}| d|…         | |dz   |dz
  …         z   | |d…         z   } |                     ¦   «         dz
  }|t	          | ¦  «        k    r|                     | ¦  «         n| �°ä|S )a  Split a string up according to Unix shell-like rules for quotes and
    backslashes.  In short: words are delimited by spaces, as long as those
    spaces are not escaped by a backslash, or inside a quoted string.
    Single and double quotes are equivalent, and the quote characters can
    be backslash-escaped.  The backslash is stripped from any two-character
    escape sequence, leaving only the escaped character.  The quote
    characters are stripped from any quoted string.  Returns a list of
    words.
    r   Nú\r	   r0   ú"zthis can't happen (bad char 'z')zbad string (mismatched z	 quotes?)é   )ÚstripÚ_wordchars_rer\   ÚendÚlenÚappendÚstringÚ
whitespaceÚlstripÚ
_squote_reÚ
_dquote_reÚRuntimeErrorrS   Úspan)r   ÚwordsÚposÚmrq   Úbegs         r   Úsplit_quotedr   «   s  € ð 	
�Š‰	Œ	€AØ€EØ
€Cà
ñ &Ý×Ò  3Ñ'Ô'ˆØˆ}ˆ}ˆ}Ø�eŠe‰gŒgˆØ•#�a‘&”&Š=ˆ=Ø�LŠL˜˜4˜C˜4œÑ!Ô!Ð!ÙàˆSŒ6•VÔ&Ð&Ð&ð �LŠL˜˜4˜C˜4œÑ!Ô!Ð!Ø�#�$�$”—’Ñ Ô ˆAØˆC‰CàˆsŒV�tŠ^ˆ^ð �$�3�$”˜!˜C !™G˜I˜Iœ,Ñ&ˆAØ˜‘'ˆCˆCð �Œv˜Š}ˆ}Ý×$Ò$ Q¨Ñ,Ô,��Ø�3”˜3’�Ý×$Ò$ Q¨Ñ,Ô,��å"Ð#MÀ1ÀSÄ6Ð#MÐ#MÐ#MÑNÔNÐNàˆyÝ Ð!L¸1¸S¼6Ð!LÐ!LÐ!LÑMÔMÐMàŸš™œ‰JˆS�#Ø�$�3�$”˜!˜C !™G c¨A¡gÐ-Ô.Ñ.°°3°4°4´Ñ8ˆAØ—%’%‘'”'˜A‘+ˆCà•#�a‘&”&Š=ˆ=Ø�LŠL˜‰OŒOˆOØðM ñ &ðP €Lr    FÚfuncúCallable[[Unpack[_Ts]], object]Úargsútuple[Unpack[_Ts]]ÚmsgÚverboseÚboolc                óˆ   — |€&| j         › |›�}|dd…         dk    r|dd…         dz   }t          j        |¦  «          | |Ž  dS )z¾
    Perform some action that affects the outside world (e.g. by
    writing to the filesystem). Was previously used to deal with
    "dry run" operations, but now runs unconditionally.
    Néþÿÿÿz,)r   ú))Ú__name__r
   Úinfo)r€   r‚   r„   r…   s       r   ÚexecuterŒ   é   s[   € ð €{Ø”Ð( Ð(Ð(ˆØˆrˆsˆsŒ8�tÒÐØ�a˜�d”)˜c‘/ˆCå„HˆS�M„M€MØ€Dˆ$€K€K€K€Kr    Úvalc                óf   — |                       ¦   «         } | dv rdS | dv rdS t          d| ›�¦  «        ‚)zôConvert a string representation of truth to true (1) or false (0).

    True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
    are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
    'val' is anything else.
    )ÚyÚyesÚtÚtrueÚonÚ1T)r   ÚnoÚfÚfalseÚoffÚ0Fzinvalid truth value )ÚlowerrS   )r�   s    r   Ú	strtoboolr›   ý   sJ   € ð �)Š)‰+Œ+€CØ
Ð2Ð2Ð2ØˆtØ	Ð5Ð	5Ð	5ØˆuåÐ7°Ð7Ð7Ñ8Ô8Ð8r    TÚpy_filesúIterable[str]Úoptimizer   Úforceú
str | NoneÚbase_dirÚdirectúbool | Nonec                ó|  — t           j        rt          d¦  «        ‚|€|dk    }|�sMt          j        d¦  «        \  }}t          j        d|¦  «         t          j        |dd¬	¦  «        }	|	5  |	 	                    d
¦  «         |	 	                    d 
                    t          t          | ¦  «        ¦  «        dz   ¦  «         |	 	                    d|›d|›d|›d|›d|›d�¦  «         ddd¦  «         n# 1 swxY w Y   t           j        g}
|
                     t          j        ¦   «         ¦  «         |
                     |¦  «         t%          |
¦  «         t'          t          j        |fd|› �¦  «         dS ddlm} | D �]>}|dd…         dk    rŒ|dk    r,|dk    rdn|}t.          j                             ||¬¦  «        }nt.          j                             |¦  «        }|}|rG|dt5          |¦  «        …         |k    rt7          d|›d|›�¦  «        ‚|t5          |¦  «        d…         }|r t          j         
                    ||¦  «        }t          j                             |¦  «        }|rM|st=          ||¦  «        r%t          j        d||¦  «          ||||¦  «         �Œ(t          j        d||¦  «         �Œ@dS )a   Byte-compile a collection of Python source files to .pyc
    files in a __pycache__ subdirectory.  'py_files' is a list
    of files to compile; any files that don't end in ".py" are silently
    skipped.  'optimize' must be one of the following:
      0 - don't optimize
      1 - normal optimization (like "python -O")
      2 - extra optimization (like "python -OO")
    If 'force' is true, all files are recompiled regardless of
    timestamps.

    The source filename encoded in each bytecode file defaults to the
    filenames listed in 'py_files'; you can modify these with 'prefix' and
    'basedir'.  'prefix' is a string that will be stripped off of each
    source filename, and 'base_dir' is a directory name that will be
    prepended (after 'prefix' is stripped).  You can supply either or both
    (or neither) of 'prefix' and 'base_dir', as you wish.

    Byte-compilation is either done directly in this interpreter process
    with the standard py_compile module, or indirectly by writing a
    temporary script and executing it.  Normally, you should let
    'byte_compile()' figure out to use direct compilation or not (see
    the source for details).  The 'direct' flag is used by the script
    generated in indirect mode; unless you know what you're doing, leave
    it set to None.
    zbyte-compiling is disabled.NTr   z.pyz$writing byte-compilation script '%s'Úwzutf-8)Úencodingz2from distutils.util import byte_compile
files = [
z,
z]
z
byte_compile(files, optimize=z, force=z,
         prefix=z, base_dir=z,
         verbose=z,
         direct=True)
z	removing )ÚcompileéýÿÿÿÚ )Úoptimizationzinvalid prefix: filename z doesn't start with zbyte-compiling %s to %sz%skipping byte-compilation of %s to %s) ÚsysÚdont_write_bytecoder   ÚtempfileÚmkstempr
   r‹   r'   ÚfdopenÚwriter4   ÚmapÚreprÚ
executableÚextendÚ
subprocessÚ"_optim_args_from_interpreter_flagsrs   r   rŒ   ÚremoveÚ
py_compiler§   Ú	importlibÚutilÚcache_from_sourcerr   rS   r2   Úbasenamer   Údebug)rœ   rž   rŸ   rg   r¡   r…   r¢   Ú	script_fdÚscript_nameÚscriptÚcmdr§   ÚfileÚoptÚcfileÚdfileÚ
cfile_bases                    r   Úbyte_compilerÇ     s|  € õH Ôð GÝ'Ð(EÑFÔFÐFð €~Ø'¨1š}ˆð ñ LYÝ#+Ô#3°EÑ#:Ô#:Ñ ˆ�KÝŒÐ7¸ÑEÔEÐEÝ”˜9 c°GÐ<Ñ<Ô<ˆàð 	ð 	Ø�LŠLðñô ð ð" �LŠL˜Ÿš¥C­¨hÑ$7Ô$7Ñ8Ô8¸5Ñ@ÑAÔAÐAØ�LŠLðØ&ðð Ø27ðð àðð à&.ðð ð ðð ð ñô ð ð'	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ8 Œ~ÐˆØ�
Š
•:Ô@ÑBÔBÑCÔCÐCØ�
Š
�;ÑÔÐÝˆc‰
Œ
ˆ
Ý•”	˜K˜>Ð+D°{Ð+DÐ+DÑEÔEÐEÐEÐEð 	'Ð&Ð&Ð&Ð&Ð&àð 	Yñ 	YˆDØ�B�C�CŒy˜EÒ!Ð!ð ð
 ˜1Š}ˆ}Ø$¨šM˜M�b�b¨x�Ý!œ×8Ò8¸ÈCÐ8ÑPÔP��å!œ×8Ò8¸Ñ>Ô>�ØˆEØð -Ø˜�#˜f™+œ+˜Ô&¨&Ò0Ð0Ý$ØZ°DÐZÐZÐPVÐZÐZñô ð ð �c &™kœk˜m˜mÔ,�Øð 6ÝœŸš X¨uÑ5Ô5�åœ×)Ò)¨%Ñ0Ô0ˆJØð YØð Y�E $¨Ñ.Ô.ð YÝ”HÐ6¸¸jÑIÔIÐIØ�G˜D %¨Ñ/Ô/Ð/Ñ/å”IÐEÀtÈZÑXÔXÐXùð=	Yð 	Ys   Á,A9C1Ã1C5Ã8C5Úheaderc                óÆ   — d}|                       d¬¦  «        }|o)|d                               ¦   «         d         |d         k    }|r|nd}|                     |¦  «        |z   S )zŒReturn a version of the string escaped for inclusion in an
    RFC-822 header, by ensuring there are 8 spaces space after each newline.
    z        T)Úkeependséÿÿÿÿr   r©   )Ú
splitlinesr4   )rÈ   ÚindentÚlinesÚends_in_newlineÚsuffixs        r   Úrfc822_escaperÑ   ’  sn   € ð €FØ×Ò tÐÑ,Ô,€Eð ÐF  b¤	× 4Ò 4Ñ 6Ô 6°qÔ 9¸UÀ2¼YÒ F€OØ&Ð.ˆVˆV¨B€Fà�;Š;�uÑÔ Ñ&Ð&r    c                 óD   — t          t          j        d¦  «        ¦  «        S )zKReturn True if the Python interpreter is built with free threading support.ÚPy_GIL_DISABLED)r†   Ú	sysconfigÚget_config_varr   r    r   Úis_freethreadedrÖ   ¡  s   € å•	Ô(Ð):Ñ;Ô;Ñ<Ô<Ð<r    )r   r   r   r   )r$   r%   r   r   )r,   r%   r$   r%   r   r   )r   r9   )rF   rG   r   r   )rd   )re   rf   rg   r   r   r   )r   r   r   rj   )NF)
r€   r�   r‚   rƒ   r„   rf   r…   r†   r   r9   )r�   r   r   r†   )r   FNNTN)rœ   r�   rž   r   rŸ   r†   rg   r    r¡   r    r…   r†   r¢   r£   r   r9   )rÈ   r   r   r   )r   r†   )CÚ__doc__Ú
__future__r   Ú	functoolsÚimportlib.utilr¹   r'   r)   r^   rt   rµ   r«   rÔ   r­   Úcollections.abcr   r   r   Útypingr   Újaraco.functoolsr   Ú_logr
   Ú	_modifiedr   Úcompilers.platformr   r   Úerrorsr   r   r   Útyping_extensionsr   r   r   Úget_host_platformrD   Úis_mingwÚVERSION_VARÚMACOSX_VERSION_VARÚ
target_verÚget_macosx_target_verÚ_target_ver_from_syscfgÚ!get_macosx_target_ver_from_syscfgÚ_clear_cached_target_verÚ_clear_cached_macosx_verr#   r+   r8   Ú	lru_cacherE   rV   rQ   ri   r§   ru   rp   rw   rx   r   rŒ   r›   rÇ   rÑ   rÖ   r   r    r   ú<module>rî      sD  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø  Ð  Ð  Ð  Ð  Ð  à &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ Ð Ð Ð Ð Ð àð Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6à
ˆ,�uÑ
Ô
€Cð Ô,Ð ØÔ"€ØŒ?€ØÔ&Ð ØÔ(Ð Ø$)Ô$AÐ !Ø Ô9Ð ð*ð *ð *ð *ð
 ð1ð 1ð 1ñ „ð1ð$Nð Nð Nð Nð4 Ôð,ð ,ð ,ñ Ôð,ð,4ð 4ð 4ð 4ð&ð ð ð(ð ð ð ð ð �”
Ð= vÔ'8Ð=Ð=Ð=Ñ>Ô>€ØˆRŒZÐ,Ñ-Ô-€
ØˆRŒZÐ,Ñ-Ô-€
ð;ð ;ð ;ð ;ðB Øð	ð ð ð ð ð(9ð 9ð 9ð 9ð$ ØØØØØðBYð BYð BYð BYð BYðJ'ð 'ð 'ð 'ð=ð =ð =ð =ð =ð =r    