
    wii&                    j   d dl mZ d dlZd dlZd dl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 dd
lmZ ddlmZ e
rd dlmZ d dlmZmZmZmZmZ d dlmZ  ej         e!          Z" G d de          Z#	 d(d)dZ$	 	 d(d*dZ%d+d Z& G d! d"          Z'd,d$Z( G d% d&e          Z)g d'Z*dS )-    )annotationsN)suppress)Path)TYPE_CHECKING)user_data_path)IS_WIN
fs_path_id   )Discover)
PythonInfo)
PythonSpec)ArgumentParser)Callable	GeneratorIterableMappingSequence)AppDatac                  h     e Zd ZU ded<   ded<   ded<   d fdZedd            ZddZddZ xZ	S )BuiltinzSequence[str]python_specr   app_datatry_first_withreturnNonec                (   t                                          |           |j        pt          j        g| _        | j                            d          r$| j        dd          | j        d d         z   | _        |j        | _        |j	        | _	        d S )NVIRTUALENV_PYTHONr
   )
super__init__pythonsys
executabler   _envgetr   r   )selfoptions	__class__s     l/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/virtualenv/discovery/builtin.pyr   zBuiltin.__init__   s    !!!">=cn-=9==,-- 	K#/3d6Frr6JJD(%4    parserr   c           
         |                     ddddt          dg d           |                     dd	d
t          dg d           d S )Nz-pz--pythonr    pyappendzinterpreter based on what to create environment (path/identifier/version-specifier) - by default use the interpreter where the tool is installed - first found wins. Version specifiers (e.g., >=3.12, ~=3.11.0, ==3.10) are also supported)destmetavartypeactiondefaulthelpz--try-first-withr   py_exez:try first these interpreters before starting the discovery)add_argumentstr)clsr*   s     r(   add_parser_argumentszBuiltin.add_parser_arguments'   sx    U 	 	
 	
 	
 	!M 	 	
 	
 	
 	
 	
r)   PythonInfo | Nonec                h    | j         D ])}t          || j        | j        | j                  }||c S *d S N)r   get_interpreterr   r   r#   )r%   r   results      r(   runzBuiltin.run?   sI    + 	 	K$[$2Et}VZV_``F! "tr)   r6   c                |    t          | j                  dk    r| j        d         n| j        }| j        j         d|S )Nr
   r   z discover of python_spec=)lenr   r'   __name__)r%   specs     r(   __repr__zBuiltin.__repr__F   sE    &)$*:&;&;q&@&@t""dFV.)LLDLLLr)   )r   r   )r*   r   r   r   )r   r9   r   r6   )
rA   
__module____qualname____annotations__r   classmethodr8   r>   rC   __classcell__)r'   s   @r(   r   r      s         !!!!5 5 5 5 5 5 
 
 
 [
.   M M M M M M M Mr)   r   r   Iterable[str]r   AppData | NoneenvMapping[str, str] | Noner   r9   c                   t          j        |           }t                              d|           t	                      }|t
          j        n|}t          ||||          D ]x\  }}|j        |f} | |v rt                              d|           |	                    ||          rt          
                    d|           |c S |                    |            yd S )Nzfind interpreter for spec %rzproposed %szaccepted %s)r   from_string_specLOGGERinfosetosenvironpropose_interpreterssystem_executable	satisfiesdebugadd)keyr   r   rL   rB   proposed_pathsinterpreterimpl_must_matchs           r(   r<   r<   K   s     &s++D
KK.555UUN"**C(<T>S[]`(a(a    $_+_<.  M;///  77 	LL44434r)   rB   r   .Generator[tuple[PythonInfo, bool], None, None]c              #    K   |t           j        n|}t                      }| j        r	 t          j        | j                   t           j                            | j                  }t          |          }||vr0|                    |           t          j
        |||          dfV  n# t          $ r Y nw xY wd S |D ]}t           j                            |          }	 t          j        |           t           j                            |          }t          |          }||v ri|                    |           t          j
        |||          dfV  # t          $ r Y w xY w| j        	 t          j        | j                   t           j                            | j                  }t          |          }||vr0|                    |           t          j
        |||          dfV  n# t          $ r Y nw xY w| j        rd S nt          j        |          }	t          |	j                  }t          |          }||vr|                    |           |	dfV  t          rYddlm}
  |
| ||          D ]E}t          |j                  }t          |          }||v r*|                    |           |dfV  Ft%          |           }t'          t)          |                    D ]\  }}t*                              t/          |||                      ||          D ]c\  }}t          |          }t          |          }||v r(|                    |           t0          
                    ||d|          }|||fV  dt          j        d          x}r"t5          |                                          }nPt          j        d          x}r(t5          |                                          d	z  d
z  }nt9          d	          d
z  }|                    d          D ]5}t0          
                    t          |          |d|          }||dfV  6d S )N)rL   Tr
   )rU   F)raise_on_errorrL   UV_PYTHON_INSTALL_DIRXDG_DATA_HOMEuvr    z*/bin/python)rS   rT   rR   is_abslstatpathabspathr	   rY   r   from_exeOSErrorcurrent_systemr6   r"   r   windowsrU   path_exe_finder	enumerate	get_pathsrP   rX   LazyPathDumpPathPythonInfogetenvr   
expanduserr   glob)rB   r   r   rL   tested_exesexe_rawexe_idr4   rf   current_pythonrU   r\   find_candidatesposexer]   uv_python_diruv_python_pathxdg_data_homeexe_paths                       r(   rU   rU   ^   s      "**CEEK{ 		LHTY goodi00G((F[((''' )'8EEEtKKKK  	 	 	D	 	 ! H Hwv&&
	HHTNNN good++G((F$$OOF###%gxSAAA4GGGGG  	 	 	D	 y		LHTY goodi00G((F[((''' )'8EEEtKKKK  	 	 	D	 ; 	F	 $28<<n/00G$$$$OOF### $&&&&  		(55555533D(CHH ( (k455#G,,[(('''!4''''' &d++Oy~~.. 
3 
3	T\#tS11222$3OD$9$9 	3 	3 C#hhG((F$$OOF###(11'8TY_b1ccK&!?2222	3 	"9:::} 9m,,7799)O44	4 9m,,7799D@8K'--8"''77 $ $$--c(mmXV[ad-ee"t####$ $s5   B* *
B76B7 E
E%$E%0G1 1
G>=G>Mapping[str, str]Generator[Path, None, None]c              #    K   |                      dd           }|9	 t          j        d          }n## t          t          f$ r t          j        }Y nw xY w|rt          t          |                    t          j	                            D ]j}t          t                    5  |                                r&t          |                                d           r|V  d d d            n# 1 swxY w Y   id S d S )NPATHCS_PATH)r$   rS   confstrAttributeError
ValueErrordefpathmapr   splitpathsepr   ri   is_dirnextiterdir)rL   rf   ps      r(   rn   rn      s8     7764  D|	:i((DD
+ 	 	 	:DDD	 T4::bj1122 	 	A'""  88:: $qyy{{D"9"9 GGG               	 	s!   1 AA;C%%C)	,C)	c                      e Zd Zdd	ZddZdS )ro   ry   intrf   r   rL   r   r   r   c                0    || _         || _        || _        d S r;   )ry   rf   rL   )r%   ry   rf   rL   s       r(   r   zLazyPathDump.__init__   s    	r)   r6   c                    d| j          d| j         }| j                            d          r|dz  }| j                                        D ]	                                 rt          rK| j                            dd                              d          }t          fd|D                       sin'	                                j
        t          j        z  sn# t          $ r Y nw xY w|d	z  }|j        z  }|S )
Nzdiscover PATH[z]=_VIRTUALENV_DEBUGz with =>PATHEXTz.COM;.EXE;.BAT;.CMD;c              3  p   K   | ]0}j                                                             |          V  1d S r;   )nameupperendswith).0ext	file_paths     r(   	<genexpr>z(LazyPathDump.__repr__.<locals>.<genexpr>   s?      "["[C9>#7#7#9#9#B#B3#G#G"["["["["["[r)    )ry   rf   rL   r$   r   r   r   r   anystatst_moderS   X_OKri   r   )r%   contentpathextr   s      @r(   rC   zLazyPathDump.__repr__   s-   :48::ty::8<<+,, 	*z!G!Y..00 * *	
 '')) !  !"&(,,y:O"P"P"V"VWZ"["[""["["["[SZ"["["[[[ %$%'nn..6@ !    D39>)s   C$AC5'C
C+*C+N)ry   r   rf   r   rL   r   r   r   rD   )rA   rE   rF   r   rC    r)   r(   ro   ro      s<           
     r)   ro   :Callable[[Path], Generator[tuple[Path, bool], None, None]]c                    |                      t          j        dk              | j        t          j        dk    r dd	fd}|S )
z^Given a spec, return a function that can be called on a path to find all matching files in it.win32)rk   z.exerf   r   r   (Generator[tuple[Path, bool], None, None]c              3     K   | z  }|                                 r|dfV  |                                 D ]@}                    |j                  }|r"|                                |d         dk    fV  Ad S )NFimplr    )existsr   	fullmatchr   absolute)rf   direct_pathrz   matchdirectpats       r(   	path_exesz"path_exe_finder.<locals>.path_exes   s      Vm 	%u$$$$ <<>> 	@ 	@CMM#(++E @llnneFmx&?????		@ 	@r)   )rf   r   r   r   )generate_rer!   platformstr_spec)rB   r   r   r   s     @@r(   rl   rl      sr    


3<7#:

;
;C]F
|w@ @ @ @ @ @ @ r)   c                      e Zd ZdZdS )rp   zpython info from path.N)rA   rE   rF   __doc__r   r)   r(   rp   rp     s            r)   rp   )r   rp   r<   )NN)r   rJ   r   rK   rL   rM   r   r9   )
rB   r   r   rJ   r   rK   rL   rM   r   r^   )rL   r   r   r   )rB   r   r   r   )+
__future__r   loggingrS   r!   
contextlibr   pathlibr   typingr   platformdirsr   virtualenv.infor   r	   discoverr   py_infor   py_specr   argparser   collections.abcr   r   r   r   r   virtualenv.app_data.baser   	getLoggerrA   rP   r   r<   rU   rn   ro   rl   rp   __all__r   r)   r(   <module>r      s9   " " " " " "  				 



                         ' ' ' ' ' ' . . . . . . . .                   1''''''PPPPPPPPPPPPPP000000		8	$	$.M .M .M .M .Mh .M .M .Md jn    ,  $$(	a$ a$ a$ a$ a$H          6   .! ! ! ! !Z ! ! !  r)   