
    \Zi0                       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  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.J/r/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6J7r7J8r8  SSK9J:r:J;r;  SSK<J=r=  \(       a  SSK>J?r?J@r@  SSKJArA  SSKBJCrCJDrD  \" \E5      rFS,S jrG\,R                  " SSS\R                  " S5      S S!9  S-S" jrJS.S# jrK    S/             S0S$ jjrL S1     S2S% jjrMS3S& jrNS4S' jrOS5S( jrPS,S) jrQS6S* jrRS+ rSg)7z Miscellaneous utility functions.    )annotationsN)	getLogger)abspathdirname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PackagesNotFoundInChannelsError
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_patternrK   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)
rK   r   r   r   r   matchr!   groupr   r(   )
specsr>   specmrM   rN   url	checksumsrO   rP   s
             r;   _match_specs_from_explicitrX   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_recordsr7   requested_specs)!get_package_records_from_explicitinstall_explicit_packages)rS   r7   verboseforce_extractindexr[   rZ   s          r;   explicitra   {   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rd   r(   rf   rT   s     r;   rh   ri      s     (U_T4_   c              3  B   #    U  H  oS    (       d  M  US    v   M     g7f)r   Nr2   rf   sps     r;   rh   ri      s     (O2AA   c              3  B   #    U  H  oS    (       d  M  US   v   M     g7f)r   r   Nr2   rq   s     r;   rh   ri      s     4leebelrs   r2   )tupler   	enumerater(   rk   r6   nextqueryappendr   r   r   jsonquietprint_transaction_summaryexecute)rZ   r7   r[   specs_pcrecsprecs_to_removeprefix_dataqrT   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rd   )rw   r   	query_allrn   s     r;   rh   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   )ru   strlenr"   r	   )rS   r~   rT   r   specs_with_missing_pcrecsmissing_precs_listrg   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.
)listrX   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rd   rj   )rf   entrys     r;   rh   walk_prefix.<locals>.<genexpr>   s     :'9ezz'9ro   bin\/)r3   r   r   r5   osscandirr   r	   addwalkr
   r$   r   replace)r7   ignore_predefined_fileswindows_forward_slashesr9   ignore	binignorerN   rootdirsr1   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   )r7   r8   conda_filesr   s       r;   	untrackedr     s    'CK  '+5
5DMM# 	 vk* 	 }}V$$Sb	[( 	5
 
 
s   BBB>Bc                H  ^^ [        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(       a  UR                  S5      =(       d    SOSn[#        X5      e0 nU H  mTS   UT'   M     [        [%        U5      R&                  5      nU Vs/ s H  omU   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.rV   channel_urlschannels)rk   versionbuildc              3  X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7frd   rQ   )rf   r   rT   s     r;   rh   clone_env.<locals>.<genexpr>-  s     N>4TZZ=M$$>s   *	*r   r   r2   c              3  8   #    U  H  n[        U5      v   M     g 7frd   rm   )rf   ss     r;   rh   r   D  s     I-Hy||-Hro   c              3  D   >#    U  H  oR                  T5      v   M     g 7frd   r   )rf   dr   s     r;   rh   r   F  s     1jwwt}}js    zPackages: %dz	Files: %drbNzutf-8wbF)r^   r`   r_   )0r   r   r4   r6   popr   r(   rk   r   r   ru   valuesry   r   remover   _get_best_prec_matchr    r)   graphr   disallowed_packagesanyr   printr   r   r	   r   r$   r   r#   r   r   makedirsr&   r%   r   readOSErrordecoder   encodeUnicodeDecodeErrorwriteshutilcopystatra   )prefix1prefix2r^   r{   
index_argsuntracked_filesr   drecsr`   unknownsnotfoundprecsr   urls
disallowedfsrcdstdst_dirfidatar   foactionsrT   s         `                 @r;   	clone_envr     sX   (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
z28bR-hEE 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##i B ?< *6 &% 		 " 		 "!sd   OOOO O1,O =O13PP 
O.	*O1.O11
P ?P 
PP
P!	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rd   )rQ   channelrk   )rf   r   channel_matchers     r;   rh   '_get_best_prec_match.<locals>.<genexpr>|  s-      
"To&;&;DLL<M<M&NDDUs   .>	>zMultiple packages found: %sr   )
ValueErrorr   r   r'   ru   logwarningr   )r   r   prec_matchesr   s      @r;   r   r   w  sr    344##&w/ 
"
 
 < $ KK-x/EF?r=   )F)returnz
re.Pattern)rS   Iterable[str]r   zIterable[MatchSpec])FTNN)rS   r   r7   r   r^   boolr_   r   r`   r,   r[   Sequence[str] | Noner   Nonerd   )rZ   zlist[PackageRecord]r7   r   r[   r  )rS   	list[str]r   Iterable[PackageCacheRecord])r   r  r   r  )TT)TFN)T__doc__
__future__r   r   rF   r   loggingr   os.pathr   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<   constantrH   rK   rX   ra   r]   r   r\   r   r   r   r   r2   r=   r;   <module>r     sV   ' " 	 	   B B   + ! 4 4   5 5  9 N ( $  ( 9 9 6 ,2A 
   

JJ	 < *H ,0  	
  * 
& -1).)) *)X,.7&)X W$tr=   