
    ǆi"                     P   S r SSKrSSKrSSKrSSKJr  SSKrSSKr	SSK
Jr  SSKJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  / SQr\R:                  rSr\R>                  r \R>                  r!S r"S r#S r$\	RJ                  RH                  R                   \$l         \(       a  \	RJ                  RL                  r'O&\RP                  " \	RJ                  RL                  5      r' " S S\'5      r&S r)\RT                  4S jr+ " S S\,5      r-\R\                  " 5         g)z@Extensions to the 'distutils' for large or complex distributions    N)TYPE_CHECKING)DistutilsOptionError   )loggingmonkey)version)Require)PackageFinderPEP420PackageFinder)Distribution)	Extension)SetuptoolsDeprecationWarning)setupr   Commandr   r	   r   find_packagesfind_namespace_packagesc                      " S S[         R                  R                  5      nU" U 5      nUR                  SS9  UR                  (       a  [        U5        g g )Nc                   B   ^  \ rS rSrSrU 4S jrSU 4S jjrS rSrU =r	$ )4_install_setup_requires.<locals>.MinimalDistribution+   zT
A minimal version of a distribution for supporting the
fetch_build_eggs interface.
c                    > Sn[        U5      [        U5      -   Vs0 s H  o3X   _M	     nn[        TU ]	  U5        U R                  R	                  5         g s  snf )N)dependency_linkssetup_requires)setsuper__init__set_defaults_disable)selfattrs_inclkfiltered	__class__s        c/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/setuptools/__init__.pyr   =_install_setup_requires.<locals>.MinimalDistribution.__init__1   sT    8E-0Z#e*-DE-D58-DHEGX&&&( Fs   Ac                 X   >  [         TU ]  U5      u  p#US4$ ! [         a    US4s $ f = f)zAIgnore ``pyproject.toml``, they are not related to setup_requires )r    _split_standard_project_metadata	Exception)r   	filenamescfgtomlr$   s       r%   _get_project_config_filesN_install_setup_requires.<locals>.MinimalDistribution._get_project_config_files8   s?    %!GDYO	 7N  % "}$%s    ))c                     g)zH
Disable finalize_options to avoid building the working set.
Ref #2158.
Nr(   )r   s    r%   finalize_optionsE_install_setup_requires.<locals>.MinimalDistribution.finalize_options@   s        r(   N)
__name__
__module____qualname____firstlineno____doc__r   r.   r1   __static_attributes____classcell__r$   s   @r%   MinimalDistributionr   +   s    	
	)		 	r3   r=   T)ignore_option_errors)	distutilscorer   parse_config_filesr   _fetch_build_eggs)r    r=   dists      r%   _install_setup_requiresrD   (   sM    inn99 6 u%D 	6$ r3   c                 
    U R                  U R                  5        g ! [         aZ  nSnSUR                  R                  ;   a8  [        US5      (       a  UR                  U5        e U R                  SU S35        e S nAff = f)Na  
        It is possible a package already installed in your system
        contains an version that is invalid according to PEP 440.
        You can try `pip install --use-pep517` as a workaround for this problem,
        or rely on a new virtual environment.

        If the problem refers to a package that is not installed yet,
        please contact that package's maintainers or distributors.
        InvalidVersionadd_note
)fetch_build_eggsr   r*   r$   r5   hasattrrG   announce)rC   exmsgs      r%   rB   rB   N   s}    d112  r||444r:&&C  	 3%rl+s    
BAA==Bc                      [         R                  " 5         [        U 5        [        R                  R
                  " S0 U D6$ )Nr(   )r   	configurerD   r?   r@   r   )r    s    r%   r   r   c   s.    E">>(%((r3   c                   ^   ^  \ rS rSr% SrSr\\S'   S\4U 4S jjrSS jr	S r
SS	 jrS
rU =r$ )r   s   a	  
Setuptools internal actions are organized using a *command design pattern*.
This means that each action (or group of closely related actions) executed during
the build should be implemented as a ``Command`` subclass.

These commands are abstractions and do not necessarily correspond to a command that
can (or should) be executed via a terminal, in a CLI fashion (although historically
they would).

When creating a new command from scratch, custom defined classes **SHOULD** inherit
from ``setuptools.Command`` and implement a few mandatory methods.
Between these mandatory methods, are listed:

.. method:: initialize_options(self)

    Set or (reset) all options/attributes/caches used by the command
    to their default values. Note that these values may be overwritten during
    the build.

.. method:: finalize_options(self)

    Set final values for all options/attributes used by the command.
    Most of the time, each option/attribute/cache should only be set if it does not
    have any value yet (e.g. ``if self.attr is None: self.attr = val``).

.. method:: run(self)

    Execute the actions intended by the command.
    (Side effects **SHOULD** only take place when ``run`` is executed,
    for example, creating new files or writing to the terminal output).

A useful analogy for command classes is to think of them as subroutines with local
variables called "options".  The options are "declared" in ``initialize_options()``
and "defined" (given their final values, aka "finalized") in ``finalize_options()``,
both of which must be defined by every command class. The "body" of the subroutine,
(where it does all the work) is the ``run()`` method.
Between ``initialize_options()`` and ``finalize_options()``, ``setuptools`` may set
the values for options/attributes based on user's input (or circumstance),
which means that the implementation should be careful to not overwrite values in
``finalize_options`` unless necessary.

Please note that other commands (or other parts of setuptools) may also overwrite
the values of the command's options/attributes multiple times during the build
process.
Therefore it is important to consistently implement ``initialize_options()`` and
``finalize_options()``. For example, all derived attributes (or attributes that
depend on the value of other attributes) **SHOULD** be recomputed in
``finalize_options``.

When overwriting existing commands, custom defined classes **MUST** abide by the
same APIs implemented by the original class. They also **SHOULD** inherit from the
original class.
FdistributionrC   c                 X   > [         TU ]  U5        [        U 5      R                  U5        g)zR
Construct the command for dist, updating
vars(self) with any keyword parameters.
N)r   r   varsupdate)r   rC   kwr$   s      r%   r   Command.__init__   s$    
 	T
"r3   c           	          [        X5      nUc  [        XU5        U$ [        U[        5      (       d  [	        SU< SU< SU< S35      eU$ )N'z' must be a z (got `z`))getattrsetattr
isinstancestrr   )r   optionwhatdefaultvals        r%   _ensure_stringlikeCommand._ensure_stringlike   sK    d#;D'*NC%%&28$D  
r3   c                    [        X5      nUc  g[        U[        5      (       a"  [        X[        R
                  " SU5      5        g[        U[        5      (       a  [        S U 5       5      nOSnU(       d  [        SU< SU< S35      eg)a|  Ensure that 'option' is a list of strings.  If 'option' is
currently a string, we split it either on /,\s*/ or /\s+/, so
"foo bar baz", "foo,bar,baz", and "foo,   bar baz" all become
["foo", "bar", "baz"].

..
   TODO: This method seems to be similar to the one in ``distutils.cmd``
   Probably it is just here for backward compatibility with old Python versions?

:meta private:
Nz,\s*|\s+c              3   B   #    U  H  n[        U[        5      v   M     g 7fr4   )r\   r]   ).0vs     r%   	<genexpr>-Command.ensure_string_list.<locals>.<genexpr>   s     9SAs++Ss   FrY   z!' must be a list of strings (got ))	rZ   r\   r]   r[   resplitlistallr   )r   r^   ra   oks       r%   ensure_string_listCommand.ensure_string_list   sw     d#;S!!D"((;"<=#t$$9S99*AGM  r3   c                 f    [         R                  XU5      n[        U5      R                  U5        U$ r4   )_Commandreinitialize_commandrT   rU   )r   commandreinit_subcommandsrV   cmds        r%   rt   Command.reinitialize_command   s,    ++D;MNS	
r3   r(   r4   )F)r5   r6   r7   r8   r9   command_consumes_argumentsr   __annotations__r   rb   rp   rt   r:   r;   r<   s   @r%   r   r   s   s7    4l "'\ 	6 r3   r   c                     S [         R                  " U SS9 5       n[        [         R                  R                  U5      $ )z
Find all files under 'path'
c              3   z   #    U  H1  u  pnU  H$  n[         R                  R                  X5      v   M&     M3     g 7fr4   )ospathjoin)rf   basedirsfilesfiles        r%   rh   #_find_all_simple.<locals>.<genexpr>   s9      !@DD 	T   	!!@s   9;T)followlinks)r}   walkfilterr~   isfile)r~   resultss     r%   _find_all_simpler      s3    !#4!@G
 "''..'**r3   c                     [        U 5      nU [        R                  :X  a8  [        R                  " [        R
                  R                  U S9n[        X!5      n[        U5      $ )z
Find all files under 'dir' and return the list of full filenames.
Unless dir is '.', return full filenames with dir prepended.
)start)	r   r}   curdir	functoolspartialr~   relpathmaprm   )dirr   make_rels      r%   findallr      sH    
 S!E
bii$$RWW__C@H$;r3   c                       \ rS rSrSrSrg)sic   z;Treat this string as-is (https://en.wikipedia.org/wiki/Sic)r(   N)r5   r6   r7   r8   r9   r:   r(   r3   r%   r   r      s    Er3   r   )/r9   r   r}   rk   typingr   _distutils_hack.override_distutils_hackdistutils.corer?   distutils.errorsr    r   r   r   _version_moduledependsr	   	discoveryr
   r   rC   r   	extensionr   warningsr   __all____version__bootstrap_install_fromfindr   r   rD   rB   r   r@   r   rs   get_unpatchedr   r   r   r]   r   	patch_allr(   r3   r%   <module>r      s    F  	 	     1  (  9    2	 ))  ""-22 # L*) $$,,~~%%H##INN$:$:;Hkh k\	+ 		 	F# F
    r3   