
    <Bh.                     N   S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJrJrJrJrJrJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJr  SSKJrJrJ r   SSK!J"r"  SSK#J$r$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/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6J7r7J8r8  SSK9J:r:J;r;  SSK<J=r=  \
" \>5      r?S)S jr@\R                  " S5      rBS\\C   S\\;   4S jrD\,R                  " SSS5      S*S j5       rF\," SS5      S+S  j5       rGS,S! jrHS)S" jrI\," SS#S$S%9S& 5       rJS-S' jrKS( rLg).z Miscellaneous utility functions.    N)defaultdict)Iterable)	getLogger)abspathdirnameexistsisdirisfilejoinrelpath   )context)on_macon_win	open_utf8)dashlist)expand)is_urljoin_urlpath_to_url)	get_index)PrefixSetupUnlinkLinkTransaction)PackageCacheDataProgressiveFetchExtract)
PrefixData)
deprecated)CondaExitZeroDisallowedPackageError
DryRunExitPackagesNotFoundError
ParseError)rm_rf)islinkreadlinksymlink)ChannelMatch	MatchSpec)PrefixGraphc           	          [        5       n[        U 5      R                  5        H<  nU(       a  SU;   a  M  UR                  [        UR	                  SS5      5      5        M>     U$ )zV
Return the set of files which have been installed (using conda) into
a given prefix.
	file_hashfiles )setr   iter_recordsupdateget)prefixexclude_self_buildresmetas       *lib/python3.13/site-packages/conda/misc.pyconda_installed_filesr7   '   sS    
 %C6"//1+"5

3txx,-. 2 J    z(?:(?P<url_p>.+)(?:[/\\]))?(?P<fn>[^/\\#]+(?:\.tar\.bz2|\.conda))(?:#((?P<md5>[0-9a-f]{32})|((sha256:)?(?P<sha256>[0-9a-f]{64}))))?$specsreturnc              #     #    U  H  nUS:X  a  M  [        U5      (       d   [        [        U5      5      n[        R	                  U5      nUc  [        SU 35      eUR                  S5      UR                  S5      pC[        X45      n0 nUR                  S5      =n(       a  XvS'   UR                  S5      =n(       a  XS'   [        U40 UD6v   M     g 7f)Nz	@EXPLICITzCould not parse explicit URL: url_pfnmd5sha256)	r   r   r   url_patmatchr"   groupr   r(   )	r9   specmr<   r=   url	checksumsr>   r?   s	            r6   _match_specs_from_explicitrG   >   s     ;d|| vd|,D MM$9=dVDEEGGG$aggdmru!	''%. 3 "eWWX&&6&"(h)y))9 s   CCz25.3z25.9
index_argsc           
      L   [        [        5      nXS'   [        [        U 5      5      n[        R                  (       a
  [        5       e[        U5      nUR                  5         [        R                  (       a  [        S5      e[        S U5       5      nUV	V
s/ s H  u  pU
b  M
  [        U	5      PM     nn	n
U(       aB  [        U5      [        U5      :X  a  [        S5      eSR                  U5      n[        SU 35      e/ n[        U5      n[!        U5       H  u  nu  p[#        XR$                  S9nUX   S'   UR'                  U
R$                  S 5      nU(       d  MG  [)        UR+                  U5      S 5      (       a	  S X   S'   Mp  UR-                  U5        M     [/        UU[        S	 U5       5      S
[        S U5       5      S
5      n[1        U5      n[        R2                  (       d%  [        R4                  (       d  UR7                  5         UR                  5         g s  sn
n	f )NPREFIXzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.c              3   d   #    U  H&  o[        [        R                  " U5      S 5      /v   M(     g 7fN)nextr   	query_all).0rC   s     r6   	<genexpr>explicit.<locals>.<genexpr>s   s)      ITt$..t4d;<s   .0zNo package cache records foundz, z#Missing package cache records for: namer   c              3   B   #    U  H  oS    (       d  M  US   v   M     g7f)r   r   Nr-   rO   sps     r6   rP   rQ           4leebel   r-   c              3   B   #    U  H  oS    (       d  M  US    v   M     g7f)r   Nr-   rU   s     r6   rP   rQ      rW   rX   )r   listrG   r   dry_runr    r   executedownload_onlyr   tuplestrlenAssertionErrorr   r   	enumerater(   rS   r1   rM   queryappendr   r   jsonquietprint_transaction_summary)r9   r2   verboseforce_extractindexactionsfetch_specspfespecs_pcrecsrC   pcrecspecs_with_missing_pcrecsmissing_precs_listprecs_to_removeprefix_dataqnew_specprecstptxns                       r6   explicitry   ^   s   $GH1%89Kl
!+
.CKKMK
 	
  IT L &2!%1kdU	D	\  ! !()S->> !ABB!%+D!E 56H5IJ  OV$K%l3=DT

3%uzz404K%%h/66%)"&&t, 4 4l44
4l44
C  
$C<<%%'KKMM!s   	H $H c                 p    U[        U 5      S-   S  n[        (       a  U(       a  UR                  SS5      nU$ )Nr   \/)r`   r   replace)r2   pathwindows_forward_slashesr4   s       r6   rel_pathr      s4    
s6{Q 
!Cv)kk$$Jr8   c                    [        5       n[        U 5      n 1 Skn1 Skn[        (       a  UR                  SS15        S [        R
                  " U 5      5        H  nU(       a  Xd;   a  M  [        [        X5      5      (       a  UR                  U5        M=  [        R                  " [        X5      5       H  u  pxn	U=(       a    U[        U S5      :H  n
U	 H5  nU
(       a  X;   a  M  UR                  [        [        X{5      U 5      5        M7     U H:  n[        X|5      n[        U5      (       d  M   UR                  [        X5      5        M<     M     M     [        (       a(  U(       a!  UVs1 s H  oR                  SS5      iM     sn$ U$ s  snf )	z8Return the set of all files in a given prefix directory.>   envsinfopkgsusers.index.unionfs	.nonadmin	conda-bld
conda-meta.conda_lockLICENSE.txtconda-recipes>   condaactivate
deactivatez
python.appzLauncher.appc              3   8   #    U  H  oR                   v   M     g 7frL   rR   )rO   entrys     r6   rP   walk_prefix.<locals>.<genexpr>   s     :'9ezz'9   binr{   r|   )r.   r   r   r0   osscandirr
   r   addwalkr   r$   r   r}   )r2   ignore_predefined_filesr   r4   ignore	binignorer=   rootdirsr,   should_ignorefn2dnr~   s                 r6   walk_prefixr      s6   
%CV_FF 4Iv|^45:rzz&'9:"r|$v"##GGBK!#f)9!:D3SVU@S8SM S%5T89  D~$<<GGGD12  "; ;" v)478CDT3'C88
 9s   *F
c                    [        X5      n[        U 5      U-
  Vs1 s Ha  nUR                  S5      (       a  M  [        (       a  UR                  S5      (       a  M>  UR                  S5      (       a  USS U;   a  M_  UiMc     sn$ s  snf )z;Return (the set) of all untracked files for a given prefix.~z	.DS_Storez.pycN)r7   r   endswithr   )r2   r3   conda_filesr~   s       r6   	untrackedr      s    'CK  '+5
5DMM# 	 vk* 	 }}V$$Sb	[( 	5
 
 
s   BBB=Bz26.3zUse PrefixData.set_nonadmin())addendumc                 <   [         (       a  [        [        [        R                  S5      5      (       aW  [        U 5      (       d  [        R                  " U 5        [        [        U S5      S5       nUR                  S5        SSS5        ggg! , (       d  f       g= f)zFCreates $PREFIX/.nonadmin if sys.prefix/.nonadmin exists (on Windows).r   w N)
r   r   r   r   root_prefixr	   r   makedirsr   write)r2   fos     r6   touch_nonadminr      sl     v&g11;?@@V}}KKtFK0#6"HHRL 76 Av 76s   0B
Bc                 l
  ^^ [        U 5      n0 nSnU(       a  Sn[        U 5      R                  5        Ha  mTS   nX;   a  M  US:X  a	  TUS'   Sn  OGUS:X  a	  TUS'   Sn  O8TR                   H$  n	[	        U	5      R
                  U;   d  M  TXh'   SnM&     Mc     U(       a  M  U(       a  U(       dq  [        R                  (       a  [        R                  O[        R                  n
[        SU
S9  UR                  5        H  m[        STR                  5       -   U
S9  M      [        U 5      R                  5       Vs1 s H  nUS   U;  d  M  UiM     nnO'[        U 5      R                  5       Vs1 s H  oiM     nn0 nUVs/ s H  oR                  S	5      (       a  M  UPM     nn/ nU(       a  U=(       d    0 n[        S0 UD6nU H  m[	        TR
                  TR                   TR"                  S
9m[%        U4S jUR                  5       5       5      nU(       d  UR'                  T5        Mh  [)        U5      S:  a-  UR+                  T5        UR-                  [/        U5      5        M  UR+                  T5        UR-                  US   5        M     U(       a  [1        U5      e0 nU H  mTS	   UT'   M     [%        [3        U5      R4                  5      nUVs/ s H  nUU   PM
     nn[%        S [        R6                  5       5      nU H'  m[9        U4S jU5       5      (       d  M  [;        T5      e   U(       a.  [        S[)        U5      -  5        [        S[)        U5      -  5        [        R<                  (       a
  [?        5       eU GH6  n[A        U U5      n[A        UU5      n[C        U5      n[E        U5      (       d  [G        U5      (       a  [I        U5        [K        U5      (       d  [L        RN                  " U5        [E        U5      (       a  [Q        [S        U5      U5        M   [U        US5       nURW                  5       nSSS5         WR[                  S5      nUR]                  X5      nUR_                  S5      n[U        US5       nURc                  W5        SSS5        [d        Rf                  " UU5        GM9     [i        UUU(       + USS9nUU4$ s  snf s  snf s  snf s  snf ! , (       d  f       N= f! [X         a     GM  f = f! [`         a     Nf = f! , (       d  f       N= f)z(Clone existing prefix1 into new prefix2.TFrS   r   z	conda-envzDThe following packages cannot be cloned out of the root environment:)filez - rE   )rS   versionbuildc              3   X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7frL   rA   )rO   rv   rC   s     r6   rP   clone_env.<locals>.<genexpr>$  s     N>4TZZ=M$$>s   *	*r   r   c              3   8   #    U  H  n[        U5      v   M     g 7frL   )r(   )rO   ss     r6   rP   r   8  s     I-Hy||-Hr   c              3   D   >#    U  H  oR                  T5      v   M     g 7frL   r   )rO   drv   s     r6   rP   r   :  s     1jwwt}}js    zPackages: %dz	Files: %drbNzutf-8wb)rh   rj   ri   r-   )5r   r   r/   combined_dependsr(   rS   r   re   sysstderrstdoutprintvaluesdist_strr1   r   r   r   r^   rd   r`   remover   _get_best_prec_matchr!   r)   graphdisallowed_packagesanyr   r[   r    r   r   r$   r
   r#   r	   r   r   r&   r%   r   readOSErrordecoder}   encodeUnicodeDecodeErrorr   shutilcopystatry   )prefix1prefix2rh   rf   rH   untracked_filesfilterfoundrS   depfhrv   drecsrj   unknownsnotfoundprecsurls
disallowedfsrcdstdst_dirfidatar   r   rk   rC   s              `                @r6   	clone_envr      sk   (O FE
w'446D<D~w"&w{"&*{#,,S>&&&0#'FL E - 7 %& &||BV edmmo-B7 ( #7+88:
:F|6) : 	 
 #-W"5"B"B"DE"D$"DE E!&>hhuoH>H%2
'J'D$))T\\TDN5<<>NNE%UaT"		.u56T"		%(#  #H-- D%[T
  +d#))*E#()54DJ5D)IW-H-HIIJ1j111(..  ns5z)*kC001l7A7A#,'??fWoo'NW~~KK #;;HSM3'	3%wwy &
	G$A		'+A88G$D sD!RHHTN "S!7 : 	G O##m
 F ?4 *6 &% 		 " 		 "!sr   ;SS/S#S(S(S--T9S2
T3TT%2
T 	<T T
TT
T"!T"%
T3	c                    ^ U (       d   e[         R                   H+  n[        U5      m[        U4S jU 5       5      nU(       d  M+    O   U n[        R                  S[        U5      5        US   $ )Nc              3      >#    U  H3  nTR                  UR                  R                  5      (       d  M/  Uv   M5     g 7frL   )rA   channelrS   )rO   rv   channel_matchers     r6   rP   '_get_best_prec_match.<locals>.<genexpr>o  s-      
"To&;&;DLL<M<M&NDDUs   .>	>zMultiple packages found: %sr   )r   channelsr'   r^   logwarningr   )r   r   prec_matchesr   s      @r6   r   r   k  sj    L5##&w/ 
"
 
 < $ KK-x/EF?r8   )F)FTN)T)TT)TFN)M__doc__r   rer   r   collectionsr   collections.abcr   loggingr   os.pathr   r   r   r	   r
   r   r   base.contextr   common.compatr   r   r   	common.ior   common.pathr   
common.urlr   r   r   
core.indexr   	core.linkr   r   core.package_cache_datar   r   core.prefix_datar   deprecationsr   
exceptionsr   r   r    r!   r"   gateways.disk.deleter#   gateways.disk.linkr$   r%   r&   models.match_specr'   r(   models.prefix_graphr)   __name__r   r7   compiler@   r_   rG   argumentry   r   r   r   r   r   r   r-   r8   r6   <module>r     s   ' 	 	  
 # $  J J J ! 4 4   5 5 ! 9 N ( $  ( 9 9 6 ,
 ***hsm *8K *@ VV\2? 3?D FF )X  FF%DE Fy$xr8   