
    cS                         d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZ ddlmc mZ ddlmc mZ ddlmc mZ ddlmZ d Zd Z G d d	e	          ZdS )
z'Abstract high-level interface to Conda.    )absolute_importN)CondaManagerCondaEnvironmentDeviationsCondaLockSetCondaManagerError)__version__c                     fd                                  D             }fd                                  D             }t          |          dk     r S  fd|D             }t          j        | }t          |          dk    r S t	                      }|D ]%} |         |z
  }	t          |	          dk    r|	||<   &|D ]} |         ||<   |||<   |S )Nc                 *    g | ]} |          |S  r   .0nameinclude_predicates     Olib/python3.11/site-packages/anaconda_project/internal/default_conda_manager.py
<listcomp>z-_refactor_common_packages.<locals>.<listcomp>   s+    YYYARARSWAXAXYYYY    c                 *    g | ]} |          |S r   r   r   s     r   r   z-_refactor_common_packages.<locals>.<listcomp>   s+    ___4GXGXY]G^G^_$___r      c                      g | ]
}|         S r   r   )r   r   existing_setss     r   r   z-_refactor_common_packages.<locals>.<listcomp>%   s    >>>T]4 >>>r   r   )keyslensetintersectiondict)
r   r   factored_namefactorable_namesunfactorable_namesspecsfactoredresultr   	remainings
   ``        r   _refactor_common_packagesr#      s#    ZYYY););)=)=YYY____=+=+=+?+?___
q   >>>>-=>>>E'H
8}} VVF  % %!$'(2	y>>A 	%$F4L" + +$T*t$F=Mr   c                 n   d |                                  D             t          d |                                 D                       }|D ]t          fd          d fdt          fdd          t          fdd	          d
                                  D             S )Nc                 4    i | ]\  }}|t          |          S r   )r   )r   r   valuess      r   
<dictcomp>z#_extract_common.<locals>.<dictcomp><   s$    JJJNT6dCKKJJJr   c                 B    g | ]}t          j        |          d          S )r   	conda_apiparse_platform)r   platforms     r   r   z#_extract_common.<locals>.<listcomp>?   s(    cccH)28<<Q?cccr   c                 4    |                      dz            S )Nz%s-
startswith)pr   s    r   <lambda>z!_extract_common.<locals>.<lambda>A   s    Q\\%RV,=W=W r   c                 T    t           j        D ]}|                     |          r dS dS )NTF)r*   unix_platform_namesr/   )platform_or_platform_name	unix_names     r   is_unixz _extract_common.<locals>.is_unixD   s;    "6 	 	I(33I>> ttur   c                     d| v r t          j        |           d         }|v rdS dv r |           r| dk    rdS | dk    sJ dS )N-r   FunixallTr)   )r4   platform_namer6   r!   s     r   is_most_generalz(_extract_common.<locals>.is_most_generalL   s    ++ 	%45NOOPQRM& uV 	(A B B 	G`djGj 	5 )E1111tr   c                 0     |           o
 |           S Nr   )r0   r<   r6   s    r   r1   z!_extract_common.<locals>.<lambda>[   s    9ZXYHZHZ r   r9   c                      |           S r>   r   )r0   r<   s    r   r1   z!_extract_common.<locals>.<lambda>^   s    9K9K r   r:   c                 N    i | ]"\  }}|t          t          |                    #S r   )sortedlist)r   r   values      r   r'   z#_extract_common.<locals>.<dictcomp>`   s,    JJJ-4D&e%%JJJr   )itemsr   r   r#   )by_platformplatform_namesr<   r6   r   r!   s     @@@@r   _extract_commonrG   :   s   JJk6G6G6I6IJJJF ccP[P`P`PbPbcccddN _ _*63W3W3W3WY]^^        'v/Z/Z/Z/Z/Z\bccF 'v/K/K/K/KUSSFJJ6<<>>JJJJr   c                       e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZddZdS )DefaultCondaManagerc                     || _         dS )zThe default Conda manager.N)	_frontend)selffrontends     r   __init__zDefaultCondaManager.__init__d   s    !r   c                 L    | j         | j                             |           d S d S r>   )rK   info)rL   lines     r   	_log_infozDefaultCondaManager._log_infoh   s2    > 	&N%%%%%	& 	&r   c                 L    | j         | j                             |           d S d S r>   )rK   partial_inforL   datas     r   
_on_stdoutzDefaultCondaManager._on_stdoutq   s2    > 	.N''-----	. 	.r   c                 L    | j         | j                             |           d S d S r>   )rK   partial_errorrU   s     r   
_on_stderrzDefaultCondaManager._on_stderru   s2    > 	/N((.....	/ 	/r   c                 F    t           j                            |ddd          S )Nvarcachezanaconda-project)ospathjoinrL   prefixs     r   _cache_directoryz$DefaultCondaManager._cache_directoryy   s    w||FE74FGGGr   c                 h    t           j                            |                     |          d          S )Nstatus)r^   r_   r`   rc   ra   s     r   _test_writable_filez'DefaultCondaManager._test_writable_file|   s&    w||D11&998DDDr   Fc                     |rt           j                            |          }t           j                            |d          S )Nz	.readonly)r^   r_   dirnamer`   )rL   rb   parents      r   _force_readonly_filez(DefaultCondaManager._force_readonly_file   s3     	-W__V,,Fw||FK000r   c                 t    t           j                            |                     |          d|j                  S )Nz	env-specs)r^   r_   r`   rc   locked_hash)rL   rb   specs      r   _timestamp_filez#DefaultCondaManager._timestamp_file   s+    w||D11&99;HXYYYr   c           
         t          t          j        t          j                            |ddd                              }|                    t          j                            |d                     |                    t          j                            |d                     |                    t          j                            |dd                     |                    t          j                            |dd                     |                    t          j                            |d                     |                    t          j                            |d                     |S )	Nlibzpython*zsite-packagesbinLibLibraryScripts
conda-meta)rB   globiglobr^   r_   r`   append)rL   rb   dirss      r   !_timestamp_comparison_directoriesz5DefaultCondaManager._timestamp_comparison_directories   s    DJrw||FE9oVVWWXXBGLL//000BGLL//000BGLL@@AAABGLLE::;;;BGLL33444BGLL66777r   c                 B   |                      ||          }	 t          j                            |          }n# t          $ r Y dS w xY w|                     |          }|D ]>}	 t          j                            |          }n# t          $ r d}Y nw xY w||k    r dS ?dS )NFr   T)rn   r^   r_   getmtimeOSErrorrz   )rL   rb   rm   filenamestamp_mtimery   dd_mtimes           r   _timestamp_file_up_to_datez.DefaultCondaManager._timestamp_file_up_to_date   s    
 ''55	'**844KK 	 	 	55	 55f== 
	 
	A'**1--    +% uu ts!   8 
AA#BBBc                 2   	 t          j        t          j                            |                     t          j        |dd          5 }|                    dt          z             d d d            n# 1 swxY w Y   dS # t          t          f$ r Y dS w xY w)Nwzutf-8)encodingz#{"anaconda_project_version": "%s"}
TF)makedirsmakedirs_ok_if_existsr^   r_   rh   codecsopenwriteversionIOErrorr}   )rL   r~   fs      r   _write_a_filez!DefaultCondaManager._write_a_file   s    	*27??8+D+DEEEXsW=== J
 >HIIIJ J J J J J J J J J J J J J J 4! 	 	 	 55	s6   AB 
A4(B 4A88B ;A8<B BBc                 &   t           j                            |                     |                    s4t           j                            |                     |d                    rdS |                     |          }|                     |          S )NT)ri   F)r^   r_   existsrj   rf   r   )rL   rb   r~   s      r   _is_environment_writablez,DefaultCondaManager._is_environment_writable   s{    GNN444V<<== 	7>>$";";F4";"P"PQQ	5++F33!!(+++r   c                     |                      ||          }|                     |          r=t          j                            |          }|dz   }t          j        |||f           d S d S )N   )rn   r   r^   r_   r|   utime)rL   rb   rm   r~   actual_timenext_tick_times         r   _write_timestamp_filez)DefaultCondaManager._write_timestamp_file   sw    ''55h'' 	A '**844K(1_NHX?@@@@@	A 	Ar   c           
         i }t          j                    }t          |          }||v r|                    |           |g|z   }|D ]}	 |                     d|z             t          j        |||          }nG# t           j        $ r5}	t          d                    |t          |	                              d }	~	ww xY wd |D             }
t          |
          ||<   t          |          }t          ||          }|S )NzResolving conda packages for %s)pkgsr,   channelszError resolving for {}: {}c                     g | ]}d |z  S )z%s=%s=%sr   )r   deps     r   r   z<DefaultCondaManager.resolve_dependencies.<locals>.<listcomp>   s    ===J,===r   )package_specs_by_platform	platforms)r*   current_platformrB   removerR   resolve_dependencies
CondaErrorr   formatstrrA   rG   r   )rL   package_specsr   r   rE   currentresolve_for_platformsconda_platformdepselocked_specslock_sets               r   r   z(DefaultCondaManager.resolve_dependencies   s8   ,.. $Y ++ 	F!((111%,I0E$E!3 	? 	?Ne@>QRRR 5=Saltuuu' e e e'(D(K(KN\_`a\b\b(c(cddde=====L*0*>*>K''%k22+Qfgggs   	/A99B=0B88B=c           	         	 t          j        |          }n9# t           j        $ r'}t          d|dt	          |                    d }~ww xY wt                      }t                      }|j        D ]}t          j        |          }|j        }	|	|vr|	                    |	           7d }
||	         \  }}}|j
        ' |
|j
        |          s|	                    |	           t|j        & |
|j        |          s|	                    |	           t          t          |                    t          t          |                    fS )Nz1Conda failed while listing installed packages in : c                 B    | |k    rdS |                     | dz             S )NT.r.   )wanted	installeds     r   version_matchzADefaultCondaManager._find_conda_deviations.<locals>.version_match  s-    * B#t(33FSLAAAr   )r*   r   r   r   r   r   conda_packages_for_create
parse_specr   addexact_versionexact_build_stringrA   rB   )rL   rb   env_specr   r   missingwrong_versionspec_stringrm   r   r   _installed_versioninstalled_builds                 r   _find_conda_deviationsz*DefaultCondaManager._find_conda_deviations   s   	r!+F33II# 	r 	r 	r##agagagilmnioioio$pqqq	r %%#= 	, 	,K'44D9D9$ ,D!!!!B B B ;DD/7%% ,--HZ\m:n:n ,!%%d++++, ,tOfO^B` B` ,!%%d+++tG}}%%vd=.A.A'B'BCCs    A"AAc           	      n   t          |j                  dk    rg S 	 t          j        |          }n9# t          j        $ r'}t          d|dt          |                    d }~ww xY wt                      }|j        D ]}||vr|                    |           t          t          |                    S )Nr   z/pip failed while listing installed packages in r   )r   pip_package_names_setpip_apir   PipErrorr   r   r   r   rA   rB   )rL   rb   rm   r   r   r   r   s          r   _find_pip_missingz%DefaultCondaManager._find_pip_missing  s     t)**a/ 	I	p)&11II 	p 	p 	p##_e_e_egjklgmgmgm$nooo	p %%. 	" 	"D9$ "D!!!d7mm$$$s   1 A' "A""A'c                     d }|j         l|j         j        r`t          j                    }||j        vr*d|j        d|dd                    |j                  d}n|j         j        sd|j        d|d}|S )Nz
Env spec 'z$' does not support current platform z (it supports: , )z%' does not have the current platform z in the lock file)r   enabledr*   r   r   r   r`   supports_current_platform)rL   rm   errorr   s       r   _broken_lock_set_errorz*DefaultCondaManager._broken_lock_set_error5  s    = 		6)> 		6  )9;;t~5 6 6$4$4$4dii6O6O6O6OQ]< 6 6$4$4$46r   c           	      &   |                      |          }|t          |dddddd          S t          j                            t          j                            |d                    s<t          d|z  t          |j                  dt          |j                  dd          S dx}}| 	                    ||          rg }g }g }nM| 
                    ||          \  }}|                     ||          }|                     |          }| o|p|p|}d                    ||z             }	d                    |          }
|	d	k    r|
d	k    r	d
|	d|
}n|	d	k    rd|	z  }n|
d	k    rd|
z  }n|rd}nd}|r|dz  }t          ||||d||          S )Nr   T)summarymissing_packageswrong_version_packagesmissing_pip_packageswrong_version_pip_packagesbroken	unfixableru   z;'%s' doesn't look like it contains a Conda environment yet.)r   r   r   r   r   r   Fr    z'Conda environment is missing packages: z and has wrong versions of: z)Conda environment is missing packages: %sz+Conda environment has wrong versions of: %sz2Conda environment needs to be marked as up-to-dateOKz! and the environment is read-only)r   r   r^   r_   isdirr`   tuple"conda_package_names_for_create_set pip_package_names_for_create_setr   r   r   r   )rL   rb   rm   broken_lock_setr   r   conda_missingconda_wrong_versionpip_missingall_missing_stringall_wrong_version_stringr   s               r   find_environment_deviationsz/DefaultCondaManager.find_environment_deviationsC  s3   55d;; 	>-o?AEGCEIK598<> > > > w}}RW\\&,??@@ 	;-6s/577?DTEl?m?mEGCHInCoCoIK59; ; ; ; #"**6488 
	]M"$KK373N3NvW[3\3\0]/00>>K226::F #
\([9L([P[I!YY}{'BCC#'99-@#A#A # 
	(@B(F 
	 
	"""$<$<>GG2% 	ADVVGG%+ 	CF^^GG 	JGGG 	;::G)';HAT?JEG174=? ? ? 	?r   NTc           	      N
   ||                      ||          }|j        rt          d|z            t          j                            |d          }t          j                            |d          }d}t          j                            |          rt          j                            |          rt          |          5 }|	                                
                                }	d d d            n# 1 swxY w Y   |	t          j                    k    }
|
rdt          j                    v r$dt          j                            |dd          g}n!t          j                            |d	d
          }	 t          j        |           t          j        |           d}n# t          j        t"          f$ rU}|                     d                    t)          |                               d}t+          j        |           Y d }~n3d }~ww xY w|                     d           d}t+          j        |           t          j                            |          r@t/          t1          |j        |j        z                       }t7          |          dk    r|                    |          }t7          |          t7          |          k    sJ |                    ||           	 t          j        |||j        | j         | j!                   nZ# t          j"        $ rH}t          d                    d                    |          t)          |                              d }~ww xY w	 |#                    |           n# |#                    |           w xY wn|rt1          |j$                  }	 t          j%        |t/          |          |j        | j         | j!                   nK# t          j"        $ r'}t          d|dt)          |                    d }~ww xY wt          d|z            t/          |j&                  }t7          |          dk    r|r|'                    |          }t7          |          t7          |          k    sJ 	 tQ          j        ||| j         | j!                   nZ# tP          j)        $ rH}t          d                    d                    |          t)          |                              d }~ww xY w| *                    ||           d S )Nz"Unable to update environment at %sru   z.packedTwinpythonrt   zconda-unpack-script.pyrq   zconda-unpackFzNWarning: conda-unpack could not be run: 
{}
The environment will be recreated.zXWarning: The unpacked env does not match the current architecture. It will be recreated.r   )rb   r   r   stdout_callbackstderr_callbackz"Failed to install packages: {}: {}r   z Failed to create environment at r   z&Conda environment at %s does not exist)rb   r   r   r   z.Failed to install missing pip packages: {}: {})+r   r   r   r^   r_   r`   r   r   r   readstripr*   r   
subprocess
check_callr   CalledProcessErrorr}   rR   r   r   shutilrmtreerB   r   r   r   r   specs_for_conda_package_names
apply_pinsinstallr   rW   rZ   r   remove_pinsr   creater   specs_for_pip_package_namesr   r   r   )rL   rb   rm   
deviationsr   
conda_metapackedinstall_pipr   packed_archmatchedunpack_scriptr   	to_updater   command_line_packagesr   s                    r   fix_environment_deviationsz.DefaultCondaManager.fix_environment_deviations|  s    	H99&$GGJ 	S#$H6$QRRRW\\&,77
j)447==$$ 	&)?)? 	&f /ffhhnn../ / / / / / / / / / / / / / / "Y%?%A%AAG &I6888 P%-rw||FIOg/h/h$iMM %'GLL$O$OM*)-888If%%%"'KK"5w? * * *NN $HHNsSTvvX X X!FM&))))))))	*   7 8 8 8f%%%7==$$ 	YS!<z?`!`aabbI9~~! -::9EE5zzS^^3333...	-%V+0/3}6:o6:o	G G G G G
 !+ s s s+,P,W,WX\XaXabgXhXhjmnojpjp,q,qrrrsG $$V,,,,D$$V,,,,-  	Y %((F$G$G!e &*+@&A&A*.-1515	B B B B B
 ' e e e''TZTZTZ\_`a\b\b\b(cddde $$LPV$WXXX z677LL1 
	1+ 
	144W==Eu::W----1v%*0404A A A A A # 1 1 1'(X(_(_IIg&&A)0 )0 1 1 11
 	""6400000s   'C66C:=C:5*F   H6AHH$(L M> M$AMM$$M> >N05O& &P5"PP"R5 5TATTc           	         |rl	 t          j        ||| j        | j                   d S # t           j        $ r5}t          d                    |t          |                              d }~ww xY w	 t          j        ||| j        | j                   d S # t          j	        $ r'}t          d|dt          |                    d }~ww xY w)N)r   r   z)Failed to remove pip packages from {}: {}zFailed to remove packages from r   )
r   r   rW   rZ   r   r   r   r   r*   r   )rL   rb   packagespipr   s        r   remove_packagesz#DefaultCondaManager.remove_packages  s    		dlvxbfbqrrrrrr# l l l'(S(Z(Z[acfghcici(j(jkkkld 4?dhdstttttt' d d d''SYSYSY[^_`[a[a[a(bcccds,   "( A,0A''A,0"B C
#"CC
)F)NT)__name__
__module____qualname__rN   rR   rW   rZ   rc   rf   rj   rn   rz   r   r   r   r   r   r   r   r   r   r   r  r   r   r   rI   rI   c   sk       " " "& & &. . ./ / /H H HE E E1 1 1 1
Z Z Z  4  6  , , ,A A A   2"D "D "DH% % %,  7? 7? 7?rV1 V1 V1 V1p
d 
d 
d 
d 
d 
dr   rI   )__doc__
__future__r   r   rv   r^   r   r   anaconda_project.conda_managerr   r   r   r   #anaconda_project.internal.conda_apiinternalr*   !anaconda_project.internal.pip_apir   "anaconda_project.internal.makedirsr   anaconda_projectr   r   r#   rG   rI   r   r   r   <module>r     sA   . - & & & & & &   				      v v v v v v v v v v v v 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 3 3 3 3 3 3  B&K &K &KR{d {d {d {d {d, {d {d {d {d {dr   