
    wBfP                     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   '   sm    
C	#$
$%	#$
$%# edii#o4djjAAEMDd	    c           	        ./012 | j                  d      }ddg}|r%|j                  d|z         |j                  d       |r@|j                  dt        t        d |D              d      z         |j                  d       |r@|j                  d	t        t        d
 |D              d      z         |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 ]B  }d-| d.| d/||<   |r||xx   d0|z  z  cc<   0|   d"   r||xx   d1|z  z  cc<   t'        |j                  |t&        j(                              }!|!t&        j(                  k(  rdnd2|!z  }!||v s||v r||xx   |!z  cc<   d3|z  ||<   | r||xx   d4| z  z  cc<   0|   d   r||xx   d5|z  z  cc<   ||xx   |!z  cc<   ||   d"   }"||   d   }#|"j                  d6      }$|#j                  d6      }%|$|%dx}$}%	 t3        |#j4                        d7k(  rt3        |"j4                        d7k7  }&|& }'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?                  |       2|j?                  |       E d8},d91./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	        d?       t        |      D ]   }t	         |-||   |,z   ||   z   |             " |r.| j                  t@              rt	        d@       t	        | d          t	                y c c}w c c}w # t8        $ r6 |"j4                  |#j4                  k  }&|"j4                  |#j4                  kD  }'Y vw xY w)ANPREFIX z## Package Plan ##
z  environment location: %sz  removed specs: %sc              3   2   K   | ]  }t        |        y wNstr.0ss     r0   	<genexpr>z"display_actions.<locals>.<genexpr>?   s     >c!f>      )indentz  added / updated specs: %sc              3   2   K   | ]  }t        |        y wr7   r8   r:   s     r0   r=   z"display_actions.<locals>.<genexpr>E   s     ;c!f;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_strM   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_filtV   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>k   s     DTDLDs   z@    ------------------------------------------------------------z+                                           zTotal: %14sc                      t        d      S N)r5   r5   listrP   r2   r0   <lambda>z!display_actions.<locals>.<lambda>p   
    4> r2   c                      t        d      S rR   rS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>q   rV   r2   c                      t        d      S rR   rS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>r   rV   r2   c                      t        d      S )N)NNrS   rP   r2   r0   rU   z!display_actions.<locals>.<lambda>s   s    $|"4 r2   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     .SV.r>   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>        B1S1YBre   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Sad!34P   !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]:<%s}z [{features[0]:<%s}]z (%s)z{vers[1]:<%s}z {channels[1]:<%s}z [{features[1]:<%s}]prioritycustomz --> z    c                     |   D cg c]
  } |       }}| j                  |dz   |   ||         z   S c c}w )N:)pkgverschannelsr[   )format)	r<   ru   cchansrM   rw   r[   leadpackagess	       r0   rx   zdisplay_actions.<locals>.format   sV    *23-8Qa8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	linktypesru   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arrowrx   rM   rw   r[   r{   r|   s3     `                                           @@@@@r0   display_actionsr   3   s|    [["F)*G3f<=r!v>o>>qIJ	
 	r)v;l;;AFG	
 	r	$))G
 #55 {{5>?EN 	+D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@ 
5hqk!n1
5C
5"9Q(1+a.q9G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3nDD}Qs5FF)--X->->?@BX...Wr\Bg~sr!)I5F3Ks3nDD}Qs5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*+	, ;<'? 	BC&u,vc{:C@A	B Y	
 )$ 	BC&u,vc{:C@A	B >?*% 	BC&u,vc{:C@A	B ]+EFgh 	Gy 69x  1bjj0bjj01s+   <`/
`/`4"`4A(`99;a87a8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           	      h   ddl m}m}m}m}m} d| v r| d   r| d   }n|}|| v r| |   sJ | |   }dd|z  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                  |d|j                         z  f       n8|j                  d      r'|	j                  |d|dd  j                         z  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   z%sUNLINKLINKTRANSACTIONACTIONSPECSzAdding plans for operations: zaction z not in actionsz has None value_z%sing packages ...RM_z&Pruning %s 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   1  s   VVW!4:&W00V_Ftf}%&D%kk*ABn ++h

'4CKK$EII-hZ89 #WGGEWRD89r{GGEWRD89b=KK 4r}} FGH]]5!KK@2ab6<<>QR ""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>r  s$     Atq!!A$64.*@As   r\   c                     | d   S )Nr   rP   )xs    r0   rU   z/_inject_UNLINKLINKTRANSACTION.<locals>.<lambda>u  s
    1 r2   c              3   4   K   | ]  } |d            ywrg   rP   r;   dr   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>v  s     VAT!A$ZV   rP   c              3   4   K   | ]  } |d            ywrg   rP   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>w  s     R!4!:Rr   c              3   (   K   | ]	  }|     y wr7   rP   r;   r   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>{  s      @aq @   c              3   (   K   | ]	  }|     y wr7   rP   r   s     r0   r=   z0_inject_UNLINKLINKTRANSACTION.<locals>.<genexpr>  s     8588r   )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   c  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     Gtq!!&&J2FG   !!r   c              3   F   K   | ]  \  }}|j                   d k(  s|  ywr  r
  r  s      r0   r=   z#_handle_menuinst.<locals>.<genexpr>  s     Etq!*0DEr  )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       '03++'s   c              3   .   K   | ]  } |        y wr7   rP   )r;   cnr   s     r0   r=   z"install_actions.<locals>.<genexpr>  s     !F"'"+!F   c              3   .   K   | ]  } |        y wr7   rP   )r;   rE   r  s     r0   r=   z"install_actions.<locals>.<genexpr>  s      O3# Or  c              3   .   K   | ]  } |        y wr7   rP   r  s     r0   r=   z"install_actions.<locals>.<genexpr>  s     %Ssgcl%Sr  c              3   &   K   | ]	  }|s|  y wr7   rP   )r;   subdirs     r0   r=   z"install_actions.<locals>.<genexpr>  s      #)Vs   c              3   4   K   | ]  }|j                     y wr7   )r  )r;   ry   s     r0   r=   z"install_actions.<locals>.<genexpr>  s     -I1ahh-Is   c              3   2   K   | ]  }t        |        y wr7   r   )r;   specs     r0   r=   z"install_actions.<locals>.<genexpr>  s     8$io8r>   )
PrefixData)r   )pruneignore_pinnedr   c              3   .   K   | ]  } |        y wr7   rP   r;   r-   r   s     r0   r=   z"install_actions.<locals>.<genexpr>  s      Rd Rr  r   c              3   .   K   | ]  } |        y wr7   rP   r&  s     r0   r=   z"install_actions.<locals>.<genexpr>  s     NdtDzNr  )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_namesrw   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CDT4Z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   rB  rC  rD  r   r   r4   rE  rF  r   r   rT   )r   r   rB  rC  rD  r   r   r4   rE  rF  r   r   r   s                r0   r2  r2    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   rH  rH    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)rN  zprogress.updatemaxvalzprogress.stop)base.contextr
   r   r   rM  r   r   r   r   root_prefixr   info	dist_namecallable)r   r   r   	_commandsr
   r   rM  r   stateinstructionr   cmds               r0   r   r     s    &9!	II!4('"5"5FE  2S		)[#.:!k5F&F#J!OJ'(--tCy/B/BE#JQRN.ST$C=sO #J"00h5:-E#Jo&++D1#2r2   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}   )rK  r   r/   r\  rW  r   s         r0   rJ  rJ  E  st     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__sysrG  r   loggingr   boltons.setutilsr   base.constantsr   r	   rP  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  r2  rH  r   rJ  r`  r   ra  dictr   intargvrP   r2   r0   <module>rv     s    #  ' B 0 # 8 8 8 ) 9 $ < < 8  " ( ) .  FFY/ 0 FFY/MOP 0Pf 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   