
    siT1                       S r SSKJr  SSKrSSKrSSK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  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/J0r0J1r1J2r2J3r3  SSK4J5r5  SSK6J7r7J8r8J9r9  SSK:J;r;J<r<  SSK=J>r>  \(       a  SSK?J@r@JArA  SSKJBrB  SSKCJDrDJErE  \" \F5      rGS0S jrH\-R                  " SSS\R                  " S5      S S!9  S1S" jrKS2S# jrL    S3             S4S$ jjrM S5     S6S% jjrNS7S& jrOS8S' jrPS9S( jrQS0S) jrR\-" S*S+S,S!9S- 5       rSS:S. jrTS/ rUg);z Miscellaneous utility functions.    )annotationsN)	getLogger)abspathdirnameexistsisdirisfilejoinrelpath)TYPE_CHECKING   )EXPLICIT_MARKER)context)on_macon_win	open_utf8)dashlist)expand)is_urljoin_urlpath_to_url)Index)PrefixSetupUnlinkLinkTransaction)PackageCacheDataProgressiveFetchExtract)
PrefixData)
deprecated)DisallowedPackageError
DryRunExitPackagesNotFoundError
ParseErrorSpecNotFoundInPackageCache)rm_rf)islinkreadlinksymlink)ChannelMatch	MatchSpec)PrefixGraph)IterableSequence)Any)PackageCacheRecordPackageRecordc           	         [        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_filesr=   /   sS    
 %C6"//1+"5

3txx,-. 2 J    z26.9z27.3url_patz(?:(?P<url_p>.+)(?:[/\\]))?(?P<fn>[^/\\#]+(?:\.conda|\.tar\.bz2))(?:#((?P<md5>[0-9a-f]{32})|((sha256:)?(?P<sha256>[0-9a-f]{64}))))?$z,Use `conda.misc._get_url_pattern()` instead.)addendumc                     [         R                  R                  5       R                  5       n SR	                  [        [        R                  U 5      5      n[        R                  " SU S35      $ )zEBuild URL pattern dynamically based on registered package extensions.|z-(?:(?P<url_p>.+)(?:[/\\]))?(?P<fn>[^/\\#]+(?:zE))(?:#((?P<md5>[0-9a-f]{32})|((sha256:)?(?P<sha256>[0-9a-f]{64}))))?$)	r   plugin_managerget_package_extractorskeysr
   mapreescapecompile)
extensionsext_patterns     r<   _get_url_patternrL   L   s]    ''>>@EEGJ((3ryy*56K::	)] +	 r>   c              #    #    [        5       nU  H  nU[        :X  a  M  [        U5      (       d   [        [	        U5      5      nUR                  U5      nUc  [        SU 35      eUR                  S5      UR                  S5      pT[        XE5      n0 nUR                  S5      =n(       a  XS'   UR                  S5      =n	(       a  XS'   [        U40 UD6v   M     g 7f)NzCould not parse explicit URL: url_pfnmd5sha256)
rL   r   r   r   r   matchr"   groupr   r)   )
specsr?   specmrN   rO   url	checksumsrP   rQ   s
             r<   _match_specs_from_explicitrY   Z   s      G?"d|| vd|,D MM$9=dVDEEGGG$aggdmru!	''%. 3 "eWWX&&6&"(h)y))9 s   CCc                0    [        U 5      n[        UUUS9  g )N)package_cache_recordsr8   requested_specs)!get_package_records_from_explicitinstall_explicit_packages)rT   r8   verboseforce_extractindexr\   r[   s          r<   explicitrb   {   s      >eD3'r>   c                   [        S U  5       5      n/ n[        U5      n[        U5       H  u  nu  px[        XxR                  S9n	XU   S'   UR                  UR                  S5      n
U
(       d  MG  [        UR                  U	5      S5      (       a	  SX6   S'   Mp  UR                  U
5        M     U(       a  [        S U 5       5      nO[        S U 5       5      n[        UU[        S U 5       5      SUS5      n[        U5      n[        R                  (       d%  [        R                  (       d  UR                  5         UR                  5         g)	z.Install a list of PackageRecords into a prefixc              3  D   #    U  H  oR                  5       U/v   M     g 7fN)to_match_spec).0recs     r<   	<genexpr>,install_explicit_packages.<locals>.<genexpr>   s     U?T++-s3?Ts    namer   Nc              3  8   #    U  H  n[        U5      v   M     g 7fre   r)   rg   rU   s     r<   ri   rj      s     (U_T4_   c              3  B   #    U  H  oS    (       d  M  US    v   M     g7f)r   Nr3   rg   sps     r<   ri   rj      s     (O2AA   c              3  B   #    U  H  oS    (       d  M  US   v   M     g7f)r   r   Nr3   rr   s     r<   ri   rj      s     4leebelrt   r3   )tupler   	enumerater)   rl   r7   nextqueryappendr   r   r   jsonquietprint_transaction_summaryexecute)r[   r8   r\   specs_pcrecsprecs_to_removeprefix_dataqrU   pcrecnew_specprecupdate_specs_for_historystptxns                 r<   r^   r^      s    U?TUULOV$K%l3=DT

3%Quzz404K%%h/66%)"&&t, 4 #((U_(U#U #((O(O#O 
4l44
 
C  
$C<<%%'KKMr>   c                @   [        S U  5       5      nU VVs/ s H  u  p#U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U Vs/ s H  ofS   PM	     sn$ s  snnf s  snf )z{Given a list of specs, find the corresponding PackageCacheRecord. If
some PackageCacheRecords are missing, raise an error.
c              3  d   #    U  H&  o[        [        R                  " U5      S 5      /v   M(     g 7fre   )rx   r   	query_allro   s     r<   ri   1_get_package_record_from_specs.<locals>.<genexpr>   s)      INt$..t4d;<s   .0zNo package cache records foundz, z#Missing package cache records for: r   )rv   strlenr#   r
   )rT   r   rU   r   specs_with_missing_pcrecsmissing_precs_listrh   s          r<   _get_package_record_from_specsr      s      IN L &2!%1kdU	D	\  ! !()S->>,-MNN!%+D!E,56H5IJ  ++lsFl++! ,s   	BBBc                    [        [        U 5      5      n[        R                  (       a
  [	        5       e[        U5      nUR                  5         [        U5      $ )zGiven the lines from an explicit.txt, create the PackageRecords for each of the
specified packages. This may require downloading the package, if it does not already
exist in the package cache.
)listrY   r   dry_runr    r   r~   r   )linesfetch_specspfes      r<   r]   r]      sE     1%89Kl "+
.CKKM *+66r>   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re   rk   )rg   entrys     r<   ri   walk_prefix.<locals>.<genexpr>   s     :'9ezz'9rp   bin\/)r4   r   r   r6   osscandirr	   r
   addwalkr   r%   r   replace)r8   ignore_predefined_fileswindows_forward_slashesr:   ignore	binignorerO   rootdirsr2   should_ignorefn2dnpaths                 r<   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)r=   r   endswithr   )r8   r9   conda_filesr   s       r<   	untrackedr     s    'CK  '+5
5DMM# 	 vk* 	 }}V$$Sb	[( 	5
 
 
s   BBB>Bz25.9z26.3zUse PrefixData.set_nonadmin()c                <   [         (       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)r8   fos     r<   touch_nonadminr     sl     v&g11;?@@V}}KKtFK0#6"HHRL 76 Av 76s   0B
Bc                  ^^ [        U 5      n[        U 5      R                  5        Vs1 s H  ofiM     nn0 nU Vs/ s H  ofR                  S5      (       a  M  UPM     n	n/ n
U	(       a  U=(       d    0 nUR	                  S5      US'   [        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        Mi  [        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  [#        U
5      e0 nU H  mTS   UT'   M     [        [%        U5      R&                  5      nU Vs/ s H  olU   PM	     nn[        S [(        R*                   5       5      nU H(  m[-        U4S	 jU 5       5      (       d  M  [/        T5      e   U(       a.  [1        S
[        U5      -  5        [1        S[        U5      -  5        [(        R2                  (       a
  [5        5       eU GH4  n[7        X5      n[7        X5      n[9        U5      n[;        U5      (       d  [=        U5      (       a  [?        U5        [A        U5      (       d  [B        RD                  " U5        [;        U5      (       a  [G        [I        U5      U5        M   [K        US5       nURM                  5       nSSS5         WRQ                  S5      nURS                  X5      nURU                  S5      n[K        US5       nURY                  W5        SSS5        [Z        R\                  " UU5        GM7     [_        UUU(       + USS9nUU4$ s  snf s  snf s  snf ! , (       d  f       N= f! [N         a     GM}  f = f! [V         a     Nf = f! , (       d  f       N= f)z(Clone existing prefix1 into new prefix2.rW   channel_urlschannels)rl   versionbuildc              3  X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7fre   rR   )rg   r   rU   s     r<   ri   clone_env.<locals>.<genexpr>7  s     N>4TZZ=M$$>s   *	*r   r   c              3  8   #    U  H  n[        U5      v   M     g 7fre   rn   )rg   ss     r<   ri   r   K  s     I-Hy||-Hrp   c              3  D   >#    U  H  oR                  T5      v   M     g 7fre   r   )rg   dr   s     r<   ri   r   M  s     1jwwt}}js    zPackages: %dz	Files: %drbNzutf-8wbF)r_   ra   r`   r3   )0r   r   r5   r7   popr   r)   rl   r   r   rv   valuesrz   r   remover   _get_best_prec_matchr!   r*   graphr   disallowed_packagesanyr   printr   r    r
   r   r%   r	   r$   r   r   r   r'   r&   r   readOSErrordecoder   encodeUnicodeDecodeErrorr   shutilcopystatrb   )prefix1prefix2r_   r|   
index_argsuntracked_filesr   drecsra   unknownsnotfoundprecsurls
disallowedfsrcdstdst_dirfidatar   r   actionsrU   s         `                @r<   	clone_envr   '  s=   (O(1>>@A@dT@EA E!&>hhuoH>H%2
!+!?
:#
#D$))T\\TDN5<<>NNE%UaT"		.u56T"		%(#  #H-- D%[T
  +d#))*E#()54J5D)IW-H-HIIJ1j111(..  ns5z)*kC001l77#,'??fWoo'NW~~KK #;;HSM3'	3%wwy &
	G$A		'+A88G$D sD!RHHTN "S!7 : 	G O##c B ?6 *6 &% 		 " 		 "!sd   N.N3N3+N8=O	N=O#3O "O0=
O	OO
OO 
O-,O-0
O>	c                   ^ U (       d  [        S5      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   $ )Nz'precs' cannot be empty.c              3     >#    U  H3  nTR                  UR                  R                  5      (       d  M/  Uv   M5     g 7fre   )rR   channelrl   )rg   r   channel_matchers     r<   ri   '_get_best_prec_match.<locals>.<genexpr>  s-      
"To&;&;DLL<M<M&NDDUs   .>	>zMultiple packages found: %sr   )
ValueErrorr   r   r(   rv   logwarningr   )r   r   prec_matchesr   s      @r<   r   r   ~  sr    344##&w/ 
"
 
 < $ KK-x/EF?r>   )F)returnz
re.Pattern)rT   Iterable[str]r  zIterable[MatchSpec])FTNN)rT   r  r8   r   r_   boolr`   r  ra   r-   r\   Sequence[str] | Noner  Nonere   )r[   zlist[PackageRecord]r8   r   r\   r  )rT   	list[str]r  Iterable[PackageCacheRecord])r   r	  r  r
  )TT)TFN)V__doc__
__future__r   r   rG   r   loggingr   os.pathr   r   r   r   r	   r
   r   typingr   base.constantsr   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*   collections.abcr+   r,   r-   models.recordsr.   r/   __name__r  r=   constantrI   rL   rY   rb   r^   r   r]   r   r   r   r   r   r3   r>   r<   <module>r$     sx   ' " 	 	   J J J   + ! 4 4   5 5  9 N ( $  ( 9 9 6 ,2A 
   

JJ	 < *H ,0  	
  * 
& -1).)) *)X,.7&)X  FF%DE FT$nr>   