
    cg]                     (   d dl mZmZmZ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
Z
d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZ ej                            dd          Z G d d	e          Z G d
 de          Z G d de          Zd Zd ZdEdZdFdZ dFdZ!d Z"d Z#dGdZ$dHdZ%dGdZ&dIdZ'd Z(d Z)d Z*dJdZ+d Z,d  Z-d! Z.d" Z/d# Z0d$ Z1d% Z2d& Z3d' Z4d( Z5 ej6        d)g d*          Z7 e
j8        d+e
j9                  Z: e
j8        d,e
j9                  Z;d- Z<d.Z=d/ Z>d0 Z?d1 Z@daAdaB e>            fd2ZCd3ZD eE eFeD                    eDk    sJ d4ZG eE eFeG                    eGk    sJ h d5ZHd6hZI eE eF eJeG          d7gz   d8 eHD             z   d9 eID             z                       ZKd:ZL eE eFeL                    eLk    sJ d;ZM eE eFeM                    eMk    sJ  eN            ZOeLD ]gZPg ZQeGD ],ZReRS                    eP          reQT                    eR           - eEeQ          eOeP<    eE eFeOeP                             eOeP         k    sJ hd< ZU eU            eOd=<    eE eFeOd=                             eOd=         k    sJ eGeOd><   d?eLz   ZV eWeV           eWeOX                                          k    sJ d@ ZY eE eF eJ eWeD eY            fz                                           ZZdA Z[dB Z\dC Z]dD Z^dS )K    )absolute_importprint_functiondivisionunicode_literalsN)streaming_popen)"subdirectory_relative_to_directory)	is_stringis_dict	CONDA_EXEcondac                   $     e Zd ZdZd fd	Z xZS )
CondaErrorzGeneral Conda error.Nc                 f    t          t          |                               |           || _        dS )zInitialize CondaError.N)superr   __init__json)selfmessager   	__class__s      Clib/python3.11/site-packages/anaconda_project/internal/conda_api.pyr   zCondaError.__init__   s,    j$((111			    N)__name__
__module____qualname____doc__r   __classcell__)r   s   @r   r   r      sC                 r   r   c                       e Zd ZdZdS )CondaEnvExistsErrorz!Conda environment already exists.Nr   r   r   r    r   r   r   r   $   s        ++Dr   r   c                       e Zd ZdZdS )CondaEnvMissingErrorzConda environment missing.Nr    r!   r   r   r#   r#   *   s        $$Dr   r#   c                 X    d | D             }d| vrd| vr|                     d           |S )Nc                     g | ]
}|d k    |S )
nodefaultsr!   ).0cs     r   
<listcomp>z&_implicit_defaults.<locals>.<listcomp>1   s"    888Qa<&78q888r   r&   defaults)append)channelstrimmeds     r   _implicit_defaultsr.   0   sE    88(888GH$ #:X+E #z"""Nr   c                 @    t           g}|                    |            |S r   )r   extend)
extra_argscmd_lists     r   _get_conda_commandr3   :   s     {HOOJOr   Fc           	      b   t          |           dk    sJ t          |           }d                    |          }d }|#t          j                                        }||d<   	 t          j        ||||          \  }}	}
n4# t          $ r'}t          d|dt          |                    d }~ww xY wd                    |
          }|j        dk    rd }|}|re	 d                    |	          }t          j        |          }|(t          |t                    rdD ]}||v r
||         } nn# t           $ r Y nw xY wt          |d||	          |dk    rB|@|
D ]=}t#          d
d| d         d|                                t&          j                   >d                    |	          S )Nr    CONDA_SUBDIR)envstdout_callbackstderr_callbackzfailed to run: z:  )r   errorr   r   )file)lenr3   joinosenvironcopyr   popenOSErrorr   repr
returncoder   loads
isinstancedict	Exceptionprintstripsysstderr)r1   	json_modeplatformr8   r9   r2   command_in_errorsr7   pstdout_linesstderr_lineseerrstrparsedr   outfieldlines                     r   _call_condar[   A   s1   z??Q!*--H**
C 'joo&NQ*9*?DGP_P_+a +a +a'L,,  Q Q Qj4E4E4EtAwwwOPPPQWW\""F|q Y 	ggl++C "*VT*B*B " "6 " " F? "&,UmG!E"     %6%6%6@vNNNN	2 Y/ Y ! 	Y 	YD*Q---FSZXXXXX77<   s+   "A? ?
B0	"B++B0AD. .
D;:D;c                     t          | d|          }	 t          j        |          S # t          $ r$}t	          dt          |          z            d }~ww xY w)NT)rO   rP   zInvalid JSON from conda: %s)r[   r   rG   
ValueErrorr   str)r1   rP   rX   rU   s       r   _call_and_parse_jsonr_   p   sg    
jD8
D
D
DCAz# A A A6Q?@@@As   ( 
AAAc                 (    t          ddg|           S )zReturn a dictionary with configuration information.

    No guarantee is made about which keys exist.  Therefore this function
    should only be used for testing and debugging.
    info--jsonrP   )r_   rc   s    r   ra   ra   x   s       2XFFFFr   c           	          	 t          ddddd| dg          S # t          $ r0}dt          |                                          vr i cY d}~S d}~ww xY w)	zReturn a dictionary of environment variables.

    These are Conda Environment variables that have been
    set using `conda env config vars`.
    r7   configvarslist-prb   zinvalid choiceN)r_   r   r^   lower)
env_prefixrU   s     r   get_env_varsrk      sq    #UHffdJX`$abbb   3q66<<>>1 	IIIIIIs    
A%AAAc                    t           j                            |           r| S t                      } |j        dd          }| dk    r|S  |j        dg           }|D ])}t           j                            |          | k    r|c S *dS )zConvert an env name or path into a canonical prefix path.

    Returns:
        Absolute path of prefix or None if it isn't found.
    root_prefixNrootenvs)r@   pathisabsra   getbasename)name_or_prefixr   rm   ro   prefixs        r   resolve_env_to_prefixrv      s     
w}}^$$ 66D$(=$//K 48FBD  7F##~5 	MMM	4r   r!   c                    t           j                            |           rt          d| z            ddd| g}t           j                            dd          }|s|                    dd           |r*t          |          D ]}|                    d	|g           n|                    d	d
g           |                    |           t          |||           dS )zNCreate an environment either by name or path with a specified set of packages.z%Conda environment [%s] already existscreate--yes--prefix*ANACONDA_PROJECT_DISABLE_OVERRIDE_CHANNELSF   --override-channels	--channelr*   r8   r9   N)
r@   rp   existsr   rA   rr   insertr.   r0   r[   ru   pkgsr,   r8   r9   r2   disable_override_channelschannels           r   rx   rx      s    	w~~f T!"IF"RSSS':v6H "
/[]b c c$ 20111 3)(33 	4 	4GOO['23333	4 	j1222OOD/?[[[[[[r   c                 D   t           j                            |          st          d|z            dd| d|g}t	          |||           t           j                            | d          }t           j                            |          rt          j        |           dS dS )zClone a pre-existing env.z/Conda environment [%s] does not exist to clone.rx   rh   z--cloner   z	.readonlyN)r@   rp   r   r#   r[   r?   unlink)ru   sourcer8   r9   r2   readonly_files         r   cloner      s    7>>&!! _"#TW]#]^^^$	6:H/?[[[[ GLL55M	w~~m$$ !
	-     ! !r   c                    |rt          |t          t          f          st          d|          ddg}|                    d| g           t
          j                            dd          }|s|                    dd           |r*t          |          D ]}|                    d	|g           n|                    d	d
g           |                    |           t          |||           dS )z]Install packages into an environment either by name or path with a specified set of packages.Xmust specify a list of one or more packages to install into existing environment, not %rinstallry   rz   r{   Fr|   r}   r~   r*   r   N)rH   rg   tuple	TypeErrorr0   r@   rA   rr   r   r.   r[   r   s           r   r   r      s    z$u66 r  	 7#HOOZ())) "
/[]b c c$ 20111 3)(33 	4 	4GOO['23333	4 	j1222OOD/?[[[[[[r   c                     |rt          |t          t          f          st          d          ddg}|                    d| g           |                    |           t          |||           dS )z;Remove packages from an environment either by name or path.zOmust specify a list of one or more packages to remove from existing environmentremovery   rz   r   N)rH   rg   r   r   r0   r[   )ru   r   r8   r9   r2   s        r   r   r      s~     kz$u66 kijjj'"HOOZ()))OOD/?[[[[[[r   c                 v    |                      dd          }t          |          dk    rt          |          S d S )N-      )rsplitr>   r   )distpiecess     r   _parse_distr      s;     [[a  F
6{{a V}}tr   c                    t           j                            | d          }	 t          d t          j        |          D                       }nW# t
          $ rJ}|j        t          j        k    rt                      }nt          t          |                    Y d}~nd}~ww xY wt                      }|D ]}t          |          }||||d         <   |S )z=Get a dict of package names to (name, version, build) tuples.
conda-metac              3   T   K   | ]#}|                     d           |dd         V  $dS )z.jsonN)endswith)r'   fns     r   	<genexpr>zinstalled.<locals>.<genexpr>   s;      XXR2;;wCWCWXCRCXXXXXXr   Nr   )r@   rp   r?   setlistdirrD   errnoENOENTr   r^   rI   r   )ru   meta_dir
full_namesrU   result	full_namer   s          r   	installedr      s    w||FL11H%XX2:h+?+?XXXXX

 % % %7el" 	%JJSVV$$$ JJJJ%
 VVF ' '	Y'' 	' &F6!9Ms   +A 
B"A BB"c                     ddd| g}t          |          }t          j        |          }|                    dg           }|D ])}t	          |          r|                    dg           c S *d S )Nr7   exportrh   dependenciespip)r[   yaml	safe_loadrr   r
   )ru   r2   stdoutrW   r   deps         r   installed_pipr   	  s    xv.H""F^F##F::nb11L & &3<< 	&775"%%%%%	&& &r   c                    | rt          | t          t          f          st          d|           t	          j        d          }t          j        |           dddddd	|g}t          j        	                    d
d          }|s|
                    dd           |r*t          |          D ]}|                    d|g           n|                    ddg           |d|v r|                    ddg           |                    |            	 t          ||          }	 t          j                            |          rt!          j        |           nZ# t$          $ r Y nNw xY w# 	 t          j                            |          rt!          j        |           w w # t$          $ r Y w w xY wxY wg }|	                    dg           }	t          |	t&                    r|	g}	|	D ]}
t          |
t&                    r|
	                    dg           }|D ]}d}t          |t&                    rN|	                    dd          }|	                    dd          }|	                    dd          }|	|||||f}nKt)          |          r<|                                }t-          |          dk    rt/          |d                   }||                    |           ʌt-          |          dk    rt3          d|          |S )zNResolve packages into a full transitive list of (name, version, build) tuples.r   _anaconda_project_resolve_ru   rx   ry   z--quietrb   z	--dry-runrz   r{   Fr|   r}   r~   r*   Nwinmsys2rc   actionsLINKnameversionbuild_stringr   zQCould not understand JSON from Conda, could be a problem with this Conda version.r<   )rH   rg   r   r   tempfilemkdtempr@   rmdirrA   rr   r   r.   r0   r_   rp   isdirshutilrmtreerJ   rI   r	   splitr>   r   r+   r   )r   r,   rP   ru   r2   r   r   rW   resultsr   actionlinkslinkfoundr   r   r   r   s                     r   resolve_dependenciesr     sz    z$u66 r  	
 %ABBBF HV'9hZQWXH "
/[]b c c$ 20111 3)(33 	4 	4GOO['23333	4 	j1222  4H 	4OO['2333OOD%hBBB	w}}V$$ &f%%% 	 	 	D		w}}V$$ &f%%%%& 	 	 	D	 GjjB''G'4   ) * *fd## 	*JJvr**E * * dD)) 788FD11D"hhy$77G#'88ND#A#AL >>#> "&w =t__ 7!ZZ\\F6{{Q 7 +F1I 6 6 *NN5)))
7||q &l$& & & 	& NsB   E% !3E 
E"!E"%F,'3FF,
F)&F,(F))F,c                     t           j                            | d          }t           j                            |          S )Nr   )r@   rp   r?   r   )rp   
conda_metas     r   _contains_conda_metar   f  s+    dL11J7==$$$r   c                     |                      d          r
| d d         } |                      d          sdS t          j                            |           }t	          |          S )N/z/binF)r   r@   rp   dirnamer   rp   possible_prefixs     r   _is_conda_bindir_unixr   k  s]    }}S CRCy==   ugood++O000r   c                 V   |                      d          s|                      d          r
| d d         } |                    dd          }|                      d|z             pG|                      d|z             p/|                      d|z             p|                      d|z             S )N\r   r   )r   replace)rp   suffixreplaceds      r   _path_endswith_windowsr   t  s    }}T dmmC00 CRCy~~dC((H=='' &cFl##&dXo&&& 	cHn%%&r   c                    |                      d          s|                      d          r
| d d         } t          |           rdS t          | d          rKt          j                            t          j                            |                     }t          |          S t          | d          r.t          j                            |           }t          |          S dS )Nr   r   r   TLibrary\binScriptsF)r   r   r   r@   rp   r   r   s     r   _is_conda_bindir_windowsr   ~  s    
 }}T dmmC00 CRCyD!! 	t	n	5	5 '//"'//$*?*?@@#O444	i	0	0 '//$//#O444ur   c                 |    | g}dD ]5}|                     t          j                            | |                     6|S )N)r   r   )r+   r@   rp   r?   )ru   dirsitems      r   _windows_bindirsr     sB    8D+ 0 0BGLL..////Kr   c                 D    t           j                            | d          gS )Nbin)r@   rp   r?   r   s    r   _unix_bindirsr     s    GLL''((r   c                     |                      t          j                  }g }| ||          }|D ](}|dk    r  ||          s|                    |           )t          j                            |          S )Nr:   )r   r@   pathsepr+   r?   )rp   ru   bindirs_funcis_bindir_funcelementsnew_elementselements          r   _set_conda_env_in_pathr     s    zz"*%%HL ,#|F++ ) )b= 	)!8!8 	)(((:??<(((r   c                 :    t          | |t          t                    S r   )r   r   r   rp   ru   s     r   _set_conda_env_in_path_unixr     s    !$?TUUUr   c                 :    t          | |t          t                    S r   )r   r   r   r   s     r   _set_conda_env_in_path_windowsr     s    !$0@BZ[[[r   c                 p    t          j                    dk    rt          | |          S t          | |          S )a  Remove any existing conda envs in the given path string, then add the given one.

    Args:
        path (str): value of the PATH environment variable
        prefix (str): the environment prefix, or None to remove all conda bindirs
    Returns:
        the new PATH value
    Windows)rP   systemr   r   r   s     r   set_conda_env_in_pathr     s9     I% 9-dF;;;*4888r   
ParsedSpecr   conda_constraintpip_constraintexact_versionexact_build_stringa  
(?P<name>[^=<>!\s]+)               # package name
\s*                                # ignore spaces
(
  (?P<cc>=[^=<>!]+(=[^=<>!]+)?)    # conda constraint
  |
  (?P<pc>[=<>!]{1,2}.+)            # new (pip-style) constraint(s)
)?
$                                  # end-of-line
z+=(?P<version>[^=<>!]+)(?P<build>=[^=<>!]+)?c                 h   t          |           st          d| z            t                              |           }|dS |                    d                                          }|                    d          }||                    dd          }|                    d          }d}d}|qt                              |          }|J |                    d          }d	D ]
}||v rd} n|/|                    d
          }||d         dk    sJ |dd         }t          |||||          S )zqParse a package name and version spec as conda would.

    Returns:
       ``ParsedSpec`` or None on failure
    zExpected a string not %rNr   pcr5   r:   ccr   )|*,buildr   =r|   r   )	r	   r   	_spec_patmatchgroupri   r   _conda_constraint_patr   )specmr   r   r   r   r   specials           r   
parse_specr    sx    T?? ;2T9:::A t776??  ""DWWT]]N 9'//R88wwt}}M <!''(899	**& 	 	G-'  $  	<!"!1!1! <)!,3333%7%;"4'7%3$1);	= = = =r   )CONDA_PREFIXCONDA_ENV_PATHCONDA_DEFAULT_ENVc                  >    t           D ]} | t          j        v r| c S dS )Nr  )_all_prefix_variablesr@   rA   )r   s    r   conda_prefix_variabler    s7     &  2: 	KKK	
 >r   c                 P    t           D ]}|| v r|                     |          c S d S r   )r  rr   rA   r   s     r   environ_get_prefixr    s?    % % %7? 	%;;t$$$$$	%4r   c                 (    t           D ]	}|| v r| |= 
d S r   )r  r  s     r   environ_delete_prefix_variablesr  "  s/    %  7? 	 r   c                    t           j                            |          }|| |<   |dk    rt          `t	                      }d |                    dg           D             at           j                            |                    d                    a|t          k    rd}n"t          D ]}t          ||          }||k    r n|| d<   d S d S )Nr  c                 L    g | ]!}t           j                            |          "S r!   )r@   rp   normpath)r'   ds     r   r)   z&environ_set_prefix.<locals>.<listcomp>8  s(    NNN!"'**1--NNNr   	envs_dirsrm   rn   )r@   rp   r  
_envs_dirsra   rr   	_root_dirr   )rA   ru   varnameir   r  s         r   environ_set_prefixr   ,  s    Wf%%FGG%% ,  	?ANNquu["7M7MNNNJ((})=)=>>IY 	DD  9&!DD6> E'+#$$$%, ,r   )linux-64osx-64win-64)zlinux-32r!  r"  zwin-32r#  >   armv6larmv7laarch64ppc64learm64zosx-32c                     g | ]}d |z  S )zlinux-%sr!   r'   r	  s     r   r)   r)   S  s    ;n;n;nQRZ!^;n;n;nr   c                     g | ]}d |z  S )zosx-%sr!   r*  s     r   r)   r)   T  s    777A(Q,777r   )linuxosxr   )r,  r-  c                      g } t           D ]6}t          D ],}|                    |          r|                     |           -7t	          |           S r   )unix_platform_namesdefault_platforms_plus_32_bit
startswithr+   r   )r   	unix_namerR   s      r   _known_unix_platformsr3  i  s_    F( ! !	. 	! 	!A||I&& !a   	! ==r   unixall)r5  r4  c                  H    t                      } |                     d          S )NrP   )ra   rr   )
conda_infos    r   current_platformr8  ~  s    J>>*%%%r   c                      t           S r   )_default_platforms_with_currentr!   r   r   default_platforms_with_currentr;    s    **r   c                 P    d| v sJ  | j         dd          }|d         |d         fS )z-Split platform into OS name and architecture.r   r|   r   )r   )rP   r   s     r   parse_platformr=    s:    (? X_S!$$F1Ivay!!r   c                 R   t                      }t                      }t                      }| D ]O}d|vr|                    |           |                    |           |t          vr|                    |           Pt          |          t          |          t          |          fS )a  Split platform list into known, unknown, and invalid platforms.

    Also, sort the list into canonical order.

    We return a tuple, the second list in the tuple
    is a subset of the first, and indicates platforms
    we don't know about. These may create a warning.
    The third list is not in the other two and indicates
    unusably-invalid platform names.

    Returns:
       Tuple of known platforms and unknown platforms.
    r   )r   add_known_platformssort_platform_list)	platformsr   unknowninvalidrR   s        r   validate_platform_listrE    s     UUFeeGeeG  a< 	KKNNNNJJqMMM(( A v&&(:7(C(CEWX_E`E`aar   c                     t          |           }g }t          t          z   D ]0}||v r*|                    |           |                    |           1|t          t          |                    z   }|S )zJSort platform list (including "grouping" names) from more to less general.)r   _known_platform_groups_keysr@  r+   r   sortedrg   )rB  	remainingr   knowns       r   rA  rA    sx    IIF-0@@ $ $I 	$MM%   U###fT)__---FMr   )FNNNr   )Nr!   NN)NN)NNN)r!   N)_
__future__r   r   r   r   collectionsr   r   r@   rP   rer   rM   r   r   anaconda_project.internalr   ,anaconda_project.internal.directory_containsr   $anaconda_project.internal.py2_compatr	   r
   rA   rr   r   rJ   r   r   r#   r.   r3   r[   r_   ra   rk   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
namedtupler   compileVERBOSEr  r  r  r  r  r  r  r  r  r   default_platformsr   rH  r0  _non_x86_linux_machines_non_x86_osx_machinesrg   r@  known_platform_namesr/  rI   _known_platform_groupsr   r   rR   r1  r+   r3  rG  r   keysr8  r:  r;  r=  rE  rA  r!   r   r   <module>rZ     s    S R R R R R R R R R R R       				  				  



   5 5 5 5 5 5 [ [ [ [ [ [ C C C C C C C CJNN;00	       	 	 	 	 	* 	 	 		 	 	 	 	: 	 	 	    ,! ,! ,! ,!^A A A AG G G G  "  *\ \ \ \*! ! ! !\ \ \ \.	\ 	\ 	\ 	\    $& & &P P P Pf% % %
1 1 1& & &  &  ) ) )	) 	) 	)V V V\ \ \9 9 9 $[#gggi i
 BJ	 Z
 
	 #
#PRTR\]] '= '= '=Z P   0     
	 1F0E0G0G , , , ,4 5 uVV%&&''+<< < < < !W uVV122337TT T T TDDD  	  5
F*++xj8;n;nVm;n;n;nn77!6777	89 9: : 
 / uVV())**.BB B B B& uVV'(())-@@ @ @ @  ! W WDF*  << 	MM!#(5==4 5.t45566:PQU:VVVVVV   "7!6!8!8 v uVV*6233448Nv8VV V V V !> u  .0DD 
s&''33/E/J/J/L/L+M+MM M M M& & &
 #(%ttCC8IM]M]M_M_Lb8b4c4c/d/d(e(e"f"f + + +" " "b b b<    r   