
    si                       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)
IndexedSet   )UpdateModifier)context)NULL)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      n	[        S U 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     H2G3'#,,2G   c              3  8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r   r   /   s     H2G3#2Gr   zNo solver backend found)specs_to_add)	configchannelsextendr
   r   r   plugin_managerget_cached_solver_backendr   )prefixspecsargsenv_kwargschanchannel_urls_channel_priority_mapr"   subdirssolver_backendsolvers                r   _solver2      s     &)ZZ%8%8Q%8TL<PD%8LQ3::...G,,-/=H2GHHHH2GHHG++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"   )	r2   tempfilemkdtempsolve_final_stater   r4   strr!   r"   )r'   r(   r)   r*   r+   r1   pkgsps           r   dry_runr<   8   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)rB   update_modifierallow_retryTNr   )explicit_packagesmiscr>   r2   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>   rA   r1   unlink_link_transactionexcs              r   installrQ   J   s
   , 5
 $)%b )"%"7"7+
 	
 F4;q;F;F
"(">">$/*;; #? #
 ,,002##%"==?BB 
+ 
 sM400"(">">$/ #? #

s   )B4 4D 2C;;D )
r&   r9   r'   	list[str]r(   r   r)   r   returnr   )r'   rR   r(   r   r)   r   rS   r   )
r&   r9   r'   rR   r(   r   r)   r   rS   zdict | None)!__doc__
__future__r   r6   os.pathr   typingr   boltons.setutilsr   base.constantsr	   base.contextr
   common.constantsr   env.envr   
exceptionsr   r   models.channelr   r   argparser   
core.solver   models.environmentr   r2   r<   rQ   r?       r   <module>rc      s      "     ' , # $ & = :"$1!)29D:%,7$;C;C!;C)2;C9D;C;Crb   