
    \Zi                       S r SSKJ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  SS	KJr  SS
KJr  SSKJr  SSKJrJr  SSKJrJr  \(       a  SSKJr  SSKJr  SSKJr            SS jr        SS jr          SS jr g)zConda-flavored installer.    )annotationsNbasename)TYPE_CHECKING   )UpdateModifier)context)NULL)unique)EnvironmentYaml)CondaValueErrorUnsatisfiableError)Channelprioritize_channels)	Namespace)Solver)Environmentc                   UR                   R                   Vs/ s H  ofS:w  d  M
  UPM     nnSUR                   R                  ;  a  UR                  [        R                  5        [	        U5      n[        [        S U 5       5      5      n	[        [        S U 5       5      5      n
[        R                  R                  5       nUc  [        S5      eU" X	XS9nU$ s  snf )zSolve the environment.

:param prefix: Installation target directory
:param specs: Package specifications to install
:param args: Command-line arguments
:param env: Environment object
:return: Solver object

nodefaultsc              3  8   #    U  H  n[        U5      v   M     g 7fN)r   .0urls     :lib/python3.13/site-packages/conda/env/installers/conda.py	<genexpr>_solve.<locals>.<genexpr>-   s     J4ISGCLL4I   c              3  8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r   r   .   s     J4IS8C==4Ir   zNo solver backend found)specs_to_add)
configchannelsextendr	   r   tupler   plugin_managerget_cached_solver_backendr   )prefixspecsargsenv_kwargschanchannel_urls_channel_priority_mapr"   subdirssolver_backendsolvers                r   _solver3      s     &)ZZ%8%8Q%8TL<PD%8LQ3::...G,,-/=VJ4IJJKHFJ4IJJKG++EEGN788FgJFM Rs
   	CCc           	         [        [        R                  " 5       XU/UQ70 UD6nUR                  5       n[	        UR
                  U Vs/ s H  n[        U5      PM     snUR                  R                  S9$ s  snf )zDo a dry run of the environment solve.

:param specs: Package specifications to install
:param args: Command-line arguments
:param env: Environment object
:return: Solved environment object
:rtype: EnvironmentYaml
)namedependenciesr"   )	r3   tempfilemkdtempsolve_final_stater   r5   strr!   r"   )r(   r)   r*   r+   r,   r2   pkgsps           r   dry_runr=   7   sk     H$$&SG1GGF##%DXXT$:TSVT$:SZZEXEX $:s   	A8
c                   UR                   (       a#  SSKJn  U(       a  UOSnU" UR                   U US9$ [        XX#/UQ70 UD6n UR	                  [        USS5      [        R                  S9n	U	R                  (       a  g
U	R                  5         U	R                  5         U	R                  5       S   $ ! [        [        4 a<  n
[        U
SS	5      (       d  e UR	                  [        USS5      [        S9n	 S
n
A
NS
n
A
ff = f)a%  Install packages into a conda environment.

This function handles two main paths:
1. For environments with explicit_specs (from @EXPLICIT files): Bypasses the solver
   and directly installs packages using conda.misc.explicit() as required by CEP-23.
2. For regular Environment instances: Uses the solver to determine the optimal
   package set before installation.

:param prefix: The target installation path for the environment
:param specs: Package specifications to install
:param args: Command-line arguments from the conda command
:param env: Environment object containing dependencies and channels
:return: Installation result information

.. note::
    This implementation follows CEP-23, which states: "When an explicit input file is
    processed, the conda client SHOULD NOT invoke a solver."
r   )install_explicit_packages )package_cache_recordsr'   requested_specspruneF)rC   update_modifierallow_retryTNr   )explicit_packagesmiscr?   r3   solve_for_transactiongetattrr   FREEZE_INSTALLEDr   
SystemExitr
   nothing_to_dodownload_and_extractexecute_make_legacy_action_groups)r'   r(   r)   r*   r+   r,   r?   rB   r2   unlink_link_transactionexcs              r   installrR   I   s
   , 5
 $)%b )"%"7"7+
 	
 F4;q;F;F
"(">">$/*;; #? #
 ,,002##%"==?BB 
+ 
 sM400"(">">$/ #? #

s   )B4 4D 2C;;D )
r'   r:   r(   	list[str]r)   r   r*   r   returnr   )r(   rS   r)   r   r*   r   rT   r   )
r'   r:   r(   rS   r)   r   r*   r   rT   zdict | None)!__doc__
__future__r   r7   os.pathr   typingr   base.constantsr   base.contextr	   common.constantsr
   common.iteratorsr   env.envr   
exceptionsr   r   models.channelr   r   argparser   
core.solver   models.environmentr   r3   r=   rR   r@       r   <module>rd      s      "     , # $ & & = :"$1!)29D:%,7$;C;C!;C)2;C9D;C;Crc   