§
    WŠtj.ˆ  ã                  ó6  — 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	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mZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl$m(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m3Z4 ddl5m5Z6 ddl7m7Z8 ddl9m9Z: ddl;m;Z< ddl=m=Z> erddl?m@Z@ ddlAmBZB  ede(¬¦  «        ZC ejD        eE¦  «        ZF G d„ d e¦  «        ZGd!ZHd"ZI G d#„ d$e"¦  «        ZJ G d%„ d&e¦  «        ZK G d'„ d(¦  «        ZL G d)„ d*eL¦  «        ZM G d+„ d,¦  «        ZNd_d1„ZOd`d5„ZPdad<„ZQd=„ ZRdbdA„ZSdbdB„ZTdcdE„ZUdddG„ZVdedI„ZWdfdL„ZXdgdM„ZYdhdR„ZZdidT„Z[ G dU„ dVe'j\        ¦  «        Z]dWZ^djd\„Z_ G d]„ d^e&j`        ¦  «        ZadS )kaè  
Create a wheel that, when installed, will make the source package 'editable'
(add it to the interpreter's path, including metadata) per PEP 660. Replaces
'setup.py develop'.

.. note::
   One of the mechanisms briefly mentioned in PEP 660 to implement editable installs is
   to create a separated directory inside ``build`` and use a .pth file to point to that
   directory. In the context of this file such directory is referred as
   *auxiliary build directory* or ``auxiliary_dir``.
é    )ÚannotationsN)ÚIterableÚIteratorÚMapping)Úsuppress)ÚEnum)Úcleandoc)ÚchainÚstarmap)ÚPath)ÚTemporaryDirectory)ÚTracebackType)ÚTYPE_CHECKINGÚProtocolÚTypeVarÚcasté   )ÚCommandÚ_normalizationÚ_pathÚ_shutilÚerrorsÚ
namespaces)ÚStrPath)Úpy310Úpy312©Úfind_package_path)ÚDistribution)ÚInformationOnlyÚSetuptoolsDeprecationWarningé   )Úbuild)Úbuild_py)Ú	dist_info)Úegg_info)Úinstall)Úinstall_scripts)ÚSelf©Ú	WheelFileÚ_P)Úboundc                  ó6   — e Zd ZdZdZdZdZed
d„¦   «         Zd	S )Ú_EditableModea  
    Possible editable installation modes:
    `lenient` (new files automatically added to the package - DEFAULT);
    `strict` (requires a new installation when files are added/removed); or
    `compat` (attempts to emulate `python setup.py develop` - DEPRECATED).
    ÚstrictÚlenientÚcompatÚmodeú
str | NoneÚreturnc                óæ   — |st           j        S |                     ¦   «         }|t           j        vrt	          j        d|›d�¦  «        ‚|dk    rt          j        ddd¬¦  «         t           |         S )NzInvalid editable mode: z. Try: 'strict'.ÚCOMPATzCompat editable installsa
  
                The 'compat' editable mode is transitional and will be removed
                in future versions of `setuptools`.
                Please adapt your code accordingly to use either the 'strict' or the
                'lenient' modes.
                zuserguide/development_mode.html)Úsee_docs)r/   ÚLENIENTÚupperÚ__members__r   ÚOptionErrorr!   Úemit)Úclsr3   Ú_modes      ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/setuptools/command/editable_wheel.pyÚconvertz_EditableMode.convertA   sŠ   € àð 	)Ý Ô(Ð(à—
’
‘”ˆØ�Ô1Ð1Ð1ÝÔ$Ð%W¸tÐ%WÐ%WÐ%WÑXÔXÐXà�HÒÐÝ(Ô-Ø*ðð ;ðñ ô ð õ  ˜UÔ#Ð#ó    N)r3   r4   r5   r/   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚSTRICTr9   r7   ÚclassmethodrA   © rB   r@   r/   r/   5   sM   € € € € € ðð ð €FØ€GØ€Fàð$ð $ð $ñ „[ð$ð $ð $rB   r/   zU
New or renamed files may not be automatically picked up without a new installation.
zt
Options like `package-data`, `include/exclude-package-data` or
`packages.find.exclude/include` may have no effect.
c                  ó´   — e Zd ZdZdZdddd eej        pd¦  «        fgZd„ Zd&d„Z	d&d„Z
d„ Zd„ Zd'd„Zd(d„Zd„ Zd)d„Zd*d„Zd&d„Zd+d„Zd „ Zd,d"„Zd-d%„ZdS ).Úeditable_wheelz®Build 'editable' wheel for development.
    This command is private and reserved for internal use of setuptools,
    users should rely on ``setuptools.build_meta`` APIs.
    zBDO NOT CALL DIRECTLY, INTERNAL ONLY: create PEP 660 editable wheel)z	dist-dir=Údz-directory to put final built distributions in)zdist-info-dir=ÚIz(path to a pre-build .dist-info directoryzmode=NÚ c                ó>   — d | _         d | _        d | _        d | _        d S ©N)Údist_dirÚdist_info_dirÚproject_dirr3   ©Úselfs    r@   Úinitialize_optionsz!editable_wheel.initialize_optionsv   s$   € ØˆŒØ!ˆÔØˆÔØˆŒ	ˆ	ˆ	rB   r5   ÚNonec                óÜ   — | j         }|j        pt          j        | _        |j        pi | _        t          | j        p$t          j         	                    | j        d¦  «        ¦  «        | _        d S )NÚdist)
ÚdistributionÚsrc_rootÚosÚcurdirrS   Úpackage_dirr   rQ   ÚpathÚjoin)rU   rY   s     r@   Úfinalize_optionszeditable_wheel.finalize_options|   sX   € ØÔ ˆØœ=Ð5­B¬IˆÔØÔ+Ð1¨rˆÔÝ˜Tœ]ÐT­b¬g¯lªl¸4Ô;KÈVÑ.TÔ.TÑUÔUˆŒˆˆrB   c                óº  — 	 | j                              d¬¦  «         |                      ¦   «          |                      d¦  «         |                      d¦  «        }|                     | j        ¦  «         |                      |¦  «         d S # t          $ rD}| j	        j
        p| j	                             ¦   «         }t          j        |d|› d�¦  «         ‚ d }~ww xY w)NT)Úexist_okÚbdist_wheelz3An error occurred when building editable wheel for zl.
See debugging tips in: https://setuptools.pypa.io/en/latest/userguide/development_mode.html#debugging-tips)rQ   ÚmkdirÚ_ensure_dist_infoÚreinitialize_commandÚget_finalized_commandÚwrite_wheelfilerR   Ú_create_wheel_fileÚ	ExceptionrZ   ÚnameÚget_namer   Úadd_note)rU   rd   ÚexÚprojects       r@   Úrunzeditable_wheel.run‚   s   € ð	ØŒM×Ò¨ÐÑ.Ô.Ð.Ø×"Ò"Ñ$Ô$Ð$ð ×%Ò% mÑ4Ô4Ð4Ø×4Ò4°]ÑCÔCˆKØ×'Ò'¨Ô(:Ñ;Ô;Ð;à×#Ò# KÑ0Ô0Ð0Ð0Ð0øÝð 	ð 	ð 	ØÔ'Ô,ÐL°Ô0A×0JÒ0JÑ0LÔ0LˆGÝŒNØðfÀgð fð fð fñô ð ð øøøøð	øøøs   ‚BB Â
CÂ?CÃCc                óŒ  — | j         €jt          t          |                      d¦  «        ¦  «        }| j        |_        |                     ¦   «          |                     ¦   «          |j         | _         d S t          | j         ¦  «         	                    d¦  «        sJ ‚t          | j         d¦  «                             ¦   «         sJ ‚d S )Nr%   z
.dist-infoÚMETADATA)rR   r   Údist_info_clsrg   rQ   Ú
output_dirÚensure_finalizedrq   ÚstrÚendswithr   Úexists)rU   r%   s     r@   rf   z editable_wheel._ensure_dist_info—   s²   € ØÔÐ%Ý�]¨D×,EÒ,EÀkÑ,RÔ,RÑSÔSˆIØ#'¤=ˆIÔ Ø×&Ò&Ñ(Ô(Ð(Ø�MŠM‰OŒOˆOØ!*Ô!8ˆDÔÐÐå�tÔ)Ñ*Ô*×3Ò3°LÑAÔAÐAÐAÐAÝ˜Ô*¨JÑ7Ô7×>Ò>Ñ@Ô@Ð@Ð@Ð@Ð@Ð@rB   c                óò   — | j         }|j        sd S t          | j        | j                             dd¦  «        ¦  «                             ¦   «         }t          ||||¦  «        }|                     ¦   «          d S )NrN   ú.)	rZ   Únamespace_packagesr   rS   r^   ÚgetÚresolveÚ_NamespaceInstallerÚinstall_namespaces)rU   Úinstallation_dirÚ
pth_prefixrY   r[   Ú	installers         r@   Ú_install_namespacesz"editable_wheel._install_namespaces¢   sw   € àÔ ˆØÔ&ð 	ØˆFå˜Ô(¨$Ô*:×*>Ò*>¸rÀ3Ñ*GÔ*GÑHÔH×PÒPÑRÔRˆÝ'¨Ð.>À
ÈHÑUÔUˆ	Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&rB   r4   c                óÎ   — | j         rt          | j         ¦  «        j        nt          ¦   «         }t          t          |                     d¦  «        ¦  «        }t          |d ¦  «        S )Nz
*.egg-info)rR   r   ÚparentÚmaprw   ÚglobÚnext)rU   Ú
parent_dirÚ
candidatess      r@   Ú_find_egg_info_dirz!editable_wheel._find_egg_info_dir¬   sT   € Ø8<Ô8JÐV•T˜$Ô,Ñ-Ô-Ô4Ð4ÕPTÑPVÔPVˆ
Ý�˜jŸošo¨lÑ;Ô;Ñ<Ô<ˆ
Ý�J Ñ%Ô%Ð%rB   rl   rw   Úunpacked_wheelr   Ú	build_libÚtmp_dirc                óš  — | j         }t          |¦  «        }t          |¦  «        }t          t          ||› d�d¦  «        ¦  «        }t          t          ||› d�d¦  «        ¦  «        }t          t          ||› d�d¦  «        ¦  «        }	t          t          |                     dd¬¦  «        ¦  «        }
t          |¦  «        |
_        d|
_        t          t          |                     dd¬¦  «        ¦  «        }t          t          |                     d	d¬¦  «        ¦  «        }|x|_
        x|_        |_        |x|_        x|_        |_        |	x|_        |_        ||_        ||_        |                     d
¦  «        }d|_        t          t,          |                     d¦  «        ¦  «        }d|_        t          |¦  «        |_        t          t2          |                     d¦  «        ¦  «        }d|_        |                      ¦   «         |_        |                      ¦   «          |                     ¦   «          |                     ¦   «          dS )aì  Configure commands to behave in the following ways:

        - Build commands can write to ``build_lib`` if they really want to...
          (but this folder is expected to be ignored and modules are expected to live
          in the project directory...)
        - Binary extensions should be built in-place (editable_mode = True)
        - Data/header/script files are not part of the "editable" specification
          so they are written directly to the unpacked_wheel directory.
        z.dataÚdataÚheadersÚscriptsr&   T)Úreinit_subcommandsr#   r'   Úbuild_scriptsÚpythonr(   r$   FN)rZ   rw   r   r   Úegg_info_clsrg   Úegg_baseÚignore_egg_info_in_manifestÚ	build_clsÚinstall_clsÚbuild_platlibÚbuild_purelibrŽ   Úinstall_purelibÚinstall_platlibÚinstall_libr(   r•   Úinstall_headersÚinstall_dataÚget_command_objÚ
executableÚinstall_scripts_clsÚno_epÚ
build_tempÚbuild_py_clsÚcompilerŒ   Úexisting_egg_info_dirÚ_set_editable_moderv   )rU   rl   r�   rŽ   r�   rY   Úwheelr‘   r’   r“   r&   r#   r'   r•   r(   r$   s                   r@   Ú_configure_buildzeditable_wheel._configure_build±   s4  € ð Ô ˆÝ�NÑ#Ô#ˆÝ˜	‘N”Nˆ	Ý•4˜¨4¨¨¨¸Ñ?Ô?Ñ@Ô@ˆÝ•d˜>¨d¨>¨>¨>¸9ÑEÔEÑFÔFˆÝ•d˜>¨d¨>¨>¨>¸9ÑEÔEÑFÔFˆõ Ý˜$×3Ò3°JÐSWÐ3ÑXÔXñ
ô 
ˆõ   ™LœLˆÔØ/3ˆÔ,åÝ�t×0Ò0°ÈTÐ0ÑRÔRñ
ô 
ˆõ Ý˜×2Ò2°9ÐQUÐ2ÑVÔVñ
ô 
ˆð GPÐOˆÔÐO˜eÔ1°E´OØRWÐWˆÔÐW 'Ô"9¸GÔ<OØ8?Ð?ˆÔ %Ô"5Ø")ˆÔØ#ˆÔð ×,Ò,¨_Ñ=Ô=ˆØ#+ˆÔ åÝ ×!5Ò!5Ð6GÑ!HÔ!Hñ
ô 
ˆð !%ˆÔå˜w™<œ<ˆÔå� d×&:Ò&:¸:Ñ&FÔ&FÑGÔGˆØ ˆÔØ)-×)@Ò)@Ñ)BÔ)BˆÔ&à×ÒÑ!Ô!Ð!à×ÒÑ Ô Ð Ø× Ò Ñ"Ô"Ð"Ð"Ð"rB   c                óô   — | j         }|                     d¦  «        }|                     ¦   «         D ]F}|                     |¦  «        }t          |d¦  «        rd|_        Œ/t          |d¦  «        rd|_        ŒGdS )z8Set the ``editable_mode`` flag in the build sub-commandsr#   Úeditable_modeTÚinplaceN)rZ   r£   Úget_sub_commandsÚhasattrr¯   r°   )rU   rY   r#   Úcmd_nameÚcmds        r@   r«   z!editable_wheel._set_editable_modeð   sŒ   € àÔ ˆØ×$Ò$ WÑ-Ô-ˆØ×.Ò.Ñ0Ô0ð 	#ð 	#ˆHØ×&Ò& xÑ0Ô0ˆCÝ�s˜OÑ,Ô,ð #Ø$(�Ô!Ð!Ý˜˜iÑ(Ô(ð #Ø"�”øð	#ð 	#rB   ú tuple[list[str], dict[str, str]]c                óx  — g }i }|                       d¦  «        }|                     ¦   «         D ]‰}|                       |¦  «        }t          |d¦  «        r)|                     |                     ¦   «         pg ¦  «         t          |d¦  «        r)|                     |                     ¦   «         pi ¦  «         ŒŠ||fS )Nr#   Úget_outputsÚget_output_mapping)rh   r±   r²   Úextendr·   Úupdater¸   )rU   ÚfilesÚmappingr#   r³   r´   s         r@   Ú_collect_build_outputsz%editable_wheel._collect_build_outputsû   sÁ   € ØˆØ"$ˆØ×*Ò*¨7Ñ3Ô3ˆà×.Ò.Ñ0Ô0ð 	?ð 	?ˆHØ×,Ò,¨XÑ6Ô6ˆCÝ�s˜MÑ*Ô*ð 6Ø—’˜SŸ_š_Ñ.Ô.Ð4°"Ñ5Ô5Ð5Ý�sÐ0Ñ1Ô1ð ?Ø—’˜s×5Ò5Ñ7Ô7Ð=¸2Ñ>Ô>Ð>øà�gˆ~ÐrB   Ú	dist_namec                ó  — |                       ||||¦  «         |                      ¦   «          |                      ¦   «         \  }}|                      d¦  «         |                      d¦  «         |                      d¦  «         ||fS )Nr’   r“   r‘   )r­   Ú_run_build_subcommandsr½   Ú_run_install)rU   r¾   r�   rŽ   r�   r»   r¼   s          r@   Ú_run_build_commandsz"editable_wheel._run_build_commands	  s‹   € ð 	×Ò˜i¨¸ÀGÑLÔLÐLØ×#Ò#Ñ%Ô%Ð%Ø×4Ò4Ñ6Ô6‰ˆˆwØ×Ò˜)Ñ$Ô$Ð$Ø×Ò˜)Ñ$Ô$Ð$Ø×Ò˜&Ñ!Ô!Ð!Ø�gˆ~ÐrB   c                ó  — |                       d¦  «        }|                     ¦   «         D ]^}|                       |¦  «        }|dk    r,t          |¦  «        t          ur|                      |¦  «         ŒI|                      |¦  «         Œ_dS )a}  
        Issue #3501 indicates that some plugins/customizations might rely on:

        1. ``build_py`` not running
        2. ``build_py`` always copying files to ``build_lib``

        However both these assumptions may be false in editable_wheel.
        This method implements a temporary workaround to support the ecosystem
        while the implementations catch up.
        r#   r$   N)rh   r±   Útyper¨   Ú_safely_runÚrun_command)rU   r#   rl   r´   s       r@   rÀ   z%editable_wheel._run_build_subcommands  s˜   € ð ×*Ò*¨7Ñ3Ô3ˆØ×*Ò*Ñ,Ô,ð 	'ð 	'ˆDØ×,Ò,¨TÑ2Ô2ˆCØ�zÒ!Ð!¥d¨3¡i¤iµ|Ð&CÐ&CØ× Ò  Ñ&Ô&Ð&Ð&à× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	'rB   r³   c                ó°   — 	 |                       |¦  «        S # t          $ r4 t          j        ddt	          j        ¦   «         › d|› d|› d�¦  «         Y d S w xY w)Nz0Customization incompatible with editable installz
                zŒ

                If you are seeing this warning it is very likely that a setuptools
                plugin or customization overrides the `a  ` command, without
                taking into consideration how editable installs run build steps
                starting from setuptools v64.0.0.

                Plugin authors and developers relying on custom build steps are
                encouraged to update their `aa  ` implementation considering the
                information about editable installs in
                https://setuptools.pypa.io/en/latest/userguide/extension.html.

                For the time being `setuptools` will silence this error and ignore
                the faulty command, but this behavior will change in future versions.
                )rÆ   rk   r!   r=   Ú	tracebackÚ
format_exc)rU   r³   s     r@   rÅ   zeditable_wheel._safely_run.  sœ   € ð	Ø×#Ò# HÑ-Ô-Ð-øÝð 	ð 	ð 	Ý(Ô-ØBðÝÔ%Ñ'Ô'ðð ð 9Að	ð ð .6ðð ð ñô ð ð ð ð ð	øøøs   ‚ —:AÁAc           
     óú  — ddl m} |                      d¦  «        }|j        }d                     |                     ¦   «         ¦  «        }d}|› d|› d|› d�}t          | j        |¦  «        }|                     ¦   «         r| 	                    ¦   «          t          |¬¦  «        }	t          d¬¦  «        }
t          d	¬¦  «        }|	5 }|
5 }|5 }t          |t          | j        ¦  «        j        ¦  «        }t          j        | j        |¦  «         |                      ||¦  «         |                      ||||¦  «        \  }}|                      |||¦  «        }|5   ||d
¦  «        5 } ||||¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |S )Nr   r*   r%   ú-z
0.editablez.whl)Úsuffixz
.build-libz.build-tempÚw)Úwheel.wheelfiler+   rh   rl   r`   Úget_tagr   rQ   ry   Úunlinkr   rR   ÚshutilÚcopytreer„   rÂ   Ú_select_strategyÚwrite_files)rU   rd   r+   r%   r¾   ÚtagÚ	build_tagÚarchive_nameÚ
wheel_pathr�   rŽ   Ú	build_tmpÚunpackedÚlibÚtmpÚunpacked_dist_infor»   r¼   ÚstrategyÚ	wheel_objs                       r@   rj   z!editable_wheel._create_wheel_fileJ  sH  € Ø-Ð-Ð-Ð-Ð-Ð-à×.Ò.¨{Ñ;Ô;ˆ	Ø”Nˆ	Ø�hŠh�{×*Ò*Ñ,Ô,Ñ-Ô-ˆØ ˆ	Ø#Ð;Ð; iÐ;Ð;°#Ð;Ð;Ð;ˆÝ˜$œ-¨Ñ6Ô6ˆ
Ø×ÒÑÔð 	 Ø×ÒÑÔÐå+°<Ð@Ñ@Ô@ˆÝ&¨lÐ;Ñ;Ô;ˆ	Ý&¨mÐ<Ñ<Ô<ˆ	àð 	0˜x¨ð 	0°c¸9ð 	0ÈÝ!% hµ°TÔ5GÑ0HÔ0HÔ0MÑ!NÔ!NÐÝŒO˜DÔ.Ð0BÑCÔCÐCØ×$Ò$ X¨yÑ9Ô9Ð9Ø!×5Ò5°iÀÈ3ÐPSÑTÔT‰NˆE�7Ø×,Ò,¨Y¸¸SÑAÔAˆHØð 0ð 0˜9˜9 Z°Ñ5Ô5ð 0¸Ø�˜ E¨7Ñ3Ô3Ð3Ø×%Ò% hÑ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð Ðs£   ÃG0Ã	GÃBGÅF+	Å%#FÆF+	ÆFÆF+	ÆFÆF+	ÆGÆ+F/Æ/GÆ2F/Æ3GÆ6GÇGÇGÇ	GÇ
GÇG0ÇG	ÇG0Ç G	Ç!G0Ç0G4Ç7G4Úcategoryc                óÄ   — t          | j        d|› �d ¦  «        }|rB |¦   «         r:t                               d|› d�¦  «         |                      d|› �¦  «         d S d S d S )NÚhas_zInstalling z as non editableÚinstall_)ÚgetattrrZ   Ú_loggerÚinforÆ   )rU   rà   Úhas_categorys      r@   rÁ   zeditable_wheel._run_installf  s‰   € Ý˜tÔ0Ð2C¸Ð2CÐ2CÀTÑJÔJˆØð 	4˜L˜L™NœNð 	4Ý�LŠLÐA xÐAÐAÐAÑBÔBÐBØ×ÒÐ2¨Ð2Ð2Ñ3Ô3Ð3Ð3Ð3ð	4ð 	4ð 	4ð 	4rB   rÕ   ÚEditableStrategyc                ó\  — d|› d|› �}t          | j        ¦  «        }t                               | j        ¦  «        }|t          j        u r:t          t          | j        d|¦  «        ¦  «        }t          | j        |||¦  «        S t          | j        ¦  «        }t          || j        |¦  «        }	|t          j        u }
t          | j        ¦  «        dhk    r|	s|
r@| j                             dd¦  «        }t          | j        |t          ||¦  «        g¦  «        S t!          | j        |¦  «        S )zDDecides which strategy to use to implement an editable installation.ú__editable__.rË   r#   rN   r{   )r   rS   r/   rA   r3   rG   Ú
_empty_dirÚ	_LinkTreerZ   Ú_find_packagesÚ_simple_layoutr^   r7   Úsetr}   Ú
_StaticPthÚ_TopLevelFinder)rU   rl   rÕ   rŽ   Ú
build_namerS   r3   Úauxiliary_dirÚpackagesÚhas_simple_layoutÚis_compat_modeÚsrc_dirs               r@   rÓ   zeditable_wheel._select_strategyl  s#  € ð 2 TÐ1Ð1¨CÐ1Ð1ˆ
Ý˜4Ô+Ñ,Ô,ˆÝ×$Ò$ T¤YÑ/Ô/ˆà•=Ô'Ð'Ð'Ý&¥t¨DÔ,<¸gÀzÑ'RÔ'RÑSÔSˆMÝ˜TÔ.°°mÀYÑOÔOÐOå! $Ô"3Ñ4Ô4ˆÝ*¨8°TÔ5EÀ{ÑSÔSÐØ¥Ô!5Ð5ˆÝˆtÔÑ Ô  R DÒ(Ð(Ð->Ð(À.Ð(àÔ&×*Ò*¨2¨sÑ3Ô3ˆGÝ˜dÔ/°½¸[È'Ñ8RÔ8RÐ7SÑTÔTÐTõ ˜tÔ0°$Ñ7Ô7Ð7rB   ©r5   rW   )r5   r4   )rl   rw   r�   r   rŽ   r   r�   r   )r5   rµ   )
r¾   rw   r�   r   rŽ   r   r�   r   r5   rµ   )r³   rw   )rà   rw   )rl   rw   rÕ   rw   rŽ   r   r5   rè   )rC   rD   rE   rF   Údescriptionr	   r/   Úuser_optionsrV   ra   rq   rf   r„   rŒ   r­   r«   r½   rÂ   rÀ   rÅ   rj   rÁ   rÓ   rI   rB   r@   rK   rK   h   sm  € € € € € ðð ð
 W€Kð 	LØKØ	�$˜˜ Ô!6Ð!<¸"Ñ=Ô=Ð>ð€Lðð ð ðVð Vð Vð Vðð ð ð ð*	Að 	Að 	Að'ð 'ð 'ð&ð &ð &ð &ð
=#ð =#ð =#ð =#ð~	#ð 	#ð 	#ðð ð ð ðð ð ð ð'ð 'ð 'ð 'ð,ð ð ð ð8ð ð ð84ð 4ð 4ð 4ð8ð 8ð 8ð 8ð 8ð 8rB   rK   c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )rè   r¬   r+   r»   ú	list[str]r¼   úMapping[str, str]r5   Úobjectc                ó   — d S rP   rI   )rU   r¬   r»   r¼   s       r@   Ú__call__zEditableStrategy.__call__ˆ  s   € à�rB   r)   c                ó   — d S rP   rI   rT   s    r@   Ú	__enter__zEditableStrategy.__enter__‹  s   € € € rB   Ú	_exc_typeútype[BaseException] | NoneÚ
_exc_valueúBaseException | NoneÚ
_tracebackúTracebackType | Nonec                ó   — d S rP   rI   ©rU   r  r  r  s       r@   Ú__exit__zEditableStrategy.__exit__Œ  s	   € ð
 �rB   N)r¬   r+   r»   rü   r¼   rý   r5   rþ   ©r5   r)   )r  r  r  r  r  r  r5   rþ   )rC   rD   rE   r   r  r  rI   rB   r@   rè   rè   ‡  sJ   € € € € € ðð ð ð ð %Ð$Ð$Ð$ðð ð ð ð ð rB   rè   c                  ó.   — e Zd Zdd	„Zdd„Zdd„Zdd„ZdS )rð   rY   r   rl   rw   Úpath_entriesú
list[Path]r5   rW   c                ó0   — || _         || _        || _        d S rP   )rY   rl   r  )rU   rY   rl   r  s       r@   Ú__init__z_StaticPth.__init__•  s   € ØˆŒ	ØˆŒ	Ø(ˆÔÐÐrB   r¬   r+   r»   rü   r¼   rý   c                ó°   — d                      d„ | j        D ¦   «         ¦  «        }t          |› d�¦  «        }|                     d| j        › d�|¦  «         d S )Nú
c              3  óX   K  — | ]%}t          |                     ¦   «         ¦  «        V — Œ&d S rP   )rw   r~   )Ú.0Úps     r@   ú	<genexpr>z&_StaticPth.__call__.<locals>.<genexpr>�  s2   è è € ÐHÐH°�C §	¢	¡¤Ñ,Ô,ÐHÐHÐHÐHÐHÐHrB   rê   ú.pth)r`   r  Ú_encode_pthÚwritestrrl   )rU   r¬   r»   r¼   ÚentriesÚcontentss         r@   r   z_StaticPth.__call__š  sb   € ð —)’)ÐHÐH°dÔ6GÐHÑHÔHÑHÔHˆÝ '˜~˜~˜~Ñ.Ô.ˆØ�ŠÐ6 t¤yÐ6Ð6Ð6¸ÑAÔAÐAÐAÐArB   r)   c                óª   — dt          t          t          j        | j        ¦  «        ¦  «        ›d�}t
                               |t          z   ¦  «         | S )Nz_
        Editable install will be performed using .pth file to extend `sys.path` with:
        z	
        )Úlistr‡   r\   Úfspathr  rå   ÚwarningÚ_LENIENT_WARNING©rU   Úmsgs     r@   r  z_StaticPth.__enter__¡  sQ   € ðå	�c•"”)˜TÔ.Ñ/Ô/Ñ	0Ô	0ðð ð ˆõ 	�Š˜Õ.Ñ.Ñ/Ô/Ð/ØˆrB   r  rþ   r  r  c                ó   — d S rP   rI   r
  s       r@   r  z_StaticPth.__exit__©  s	   € ð 	ˆrB   N)rY   r   rl   rw   r  r  r5   rW   ©r¬   r+   r»   rü   r¼   rý   r5   rW   r  ©r  rþ   r  rþ   r  rþ   r5   rW   )rC   rD   rE   r  r   r  r  rI   rB   r@   rð   rð   ”  sh   € € € € € ð)ð )ð )ð )ð
Bð Bð Bð Bðð ð ð ðð ð ð ð ð rB   rð   c                  óZ   ‡ — e Zd ZdZd#ˆ fd„Zd$ˆ fd„Zd%d„Zd&d'd„Zd(d„Zd)d„Z	d*d"„Z
ˆ xZS )+rì   a`  
    Creates a ``.pth`` file that points to a link tree in the ``auxiliary_dir``.

    This strategy will only link files (not dirs), so it can be implemented in
    any OS, even if that means using hardlinks instead of symlinks.

    By collocating ``auxiliary_dir`` and the original source code, limitations
    with hardlinks should be avoided.
    rY   r   rl   rw   ró   r   rŽ   r5   rW   c                ó  •— t          |¦  «        | _        t          |¦  «                             ¦   «         | _        |                     d¦  «        j        | _        t          ¦   «                              ||| j        g¦  «         d S )Nr$   )	r   ró   r~   rŽ   r£   Ú	copy_fileÚ_fileÚsuperr  )rU   rY   rl   ró   rŽ   Ú	__class__s        €r@   r  z_LinkTree.__init__½  sn   ø€ õ " -Ñ0Ô0ˆÔÝ˜i™œ×0Ò0Ñ2Ô2ˆŒØ×)Ò)¨*Ñ5Ô5Ô?ˆŒ
Ý‰Œ×Ò˜˜t dÔ&8Ð%9Ñ:Ô:Ð:Ð:Ð:rB   r¬   r+   r»   rü   r¼   rý   c                óz   •— |                       ||¦  «         t          ¦   «                              |||¦  «         d S rP   )Ú_create_linksr+  r   )rU   r¬   r»   r¼   r,  s       €r@   r   z_LinkTree.__call__É  s=   ø€ ð 	×Ò˜5 'Ñ*Ô*Ð*Ý‰Œ×Ò˜  wÑ/Ô/Ð/Ð/Ð/rB   Úfiler4   c                ó*  — t          t          ¦  «        5  t          |¦  «                             ¦   «                              | j        ¦  «        }t          |¦  «                             t          j	        d¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nú/)
r   Ú
ValueErrorr   r~   Úrelative_torŽ   rw   Úreplacer\   Úsep)rU   r/  r_   s      r@   Ú_normalize_outputz_LinkTree._normalize_outputÏ  s³   € å•jÑ!Ô!ð 	2ð 	2Ý˜‘:”:×%Ò%Ñ'Ô'×3Ò3°D´NÑCÔCˆDÝ�t‘9”9×$Ò$¥R¤V¨SÑ1Ô1ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð ˆts   •A&BÂBÂBNÚrelative_outputÚsrc_filec                ó²   — | j         |z  }|j                             ¦   «         s|j                             d¬¦  «         |                      |||¬¦  «         d S )NT)Úparents©Úlink)ró   r†   Úis_dirre   r*  )rU   r7  r8  r<  Údests        r@   Ú_create_filez_LinkTree._create_fileÖ  s\   € ØÔ! OÑ3ˆØŒ{×!Ò!Ñ#Ô#ð 	,ØŒK×Ò dÐÑ+Ô+Ð+Ø�
Š
�8˜T¨ˆ
Ñ-Ô-Ð-Ð-Ð-rB   Úoutput_mappingc                ó˜  ‡ — ‰ j                              dd¬¦  «         t          ‰ j         ¦  «        rdnd}ˆ fd„|                     ¦   «         D ¦   «         }d„ |D ¦   «         }|D ]3}‰                      |¦  «        }|r||vr‰                      ||¦  «         Œ4|                     ¦   «         D ]\  }}‰                      |||¬¦  «         Œd S )NT)r:  rc   ÚsymÚhardc              3  óL   •K  — | ]\  }}‰                      |¦  «        |fV — Œd S rP   )r6  )r  ÚkÚvrU   s      €r@   r  z*_LinkTree._create_links.<locals>.<genexpr>ß  s:   øè è € ÐXÐX¹¸¸A�t×-Ò-¨aÑ0Ô0°!Ð4ÐXÐXÐXÐXÐXÐXrB   c                ó   — i | ]
\  }}|®||“ŒS rP   rI   )r  rE  rF  s      r@   ú
<dictcomp>z+_LinkTree._create_links.<locals>.<dictcomp>á  s   € ÐAÐAÐA™T˜Q °1°=�A�q°=°=°=rB   r;  )ró   re   Ú_can_symlink_filesÚitemsr6  r?  )	rU   Úoutputsr@  Ú	link_typeÚ
normalisedÚmappingsÚoutputÚrelativeÚsrcs	   `        r@   r.  z_LinkTree._create_linksÜ  s   ø€ ØÔ× Ò ¨¸Ð Ñ=Ô=Ð=Ý/°Ô0BÑCÔCÐO�E�EÈˆ	ØXÐXÐXÐXÀ×AUÒAUÑAWÔAWÐXÑXÔXˆ
àAÐA ZÐAÑAÔAˆàð 	4ð 	4ˆFØ×-Ò-¨fÑ5Ô5ˆHØð 4˜H¨HÐ4Ð4Ø×!Ò! (¨FÑ3Ô3Ð3øà%Ÿ^š^Ñ-Ô-ð 	=ð 	=‰MˆH�cØ×Ò˜h¨°)ÐÑ<Ô<Ð<Ð<ð	=ð 	=rB   r)   c                óN   — d}t                                |t          z   ¦  «         | S )Nz=Strict editable install will be performed using a link tree.
)rå   r   Ú_STRICT_WARNINGr"  s     r@   r  z_LinkTree.__enter__ë  s#   € ØNˆÝ�Š˜�oÑ-Ñ.Ô.Ð.ØˆrB   r  rþ   r  r  c                óF   — d| j         › d�}t          j        d|¦  «         d S )Nz\

        Strict editable installation performed using the auxiliary directory:
            z†

        Please be careful to not remove this directory, otherwise you might not be able
        to import/use your package.
        úEditable installation.)ró   r    r=   ©rU   r  r  r  r#  s        r@   r  z_LinkTree.__exit__ð  s:   € ðàÔðð ð ˆõ 	ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rB   )
rY   r   rl   rw   ró   r   rŽ   r   r5   rW   r%  )r/  rw   r5   r4   rP   )r7  rw   r8  rw   )r@  rý   r  r&  )rC   rD   rE   rF   r  r   r6  r?  r.  r  r  Ú__classcell__)r,  s   @r@   rì   rì   ²  sÎ   ø€ € € € € ðð ð
;ð 
;ð 
;ð 
;ð 
;ð 
;ð0ð 0ð 0ð 0ð 0ð 0ðð ð ð ð.ð .ð .ð .ð .ð=ð =ð =ð =ðð ð ð ð
<ð <ð <ð <ð <ð <ð <ð <rB   rì   c                  ó>   — e Zd Zdd„Zdd	„Zdd„Zdd„Zdd„Zd d„ZdS )!rñ   rY   r   rl   rw   r5   rW   c                ó"   — || _         || _        d S rP   )rY   rl   )rU   rY   rl   s      r@   r  z_TopLevelFinder.__init__  s   € ØˆŒ	ØˆŒ	ˆ	ˆ	rB   ú5tuple[str, str, dict[str, str], dict[str, list[str]]]c           	     ó  ‡ ‡	— ‰ j         j        pt          j        }t	          t          ‰ j         ¦  «        t          ‰ j         ¦  «        ¦  «        }‰ j         j        pi }t          |||¦  «        Š	t          t	          t          ‰ j         j        pg ‰	¦  «        d„ t          ‰	¦  «        D ¦   «         ¦  «        ¦  «        }ˆ	ˆ fd„‰ j         j        pg D ¦   «         }i ‰	¥|¥}d‰ j        › d�}t          j        |¦  «        }||||fS )Nc              3  ó   K  — | ]}|g fV — Œ	d S rP   rI   )r  Únss     r@   r  z0_TopLevelFinder.template_vars.<locals>.<genexpr>  s&   è è € ÐDÐD˜b�"�b�ÐDÐDÐDÐDÐDÐDrB   c                óL   •— i | ] }|t          |‰‰j        j        pd ¦  «        “Œ!S )rN   )r   rY   r[   )r  ÚpkgÚrootsrU   s     €€r@   rH  z1_TopLevelFinder.template_vars.<locals>.<dictcomp>  sB   ø€ ð 
ð 
ð 
àð Õ" 3¨¨t¬yÔ/AÐ/GÀRÑHÔHð
ð 
ð 
rB   rê   z.finder)rY   r[   r\   r]   r
   rí   Ú_find_top_level_modulesr^   Ú_find_package_rootsÚdictÚ_find_namespacesrô   Ú_find_virtual_namespacesr|   rl   r   Úsafe_identifier)
rU   r[   Ú	top_levelr^   Únamespaces_Úlegacy_namespacesr¼   rl   Úfinderr`  s
   `        @r@   Útemplate_varsz_TopLevelFinder.template_vars  s#  øø€ Ø”9Ô%Ð2­¬ˆÝ�.¨¬Ñ3Ô3Õ5LÈTÌYÑ5WÔ5WÑXÔXˆ	Ø”iÔ+Ð1¨rˆÝ# I¨{¸HÑEÔEˆåÝÝ  ¤Ô!3Ð!9°r¸5ÑAÔAØDÐDÕ$<¸UÑ$CÔ$CÐDÑDÔDñô ñ
ô 
ˆð
ð 
ð 
ð 
ð 
à”yÔ3Ð9°rð
ñ 
ô 
Ðð
 1�UÐ0Ð/Ð0ˆð
 2˜tœyÐ1Ð1Ð1ˆÝÔ/°Ñ5Ô5ˆØ�t˜W kÐ1Ð1rB   úIterator[tuple[str, bytes]]c              #  óÖ   K  — |                       ¦   «         \  }}}}t          t          |||¦  «        d¦  «        }|› d�|fV — t          d|› d|› d�¦  «        }d| j        › d�|fV — d S )Núutf-8z.pyzimport z; z
.install()rê   r  )rk  ÚbytesÚ_finder_templater  rl   )rU   rj  rl   r¼   rh  Úcontents         r@   Úget_implementationz"_TopLevelFinder.get_implementation   s˜   è è € Ø-1×-?Ò-?Ñ-AÔ-AÑ*ˆ��g˜{åÕ(¨¨w¸ÑDÔDÀgÑNÔNˆØˆ~ˆ~ˆ~˜wÐ'Ð'Ð'Ð'åÐD¨ÐDÐD°&ÐDÐDÐDÑEÔEˆØ.˜tœyÐ.Ð.Ð.°Ð8Ð8Ð8Ð8Ð8Ð8rB   r¬   r+   r»   rü   r¼   rý   c                óf   — |                       ¦   «         D ]\  }}|                     ||¦  «         Œd S rP   )rr  r  )rU   r¬   r»   r¼   r/  rq  s         r@   r   z_TopLevelFinder.__call__)  sD   € ð "×4Ò4Ñ6Ô6ð 	*ð 	*‰MˆD�'Ø�NŠN˜4 Ñ)Ô)Ð)Ð)ð	*ð 	*rB   r)   c                óN   — d}t                                |t          z   ¦  «         | S )Nz=Editable install will be performed using a meta path finder.
)rå   r   r!  r"  s     r@   r  z_TopLevelFinder.__enter__/  s$   € ØNˆÝ�Š˜Õ.Ñ.Ñ/Ô/Ð/ØˆrB   r  rþ   r  r  c                ó4   — d}t          j        d|¦  «         d S )Nz¢

        Please be careful with folders in your working directory with the same
        name as your package as they may take precedence during imports.
        rU  )r    r=   rV  s        r@   r  z_TopLevelFinder.__exit__4  s%   € ðˆõ 	ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rB   N)rY   r   rl   rw   r5   rW   )r5   rZ  )r5   rl  r%  r  r&  )	rC   rD   rE   r  rk  rr  r   r  r  rI   rB   r@   rñ   rñ      sŒ   € € € € € ðð ð ð ð2ð 2ð 2ð 2ð69ð 9ð 9ð 9ð*ð *ð *ð *ðð ð ð ð

<ð 
<ð 
<ð 
<ð 
<ð 
<rB   rñ   rq  rw   r5   ro  c                ó@  — t          j        ¦   «         5 }t          j        |t          j        ¬¦  «        }|                     | ¦  «         |                     ¦   «          |                     d¦  «         |                     ¦   «         cddd¦  «         S # 1 swxY w Y   dS )a”  
    Prior to Python 3.13 (see https://github.com/python/cpython/issues/77102),
    .pth files are always read with 'locale' encoding, the recommendation
    from the cpython core developers is to write them as ``open(path, "w")``
    and ignore warnings (see python/cpython#77102, pypa/setuptools#3937).
    This function tries to simulate this behavior without having to create an
    actual file, in a way that supports a range of active Python versions.
    (There seems to be some variety in the way different version of Python handle
    ``encoding=None``, not all of them use ``locale.getpreferredencoding(False)``
    or ``locale.getencoding()``).
    ©Úencodingr   N)	ÚioÚBytesIOÚTextIOWrapperr   ÚPTH_ENCODINGÚwriteÚflushÚseekÚread)rq  ÚbufferÚwrappers      r@   r  r  A  sÂ   € õ 
Œ‰Œð ˜ÝÔ" 6µEÔ4FÐGÑGÔGˆà�Š�gÑÔÐØ�Š‰ŒˆØ�Š�A‰ŒˆØ�{Š{‰}Œ}ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ”A2BÂBÂBÚbase_dirr   Úboolc                ó¤  — t          t          |                      ¦   «         ¦  «        ¬¦  «        5 }t          |d¦  «        t          |d¦  «        }}|                     dd¬¦  «         t          t          t          t          ¦  «        5  t          j
        ||¦  «         |                     ¦   «         r3|                     d¬¦  «        dk    r	 d d d ¦  «         d d d ¦  «         dS d d d ¦  «         n# 1 swxY w Y   	 t          j        ||¦  «         n$# t          $ r}d}t          |¦  «        |‚d }~ww xY w	 d d d ¦  «         d	S # 1 swxY w Y   d S )
N)Údirz	file1.txtz	file2.txtÚfile1rn  rw  Tz�File system does not seem to support either symlinks or hard links. Strict editable installs require one of them to be supported.F)r   rw   r~   r   Ú
write_textr   ÚAttributeErrorÚNotImplementedErrorÚOSErrorr\   ÚsymlinkÚ
is_symlinkÚ	read_textr<  rk   ÚLinksNotSupported)rƒ  rÜ   Úpath1Úpath2ro   r#  s         r@   rI  rI  V  s  € Ý	¥ H×$4Ò$4Ñ$6Ô$6Ñ 7Ô 7Ð	8Ñ	8Ô	8ð ¸CÝ˜C Ñ-Ô-­t°C¸Ñ/EÔ/EˆuˆØ×Ò˜¨7ÐÑ3Ô3Ð3Ý•nÕ&9½7ÑCÔCð 	ð 	ÝŒJ�u˜eÑ$Ô$Ð$Ø×ÒÑ!Ô!ð  e§o¢o¸w oÑ&GÔ&GÈ7Ò&RÐ&RØð	ð 	ð 	ñ 	ô 	ð 	ðð ð ñ ô ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
	1ÝŒG�E˜5Ñ!Ô!Ð!Ð!øÝð 	1ð 	1ð 	1ðPð õ $ CÑ(Ô(¨bÐ0øøøøð	1øøøð ð!ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sa   °AEÂAC1ÃEÃ%EÃ1C5	Ã5EÃ8C5	Ã9EÃ=DÄEÄ
D4ÄD/Ä/D4Ä4EÅE	ÅE	rô   úIterable[str]r^   údict[str, str]rS   r   c                ó4  ‡‡‡— ˆˆfd„| D ¦   «         }|st          ‰¦  «        i dhfv S t          j                             t	          t
          |                     ¦   «         ¦  «        ¦  «        Št          ˆfd„|                     ¦   «         D ¦   «         ¦  «        S )a[  Return ``True`` if:
    - all packages are contained by the same parent directory, **and**
    - all packages become importable if the parent directory is added to ``sys.path``.

    >>> _simple_layout(['a'], {"": "src"}, "/tmp/myproj")
    True
    >>> _simple_layout(['a', 'a.b'], {"": "src"}, "/tmp/myproj")
    True
    >>> _simple_layout(['a', 'a.b'], {}, "/tmp/myproj")
    True
    >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"": "src"}, "/tmp/myproj")
    True
    >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "a", "b": "b"}, ".")
    True
    >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "_a", "b": "_b"}, ".")
    False
    >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "_a"}, "/tmp/myproj")
    False
    >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a.a1.a2": "_a2"}, ".")
    False
    >>> _simple_layout(['a', 'a.b'], {"": "src", "a.b": "_ab"}, "/tmp/myproj")
    False
    >>> # Special cases, no packages yet:
    >>> _simple_layout([], {"": "src"}, "/tmp/myproj")
    True
    >>> _simple_layout([], {"a": "_a", "": "src"}, "/tmp/myproj")
    False
    c                ó4   •— i | ]}|t          |‰‰¦  «        “ŒS rI   r   )r  r_  r^   rS   s     €€r@   rH  z"_simple_layout.<locals>.<dictcomp>‰  s(   ø€ ÐXÐXÐXÈˆcÕ$ S¨+°{ÑCÔCÐXÐXÐXrB   rN   c           	   3  ó„   •K  — | ]:\  }}t          j        t          ‰g|                     d ¦  «        ¢R Ž |¦  «        V — Œ;dS ©r{   N)r   Ú	same_pathr   Úsplit)r  ÚkeyÚvaluer†   s      €r@   r  z!_simple_layout.<locals>.<genexpr>�  sa   øè è € ð ð áˆC�õ 	Œ�˜VÐ5 c§i¢i°¡n¤nÐ5Ð5Ð5°uÑ=Ô=ðð ð ð ð ð rB   )rï   r\   r_   Ú
commonpathr   Ú_parent_pathrJ  Úall)rô   r^   rS   Úlayoutr†   s    `` @r@   rî   rî   j  s¬   øøø€ ð> YÐXÐXÐXÐXÈxÐXÑXÔX€FØð .Ý�;ÑÔ B¨¨ :Ð-Ð-ÝŒW×Ò¥­°f·l²l±n´nÑ EÔ EÑFÔF€FÝð ð ð ð à Ÿ,š,™.œ.ðñ ô ñ ô ð rB   c                óp   — |                      | ¦  «        }|                     dt          j        z   ¦  «        S )a7  Infer the parent path containing a package, that if added to ``sys.path`` would
    allow importing that package.
    When ``pkg`` is directly mapped into a directory with a different name, return its
    own path.
    >>> _parent_path("a", "src/a")
    'src'
    >>> _parent_path("b", "src/c")
    'src/c'
    r1  )ÚremovesuffixÚrstripr\   r5  )r_  Úpkg_pathr†   s      r@   r�  r�  “  s/   € ð ×"Ò" 3Ñ'Ô'€FØ�=Š=˜�rœv™Ñ&Ô&Ð&rB   rY   r   úIterator[str]c              #  ó  K  — t          | j        pg ¦  «        E d {V —† | j        pg }d„ |D ¦   «         }| j        r
| j        V — n| j        pg }|d„ |D ¦   «         z  }|D ]}|                     d¦  «        \  }}}|V — Œ d S )Nc                ó   — g | ]}d |v ¯|‘Œ	S ©r{   rI   ©r  Úmods     r@   ú
<listcomp>z"_find_packages.<locals>.<listcomp>¥  s   € Ð>Ð>Ð>˜c°3¸#°:°:�c°:°:°:rB   c                ó.   — g | ]}d |j         v ¯|j         ‘ŒS r§  ©rl   ©r  Úxs     r@   rª  z"_find_packages.<locals>.<listcomp>ª  s!   € ÐHÐHÐH a¸#ÀÄ¸-¸-˜1œ6¸-¸-¸-rB   r{   )Úiterrô   Ú
py_modulesÚext_packageÚext_modulesÚ
rpartition)rY   r°  Únested_modulesr²  ÚmoduleÚpackageÚ_s          r@   rí   rí   ¡  sÍ   è è € Ý�D”MÐ' RÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à”Ð& B€JØ>Ð> ZÐ>Ñ>Ô>€NØÔð IØÔÐÐÐÐàÔ&Ð,¨"ˆØÐHÐH¨;ÐHÑHÔHÑHˆà ð ð ˆØ×)Ò)¨#Ñ.Ô.‰ˆ��AØˆˆˆˆðð rB   c              #  óˆ   K  — | j         pg }d„ |D ¦   «         E d {V —† | j        s| j        pg }d„ |D ¦   «         E d {V —† d S d S )Nc              3  ó"   K  — | ]
}d |v¯|V — ŒdS r—  rI   r¨  s     r@   r  z*_find_top_level_modules.<locals>.<genexpr>³  s&   è è € Ð<Ð<˜¨S¸¨^¨^�¨^¨^¨^¨^Ð<Ð<rB   c              3  ó6   K  — | ]}d |j         v¯|j         V — ŒdS r—  r¬  r­  s     r@   r  z*_find_top_level_modules.<locals>.<genexpr>·  s0   è è € ÐEÐE˜q°3¸a¼fÐ3DÐ3D�A”FÐ3DÐ3DÐ3DÐ3DÐEÐErB   )r°  r±  r²  )rY   r°  r²  s      r@   ra  ra  ±  s‰   è è € Ø”Ð& B€JØ<Ð<˜zÐ<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<àÔð FØÔ&Ð,¨"ˆØEÐE KÐEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEðFð FrB   rý   r[   c                ó\   ‡‡— ˆˆfd„t          | ¦  «        D ¦   «         }t          |¦  «        S )Nc           
     óN   •— i | ]!}|t          t          |‰‰¦  «        ¦  «        “Œ"S rI   )Ú_absolute_rootr   )r  r_  r^   r[   s     €€r@   rH  z'_find_package_roots.<locals>.<dictcomp>¿  s@   ø€ ð !ð !ð !àð 	�^Õ-¨c°;ÀÑIÔIÑJÔJð!ð !ð !rB   )ÚsortedÚ_remove_nested)rô   r^   r[   Ú	pkg_rootss    `` r@   rb  rb  º  sI   øø€ ð
!ð !ð !ð !ð !å˜(Ñ#Ô#ð!ñ !ô !€Iõ
 ˜)Ñ$Ô$Ð$rB   r_   c                óê   — t          | ¦  «        }|j        }|                     ¦   «         r!t          |                     ¦   «         ¦  «        S t          |                     ¦   «         |j        z  ¦  «        S )z(Works for packages and top-level modules)r   r†   ry   rw   r~   rl   )r_   Úpath_r†   s      r@   r½  r½  Ç  sY   € å�‰JŒJ€EØŒ\€Fà‡|‚|�~„~ð 2Ý�5—=’=‘?”?Ñ#Ô#Ð#å�6—>’>Ñ#Ô# e¤jÑ0Ñ1Ô1Ð1rB   rÀ  c           	   #  ó>  K  — | D ]—}d|vrŒ|                      d¦  «        }t          t          |¦  «        dz
  dd¦  «        D ]Y}d                     |d|…         ¦  «        }t	          t          || d¦  «        ¦  «        }|                     ¦   «         r|| vr|V — ŒZŒ˜dS )a8  By carefully designing ``package_dir``, it is possible to implement the logical
    structure of PEP 420 in a package without the corresponding directories.

    Moreover a parent package can be purposefully/accidentally skipped in the discovery
    phase (e.g. ``find_packages(include=["mypkg.*"])``, when ``mypkg.foo`` is included
    by ``mypkg`` itself is not).
    We consider this case to also be a virtual namespace (ignoring the original
    directory) to emulate a non-editable installation.

    This function will try to find these kinds of namespaces.
    r{   r"   r   éÿÿÿÿNrN   )r™  ÚrangeÚlenr`   r   r   ry   )rÀ  r_  ÚpartsÚiÚpartial_namer_   s         r@   re  re  Ò  sÀ   è è € ð ð 	#ð 	#ˆØ�cˆ>ˆ>ØØ—	’	˜#‘”ˆÝ•s˜5‘z”z A‘~ q¨"Ñ-Ô-ð 	#ð 	#ˆAØŸ8š8 E¨"¨1¨"¤IÑ.Ô.ˆLÝÕ)¨,¸	À2ÑFÔFÑGÔGˆDØ—;’;‘=”=ð # L¸	Ð$AÐ$Aà"Ð"Ð"Ð"øð	#ð		#ð 	#rB   rü   úIterator[tuple[str, list[str]]]c              #  óÊ   K  — | D ]]}t          ||d¦  «        }t          |¦  «                             ¦   «         r)t          |d¦  «                             ¦   «         s||gfV — Œ^d S )NrN   z__init__.py)r   r   ry   )rô   rÀ  r_  r_   s       r@   rd  rd  ê  s|   è è € ð ð  ð  ˆÝ   i°Ñ4Ô4ˆÝ�‰:Œ:×ÒÑÔð 	 ¥t¨D°-Ñ'@Ô'@×'GÒ'GÑ'IÔ'Ið 	 Ø˜˜�-ÐÐÐøð ð  rB   c                ó:  ‡‡— t          |                      ¦   «         ¦  «        }t          t          |                      ¦   «         ¦  «        ¦  «        D ]H\  ŠŠt          ˆˆfd„|                      ¦   «         D ¦   «         ¦  «        r|                     ‰¦  «         ŒI|S )Nc              3  óN   •K  — | ]\  }}‰|k    ot          ‰‰||¦  «        V — Œ d S rP   )Ú
_is_nested)r  ÚotherÚ
other_pathr_   r_  s      €€r@   r  z!_remove_nested.<locals>.<genexpr>÷  sR   øè è € ð 
ð 
á!��zð �5ŠLÐE�Z¨¨T°5¸*ÑEÔEð
ð 
ð 
ð 
ð 
ð 
rB   )rc  ÚcopyÚreversedr  rJ  ÚanyÚpop)rÀ  rO  r_   r_  s     @@r@   r¿  r¿  ó  s¦   øø€ Ý�)—.’.Ñ"Ô"Ñ#Ô#€Få�d 9§?¢?Ñ#4Ô#4Ñ5Ô5Ñ6Ô6ð ð ‰	ˆˆTÝð 
ð 
ð 
ð 
ð 
à%.§_¢_Ñ%6Ô%6ð
ñ 
ô 
ñ 
ô 
ð 	ð �JŠJ�s‰OŒOˆOøà€MrB   r_  r£  r†   Úparent_pathc                ó  — t          j        |¦  «        }|                      |dd¦  «                             d¦  «                             d¦  «        }|                      |¦  «        o"|t          j        t          |g|¢R Ž ¦  «        k    S )a©  
    Return ``True`` if ``pkg`` is nested inside ``parent`` both logically and in the
    file system.
    >>> _is_nested("a.b", "path/a/b", "a", "path/a")
    True
    >>> _is_nested("a.b", "path/a/b", "a", "otherpath/a")
    False
    >>> _is_nested("a.b", "path/a/b", "c", "path/c")
    False
    >>> _is_nested("a.a", "path/a/a", "a", "path/a")
    True
    >>> _is_nested("b.a", "path/b/a", "a", "path/a")
    False
    rN   r"   r{   )r   Únormpathr4  Ústripr™  Ú
startswithr   )r_  r£  r†   rÕ  Únorm_pkg_pathÚrests         r@   rÎ  rÎ     s…   € õ ”N 8Ñ,Ô,€MØ�;Š;�v˜r 1Ñ%Ô%×+Ò+¨CÑ0Ô0×6Ò6°sÑ;Ô;€DØ�>Š>˜&Ñ!Ô!ð  mµu´~Ýˆ[Ð ˜4Ð Ð Ð ñ8ô 8ò 'ð rB   Údir_c                óZ   — t          j        | d¬¦  «         t          j        | ¦  «         | S )zFCreate a directory ensured to be empty. Existing files may be removed.T)Úignore_errors)r   Úrmtreer\   Úmakedirs)rÜ  s    r@   rë   rë     s,   € å„N�4 tÐ,Ñ,Ô,Ð,Ý„K�ÑÔÐØ€KrB   c                  ó"   — e Zd Zdd„Zd„ Zd„ ZdS )r   r5   rW   c                óL   — || _         || _        || _        || _        g | _        d S rP   )rZ   r[   r�   Úeditable_namerK  )rU   rZ   r�   rã  r[   s        r@   r  z_NamespaceInstaller.__init__  s,   € Ø(ˆÔØ ˆŒØ 0ˆÔØ*ˆÔØ"$ˆŒˆˆrB   c                óf   — t           j                             | j        | j        | j        z   ¦  «        S )zInstallation target.)r\   r_   r`   r�   rã  Ú	nspkg_extrT   s    r@   Ú_get_nspkg_filez#_NamespaceInstaller._get_nspkg_file%  s%   € åŒw�|Š|˜DÔ1°4Ô3EÈÌÑ3VÑWÔWÐWrB   c                óD   — t          t          | j        ¦  «        ¦  «        S )z1Where the modules/packages should be loaded from.)Úreprrw   r[   rT   s    r@   Ú	_get_rootz_NamespaceInstaller._get_root)  s   € å•C˜œÑ&Ô&Ñ'Ô'Ð'rB   Nrø   )rC   rD   rE   r  ræ  ré  rI   rB   r@   r   r     sI   € € € € € ð%ð %ð %ð %ðXð Xð Xð(ð (ð (ð (ð (rB   r   a  from __future__ import annotations
import sys
from importlib.machinery import ModuleSpec, PathFinder
from importlib.machinery import all_suffixes as module_suffixes
from importlib.util import spec_from_file_location
from itertools import chain
from pathlib import Path

MAPPING: dict[str, str] = {mapping!r}
NAMESPACES: dict[str, list[str]] = {namespaces!r}
PATH_PLACEHOLDER = {name!r} + ".__path_hook__"


class _EditableFinder:  # MetaPathFinder
    @classmethod
    def find_spec(cls, fullname: str, path=None, target=None) -> ModuleSpec | None:  # type: ignore
        # Top-level packages and modules (we know these exist in the FS)
        if fullname in MAPPING:
            pkg_path = MAPPING[fullname]
            return cls._find_spec(fullname, Path(pkg_path))

        # Handle immediate children modules (required for namespaces to work)
        # To avoid problems with case sensitivity in the file system we delegate
        # to the importlib.machinery implementation.
        parent, _, child = fullname.rpartition(".")
        if parent and parent in MAPPING:
            return PathFinder.find_spec(fullname, path=[MAPPING[parent]])

        # Other levels of nesting should be handled automatically by importlib
        # using the parent path.
        return None

    @classmethod
    def _find_spec(cls, fullname: str, candidate_path: Path) -> ModuleSpec | None:
        init = candidate_path / "__init__.py"
        candidates = (candidate_path.with_suffix(x) for x in module_suffixes())
        for candidate in chain([init], candidates):
            if candidate.exists():
                return spec_from_file_location(fullname, candidate)
        return None


class _EditableNamespaceFinder:  # PathEntryFinder
    @classmethod
    def _path_hook(cls, path) -> type[_EditableNamespaceFinder]:
        if path == PATH_PLACEHOLDER:
            return cls
        raise ImportError

    @classmethod
    def _paths(cls, fullname: str) -> list[str]:
        paths = NAMESPACES[fullname]
        if not paths and fullname in MAPPING:
            paths = [MAPPING[fullname]]
        # Always add placeholder, for 2 reasons:
        # 1. __path__ cannot be empty for the spec to be considered namespace.
        # 2. In the case of nested namespaces, we need to force
        #    import machinery to query _EditableNamespaceFinder again.
        return [*paths, PATH_PLACEHOLDER]

    @classmethod
    def find_spec(cls, fullname: str, target=None) -> ModuleSpec | None:  # type: ignore
        if fullname in NAMESPACES:
            spec = ModuleSpec(fullname, None, is_package=True)
            spec.submodule_search_locations = cls._paths(fullname)
            return spec
        return None

    @classmethod
    def find_module(cls, _fullname) -> None:
        return None


def install():
    if not any(finder == _EditableFinder for finder in sys.meta_path):
        sys.meta_path.append(_EditableFinder)

    if not NAMESPACES:
        return

    if not any(hook == _EditableNamespaceFinder._path_hook for hook in sys.path_hooks):
        # PathEntryFinder is needed to create NamespaceSpec without private APIS
        sys.path_hooks.append(_EditableNamespaceFinder._path_hook)
    if PATH_PLACEHOLDER not in sys.path:
        sys.path.append(PATH_PLACEHOLDER)  # Used just to trigger the path hook
rl   r¼   r   údict[str, list[str]]c                óÀ   — t          t          |                     ¦   «         t          j        d¦  «        ¬¦  «        ¦  «        }t
                               | ||¬¦  «        S )z_Create a string containing the code for the``MetaPathFinder`` and
    ``PathEntryFinder``.
    r   )rš  ©rl   r¼   r   )rc  r¾  rJ  ÚoperatorÚ
itemgetterÚ_FINDER_TEMPLATEÚformatrì  s      r@   rp  rp  ‡  sL   € õ •6˜'Ÿ-š-™/œ/­xÔ/BÀ1Ñ/EÔ/EÐFÑFÔFÑGÔG€GÝ×"Ò"¨°gÈ*Ð"ÑUÔUÐUrB   c                  ó   — e Zd ZdZdS )r�  zCFile system does not seem to support either symlinks or hard links.N)rC   rD   rE   rF   rI   rB   r@   r�  r�  ‘  s   € € € € € ØMÐMÐMÐMrB   r�  )rq  rw   r5   ro  )rƒ  r   r5   r„  )rô   r’  r^   r“  rS   r   r5   r„  )rY   r   r5   r¤  )rô   r’  r^   rý   r[   r   r5   r“  )r_   r   r5   rw   )rÀ  r“  r5   r¤  )rô   rü   rÀ  r“  r5   rÊ  )rÀ  r“  r5   r“  )
r_  rw   r£  rw   r†   rw   rÕ  rw   r5   r„  )rÜ  r,   r5   r,   )rl   rw   r¼   rý   r   rê  r5   rw   )brF   Ú
__future__r   ry  Úloggingrí  r\   rÑ   rÈ   Úcollections.abcr   r   r   Ú
contextlibr   Úenumr   Úinspectr	   Ú	itertoolsr
   r   Úpathlibr   Útempfiler   Útypesr   Útypingr   r   r   r   rN   r   r   r   r   r   r   r   r2   r   r   Ú	discoveryr   rY   r   Úwarningsr    r!   r#   rš   r$   r¨   r%   rt   r&   r—   r'   r›   r(   r¥   Útyping_extensionsr)   Ú_vendor.wheel.wheelfiler+   r,   Ú	getLoggerrC   rå   r/   rS  r!  rK   rè   rð   rì   rñ   r  rI  rî   r�  rí   ra  rb  r½  re  rd  r¿  rÎ  rë   Ú	Installerr   rï  rp  Ú	FileErrorr�  rI   rB   r@   ú<module>r     s%  ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ %Ð %Ð %Ð %Ð %Ð %Ø .Ð .Ð .Ð .Ð .Ð .Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø .Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ø CÐ CÐ CÐ CÐ CÐ Càð 4Ø&Ð&Ð&Ð&Ð&Ð&à3Ð3Ð3Ð3Ð3Ð3à€WˆT˜Ð!Ñ!Ô!€Ø
ˆ'Ô
˜HÑ
%Ô
%€ð&$ð &$ð &$ð &$ð &$�Dñ &$ô &$ð &$ðR€ðÐ ð\8ð \8ð \8ð \8ð \8�Wñ \8ô \8ð \8ð~
ð 
ð 
ð 
ð 
�xñ 
ô 
ð 
ðð ð ð ð ñ ô ð ð<K<ð K<ð K<ð K<ð K<�
ñ K<ô K<ð K<ð\><ð ><ð ><ð ><ð ><ñ ><ô ><ð ><ðBð ð ð ð*ð ð ð ð(&ð &ð &ð &ðR'ð 'ð 'ðð ð ð ð Fð Fð Fð Fð
%ð 
%ð 
%ð 
%ð2ð 2ð 2ð 2ð#ð #ð #ð #ð0 ð  ð  ð  ð
ð 
ð 
ð 
ðð ð ð ð,ð ð ð ð(ð (ð (ð (ð (˜*Ô.ñ (ô (ð (ð"VÐ ðrVð Vð Vð VðNð Nð Nð Nð N˜Ô(ñ Nô Nð Nð Nð NrB   