
    wBf                       U 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Zddl	Z	ddl
mZ ddlmZmZmZmZmZmZ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lm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 erddl3m4Z4m5Z5  ee6      Z7 G d dejp                        Z9d Z:d Z;d Z< G d d      Z=	 	 	 	 d3dZ>	 	 	 	 	 	 d4dZ?d3dZ@	 	 	 	 d3dZA G d  d!e9      ZB G d" d#e9      ZC G d$ d%e9      ZD G d& d'e9      ZE G d( d)e9      ZF G d* d+e9      ZG G d, d-e9      ZHeBeBeBeBeBeCeCeDeEeFeGd.ZId/eJd0<   d1eHiZKd2 ZLy)5aN  Conda activate and deactivate logic.

Implementation for all shell interface logic exposed via
`conda shell.* [activate|deactivate|reactivate|hook|commands]`. This includes a custom argument
parser, an abstract shell class, and special path handling for Windows.

See conda.cli.main.main_sourced for the entry point into this module.
    )annotationsN)	getLogger)abspathbasenamedirnameexists
expanduser
expandvarsisdirjoin)Path)which)run)dedent)TYPE_CHECKING   )CONDA_PACKAGE_ROOTCONDA_SOURCE_ROOT)Utf8NamedTemporaryFile)CONDA_ENV_VARS_UNSET_VARPACKAGE_ENV_VARS_DIRPREFIX_STATE_FILE)ROOT_ENV_NAMEcontextlocate_prefix_by_name)FILESYSTEM_ENCODINGon_win)paths_equal)
deprecated)CallableIterablec                     e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   d6dZd7dZ eddd      d        Z eddd      d8d       Zd Z	d Z
d Zd Zd6d9dZd Zd  Zej"                  d:d!       Zd:d"Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Z ej8                  ddd+      d,        Zd6d-Zd6d.Zd6d/Z d0 Z!d1 Z"d2 Z#d3 Z$d4 Z%d5 Z&y);
_Activatorstrpathsep_joinsepzDCallable[[str | Iterable[str] | None], str | tuple[str, ...] | None]path_conversionscript_extension
str | Nonetempfile_extensioncommand_joinunset_var_tmplexport_var_tmplset_var_tmplrun_script_tmplzPath | Nonehook_source_pathNc                    || _         y N)_raw_arguments)self	argumentss     .lib/python3.12/site-packages/conda/activate.py__init__z_Activator.__init__b   s
    '    c                   g }i }|j                         D ]:  \  }}| |j                  |j                                (|||j                         <   < |rt        j                  j                         D ]e  \  }}| |j                  |j                                (d|v sd|v r#| j                  |      ||j                         <   S|||j                         <   g ||fS |j                  t        j                         ||fS )a  
        :param export_metavars: whether to export `conda_exe_vars` meta variables.
        :param kwargs: environment variables to export.
            .. if you pass and set any other variable to None, then it
            emits it to the dict with a value of None.

        :return: A dict of env vars to export ordered the same way as kwargs.
            And a list of env vars to unset.
        /\)itemsappendupperr   conda_exe_vars_dictr'   extend)r4   export_metavarskwargs
unset_varsexport_varsnamevalues          r6   get_export_unset_varsz _Activator.get_export_unset_varse   s     
 "<<> 	2KD%}!!$**,/,1DJJL)		2 &::@@B 6e=%%djjl3E\TU]040D0DU0KK

-05K

-6 J&& g99:J&&r8   24.925.3>Use `conda.activate._Activator.get_export_unset_vars` instead.addendumc                T     | j                   di |\  }}i |xs i |g |xs g |hS N rG   )r4   rD   rC   rB   new_export_varsnew_unset_varss         r6   add_export_unset_varsz _Activator.add_export_unset_vars   sM     +E$*D*D*Nv*N'6!r6o62zR2>2
 	
r8   z&For testing only. Moved to test suite.c                       j                   di |\  }} j                  j                   fd|xs i j                         D               j                  j                   fd|xs g D              fS )Nc              3  F   K   | ]  \  }}j                   ||fz    y wr2   )r-   ).0kvr4   s      r6   	<genexpr>z;_Activator.get_scripts_export_unset_vars.<locals>.<genexpr>   s)      #26!Q$$1v-#s   !c              3  <   K   | ]  }j                   |z    y wr2   )r,   )rV   rW   r4   s     r6   rY   z;_Activator.get_scripts_export_unset_vars.<locals>.<genexpr>   s!      #./##q)#s   rO   )rG   r+   r   r<   r4   rB   rD   rC   s   `   r6   get_scripts_export_unset_varsz(_Activator.get_scripts_export_unset_vars   s~    "<$"<"<"Fv"FZ"" #;F;L":S:S:U#  "" #4>4D"# 	
 	
r8   c                *   g |d}|| j                   j                  |      S |rMt        d|d      5 }|j                  | j                   j                  |             d d d        |j                  S t               # 1 sw Y   j                  S xY w)N w+Fsuffixdelete)r+   r   r   writerE   NotImplementedError)r4   commandsexttfs       r6   	_finalizez_Activator._finalize   s    "X?r?;$$))(33'SG ;2 **//9:; 77N%''; 77Ns   +A>>Bc                    | j                   r| j                  | j                        }n| j                  | j                        }| j	                  | j                  |      | j                        S r2   )stackbuild_stackenv_name_or_prefixbuild_activaterh   _yield_commandsr*   )r4   builder_results     r6   activatez_Activator.activate   s\    ::!--d.E.EFN!001H1HIN~~  0$2I2I
 	
r8   c                t    | j                  | j                  | j                               | j                        S r2   )rh   rn   build_deactivater*   r4   s    r6   
deactivatez_Activator.deactivate   2    ~~  !6!6!894;R;R
 	
r8   c                t    | j                  | j                  | j                               | j                        S r2   )rh   rn   build_reactivater*   rs   s    r6   
reactivatez_Activator.reactivate   ru   r8   c                h   g }| j                         x}r|j                  |       | j                  r)|j                  | j                  j                                |t        j
                  s|r|j                  d       | j                         }||j                  |       dj                  |      S )Nzconda activate base

)_hook_preambler=   r0   	read_textr   auto_activate_base_hook_postambler   )r4   r}   builderpreamble	postambles        r6   hookz_Activator.hook   s    **,,8,NN8$  NN400::<=&**!NN23((*	 NN9%yy!!r8   c                n    | j                  | j                          t        | | j                               S r2   )_parse_and_set_argsr3   getattrcommandrs   s    r6   executez_Activator.execute   s,      !4!45*wtT\\*,,r8   c           
         ddl m}m} ddlm} dj                  t         | |             t         |d            z               S )z
        Returns a list of possible subcommands that are valid
        immediately following `conda` at the command line.
        This method is generally only used by tab-completion.
        r   )find_builtin_commandsgenerate_parser)find_commandsrz   T)cli.conda_argparser   r   cli.find_commandsr   r   sortedtuple)r4   r   r   r   s       r6   re   z_Activator.commands   s@     	O4 yy%o&785tAT;UU
 	
r8   c                    t         r2   )rd   rs   s    r6   r{   z_Activator._hook_preamble   s
     "!r8   c                     y r2   rO   rs   s    r6   r~   z_Activator._hook_postamble   s    r8   c                D   dd}|t        |      dk  r |        |^}dt        fd|D              }t        |      t        |      k7  }t        fd|D              }s |        nB|r3ddlm}m}m}  |        |        |d       |d       |d	      d
}	|	   dvr	 |       j                  d      sdk(  r 	 |j                  d      }
||
= dt        _
        dk(  rt        j                  xr! t        j                  t        j                  k  | _        	 |j                  d      }	 |j                  d      }|dk\  r|dk\  rddlm}  |dz         |dk\  r
d| _        ||= |dk\  r
d| _        ||= t        |      dkD  r ddlm}  |dz   t!        |      z   dz         |xr |d   xs d| _        | _        y |rddlm}  | d| d      | _        y # t        $ r dt        _
        Y w xY w# t        $ r d}Y w xY w# t        $ r d}Y w xY w)Nc                6    ddl m} d}| r|d| z  z  } ||      )Nr   ArgumentErrorzS'activate', 'deactivate', 'hook', 'commands', or 'reactivate' command must be givenz. Instead got '%s'.)
exceptionsr   )actual_commandr   messages      r6   raise_invalid_command_errorzC_Activator._parse_and_set_args.<locals>.raise_invalid_command_error   s/    1(  0>AA((r8   r   )z-hz--helpz/?c              3  ,   K   | ]  }|vs|  y wr2   rO   )rV   arg
help_flagss     r6   rY   z1_Activator._parse_and_set_args.<locals>.<genexpr>  s     Pc#Z:OcPs   	c              3  4   K   | ]  }|s|k7  s|  y wr2   rO   )rV   r   r   s     r6   rY   z1_Activator._parse_and_set_args.<locals>.<genexpr>  s     UcccWncUs   )ActivateHelpDeactivateHelpGenericHelpr   re   rx   )rp   rt   r   re   rx   )rp   rt   rx   r   re   )r   rp   z--devTFz--stackz
--no-stackr   r   z.cannot specify both --stack and --no-stack to z) does not accept more than one argument:
rz   basez+ does not accept arguments
remainder_args: r2   )lenr   listr   r   r   r   endswithindexr   dev
ValueError
auto_stackshlvlrj   r   r$   rl   r   )r4   r5   r   non_help_argshelp_requestedremainder_argsr   r   r   help_classesdev_idx	stack_idxno_stack_idxr   r   r   s                 @@r6   r   z_Activator._parse_and_set_args   s   		) I 2')')+
PYPPY3}+==U]UU')MM )N,.#F+'
3),7L w'' 
 
 (w?J'7f+<#(..w7 #7+"j  ++SASAS0SDJ*00;	"-33LA A~,!"35#DwN  A~!
"9-q "
"<0>"Q&5#BC.)*   '5&J9J&TfD#  5#iKNK[[]^  _  $#$  	  "!"s6   G% #H  5H %G=<G= HHHHc              #  p  K   t        |j                  di       j                               D ]  \  }}| j                  ||fz    |j                  dd      D ]  }| j                  |z    |j                  dd      D ]  }| j
                  |z    |j                  di       j                         D ]  \  }}| j                  ||fz    |j                  di       j                         D ]  \  }}| j                  ||fz    |j                  dd      D ]  }| j                  |z    y w)Nexport_pathdeactivate_scriptsrO   rC   set_varsrD   activate_scripts)r   getr<   r-   r/   r,   r.   )r4   	cmds_dictkeyrF   scripts        r6   rn   z_Activator._yield_commandsO  sL     }b!A!G!G!IJ 	6JC&&#u55	6  mm$8"= 	0F&&//	0 ==r2 	,C%%++	, $--
B7==? 	3JC##sEl22	3 $--r:@@B 	6JC&&#u55	6  mm$6; 	0F&&//	0s   D4D6c                &    | j                  |d      S )NF_build_activate_stackr4   rl   s     r6   rm   z_Activator.build_activateb  s    ))*<eDDr8   c                &    | j                  |d      S )NTr   r   s     r6   rk   z_Activator.build_stacke  s    ))*<dCCr8   c           	     
   t        j                  d|      r.t        |      }t        t	        |d            s4ddlm}  ||      |t        dfv rt        j                  }nt        |      }t        t        j                  dd      j                         xs d      }t        j                  d	      }||k(  r|dkD  r| j                         S | j!                  |      }|dz   }| j#                  |      }	| j%                  ||	      }
| j'                  |      j)                         D ci c]  \  }}|t*        k7  r|| }}}t-        |      j/                  t        j0                        }|D cg c]  }t        j                  |      ||   k7  r|! }}|r9t3        d
t4        j6                         t3        d| t4        j6                         |D ]   }t        j                  |      |d| d| <   " |dk(  r< | j8                  d| j;                  | j=                  |            |||	|
d|\  }}d}n|rH | j8                  d| j;                  | j=                  |            |||	|
d|d| |d| di\  }}d}nR | j8                  d| j;                  | j?                  ||            |||	|
d|d| |i\  }}| jA                  |      }i }t        jB                  r| jE                  ||
       |||||dS c c}}w c c}w )Nz\\|/z
conda-metar   )EnvironmentLocationNotFoundrootCONDA_SHLVLr^   r   CONDA_PREFIXz=WARNING: overwriting environment variables set in the machinefilezoverwriting variable __CONDA_SHLVL__)pathconda_prefixconda_shlvlconda_default_envconda_prompt_modifierrO   CONDA_PREFIX_CONDA_STACKED_truerC   r   rD   r   r   )#researchexpandr   r   r   r   r   r   root_prefixr   intosgetenvstriprw   _get_activate_scripts_default_env_prompt_modifier_get_environment_env_varsr<   r   setintersectionenvironprintsysstderrrG   r%   _add_prefix_to_path_replace_prefix_in_path_get_deactivate_scripts	changeps1_update_prompt)r4   rl   rj   prefixr   old_conda_shlvlold_conda_prefixr   r   r   r   rE   rF   env_varsclobber_varsclobber_varoverwritten_clobber_varsrD   rC   r   r   s                        r6   r   z _Activator._build_activate_stackh  s   99W01./Ffl34C1&99M6#::((F*+=>F biir:@@BGaH99^4 v%/A*=((**55f=%) --f5 $ 5 5f>O P  $==fEKKM
e00 %K
 
 8}11"**=  ,$
yy%+)>> $
  $

 $OZZ )*B)CD3::V  	RDBD))D/H~o%6av>?	R a&@d&@&@ '&&t'?'?'GH#'"3&;' '#K "$&@d&@&@ '&&t'?'?'GH#'"3&;' ' $O#457G$[M2F'#K "$&@d&@&@ '&&001A6J $'"3&;' ' $O#457G'#K "&!=!=>N!O*?@ % &"4 0
 	
E
$
s   &K:+$L c                |   d| _         t        j                  d      }t        t        j                  dd      j	                         xs d      }|r|dk  rdi i dddS | j                  |      }| j                  |      }|dz
  }i }|dk(  rA| j                  | j                  |            }| j                  d |d d 	      \  }}	d}
d}d
|i}n|dkD  sJ t        j                  d|z        }| j                  |      }| j                  ||      }
| j                  |      }d|z  t        j                  v }d}d|z  g}	|r5| j                  | j                  |            }|	j                  d|z         n!| j                  | j                  ||            } | j                  d||||
d	|\  }}|	|z  }	d
|i}| j                  |      }t         j"                  r| j%                  ||
       |j'                         D ]8  }|	j                  |       d| d| }t        j                  |      x}s4|||<   : |	|||||dS )NTr   r   r^   r   r   rO   r   )r   r   r   r   PATHzCONDA_PREFIX_%dzCONDA_STACKED_%dr   r   )rC   r   rD   r   r   r   )_deactivater   r   r   r   r   r   r%   _remove_prefix_from_pathrG   r   r   r   r=   r   r   r   r   r   keys)r4   r   r   r   old_conda_environment_env_varsnew_conda_shlvlr   new_pathrD   rC   r   r   r   
new_prefixr   new_conda_environment_env_varsold_prefix_stackedunset_vars2env_varsave_var
save_values                        r6   rr   z_Activator.build_deactivate  s   99^4biir:@@BGaH?Q#6 !!&($&  "99:JK)-)G)G*
& *A-a((--.>?H '+&@&@!+"&&*	 'A '#K %'!!K #Q&&&#4#FGJ $ 1 1* =$($9$9*FW$X!-1-K-KJ-W*!3o!E!SH+o=>J!,,112BC !!"4"FG,,001A:N (Bt'A'A ('+"3&;	(
 1($K +%JK  $99*E*?@5::< 	2Gg&''8'CHYYx00z0'1G$		2 % &&"4 0
 	
r8   c                   d| _         t        j                  d      }t        t        j                  dd      j	                         xs d      }|r|dk  rdi i dddS t        j                  d	| j                  |            }| j                  | j                  ||            }i }| j                  ||      }t        j                  r| j                  ||       d}||| j                  ||      d
}| j                  |      }	|	j                         D ]  \  }
}|t        k(  r||
fz   }|||
<    |||| j                  |      | j!                  |      dS )NTr   r   r^   r   r   rO   r   CONDA_DEFAULT_ENV)r   r   CONDA_PROMPT_MODIFIER)_reactivater   r   r   r   r   r%   r   r   r   r   r   r   r<   r   r   r   )r4   r   r   r   r   r   r   env_vars_to_unsetenv_vars_to_exportconda_environment_env_varsrW   rX   s               r6   rw   z_Activator.build_reactivate)  s   yy0"))M26<<>C!D{Q !!&($&  II!2!2<!@
 $$((|D
  $ 5 5lDU V*?@&%)%:%:/&
 &*%C%CL%Q".446 	*DAq,,$5$<!()"1%		* , -"&">">|"L $ : :< H
 	
r8   c                    ddd}t        j                  dt        j                  |v r|t        j                     nd      }|j	                  t         j
                        }|S )Nz/usr/bin:/bin:/usr/sbin:/sbinzcC:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\)darwinwin32r   z/usr/bin)r   r   r   platformsplitpathsep)r4   clean_pathsr   
path_splits       r6   _get_starting_path_listz"_Activator._get_starting_path_listX  sY     6?	
 yy),)DK%*
 ZZ

+
r8   extra_library_binc              #    K   t         r|j                  d       g }dD ]_  }| j                  j                  |d|f      }t	        j
                  d|      rt        ||      }t        |      sO|j                  |       a t        |      dkD  rOt        d| d| dt        j                  	       t        d
| j                  |       t        j                  	       |r$| j                  j                  |d|d   df       | j                  j                  |dddf       | j                  j                  |dddf       | j                  j                  |ddf       | j                  j                  |df       | j                  j                  |df       y | j                  j                  |df       y w)Nr;   )ucrt64clang64mingw64
clangarm64Libraryz#^(/[A-Za-z]/|/cygdrive/[A-Za-z]/).*r   z	WARNING: z: z1 MSYS2 envs exist: please check your dependenciesr   zWARNING: conda list -n r   binz	mingw-w64usrScripts)r   rstripr&   r   r   matchunix_path_to_nativer   r=   r   r   r   r   r   )r4   r   variantsvariantr   s        r6   _get_path_dirsz_Activator._get_path_dirsm  s    --%% HI 	-xx}}fi%AB 88A6J.tV<D;OOG,	- 8}q xr(3de -d.?.?.G-HI
 hhmmVYU$KLL((--K GHH((--E5 ABB((--E :;;((-- 344((--00((--00s   A-G0EGc                   | j                  |      }|)t        | j                  | j                                     }nt        | j                  |            }t        t	        j
                  dd      j                         xs d      }|sMt        d |D              s;| j                  t        t        j                  d            }|j                  d|       t        | j                  | j                  |                  |dd t        |      S )Nr   r^   r   c              3  >   K   | ]  }|j                  d         yw)condabinN)r   )rV   ps     r6   rY   z1_Activator._add_prefix_to_path.<locals>.<genexpr>  s     *Ua1::j+A*Us   r!  )r'   r   r  r   r   r   r   anyr   r   r   insertr  r   )r4   r   starting_path_dirs	path_listr   condabin_dirs         r6   r   z_Activator._add_prefix_to_path  s    %%f-%T11$2N2N2PQRIT112DEFI biir:@@BGaHs*U9*U'U//W5I5I:0VWLQ-d2243F3Fv3NOP	!AYr8   c                (    | j                  |d |      S r2   )r   )r4   r   r%  s      r6   r   z#_Activator._remove_prefix_from_path  s    ++FD:LMMr8   c                   | j                  |      }| j                  |      }|)t        | j                  | j                                     }nt        | j                  |            }d }|t        | j	                  |            } |||d         }|d}nt        |      dz
  }d }	|	A|dkD  r< ||||         }	|	!t        d||    t        j                         |dz
  }|	|dkD  r<| j                  | j                  j                  t        j                  ddf            }
||	dz      |
k(  r|	dz  }	|||	dz   = nd}|t        | j	                  |            ||| t        |      S )	Nc                J    t        |       D ]  \  }}t        ||      s|c S  y r2   )	enumerater   )paths	test_pathqr   s       r6   index_of_pathz9_Activator._replace_prefix_in_path.<locals>.index_of_path  s.    $U+ 4tY/H r8   r   r   r   zDid not find path entry r   r  r  )r'   r   r  r   r  r   r   r   r   r&   r   r   )r4   
old_prefixr   r%  r&  r/  prefix_dirs	first_idxprefix_dirs_idxlast_idxlibrary_bin_dirs              r6   r   z"_Activator._replace_prefix_in_path  s   ))*5
))*5
%T11$2N2N2PQRIT112DEFI	 ! 3 3J ?@K%iQ@I 	"%k"2Q"6&?R+?,YO8TUH'6{?7S6TU!$ '6&9O &?R+? #'"6"6HHMM3::y%"@A# X\*o=MHi(Q,67I!-1$2E2Ej2Q-RIi	*Yr8   c                     y r2   rO   )r4   r   r   s      r6   r   z_Activator._update_prompt  s    r8   c                    t        |t        j                        ryt        t	        |            dk(  rt        |      S |S )Nr   envs)r   r   r   r   r   )r4   r   s     r6   r   z_Activator._default_env  s5    vw223#+GFO#<#FxRFRr8   c                   t         j                  rg }g }t        t        j                  dd      j                               }t        d|dz         D ]  }||k(  r&| j                  t        j                  dd            }n6| j                  t        j                  d| d      j                               }t        t        j                  d| d      j                               }|j                  |       |s|dd	 }|j                  |        t        | d
d      }	t        | dd      }
|	rS|dd	 }|dd	 }t        t        j                  d| d      j                               }|s?|r=|j                  |d	          n(|
rn%t        | dd      }|s|dd	 }|j                  |       dj                  |d d d	         }t         j                  j                  |||t        |            S y)Nr   0r   r   r^   r   r   r   r   r   Fr  rj   ,)default_envstacked_envr   rE   )r   r   r   r   r   r  ranger   boolr=   r   r   
env_promptformatr   )r4   r   r   	env_stackprompt_stack	old_shlvlienv_i	stacked_irt   rx   stackedrj   conda_stacked_envs                 r6   r   z_Activator._prompt_modifier  s   ILBIImS9@@BCI1i!m, +	> --bii.KLE --		M!"5r:AACE !^A3+?!D!K!K!MN	  ' #/"#5L##E*+ !}e<J }e<J+Ab1%aO	ryy>))ErJQQST9 ''	"6gu5#/"#5L##$56 #dd); <%%,,--f%	 -   r8   c           	         | j                   t               	 d t        j                  t	        |ddd            D        }| j                  t        fd|D                    S # t
        $ r Y yw xY w)Nc              3  4   K   | ]  }|j                     y wr2   r   rV   entrys     r6   rY   z3_Activator._get_activate_scripts.<locals>.<genexpr>         

   etccondaz
activate.drO   c              3  4   K   | ]  }|d  k(  s|  y wr2   rO   rV   r"  _script_extensionse_lens     r6   rY   z3_Activator._get_activate_scripts.<locals>.<genexpr>  s     Gqz5F'F1G   r(   r   r   scandirr   OSErrorr'   r   r4   r   r,  rU  rV  s      @@r6   r   z _Activator._get_activate_scripts  s|     11'((	ZZVUG\(RSE ##GeGG
 	
  		s   (A( (	A43A4c           	         | j                   t               	 d t        j                  t	        |ddd            D        }| j                  t        fd|D        d            S # t
        $ r Y yw xY w)	Nc              3  4   K   | ]  }|j                     y wr2   rL  rM  s     r6   rY   z5_Activator._get_deactivate_scripts.<locals>.<genexpr>&  rO  rP  rQ  rR  zdeactivate.drO   c              3  4   K   | ]  }|d  k(  s|  y wr2   rO   rT  s     r6   rY   z5_Activator._get_deactivate_scripts.<locals>.<genexpr>-  s     H!&'
6G(GAHrW  T)reverserX  r[  s      @@r6   r   z"_Activator._get_deactivate_scripts"  s     11'((	ZZVUG^(TUE ##HuHRVW
 	
  		s   (A* *	A65A6c                ,   t        |t              }t        |t              }i }t        |      rpt	        d t        j                  |      D              D ]H  }t        |      5 }|j                  t        j                  |j                                      d d d        J t        |      rt        |      5 }t        j                  |j                               }|j                  di       }|j                         D 	cg c]  }	|	|j                         v s|	 }
}	|
D ];  }t        dt        j                          t        d|z  t        j                          = |j                  |       d d d        |S |S # 1 sw Y   .xY wc c}	w # 1 sw Y   |S xY w)Nc              3  4   K   | ]  }|j                     y wr2   rL  rM  s     r6   rY   z7_Activator._get_environment_env_vars.<locals>.<genexpr>7  s      +$

+rP  r   zbWARNING: duplicate env vars detected. Vars from the environment will overwrite those from packagesr   zvariable %s duplicated)r   r   r   r   r   r   rY  openupdatejsonloadsreadr   r   r   r   r   )r4   r   env_vars_filepkg_env_var_dirr   pkg_env_var_pathfprefix_stateprefix_state_env_varsevdup_varsdups               r6   r   z$_Activator._get_environment_env_vars0  sv   V%67v';< /"$* +(*

?(C+ % :  *+ :qOODJJqvvx$89: :: - m$ 7#zz!&&(3(4(8(8R(H%!)B:O:T:T:V4VB  $ KC= ZZ
 2S8szzJK  567 x): :7 s2   !3E74AF	<FFAF	7F	F		Fr2   )T)returnztuple[str, str])r}   zbool | Nonerp  r$   )rp  r)   )'__name__
__module____qualname____annotations__r7   rG   r   rS   r\   rh   rp   rt   rx   r   r   re   abcabstractmethodr{   r~   r   rn   rm   rk   r   rr   rw   r  argumentr  r   r   r   r   r   r   r   r   r   rO   r8   r6   r#   r#   :   sb   . 	H  ""!!(!'F Q



 )QR	
 S	
(




""-

$ 	" "]~0&EDa
F\
|-
^* Z)<=)1 >)1V &N, \S
-^

r8   r#   )	metaclassc                <    t        t        t        |                   S r2   )r   r	   r
   rL  s    r6   r   r   Q  s    :j./00r8   c                H    	 | j                  d      S # t        $ r | cY S w xY w)Nzutf-8)encodeAttributeErrorrF   s    r6   ensure_binaryr~  U  s,    ||G$$  s    !!c                P    	 | j                  t              S # t        $ r | cY S w xY wr2   )decoder   r|  r}  s    r6   ensure_fs_path_encodingr  ^  s+    ||/00 s    %%c                  h   e Zd Zedd       Z ej                  dej                        Ze	dd       Z
edd       Z ej                  dej                        Ze	dd       Z ej                  dej                        Ze	dd	       Z ej                  d
ej                        Ze	dd       Zy)_Cygpathc                    | j                   j                  | j                  |      j                  t        j
                  t        j
                        S r2   )RE_UNIXsubtranslate_unixreplacentpathr  	posixpath)clsr,  s     r6   nt_to_posixz_Cygpath.nt_to_posixf  s9    {{s1159AANNI--
 	
r8   zZ
        (?P<drive>[A-Za-z]:)?
        (?P<path>[\/\\]+(?:[^:*?\"<>|;]+[\/\\]*)*)
        )flagsc                    d| j                  d      xs dj                         | j                  d      z   j                  dd      j                  dd      j                  dd      j                  d      z   S )Nr:   driver^   r   r;   :z//)grouplowerr  r  )r  s    r6   r  z_Cygpath.translate_unixt  sd    kk'"(b//1EKK4GGWT3WS"WT3VC[
 	
r8   c                    t         j                  |vr|S t         j                  |v rFt        j                  j	                   fd|j                  t         j                        D              S |} j                  j                   j                  |      \  }}|s) j                  j                   j                  |      \  }}|s# j                  j                   fd|      \  }}t        j                  dd|      S )Nc              3  B   K   | ]  }j                  |        y wr2   )posix_to_nt)rV   r   r  r   s     r6   rY   z'_Cygpath.posix_to_nt.<locals>.<genexpr>  s!      '26f-'s   c                (    j                  |       S r2   )translation_root)r  r  r   s    r6   <lambda>z&_Cygpath.posix_to_nt.<locals>.<lambda>  s    c225&A r8   z/+\\)r  r&   r  r  r   r
  RE_DRIVEsubntranslation_driveRE_MOUNTtranslation_mountRE_ROOTr   r  )r  r,  r   r   subsr   s   ` `   r6   r  z_Cygpath.posix_to_nt~  s    ==%L%>>&& ':?++iFWFW:X'   $ \\&&s'<'<dC
d**3+@+@$GJD$kk&&A4GD! vveUD))r8   zj
        ^
        (/cygdrive)?
        /(?P<drive>[A-Za-z])
        (/+(?P<path>.*)?)?
        $
        c                x    | j                  d      j                         }| j                  d      xs d}| d| S )Nr  r   r^   z:\)r  r>   )r  r  r   s      r6   r  z_Cygpath.translation_drive  s=    G$**,{{6"(bD6""r8   zm
        ^
        //(
            (?P<mount>[^/]+)
            (?P<path>/+.*)?
        )?
        $
        c                d    | j                  d      xs d}| j                  d      xs d}d| | S )Nmountr^   r   r  r  )r  r  r   s      r6   r  z_Cygpath.translation_mount  s9    G$*{{6"(beWTF##r8   z6
        ^
        (?P<path>/[^:]*)
        $
        c                2    | j                  d      }| d| S )Nr   z\Libraryr  )r  r   r   s      r6   r  z_Cygpath.translation_root  s!    {{6"4&))r8   N)r,  r$   rp  r$   )r  re.Matchrp  r$   )r,  r$   r   r$   rp  r$   )r  r  r   r$   rp  r$   )rq  rr  rs  classmethodr  r   compileVERBOSEr  staticmethodr  r  r  r  r  r  r  r  rO   r8   r6   r  r  e  s    
 

 bjj	 jjG 
 
 #* #*J rzz	 jj	H # #
 rzz	 jj
H $ $
 bjj	
 jjG * *r8   r  c                   | y t         st        |       S t        | t              r| n
t	        |       } | st        | t              rdS dS t        d      }|r!t        t        |      j                  dz        nd}t        | t              r| nt        j                  j                  |       }	 t        |dd|gddd      j                  j                         }t        | t              r|S |syt	        |j+                  t,        j                              S # t        $ r- t        j!                  d	       t"        j%                  |      }Y rt&        $ r}t        j)                  d
|        d }~ww xY w)N.rO   bashcygpathz--unix--pathTtextcapture_outputcheck<cygpath is not available, fallback to manual path conversionUnexpected cygpath error (%s))r   path_identity
isinstancer$   r   r   r   parentr  r  r   r   stdoutr   FileNotFoundErrorlogwarningr  r  	Exceptionerrorr
  r  )r,  r  r  joined	unix_patherrs         r6   native_path_to_unixr    s?    }U##  s+EuE ,s4"4 =D48c$t*##i/0iG ,U&..2E2Ee2LFh&1	

 & 	  %Y__Y%6%6788  1 	RS((0	 		137s   *+D 3E+E+E&&E+c                
   | y t         st        |       S t        | t              r| n
t	        |       } | st        | t              rdS dS t        d      }|r!t        t        |      j                  dz        nd}t        | t              r| nt        j                  j                  |       }	 t        |dd|gddd      j                  j                         }t        | t              r|S |syt	        |j+                  t,        j                              S # t        $ rD t        j!                  d	       t"        j%                  ||      }t"        j%                  ||      }Y t&        $ r}t        j)                  d
|        d }~ww xY w)Nr  rO   r  r  z	--windowsr  Tr  r  r  )r   r  r  r$   r   r   r   r  r  r  r   r   r  r   r  r  r  r  r  r  r  r
  r  )r,  r   r  r  r  win_pathr  s          r6   r  r  	  sT    }U##  s+EuE ,s4"4 =D48c$t*##i/0iG ,U)2C2C2H2H2OFk8V4	

 & 	& %X^^FNN344%  8 	RS %%ff5''7 		137s   *+D A
FF&E==Fc                    | y t        | t              rt        j                  j	                  |       S t        d | D              S )Nc              3  Z   K   | ]#  }t         j                  j                  |       % y wr2   )r   r   normpath)rV   r   s     r6   rY   z path_identity.<locals>.<genexpr>E  s     >RWW%%d+>s   )+)r  r$   r   r   r  r   )r,  s    r6   r  r  ?  s:    }	E3	ww&&>>>>r8   c           	         | y t        | t              r| j                  dd      S t        | D cg c]  }|j                  dd       c}      S c c}w )Nr;   r:   )r  r$   r  r   )r,  r   s     r6   backslash_to_forwardslashr  H  sK     }	E3	}}T3''%@$dll4-@AA@s   Ac                  z    e Zd Zdj                  ZdZ ee      ZdZ	dZ
dZdZdZdZd	Z eed
ddd      Zd ZddZy)PosixActivatorr  r:   .shNrz   zunset %szexport %s='%s'z%s='%s'. "%s"shellrQ  	profile.dzconda.shc                   t        j                  dd      }d|v ry t        j                  d      }|r*t        j                  t        j                  |      d|      }|j                  dd      }|j                  d||z   i       y )NPS1r^   POWERLINE_COMMANDr  'z'"'"')r   r   r   r  escaper  rc  )r4   r   r   ps1current_prompt_modifiers        r6   r   zPosixActivator._update_prompth  sz    iir"#%"$)),C"D"&&#:;S#FC kk#y),s2	
r8   c                N   g }t         j                  j                         D ]o  \  }}|!|j                  | j                  |dfz         )t
        r!d|v sd|v r|j                  d| d| d       P|j                  | j                  ||fz         q dj                  |      dz   S )Nr^   r:   r;   zexport z="$(cygpath 'z')"rz   )r   r?   r<   r=   r-   r   r   )r4   resultr   rF   s       r6   r{   zPosixActivator._hook_preamblez  s    !55;;= 	CJC} d22c2Y>?SE\TU]'#mE7#HId22c5\AB	C yy 4''r8   rp  r$   rq  rr  rs  r   r%   r&   r  r  r'   r(   r*   r+   r,   r-   r.   r/   r   r   r0   r   r{   rO   r8   r6   r  r  S  sd    88L
C"#67OLN&OLO
$(r8   r  c                  z    e Zd Zdj                  ZdZ ee      ZdZ	dZ
dZdZdZdZd	Z eed
ddd      Zd ZddZy)CshActivatorr  r:   z.cshN;
zunsetenv %szsetenv %s "%s"zset %s='%s'source "%s"r  rQ  r  z	conda.cshc                    t        j                  dd      }t        j                  d      }|r*t        j                  t        j                  |      d|      }|j                  d||z   i       y )Npromptr^   r  )r   r   r   r  r  rc  )r4   r   r   r  r  s        r6   r   zCshActivator._update_prompt  s]    8R("$)),C"D"VVBII&=>VLF/&8	
r8   c                   t         r^t        dt        j                   dt        j                   dt        j                   dt
        j                   d	      j                         S t        dt        j                   dt        j                   dt        j                   d	t
        j                   d
	      j                         S )Nz+
                setenv CONDA_EXE `cygpath z.`
                setenv _CONDA_ROOT `cygpath z-`
                setenv _CONDA_EXE `cygpath z3`
                setenv CONDA_PYTHON_EXE `cygpath z`
                z#
                setenv CONDA_EXE "z&"
                setenv _CONDA_ROOT "z%"
                setenv _CONDA_EXE "z+"
                setenv CONDA_PYTHON_EXE ""
                r   r   r   	conda_exer   r   
executabler   rs   s    r6   r{   zCshActivator._hook_preamble  s    ++2+<+<*= >--4-A-A,B C,,3,=,=+> ?225..1A B	 eg ##*#4#4"5 6%%,%9%9$: ;$$+$5$5#6 7**-..)9 :	 egr8   r  r  rO   r8   r6   r  r    sd    88L
C"#67OL"N&O L#O	
r8   r  c                      e Zd Zerdj                  ndj                  ZdZ eerene	      Z
erdndZdZdZdZd	Zd	Zerd
ndZ eedd      ZddZy)XonshActivator;r  r:   .batr  Nrz   zdel $%sz
$%s = '%s'z'source-cmd --suppress-skip-message "%s"z+source-bash --suppress-skip-message -n "%s"r  z	conda.xshc                F    d| j                  t        j                        z  S )Nz$CONDA_EXE = "%s")r'   r   r  rs   s    r6   r{   zXonshActivator._hook_preamble  s    "T%9%9':K:K%LLLr8   r  )rq  rr  rs  r   r   r%   r&   r  r  r  r'   r(   r*   r+   r,   r-   r.   r/   r   r   r0   r{   rO   r8   r6   r  r    sz    %388388L
C"%+!O
 "(vULN"OL  	2:  .EMr8   r  c                  `    e Zd Zdj                  ZdZ ee      ZdZ	dZ
dZdZdZdZdZdZd
d	Zy)CmdExeActivatorr  r;   r  rz   z@SET %s=z@SET "%s=%s"z
@CALL "%s"Nc                     y r2   rO   rs   s    r6   r{   zCmdExeActivator._hook_preamble  s     	r8   )rp  None)rq  rr  rs  r   r%   r&   r  r  r'   r(   r*   r+   r,   r-   r.   r/   r0   r{   rO   r8   r6   r  r    sJ    88L
C"=1OLN$O!L"Or8   r  c                  v    e Zd Zdj                  ZdZ ee      ZdZ	dZ
dZdZdZdZd	Z eed
dddd      ZddZy)FishActivatorz" "r:   z.fishNr  z	set -e %szset -gx %s "%s"zset -g %s "%s"r  r  rQ  fishzconf.dz
conda.fishc                   t         r^t        dt        j                   dt        j                   dt        j                   dt
        j                   d	      j                         S t        dt        j                   dt        j                   dt        j                   d	t
        j                   d
	      j                         S )Nz-
                set -gx CONDA_EXE (cygpath "z-")
                set _CONDA_ROOT (cygpath "z,")
                set _CONDA_EXE (cygpath "z6")
                set -gx CONDA_PYTHON_EXE (cygpath "z")
                z$
                set -gx CONDA_EXE "z#"
                set _CONDA_ROOT "z""
                set _CONDA_EXE "z,"
                set -gx CONDA_PYTHON_EXE "r  r  rs   s    r6   r{   zFishActivator._hook_preamble  s    --4->->,? @++2+?+?*@ A**1*;*;)< =447NN3C D	 eg $$+$5$5#6 7"")"6"6!7 8!!(!2!2 3 4++.>>*: ;	 egr8   r  )rq  rr  rs  r   r%   r&   r  r  r'   r(   r*   r+   r,   r-   r.   r/   r   r   r0   r{   rO   r8   r6   r  r    sb    ::L
C"#67OL N'O#L#Or8   r  c                      e Zd Zerdj                  ndj                  ZerdndZ ee      Z	dZ
dZdZdZd	Zd	Zd
Z eeddd      ZddZddZy)PowerShellActivatorr  r  r;   r:   z.ps1Nrz   z$Env:%s = ""z$Env:%s = "%s"r  r  r!  zconda-hook.ps1c                   t         j                  r[t        dt         dt        j
                   dt         dt         j                   dt         j                   d      j                         S t        dt         j                   dt         j                   dt         j                   dt         j                   d	      j                         S )	Nz$
                $Env:PYTHONPATH = "z$"
                $Env:CONDA_EXE = "zq"
                $Env:_CE_M = "-m"
                $Env:_CE_CONDA = "conda"
                $Env:_CONDA_ROOT = "z%"
                $Env:_CONDA_EXE = "z4"
                $CondaModuleArgs = @{ChangePs1 = $z}
                z#
                $Env:CONDA_EXE = "zj"
                $Env:_CE_M = ""
                $Env:_CE_CONDA = ""
                $Env:_CONDA_ROOT = ")r   r   r   r   r   r  r   r  r   r   r   rs   s    r6   r{   z"PowerShellActivator._hook_preamble.  s    ;;$$5#6 7##&>>"2 3% &8$8 9$$+$5$5#6 744;4E4E3F G
 eg
 ##*#4#4"5 6% &-%9%9$: ;$$+$5$5#6 744;4E4E3F G	 eg	r8   c                     y)NzRemove-Variable CondaModuleArgsrO   rs   s    r6   r~   z#PowerShellActivator._hook_postambleG  s    0r8   r  )rq  rr  rs  r   r   r%   r&   r  r  r'   r(   r*   r+   r,   r-   r.   r/   r   r   r0   r{   r~   rO   r8   r6   r  r    sl    %388388L$cC"=1OL#N&O#LO	21r8   r  c                  P    e Zd ZdZeZdZeZd Z e	ddd      d        Z
d	 Zd
 Zy)JSONFormatMixinzPReturns the necessary values for activation as JSON, so that tools can use them.Nc                    t         j                  r-t        t        j                  ddt
        t         j                  dS t         j                  ddt         j                  t         j                  dS )Nz-mrR  )
PYTHONPATH	CONDA_EXE_CE_M	_CE_CONDA_CONDA_ROOT
_CONDA_EXEr^   )r  r  r  r  r  )r   r   r   r   r  r   r  r   rs   s    r6   r{   zJSONFormatMixin._hook_preambleR  s\    ;;/ ^^$1%//  %..&33%// r8   rH   rI   rJ   rK   c                D     | j                   di |\  }}|xs i |xs g fS rN   rP   r[   s       r6   r\   z-JSONFormatMixin.get_scripts_export_unset_varse  s3     #=$"<"<"Fv"FZ b*"222r8   c                (   i }|D ]  }|j                  |        |}|t        j                  |d      S |r;t        d|d      5 }t        j                  ||d       d d d        |j
                  S t               # 1 sw Y   j
                  S xY w)N   )indentr_   Fr`   )rc  rd  dumpsr   dumprE   rd   )r4   re   rf   merged_cmdsrg   s         r6   rh   zJSONFormatMixin._finalizen  s     	!EMM% 	! ;::hq11'SG 22 		(Bq12 77N%''2 77Ns   A==Bc              #  h  K   |j                  di       }|j                  di       }d|v r7|j                  dg       }|j                  |j                  d             ||d<   |||j                  dd      |j                  di       d|j                  dd      |j                  d	d      d
d y w)Nr   rD   r   rC   rO   r   )exportunsetr   r   r   )rp   rt   )r   varsscripts)r   r@   pop)r4   r   r   rD   r   s        r6   rn   zJSONFormatMixin._yield_commands  s      }}]B/mmM26[ xx+HOOKOOF34#DL %"|R8 }}Z4 &MM*<bA'mm,@"E
 	
s   B0B2)rq  rr  rs  __doc__r   r%   r*   r+   r{   r   r\   rh   rn   rO   r8   r6   r  r  K  sF    ZLL& Q
3
3("
r8   r  )posixashr  dashzshcshtcshxonshzcmd.exer  
powershellzdict[str, type[_Activator]]activator_maprd  c                    | j                  d      }|d   |dd }}t        |   g}|D ]  }|j                  t        |           t	        dt        t        |            i       }|S )a'  Dynamically construct the activator class.

    Detect the base activator and any number of formatters (appended using '+' to the base name).
    For example, `posix+json` (as in `conda shell.posix+json activate`) would use the
    `PosixActivator` base class and add the `JSONFormatMixin`.
    +r   r   N	Activator)r
  r  r=   formatter_maptyper   reversed)r  	shell_etc	activator
formattersbasesrj  r  s          r6   _build_activator_clsr"    sp     C I%aL)AB-zI9%&E ']1%&' {E(5/2B
7CJr8   )r,  str | Iterable[str] | Nonerp  str | tuple[str, ...] | None)r,  r#  r   r$   rp  r$  )Mr  
__future__r   ru  rd  r  r   r  r   r   loggingr   os.pathr   r   r   r   r	   r
   r   r   pathlibr   shutilr   
subprocessr   textwrapr   typingr   r^   r   r   auxlib.compatr   base.constantsr   r   r   base.contextr   r   r   common.compatr   r   common.pathr   deprecationsr   collections.abcr    r!   rq  r  ABCMetar#   r   r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rt  r  r"  rO   r8   r6   <module>r5     s   # 
   	  	 
 	 	 	       4 1 
 H G 6 $ $2T3;; Tn1n* n*b09%09!09f35%35/235!35l?B%B!B2(Z 2(j2: 2jMZ M8j ,(J (V.1* .1bJ
j J
\ %.*  O
r8   