
    <BhU                       S r SSKJr  SSKrSSKJr  SSK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  SSKJr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'  SSK(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  SSK7J8r8J9r9  SSK:J;r;  SSK<J=r=J>r>J?r?  SSK@JArA  SSKBJCrC  SSKDJErEJFrF  SSKJGrG  SSKGJHrH  SSKIJJrJ  \" \K5      rL\" S5      rM\'" SS S!S"9S8S# j5       rN\'" SS S$S"9S9S:S% jj5       rO\'" SS S&S"9S9S;S' jj5       rPS<S( jrQ\'" SS S)S"9S* 5       rRS9S+ jrSS=S, jrT " S- S.5      rU " S/ S05      rVS>S?S1 jjrWS@S2 jrXS3 rYS>S4 jrZS5 r[SAS6 jr\S9S7 jr]g)BzConda package installation logic.

Core logic for `conda [create|install|update|remove]` commands.

See conda.cli.main_create, conda.cli.main_install, conda.cli.main_update, and
conda.cli.main_remove for the entry points into this module.
    )annotationsN)	getLogger)abspathbasenameexistsisdir)Path)
IndexedSet   )
CondaError)REPODATA_FNROOT_ENV_NAMEUpdateModifier)context)NULLis_package_file)_supplement_index_with_prefixcalculate_channel_urls	get_index)PrefixSetupUnlinkLinkTransaction)
PrefixData)diff_for_unlink_link_precs)
deprecated)CondaEnvExceptionCondaExitZeroCondaImportErrorCondaIndexErrorCondaSystemExitCondaValueError"DirectoryNotACondaEnvironmentError
DryRunExitNoBaseEnvironmentErrorPackageNotInstalledErrorPackagesNotFoundErrorResolvePackageNotFoundSpecsConfigurationConflictErrorUnsatisfiableError)delete_trashpath_is_clean)History)_get_best_prec_match	clone_envexplicit)	MatchSpec)PrefixGraph)
confirm_ynget_spinner   )common)check_non_admin)set_keyszconda.stderr25.926.3zUse PrefixData.exists())addendumc                Z    [        U 5      n U R                  5       (       d  [        S5      eg)zQ
Validate that we are receiving at least one valid value for --name or --prefix.
z2The environment you have specified does not exist.N)r	   r   r   )prefixs    1lib/python3.13/site-packages/conda/cli/install.pyvalidate_prefix_existsr>   D   s)    
 &\F==?? TUU     z4Use PrefixData.exists() + PrefixData.validate_path()c                V   SSK JnJn  SSKJn  [
        R                  U ;   a	  U" U 5      n OU" XSS9n U(       do  [
        R                  R                  U 5      (       aK  [
        R                  R                  [
        R                  R                  U 5      5      n[        SU S35      eU $ )z*Ensure that the new prefix does not exist.r   )r   validate_prefix_name)expandF)ctx
allow_basezThe environment 'z&' already exists. Override with --yes.)base.contextr   rA   common.pathrB   osseppathr   r   normpathr   )destforcer   rA   rB   env_names         r=   validate_new_prefixrN   N   s    
 =$	vv~d|#D%HRWW^^D))77##BGG$4$4T$:;z)OP
 	
 Kr?   zOUse PrefixData.exists(), PrefixData.validate_path(), PrefixData.validate_name()c                   [         R                  U ;   a  [        S[         R                   S35      e[        U 5      nS nU[        :X  a  SU S3n[        U 5      (       a?  [        U 5      (       a*  S[        S [         R                  " U 5      5       5      ;  a  g SU  3nU(       a  [        X15      eSU ;   a  [        R                  S	U  S
35        g g )Nz(Cannot create a conda environment with 'z' in the prefix. Aborting.'z ' is a reserved environment namez
conda-metac              3  8   #    U  H  oR                   v   M     g 7fN)name).0entrys     r=   	<genexpr>check_prefix.<locals>.<genexpr>s   s      7
$65JJ$6   zprefix already exists:  zCWARNING: A space was detected in your requested environment path:
'z'
Spaces in paths can sometimes be problematic. To minimize issues,
make sure you activate your environment before running any executables!
)rG   pathsepr!   r   r   r   r   tuplescandir	stderrlogwarning)r<   jsonrS   errors       r=   check_prefixra   d   s     
zzV6rzzlB\]
 	
 FDE}D69:f~~==\ 7
$&JJv$67
 2
 
 )&2e**
f}x XX	
 r?   c                   [         R                  U ;   a  [        [        U 5      5      nO[        R                  " U 5      nUR                  5         [        UR                  5      nU(       d  [        SU 35        [        SU 35        [        XaU(       + X4S9u  pxU(       a!  [        R                  " U[        U5      UUS9  g g )NzSource:      zDestination: )verbosequiet
index_args)actionsuntracked_files
src_prefix
dst_prefix)rG   rH   r   r   	from_nameassert_environmentstrprefix_pathprintr.   r5   stdout_json_successlist)	src_argri   r_   rd   re   source_prefix_datarh   rf   rg   s	            r=   cloners      s    	vv'(89'11':))+'334Jj\*+j\*+(D G "" 1!!		
 r?   z%Use conda.cli.common.print_activate()c                     SSK Jn  U" U 5        g )Nr4   )print_activate)r5   ru   )env_name_or_prefix_print_activates     r=   ru   ru      s    9&'r?   c                V     [        U 5      $ ! [         a    [        SU  S3U5      ef = f)Nz expected revision number, not: 'rP   )int
ValueErrorr!   )argr_   s     r=   get_revisionr|      s9    O3x O @QGNNOs   
 (c                \    [         R                  U R                  (       + U R                  S.$ )z}Returns a dict of args required for fetching an index
:param args: The args provided by the cli
:returns: dict of index args
)channel_urlsprepend	use_local)r   channelsoverride_channelsr   argss    r=   get_index_argsr      s,      (( ---^^ r?   c                  &    \ rS rSrS rS rS rSrg)TryRepodata   c                @    Xl         X l        X0l        X@l        XPl        g rR   )notify_successrepodatalast_repodatare   allowed_errors)selfr   r   r   re   r   s         r=   __init__TryRepodata.__init__   s      - *$,r?   c                    U R                   $ rR   )r   r   s    r=   	__enter__TryRepodata.__enter__   s    }}r?   c           	        U(       d  U R                  5         [        X R                  5      (       a-  U R                  U R                  :w  a  [        USS5      (       a  g[        U[        5      (       aR  [        [        U R                  S   U R                  S   S U R                  S   S95      n[        UR                  U5      eg )Nallow_retryTr~   r   r   )r~   r   platformr   )r   
isinstancer   r   r   getattrr'   r[   r   re   r&   _formatted_chains)r   exc_type	exc_value	tracebackchannels_urlss        r=   __exit__TryRepodata.__exit__   s    !$ y"5"566$"4"44	=$77	#9::!&!%!@ OOI6!"ook:	M (	(C(C]SS ;r?   )r   re   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__ r?   r=   r   r      s    -$Tr?   r   c                  *    \ rS rSrSS jrS rS rSrg)	Repodatas   c                R    Xl         X l        SU l        [        [        /UQ7U l        g )NF)repodata_fnsre   successr'   r&   r   )r   r   re   allows_errorss       r=   r   Repodatas.__init__   s.    ($"!
 
r?   c              #     #    U R                    HR  n[        U R                  UU R                   S   U R                  U R                  5      v   U R
                  (       d  MR    g    g 7f)N)r   r   succeedre   r   r   )r   r   s     r=   __iter__Repodatas.__iter__   sX     ))H!!"%##  ||| *s   AA&!A&c                    SU l         g )NT)r   r   s    r=   r   Repodatas.succeed  s	    r?   )r   re   r   r   N)r   )r   r   r   r   r   r   r   r   r   r?   r=   r   r      s    

r?   r   c                   [         R                  " 5         [        5         [        U 5      n[         R                  (       a   UR                  5       (       a  [        S5      eUS;   a8   UR                  5         [         R                  (       a  UR                  5         ggg! [         aN  nU[        [         R                  5      :X  a  [        5       Ue[        U 5        [        U 5      (       d  e  SnAN{SnAff = f)a  Executes a set of validations that are required before any installation
command is executed. This includes:
  * ensure the configuration is valid
  * ensuring the user in not an admin
  * ensure the user is not forcing 32bit installs in the root prefix

:param prefix: The prefix where the environment will be created
:param command: Type of operation being performed
:raises: error if the configuration for the install is bad
z*cannot use CONDA_FORCE_32BIT=1 in base env)installupdateremoveN)r   validate_configurationr6   r   force_32bitis_baser!   assert_writabler"   conda_prefixr$   r*   r+   protect_frozen_envsassert_not_frozen)r<   commandprefix_dataexcs       r=   validate_install_commandr     s     ""$V$K{2244JKK11	'') &&))+ ' 2 2 	j)=)=>>,.C7  (( )		s   'B 
C7)AC22C7c                    [        U 5      nU Hd  n[        U5      nUR                  (       d  [        SU S35      eUR	                  UR
                  S5      (       a  MQ  [        XR
                  5      e   g)a5  Checks that each spec that is requested as an update exists in the prefix

:param prefix: The target install prefix
:param specs: List of specs to be updated
:raises CondaError: if there is an invalid spec provided
:raises PackageNotInstalledError: if the requested specs to install don't exist in the prefix
z!Invalid spec for 'conda update': z
Use 'conda install' instead.N)r   r0   is_name_only_specr   getrS   r%   )r<   specsr   specs       r=   ensure_update_specs_existr   ,  sj     V$K%%3D69WX  tyy$//*699== r?   c                    [         R                  n[        U 5      n[        USS9  [	        U R                  U[         R
                  [         R                  US9  g)z:Executes an install of a new conda environment by cloning.creater<   r   )r_   rd   re   N)r   target_prefixr   r   rs   r_   rd   )r   parserr<   re   s       r=   install_cloner   ?  sF    ""F%J FH=	

\\mmr?   c                
   [         R                  n[        X2S9  [         R                  (       a  SU l        US:H  nUS:H  nUS:H  nUS:H  nU R
                  Vs/ s H  oR                  S5      PM     n	nU(       ax  U R                  (       dg  U	V
s/ s H  n
[        U
5      R                  PM     nn
[         R                   H/  n[        U5      R                  U;  d  M  U	R                  U5        M1     [        U S9n[         R                  n[        S	 U	5       5      nU(       a8  U[        U	5      :X  a  [!        X[         R"                  (       + S
9  g[%        S5      e/ nU R&                  (       ak  U R&                   H6  n UR)                  [*        R,                  " U[         R.                  S95        M8     SU;   a  [!        UU[         R"                  (       + S
9  gUR)                  [*        R4                  " U	[         R.                  S95        U(       a,  [         R6                  [8        R:                  :w  a
  [=        UUS9  U(       a3  U R>                  (       a"  [@        RB                  " SSSSS9  [E        X5      $ U R                  nU(       d  [G        [         R                  5      n[H        U;  a  UR                  [H        5        [K        U S[L        5      [L        :g  nU(       + =(       d-    U R6                  [8        RN                  [8        RP                  4;  =(       a    U(       + n[         R6                  nU(       d  U(       a$  U R6                  [L        :X  a  [8        RN                  n[         RR                  n[U        UU[V        [X        [Z        45       H  nU n[         R\                  R_                  5       nU" UU[         R`                  UUU Rb                  S9n URe                  UU[         Rf                  =(       d    [         Rh                  U=(       d    UUS   :g  S9nSSS5        M     [q        WX0U5        gs  snf s  sn
f ! [0         a    [3        S5      ef = f! [V        [X        4 ar  n[K        USS5      (       d  UeU(       aP  URe                  U[8        RP                  [         Rf                  =(       d    [         Rh                  UUS   :g  S9n SnANUeSnAf[Z         aS  n[K        USS5      (       d  UeURj                  (       a'  SURj                  S   ;   a  [m        [o        U5      5      eUeSnAff = f! , (       d  f       GM  = f)zNLogic for `conda install`, `conda update`, `conda remove`, and `conda create`.r   zrepodata.jsonr   r   r   r   z"'r   c              3  8   #    U  H  n[        U5      v   M     g 7frR   r   )rT   ss     r=   rV   install.<locals>.<genexpr>k  s     ;]##]rX   )rc   Nz6cannot mix specifications with conda package filenames)r_   zcError reading file, file should be a text file containing packages 
conda create --help for detailsz	@EXPLICIT)r<   r   r8   r9   z-This function will not handle clones anymore.z/Use `conda.cli.install.install_clone()` instead)topicr:   update_modifier)specs_to_addrepodata_fnr   r   )deps_modifierr   force_reinstallshould_retry_solver   Tzcould not importr   )9r   r   r   use_only_tar_bz2r   packagesstripno_default_packagesr0   rS   create_default_packagesappendr   r   sumlenr/   rd   r!   fileextendr5   specs_from_urlr_   UnicodeErrorr   specs_from_argsr   r   
UPDATE_ALLr   rs   r   r   r   rp   r   r   r   FREEZE_INSTALLEDUPDATE_SPECSr   r   r)   r(   
SystemExitplugin_managerget_cached_solver_backendsubdirscmdsolve_for_transactionr   rL   r   r   rl   
handle_txn)r   r   r   r<   newenvisupdate	isinstallisremover   args_packagespkgnamesdefault_packagere   context_channelsnum_cpr   fpathr   args_set_update_modifier_should_retry_unfrozenr   r   r   r   solver_backendsolverunlink_link_transactiones                                r=   r   r   P  sf   ""F F<. F("H9$I("H .2]];]WWU^]M;d..0=>3$$>&>>O)..e;$$_5  ?  T*J'';];;FS'']4EF!H 
 EyyYYEV225w||LM  %UF,=>	LL''GLLIJ G++~/H/HH!u=$**AF		
 T**$$LG001,&K(&t->EM %$ 	N//1L1LMN *	  --OX4#7#74#?(99))M 	<jI
 H$33MMON# "$F*0*F*F"/$3$+$;$;$Lw}}.N(l2>N2N +G +' [V &f=g < ?2    B H '(GH q-66G).4.J.J&3(6(C(C(/(?(?(P7==,4R8H,H	 /K /+ G q-66G660AFF1I=*3q622? [s^   P:P?>2QAT=AQQT:-A&ST=ST:'AT55T::T==
U	c                   [         R                  n[        U 5      n[        USS9  [         R                  (       a  SU l        [        U5        U R
                  nU(       d  [        [         R
                  5      n[        U;  a  UR                  [        5        [        XC5       Hu  nU n[        SU S35         [        US   US   SUS	   UUS
9nSSS5        [        U R                  5      n[        SU 35         [        X(W5      n	SSS5        SSS5        Mw     [!        W	X SS9  g! , (       d  f       N^= f! , (       d  f       N7= f! , (       d  f       M  = f)z1Install a previous version of a conda environmentr   r   r   zCollecting package metadata ()r~   r   Nr   )r~   r   r   r   r<   r   zReverting to revision F)r   )r   r   r   r   r   r   r*   rp   r   r   r   r3   r   r|   revisionrevert_actionsr   )
r   r   r<   re   r   r   r   indexrevision_idxr  s
             r=   install_revisionr    s2   ""F%J FI>
 . $$LG001,&K( :H<XJaHI!!+N!;&y1!(5 " (	 J (6L5l^DE*8u*U' F [ ;" &UC JI FE [s<   (E
8D(+E
;D9E
(
D62E
9
EE


E	c                  ^ [        U 5      nUR                  5       R                  5       n UR                  U5      Vs1 s H  n[        R
                  " U5      iM     nn[        X 5        [        5       n[        5       nU H~  m[        U4S jUR                  5       5       5      n	U	(       d  UR                  T5        M?  [        U	5      S:  a  UR                  [        U	5      5        Mj  UR                  U	S   5        M     U(       a  [        U5      e[        [!        U5      R"                  5      n
[%        X
5      u  p['        XUSUS5      n[)        U5      $ s  snf ! [         a    [        SU-  5      ef = f)Nzno such revision: %dc              3  X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7frR   )match)rT   precr   s     r=   rV   !revert_actions.<locals>.<genexpr>  s     J~tD9Idd~s   *	*r4   r   r   )r,   get_requested_specs_mapvalues	get_stater0   from_dist_str
IndexErrorr   r   setr[   addr   r-   r&   r
   r1   graphr   r   r   )r<   r  r	  huser_requested_specsdist_strtarget_statenot_found_in_index_specs
link_precsprecsfinal_precsunlink_precssetupr   s                @r=   r  r    sO   A 446==?A>?kk(>S
>S(I##H->S 	 
 "%0"uJJu||~JJ$((.Z!^NN/67NN58$   #$<==[4::;K9&NLj">RTVWE ''3
  A4x?@@As   E  EE E E8c                   U R                   (       aY  U(       a  [        UR                  5      eU(       d6  [        R                  (       a  [
        R                  " SS9  g [        S5        g [        R                  (       d  U R                  5         [        5         OG[        R                  (       a2  U R                  5       S   n[
        R                  " XSS9  [        5       e U R                  5         [        R                  (       a  [        S5      eU R!                  5         U(       aK  [        R&                  [        R(                  " 5       :w  a$  [+        S	[        R&                  4[-        US
5      S9  [        R                  (       a(  U R                  5       S   n[
        R                  " XS9  g g ! ["         a  n[%        SU5      eS nAff = f)Nz)All requested packages already installed.)messagez-
# All requested packages already installed.
r   T)r<   rf   dry_runzUPackage caches prepared. UnlinkLinkTransaction cancelled with --download-only option.Exitingsubdirz.condarc)rI   )r<   rf   )nothing_to_dor&   package_namesr   r_   r5   ro   rn   print_transaction_summaryr2   r%  _make_legacy_action_groupsr#   download_and_extractdownload_onlyr   executer   r    r'  _native_subdirr7   r	   )r  r<   r   r   	remove_oprf   r  s          r=   r   r   '  sW   ,,'(:(:;;||**G
  GH<<99;	)DDFqI""&4Pl
,446  *  	 '')
 >>W33557>>*&*-
 ||)DDFqI""&B   ,i++,s   #A F3 3
G=G		G)r<   z
str | PathreturnNone)F)rK   rl   rL   boolr1  rl   )r<   rl   )FFN)r1  zdict[str, any])r   )r<   rl   r   rl   )r<   rl   r   z	list[str])r   N)^__doc__
__future__r   rG   loggingr   os.pathr   r   r   r   pathlibr	   boltons.setutilsr
    r   base.constantsr   r   r   rE   r   common.constantsr   rF   r   
core.indexr   r   r   	core.linkr   r   core.prefix_datar   
core.solver   deprecationsr   
exceptionsr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   gateways.disk.deleter*   r+   historyr,   miscr-   r.   r/   models.match_specr0   models.prefix_graphr1   	reportersr2   r3   r5   r6   main_configr7   r   logr]   r>   rN   ra   rs   ru   r|   r   r   r   r   r   r   r   r  r  r   r   r?   r=   <module>rK     sm   # 	  4 4  '  
 # # ) 
 ; ) 3 %     ?  < < ) - /  # !n%	 FF%>?V @V 
FS& 

^



8
4 FF%LM( N(O 1T 1Th 6,@>&"C>L(DV#(L,Cr?   