
    $TXglP                     2   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1  ee2      Z3 eddd      d        Z4 eddd      	 d4d       Z5 eddd      d        Z6 eddd      d5d       Z7 eddd      d         Z8 eddd!      d6d"       Z9 eddd       ed#      d7d$              Z: eddd      d%        Z; eddd      d&        Z< eddd      d'        Z= eddd       ed(      	 	 	 	 	 	 	 	 	 d8d)              Z> eddd      d*        Z? edd       ed+      d9d,              Z@ edd      	 d:d-       ZA edd      d.        ZBe2d/k(  rTdd0lCmCZC dd1lDm9Z9  ej                  ddd23        eC eF e9ej                   eHej                  d                            yy);a,  
Handle the planning of installs and their execution.

NOTE:
    conda.install uses canonical package names in its interface functions,
    whereas conda.resolve uses package filenames, as those are used as index
    keys.  We try to keep fixes to this "impedance mismatch" local to this
    module.
    Ndefaultdict)	getLogger)
IndexedSet   )DEFAULTS_CHANNEL_NAMEUNKNOWN_CHANNEL)contextreset_context)TRACE)dashlistenv_varstime_recorder)groupby_to_dict)LAST_CHANNEL_URLS)PrefixSetupUnlinkLinkTransaction)
deprecated)FETCHLINKSYMLINK_CONDAUNLINK)Channelprioritize_channelsDist)LinkType	MatchSpec)PackageRecord)normalized_version)human_bytesz24.9z25.3zUnused.)addendumc                     d}t        |dz         t        |dz         | D ]B  \  }}||j                  dz   |j                  z   |j                  fz  }|r||z  }t        |       D y )Nz    %-27s|%17s)packagebuild)z---------------------------z------------------)printnameversionr&   )dists_extrasfmtprecextralines        *lib/python3.12/site-packages/conda/plan.pyprint_distsr1   '   sh    
C	#$
$%	#$
$%#edii#o4djjAAEMDd	 $    c           	        ./012 | j                  d      }ddg}|r%|j                  d|        |j                  d       |r@|j                  dt        t        d |D              d              |j                  d       |r@|j                  d	t        t        d
 |D              d              |j                  d       t	        dj                  |             t        j                  d }fd.| j                  t              rt	        d       g }| t           D ]^  }	t        |	t              sJ dt        |	d         z  }
 .|	j                  j                        }|r|
d|z   z  }
|j                  |	|
f       ` t        |       |rSt        | t                 dkD  r>t!        d | t           D              }t	        d       t	        ddt        |      z  z          t#        d       2t#        d       0t#        d       /t#        d       }i }| j                  t$        g       D ]  }	t        |	t              sJ |	d   } ||	      /|   d<   |	d   dz   |	d   z   2|   d<   |	||   d<   t&        j(                  ||<   dj                  |	j                  d       xs d!      0|   d<    | j                  t*        g       D ]m  }	t        |	t              sJ |	d   } ||	      /|   d"<   |	d   dz   |	d   z   2|   d"<   |	||   d"<   dj                  |	j                  d       xs d!      0|   d"<   o 2D ch c]  }2|   d"   r| }}2D ch c]  }2|   d   r| }}|D ]  }20/|fD ]  }||   d d d#   ||<     t-               }t-               }t-               }i }i }d$}2r)d%}t/        d& 2D              dz   }t/        d' 2j1                         D              }t/        d( 2j1                         D              }t/        d) 0j1                         D              }t/        d* 0j1                         D              }t/        .fd+/j1                         D              }t/        .fd,/j1                         D              } 2D ]H  }d-| d.| d/||<   |r||xx   d0| d/z  cc<   0|   d"   r||xx   d1| d2z  cc<   t'        |j                  |t&        j(                              }!|!t&        j(                  k(  rdnd3|! d4}!||v s||v r||xx   |!z  cc<   d5| d/||<   | r||xx   d6|  d/z  cc<   0|   d   r||xx   d7| d2z  cc<   ||xx   |!z  cc<   ||   d"   }"||   d   }#|"j                  d8      }$|#j                  d8      }%|$|%dx}$}%	 t3        |#j4                        d9k(  rt3        |"j4                        d9k7  }&|& }'n4t7        |"j4                        }(t7        |#j4                        })|(|)k  }&|(|)kD  }'|"j:                  |#j:                  kD  }*|"j:                  |#j:                  k  }+t        j<                  r|%|$k  r|'s|&s|+s|j?                  |       |&r|j?                  |       |%|$k  r|'s|&s|*r|j?                  |       |'r|j?                  |       #|*s|j?                  |       8|j?                  |       K d:},d;1./012fd<}-|r0t	        d=       t        |      D ]  }t	         |-||   |              |r0t	        d>       t        |      D ]  }t	         |-||   |              |r9t	        d?       t        |      D ]   }t	         |-||   |,z   ||   z   |             " |r9t	        d@       t        |      D ]   }t	         |-||   |,z   ||   z   |             " |r9t	        dA       t        |      D ]   }t	         |-||   |,z   ||   z   |             " |r.| j                  t@              rt	        dB       t	        | d          t	                y c c}w c c}w # t8        $ r6 |"j4                  |#j4                  k  }&|"j4                  |#j4                  kD  }'Y vw xY w)CNPREFIX z## Package Plan ##
z  environment location: z  removed specs: c              3   2   K   | ]  }t        |        y wNstr.0ss     r0   	<genexpr>z"display_actions.<locals>.<genexpr>>   s     /P1A      )indentz  added / updated specs: c              3   2   K   | ]  }t        |        y wr7   r8   r:   s     r0   r=   z"display_actions.<locals>.<genexpr>C   s     7U1Ar>   
c                     | j                  d      r| d   S | j                  d      rt        | d         j                  S | j                  d      rt        | d         j                  S t        S )Nschannelurlchannel)getr   canonical_namer	   )recs    r0   channel_strz$display_actions.<locals>.channel_strK   s_    77:z?"775>3u:&5557793y>*999r2   c                 *    du ry
| t         k(  ry| S )NFr5   )r   )r<   show_channel_urlss    r0   channel_filtz%display_actions.<locals>.channel_filtT   s$    %$.C)Cr2   z,
The following packages will be downloaded:
z%15ssizez  r   c              3   &   K   | ]	  }|d      yw)rN   N )r;   r-   s     r0   r=   z"display_actions.<locals>.<genexpr>i   s     D^TDL^s   z@    ------------------------------------------------------------z+                                           zTotal: %14sc                      t        d      S N)r5   r5   listrP   r2   r0   <lambda>z!display_actions.<locals>.<lambda>n       4>r2   c                      t        d      S rR   rS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>o   rV   r2   c                      t        d      S rR   rS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>p   rV   r2   c                      t        d      S )N)NNrS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>q   s	    $|"4r2   r)   r*   r'   r&   ,featuresrP   r   TFc              3   2   K   | ]  }t        |        y wr7   lenr;   ps     r0   r=   z"display_actions.<locals>.<genexpr>   s     .XSVXr>   c              3   8   K   | ]  }t        |d            ywr   Nr^   r`   s     r0   r=   z"display_actions.<locals>.<genexpr>        =+<aAaD	+<   c              3   8   K   | ]  }t        |d            ywr   Nr^   r`   s     r0   r=   z"display_actions.<locals>.<genexpr>   rd   re   c              3   8   K   | ]  }t        |d            ywrc   r^   r`   s     r0   r=   z"display_actions.<locals>.<genexpr>        B0A1S1Y0Are   c              3   8   K   | ]  }t        |d            ywrg   r^   r`   s     r0   r=   z"display_actions.<locals>.<genexpr>   ri   re   c              3   F   K   | ]  }t         |d                  ywrc   r^   r;   ra   rM   s     r0   r=   z"display_actions.<locals>.<genexpr>   "     P>OSad!34>O   !c              3   F   K   | ]  }t         |d                  ywrg   r^   rl   s     r0   r=   z"display_actions.<locals>.<genexpr>   rm   rn   z{pkg:<z} {vers[0]:<}z {channels[0]:<z [{features[0]:<z}]z ()z
{vers[1]:<z {channels[1]:<z [{features[1]:<prioritycustomz --> z    c                     |   D cg c]
  } |       }}| j                  |dz   |   ||         z   S c c}w )N:)pkgverschannelsr[   )format)	r<   rv   cchansrM   rx   r[   leadpackagess	       r0   ry   zdisplay_actions.<locals>.format   sW    *23-8-Qa-8ahhc	QT  
 
 	
 9s   ;z/
The following NEW packages will be INSTALLED:
z)
The following packages will be REMOVED:
z)
The following packages will be UPDATED:
zI
The following packages will be SUPERSEDED by a higher-priority channel:
z,
The following packages will be DOWNGRADED:
z3
The following empty environments will be CREATED:
)!rG   appendr   sortedr(   joinr
   rL   r   
isinstancer    r"   rF   rH   r1   r_   sumr   r   r   hardlinkr   setmaxvaluesr9   r*   r!   	TypeErrorbuild_numberchannel_priorityaddr   )3actionsindexrL   specs_to_removespecs_to_addprefixbuilderrJ   disp_lstr-   r.   rD   	num_bytesrecords	linktypesrv   ra   newremovedvarupdated
downgraded	channeledoldfmtnewfmtemptymaxpkg	maxoldver	maxnewvermaxoldfeaturesmaxnewfeaturesmaxoldchannelsmaxnewchannelsltP0P1pri0pri1newveroldverN0N1oldbldnewbldarrowry   rM   rx   r[   r|   r}   s3     `                                           @@@@@r0   display_actionsr   3   s[    [["F)*G1&:;r/P/P)PYZ [\]	
 	r'7U7U1U^_(`'ab	
 	r	$))G
 #55 {{5>?ENDdM222[f66E#DLL$?$?@H(OOT5M* # 	HS(1,DWU^DDI$%(][-CCCD 12H12H12H45GID"%$...6l&t,a	?S04=@aQ "**	#88DHHZ$8$>B?a & FB'$...6l&t,a	?S04=@aQ88DHHZ$8$>B?a ( 
5hhqk!n1hC
5"9(Q(1+a.q(G9 h':C3x"~CH ;  eGJIFFE.X..2=8??+<==	=8??+<==	B0ABBB0ABBPhoo>OPPPhoo>OPPC $F8>)BGF3Ks!1.1ADD}Qs!2>2B#FF)--X->->?@BX...r"QZBg~sr!'	{"5F3Ks!1.1ADD}Qs!2>2B#FF3K2KaBaB66*%D66*%D|t|t1rzz?h. _8F!'ZF ,BJJ7B+BJJ7B"WF"WF __r6F__r6F((4K6&c"C &6c"s#C s#u x ED
 
 AB#;C&c*+  ;<'?C&c*+ # ;<'?C&u,vc{:C@A # Y	
 )$C&u,vc{:C@A % >?*%C&u,vc{:C@A & ]+EFgh 	Gy 69x  1bjj0bjj01s+   <`5
`5`:"`:A(`??;a>=a>c                 z    t        |t              sJ t        | vr	g | t        <   | t           j                  |       y r7   )r   r   r   r~   )r   dists     r0   
add_unlinkr     s5    dD!!!WFO4 r2   c                      y r7   rP   )rlinkedspecsupdater   s        r0   add_defaults_to_specsr     s    
r2   z.Use `conda.misc._get_best_prec_match` instead.c                     ddl m}  ||       S )Nr   )_get_best_prec_match)miscr   )precsr   s     r0   r   r     s     +&&r2   z/Use `conda.cli.install.revert_actions` instead.c                 "    ddl m}  || ||      S )Nr   revert_actions)cli.installr   )r   revisionr   r   s       r0   r   r     s     ,&(E22r2   execute_actionsc                 6    t        | |      }t        |||       y r7   )_plan_from_actionsexecute_instructions)r   r   verboseplans       r0   r   r   (  s     gu-Dug.r2   c           	      f   ddl m}m}m}m}m} d| v r| d   r| d   }n|}|| v r| |   sJ | |   }d| fg}	| j                  d      }
|
r
t               | j                  d      xs d }| j                  dg       }t        j                  d|        |D ]
  }|| vrt        j                  t        d	| d
       '| |   st        j                  t        d	| d       Kd|vr%|	j                  ||j                          df       n9|j                  d      r(|	j                  |d|dd  j                          df       ||v r"|	j                  |dt        | |         z  f       | |   D ]0  }t        j                  d| d|        |	j                  ||f       2  t!        |	||||      }	|	S )Nr   )ACTION_CODESr4   PRINTPROGRESSPROGRESS_COMMANDSop_orderr4   UNLINKLINKTRANSACTIONACTIONSPECSzAdding plans for operations: zaction z not in actionsz has None value_zing packages ...RM_zPruning    z packages from the cache ...z%dzappending value z for action )instructionsr   r4   r   r   r   rG   RuntimeErrorlogdebugr   r~   
capitalize
startswithlowerr_   _inject_UNLINKLINKTRANSACTION)r   r   r   r4   r   r   r   r   r   r   unlink_link_transactionaxnr   opargs                  r0   r   r   /  s   VVW!4:&W00V_F&#$D%kk*ABn ++h

'4CKK$EII-hZ89WGGEWRD89r{GGEWRD89b=KK2==?"33C DEF]]5!KK(2ab6<<>"22NOP ""KK4#gbk*:#:;<2;CII(\">?KKS	"  & )ufc5IDKr2   c           	         ddl m} ddlm} ddlmm}mm} ddl	m
 t        fdt        |       D        d      }	|	dk\  rt        d	 |       }
t        fd
|
j                  d      D              }t        fd|
j                  d      D              }t!        ||      \  }} ||      rt        fd|D              }nd}t        fd|D              } ||      }|j#                          t%        |||d|d      }| j'                  |	|t)        |      f       | j'                  |	||f       | S |dv r| j'                  d||ddd|ff       | S )Nr   )isdirr   )ProgressiveFetchExtract)r   PROGRESSIVEFETCHEXTRACTr   r   r   c              3   <   K   | ]  \  }}|d    fv s|  ywrc   rP   )r;   qra   r   r   s      r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>p  s%     Atq!!A$64.*@s   r\   c                     | d   S )Nr   rP   )xs    r0   rU   z/_inject_UNLINKLINKTRANSACTION.<locals>.<lambda>s  s    1r2   c              3   4   K   | ]  } |d            ywrg   rP   r;   dr   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>t  s     V1UAT!A$Z1U   rP   c              3   4   K   | ]  } |d            ywrg   rP   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>u  s     R/Q!4!:/Qr   c              3   (   K   | ]	  }|     y wr7   rP   r;   r   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>y  s      @<aq<   c              3   (   K   | ]	  }|     y wr7   rP   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>  s     8Z58Zr   )INSTALLCREATE)os.pathr   core.package_cache_datar   r   r   r   r   r   models.distr   next	enumerategroupbytuplerG   _handle_menuinstpreparer   insertr   )r   r   r   r   r   r   r   r   r   first_unlink_link_idxgrouped_instructionsunlink_dists
link_distsunlink_precs
link_precspfestpr   r   r   s    `               @@@r0   r   r   a  sX   @  " !AyA2 !&~t<V1E1I1I&RT1UVVR/C/G/Gb/QRR
#3L*#M j=  @< @@L
 L8Z88
%j1&,
BrJ!$9;PQT;U#V	
 	),CS+IJ K 
%	%A-BE/JKLKr2   c                     t        d t        |       D        d       }|g | d | | |dz   d  | ||dz    } t        d t        |      D        d       }|g |||dz    |d | ||dz   d  }| |fS )Nc              3   F   K   | ]  \  }}|j                   d k(  s|  ywmenuinstNr)   r;   r   r   s      r0   r=   z#_handle_menuinst.<locals>.<genexpr>  s"     G.tq!!&&J2F.   !!r   c              3   F   K   | ]  \  }}|j                   d k(  s|  ywr	  r  r  s      r0   r=   z#_handle_menuinst.<locals>.<genexpr>  s"     E,tq!*0D,r  )r   r   )r  r  menuinst_idxs      r0   r   r     s     Gy.GL 
-<(
,*,-
 ,)9:
 Ey,EtL 
|a'78
&
 q(*+

 ##r2   install_actionsc                    t        dddt              5  ddlm ddlm ddlm |	r=t        fd	|	D              }t        fd
|D              }t        fd|	D              }nYt        rOt        t              }	t        fd|	D              }t        d d |D        D              xs t        j                  }nd x}}t        d |D              }ddlm} |j                   j#                          t        j$                  j'                         } || |||      }|r$|j)                         D ci c]  }|| c}|_        |j-                  ||       }|j.                  |    }t1        |       }|d   j3                  fd|j4                  D               |d   j3                  fd|j6                  D               |cd d d        S c c}w # 1 sw Y   y xY w)Ntruefalse)CONDA_ALLOW_NON_CHANNEL_URLSCONDA_SOLVER_IGNORE_TIMESTAMPSr   )basenamer   )r   r   c              3   B   K   | ]  } |      j                     y wr7   )rH   r;   rE   r   s     r0   r=   z"install_actions.<locals>.<genexpr>  s       '7K++7Ks   c              3   .   K   | ]  } |        y wr7   rP   )r;   cnr   s     r0   r=   z"install_actions.<locals>.<genexpr>  s     !F"'"+   c              3   .   K   | ]  } |        y wr7   rP   )r;   rE   r  s     r0   r=   z"install_actions.<locals>.<genexpr>  s      O:N3#:Nr  c              3   .   K   | ]  } |        y wr7   rP   r  s     r0   r=   z"install_actions.<locals>.<genexpr>  s     %S>Rsgcl>Rr  c              3   &   K   | ]	  }|s|  y wr7   rP   )r;   subdirs     r0   r=   z"install_actions.<locals>.<genexpr>  s      -I6V-Is   c              3   4   K   | ]  }|j                     y wr7   )r  )r;   rz   s     r0   r=   z"install_actions.<locals>.<genexpr>  s     -I1ahhs   c              3   2   K   | ]  }t        |        y wr7   r   )r;   specs     r0   r=   z"install_actions.<locals>.<genexpr>  s     8%$io%r>   )
PrefixData)r   )pruneignore_pinnedr   c              3   .   K   | ]  } |        y wr7   rP   r;   r-   r   s     r0   r=   z"install_actions.<locals>.<genexpr>  s      R8Qd8Qr  r   c              3   .   K   | ]  } |        y wr7   rP   r'  s     r0   r=   z"install_actions.<locals>.<genexpr>  s     N6MdtDz6Mr  )r   r   r   r  models.channelr   r   r   r   r   r   r
   subdirsr   core.prefix_datar#  _cache_clearplugin_managerget_cached_solver_backendr   _indexsolve_for_transactionprefix_setupsget_blank_actionsextendr  r  )r   r   r   force
only_namesalways_copypinnedupdate_depsr$  channel_priority_map	is_updateminimal_hintchannel_namesrx   r*  r#  solver_backendsolverr-   txnprefix_setupr   r   r   r  s                         @@@r0   r  r    s   " 
,2.5	
 	
 	%+%& '7K' M "!F!FFH  O:N OOG !':;L'M$%%S>R%SS -I-I  ' 	  &*)78%880  " //IIK'N49LLNCNDT4ZNCFM**&j*Q((0#F+   R8Q8Q RRNl6M6MNN_
 
R DS
 
s   DG2
G<BGGGc           	          ddl m} ddlm}m}m}m}m}m}m	}m
}	m}
m}  |t              }| ||<   ||	|||||||
f	|d<   |S )Nr   r   r   )
CHECK_EXTRACTCHECK_FETCHEXTRACTr   r   r4   RM_EXTRACTED
RM_FETCHEDr   r   r   )collectionsr   r   rC  rD  rE  r   r   r4   rF  rG  r   r   rT   )r   r   rC  rD  rE  r   r   r4   rF  rG  r   r   r   s                r0   r3  r3    sW    '   $GGFO
GJ Nr2   execute_planc                 4    t        |       }t        |||       y)zJDeprecated: This should `conda.instructions.execute_instructions` instead.N)_update_old_planr   )old_planr   r   r   s       r0   rI  rI    s     H%Dug.r2   c                    ddl m} ddlm}m} ddlm} ||}t        j                  d|        d|j                  |d}| D ]  \  }	}
t        j                  d|	|
       |d	   C|	|v r?|d	xx   dz  cc<   t        d
      j                   ||
      j                  |d	   dz
  f       ||	   }t        |      r	 |||
       |d	   |	|v s|d   |d	   k(  sd|d	<   t        d      j                  d        y)a-  Execute the instructions in the plan
    :param plan: A list of (instruction, arg) tuples
    :param index: The meta-data index
    :param verbose: verbose output
    :param _commands: (For testing only) dict mapping an instruction to executable if None
    then the default commands will be used
    r   )r
   )r   commandsr   Nzexecuting plan %s)ir   r   z %s(%r)rO  zprogress.updatemaxvalzprogress.stop)base.contextr
   r   r   rN  r   r   r   r   root_prefixr   info	dist_namecallable)r   r   r   	_commandsr
   r   rN  r   stateinstructionr   cmds               r0   r   r     s     &9!	II!4('"5"5FE S		)[#.:!k5F&F#J!OJ'(--tCy/B/BE#JQRN.ST$C=sO #J"00h5:-E#Jo&++D1# !r2   c                     g }| D ]R  }|j                  d      rd|vrddlm}  |d|d      |j                  dd      \  }}|j	                  ||f       T |S )z^
    Update an old plan object to work with
    `conda.instructions.execute_instructions`
    # r   )ArgumentErrorzThe instruction z takes at least one argument)r   
exceptionsr]  splitr~   )rL  r   r/   r]  rX  r   s         r0   rK  rK  C  so     D??3d?1"24(:V WXX::c1-S[#&'  Kr2   __main__)pprintr   z`conda.plan` as an entrypoint)topic)NrP   rP   )FN)r\   N)F)	FNFTTFNFF)NF)NFN)J__doc__sysrH  r   loggingr   boltons.setutilsr   base.constantsr   r	   rQ  r
   r   common.constantsr   	common.ior   r   r   common.iteratorsr   r   
core.indexr   	core.linkr   r   deprecationsr   r   r   r   r   r   r)  r   r   r   r   models.enumsr   models.match_specr   models.recordsr    models.versionr!   utilsr"   __name__r   r1   r   r   r   r   r   r   r   r   r   r  r3  rI  r   rK  ra  r   rb  dictr   intargvrP   r2   r0   <module>rw     s    #  ' B 0 # 8 8 8 ) 9 $ < < 8  " ( ) .  FFY/ 0 FFY/MON 0Nb FFY/! 0! FFY/ 0 

=
'
' 

>
3
3 FFY/ !/ " 0/
 FFY/. 0.b FFY/* 0*Z FFY/$ 0$: FFY/ !
 
> " 0>B FFY/ 0@ FF~/  / FF/3&2 &2R FF & z+JVV+JK
4szz3sxx{+;<=> r2   