
    $TXgZ                       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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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' d	dl(m)Z)m*Z*m+Z+m,Z, d	dl(m-Z. d	dl/m0Z0 d	dl1m2Z2m3Z3m4Z4m5Z5 erddl6m7Z7m8Z8  e	e9      Z: e2        e4        e5d       e5d       e5d      dZ; G d dejx                        Z=d Z> e0ddd      d         Z? e0dd      d!        Z@ e0j                  ddd"e)d#       [) e0j                  ddd$e,d%        e0j                  ddd&e+d'        e0j                  ddd(e.d)       	 	 	 	 d>d*ZB G d+ d,e=      ZC G d- d.e=      ZD G d/ d0e=      ZE G d1 d2e=      ZF G d3 d4e=      ZG G d5 d6e=      ZH G d7 d8e=      ZIeCeCeCeCeCeDeDeEeFeGeHd9ZJd:eKd;<   d<eIiZLd= ZMy)?aN  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)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)on_win)_cygpathpaths_equalunix_path_to_winwin_path_to_unix)path_identity)
deprecated)ActivateHelpArgumentErrorDeactivateHelpGenericHelp)CallableIterablehookcommands
reactivate)activate
deactivater'   r(   r)   c                     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<   d9dZd:dZ eddd      d        Z eddd      d;d       Zd Z	d Z
d Zd Zd9d<dZd Z edd d!      d"        Zej"                  d=d#       Zd=d$Z ej(                  dd d%      d>d&       Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Z ej(                  ddd.      d/        Zd9d0Zd9d1Zd9d2Z d3 Z!d4 Z"d5 Z#d6 Z$d7 Z%d8 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__i   s
    '    c                ,   g }i }|j                         D ]r  \  }}|Bt        j                  r |j                  |j	                                8|j                  |       Jt        j                  r|||j	                         <   n|||<   t |rt        j
                  j                         D ]  \  }}|Bt        j                  r |j                  |j	                                8|j                  |       Jd|v sd|v rHt        j                  r#| j                  |      ||j	                         <   | j                  |      ||<   t        j                  r|||j	                         <   |||<    ||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.
        /\)itemsr   envvars_force_uppercaseappendupperconda_exe_vars_dictr1   extend)r>   export_metavarskwargs
unset_varsexport_varsnamevalues          r@   get_export_unset_varsz _Activator.get_export_unset_varsl   sc    
 "<<>KD%}22%%djjl3%%d+ 2205K

-(-K% * &::@@Be=66"))$**,7"))$/E\TU]66484H4H4ODJJL1,0,@,@,GD)6649DJJL1,1D)  C( J&& g99:J&&rB   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 rR   )r>   rO   rN   rM   new_export_varsnew_unset_varss         r@   add_export_unset_varsz _Activator.add_export_unset_vars   sM     +E$*D*D*Nv*N'6!r6o62zR2>2
 	
rB   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r<   )r7   ).0kvr>   s      r@   	<genexpr>z;_Activator.get_scripts_export_unset_vars.<locals>.<genexpr>   s)      #:U$!Q$$1v-:Us   !c              3  <   K   | ]  }j                   |z    y wr<   )r6   )ra   rb   r>   s     r@   rd   z;_Activator.get_scripts_export_unset_vars.<locals>.<genexpr>   s!      #4Da##q)4Ds   rZ   )rR   r5   r   rF   r>   rM   rO   rN   s   `   r@   get_scripts_export_unset_varsz(_Activator.get_scripts_export_unset_vars   s    "<$"<"<"Fv"FZ"" #;F;L":S:S:U#  "" #4>4D"4D# 	
 	
rB   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)r5   r   r   writerP   NotImplementedError)r>   r(   exttfs       r@   	_finalizez_Activator._finalize   s    "X?r?;$$))(33'SG2 **//9: H 77N%'' H 77Ns   +A>>Bc                    | j                   r| j                  | j                        }n| j                  | j                        }| j	                  | j                  |      | j                        S r<   )stackbuild_stackenv_name_or_prefixbuild_activaterr   _yield_commandsr4   )r>   builder_results     r@   r*   z_Activator.activate   s\    ::!--d.E.EFN!001H1HIN~~  0$2I2I
 	
rB   c                t    | j                  | j                  | j                               | j                        S r<   )rr   rx   build_deactivater4   r>   s    r@   r+   z_Activator.deactivate   2    ~~  !6!6!894;R;R
 	
rB   c                t    | j                  | j                  | j                               | j                        S r<   )rr   rx   build_reactivater4   r|   s    r@   r)   z_Activator.reactivate   r}   rB   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_preamblerH   r:   	read_textr   auto_activate_base_hook_postambler   )r>   r   builderpreamble	postambles        r@   r'   z_Activator.hook   s    **,,8,NN8$  NN400::<=&**!NN23((*	 NN9%yy!!rB   c                    | j                          t        j                  j                  | j                          t        | | j                               }t        j                  j                  | j                         |S r<   )_parse_and_set_argsr   plugin_managerinvoke_pre_commandscommandgetattrinvoke_post_commands)r>   responses     r@   executez_Activator.execute   sZ      " 	224<<@.74.033DLLArB   25.9zUse `conda commands` instead.c           	     |    ddl m}m} ddlm} dj                  t        h  | |              |d                  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_commandsr   T)cli.conda_argparser   r   cli.find_commandsr   r   sorted)r>   r   r   r   s       r@   r(   z_Activator.commands   sH     	O4 yy*?+<="4(
 	
rB   c                    t         r<   )ro   r|   s    r@   r   z_Activator._hook_preamble  s
     "!rB   c                     y r<   rZ   r|   s    r@   r   z_Activator._hook_postamble  s    rB   r?   c                  	
 | j                   xs d g^	}d
t        
fd|D              }t        |      t        |      k7  }t        	fd|D              }	t        vr d	rd	 dz         dz         |r	t        	   	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)N)z-hz--helpz/?c              3  ,   K   | ]  }|vs|  y wr<   rZ   )ra   arg
help_flagss     r@   rd   z1_Activator._parse_and_set_args.<locals>.<genexpr>  s     PYc#Z:OcYs   	c              3  4   K   | ]  }|s|k7  s|  y wr<   rZ   )ra   r   r   s     r@   rd   z1_Activator._parse_and_set_args.<locals>.<genexpr>  s     U]cccWnc]s   zT'activate', 'deactivate', 'hook', 'commands', or 'reactivate' command must be given.z, not 'z'..r*   r'   z--devTFz--stackz
--no-stackr   r   )r"   z.cannot specify both --stack and --no-stack to z) does not accept more than one argument:
r   basez+ does not accept arguments
remainder_args: )r=   tuplelenlistBUILTIN_COMMANDSendswithindexr   dev
ValueError
auto_stackshlvlrt   
exceptionsr"   r.   rv   r   )r>   r?   non_help_argshelp_requestedremainder_argsr"   dev_idx	stack_idxno_stack_idxr   r   s            @@r@   r   z_Activator._parse_and_set_args  s_   "11;dV)+
PYPPY3}+==U]UU**)ELggYb,AW RUW  "7++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   F9 7G 	G% 9GGG"!G"%G32G3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_scriptsrZ   rN   set_varsrO   activate_scripts)r   getrF   r7   r9   r6   r8   )r>   	cmds_dictkeyrQ   scripts        r@   rx   z_Activator._yield_commands[  s1     }b!A!G!G!IJJC&&#u55 K  mm$8"=F&&// > ==r2C%%++ 3 $--
B7==?JC##sEl22 @ $--r:@@BJC&&#u55 C  mm$6;F&&// <s   D4D6c                &    | j                  |d      S )NF_build_activate_stackr>   rv   s     r@   rw   z_Activator.build_activaten  s    ))*<eDDrB   c                &    | j                  |d      S )NTr   r   s     r@   ru   z_Activator.build_stackq  s    ))*<dCCrB   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_SHLVLri   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_modifierrZ   CONDA_PREFIX_CONDA_STACKED_truerN   r   rO   r   r   )#researchexpandr   r   r   r   r   r   root_prefixr   intosgetenvstripr   _get_activate_scripts_default_env_prompt_modifier_get_environment_env_varsrF   r   setintersectionenvironprintsysstderrrR   r/   _add_prefix_to_path_replace_prefix_in_path_get_deactivate_scripts	changeps1_update_prompt)r>   rv   rt   prefixr   old_conda_shlvlold_conda_prefixr   r   r   r   rP   rQ   env_varsclobber_varsclobber_varoverwritten_clobber_varsrO   rN   r   r   s                        r@   r   z _Activator._build_activate_stackt  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
Me00 %KM 	 
 8}11"**=  ,$
+yy%+)>> + 	! $

 $OZZ )*B)CD3::V DBD))D/H~o%6av>? ! 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                x   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 ]6  }t        j                  d| d|       x}r|||<   &|	j                  |       8 |	|||||dS )NTr   r   ri   r   r   rZ   r   )r   r   r   r   PATHzCONDA_PREFIX_%dzCONDA_STACKED_%dr   r   )rN   r   rO   r   r   r   )_deactivater   r   r   r   r   r   r/   _remove_prefix_from_pathrR   r   r   r   rH   r   r   r   r   r   keys)r>   r   r   r   old_conda_environment_env_varsnew_conda_shlvlr   new_pathrO   rN   r   r   r   
new_prefixr   new_conda_environment_env_varsold_prefix_stackedunset_vars2env_var
save_values                       r@   r{   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 %'!!!8,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!8,K#99*E*?@5::<GYY7H''STTzT'1G$!!'*	 = % &&"4 0
 	
rB   c                L   d| _         t        j                  d      }t        t        j                  dd      j	                         xs d      }|r|dk  rg i i dddS t        j                  d	| j                  |            }| j                  | j                  ||            }i }| j                  ||      }t        j                  r| j                  ||       | j                  ||| j                  ||      
      \  }}|||| j                  |      | j                  |      dS )NTr   r   ri   r   r   rZ   r   CONDA_DEFAULT_ENV)r   r   CONDA_PROMPT_MODIFIER)_reactivater   r   r   r   r   r/   r   r   r   r   r   rR   r   r   )	r>   r   r   r   r   r   r   rO   rN   s	            r@   r   z_Activator.build_reactivate1  s<   yy0"))M26<<>C!D{Q !!&($&  II!2!2<!@
 $$((|D
  $ 5 5lDU V*?@"&"<"<#"&"7"7/# #= #
Z % &"&">">|"L $ : :< H
 	
rB   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)r>   clean_pathsr   
path_splits       r@   _get_starting_path_listz"_Activator._get_starting_path_listZ  sY     6?	
 yy),)DK%*
 ZZ

+
rB   extra_library_binc              #    K   t         r|j                  | j                         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)N)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   rstripr0   r   r   matchr   r   rH   r   r   r   r   r   )r>   r   variantsvariantr   s        r@   _get_path_dirsz_Activator._get_path_dirso  s    --)) HIxx}}fi%AB 88A6J+D&9D;OOG, J 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   A7G:E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   ri   r   c              3  >   K   | ]  }|j                  d         yw)condabinN)r   )ra   ps     r@   rd   z1_Activator._add_prefix_to_path.<locals>.<genexpr>  s     *U9a1::j+A9s   r  )r1   r   r  r   r   r   r   anyr   r   r   insertr  r   )r>   r   starting_path_dirs	path_listr   condabin_dirs         r@   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rB   c                (    | j                  |d |      S r<   )r   )r>   r   r#  s      r@   r   z#_Activator._remove_prefix_from_path  s    ++FD:LMMrB   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 r<   )	enumerater   )paths	test_pathqr   s       r@   index_of_pathz9_Activator._replace_prefix_in_path.<locals>.index_of_path  s)    $U+4tY/H , rB   r   r   r   zDid not find path entry r   r  r  )r1   r   r  r   r  r   r   r   r   r0   r   r   )r>   
old_prefixr   r#  r$  r-  prefix_dirs	first_idxprefix_dirs_idxlast_idxlibrary_bin_dirs              r@   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rB   c                     y r<   rZ   )r>   r   r   s      r@   r   z_Activator._update_prompt  s    rB   c                    t        |t        j                        ryt        t	        |            dk(  rt        |      S |S )Nr   envs)r   r   r   r   r   )r>   r   s     r@   r   z_Activator._default_env  s5    vw223#+GFO#<#FxRFRrB   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   ri   r   r   r   r   r   Fr  rt   ,)default_envstacked_envr   rP   )r   r   r   r   r   r  ranger   boolrH   r   r   
env_promptformatr   )r>   r   r   	env_stackprompt_stack	old_shlvlienv_i	stacked_ir+   r)   stackedrt   conda_stacked_envs                 r@   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%	 -   rB   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r<   r   ra   entrys     r@   rd   z3_Activator._get_activate_scripts.<locals>.<genexpr>  s      SE 

S   etccondaz
activate.drZ   c              3  4   K   | ]  }|d  k(  s|  y wr<   rZ   ra   r   _script_extensionse_lens     r@   rd   z3_Activator._get_activate_scripts.<locals>.<genexpr>!  s      Geqz5F'F1e   r2   r   r   scandirr   OSErrorr1   r   r>   r   r*  rR  rS  s      @@r@   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r<   rJ  rK  s     r@   rd   z5_Activator._get_deactivate_scripts.<locals>.<genexpr>(  s      UE 

UrM  rN  rO  zdeactivate.drZ   c              3  4   K   | ]  }|d  k(  s|  y wr<   rZ   rQ  s     r@   rd   z5_Activator._get_deactivate_scripts.<locals>.<genexpr>/  s      Hu!&'
6G(GAurT  T)reverserU  rX  s      @@r@   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| d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r<   rJ  rK  s     r@   rd   z7_Activator._get_environment_env_vars.<locals>.<genexpr>9  s      +(Cu

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

?(C+ %  *+qOODJJqvvx$89 ,+% - m$#zz!&&(3(4(8(8R(H%!)!02B:O:T:T:V4VB   $C= ZZ
 IcU+6SZZH $  56 % x) ,+ % s2   !3E84AF
<FFAF
8F	F

Fr<   )T)returnztuple[str, str])r   zbool | Nonerm  r.   )rm  r3   rm  None)'__name__
__module____qualname____annotations__rA   rR   r    r^   rg   rr   r*   r+   r)   r'   r   r(   abcabstractmethodr   r   argumentr   rx   rw   ru   r   r{   r   r  r  r   r   r   r   r   r   r   r   r   rZ   rB   r@   r-   r-   A   s   . 	H  ""!!(1'f Q



 )QR	
 S	
(




"" 0

* 	" " Z5A 6AF0&EDa
FX
t'
R* Z)<=)1 >)1V &N, \S
-^

rB   r-   )	metaclassc                <    t        t        t        |                   S r<   )r   r	   r
   rJ  s    r@   r   r   S  s    :j./00rB   rT   r   z0Use `conda.common.compat.ensure_binary` instead.rV   c                H    	 | j                  d      S # t        $ r | cY S w xY w)Nzutf-8)encodeAttributeError)rQ   s    r@   ensure_binaryr|  W  s,    ||G$$  s    !!c                T    ddl m} 	 | j                  |      S # t        $ r | cY S w xY w)Nr   )FILESYSTEM_ENCODING)common.compatr~  decoder{  )rQ   r~  s     r@   ensure_fs_path_encodingr  a  s.    2||/00 s    ''_Cygpathz)Use `conda.common.path._cygpath` instead.native_path_to_unixz1Use `conda.common.path.win_path_to_unix` instead.unix_path_to_nativez1Use `conda.common.path.unix_path_to_win` instead.r   z.Use `conda.common.path.path_identity` instead.c           	         | y t        | t              r| j                  dd      S t        | D cg c]  }|j                  dd       c}      S c c}w )NrE   rD   )
isinstancer.   replacer   )r*  r   s     r@   backslash_to_forwardslashr    sO     }	E3	}}T3''%@%$dll4-%@AA@s   Ac                      e Zd Zdj                  ZdZ eeren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)PosixActivator:rD   .shNr   zunset %szexport %s='%s'z%s='%s'. "%s"shellrN  	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PS1ri   POWERLINE_COMMANDr  'z'"'"')r   r   r   subescaper  r`  )r>   r   r   ps1current_prompt_modifiers        r@   r   zPosixActivator._update_prompt  sz    iir"#%"$)),C"D"&&#:;S#FC kk#y),s2	
rB   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 )Nri   rD   rE   zexport z="$(cygpath 'z')"r   )r   rJ   rF   rH   r7   r   r   )r>   resultr   rQ   s       r@   r   zPosixActivator._hook_preamble  s    !55;;=JC} d22c2Y>?SE\TU]'#mE7#HId22c5\AB > yy 4''rB   rm  r.   rp  rq  rr  r   r/   r0   staticmethodr   r   _path_identityr1   r2   r4   r5   r6   r7   r8   r9   r   r   r:   r   r   rZ   rB   r@   r  r    sh    88L
C"v#3>ROLN&OLO
$(rB   r  c                      e Zd Zdj                  ZdZ eeren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  rD   z.cshN;
zunsetenv %szsetenv %s "%s"zset %s='%s'source "%s"r  rN  r  z	conda.cshc                    t        j                  dd      }t        j                  d      }|r*t        j                  t        j                  |      d|      }|j                  d||z   i       y )Npromptri   r  )r   r   r   r  r  r`  )r>   r   r   r  r  s        r@   r   zCshActivator._update_prompt  s]    8R("$)),C"D"VVBII&=>VLF/&8	
rB   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   r|   s    r@   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rB   r  r  rZ   rB   r@   r  r    sh    88L
C"v#3>ROL"N&O L#O	
rB   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  rD   .batr  Nr   zdel $%sz
$%s = '%s'z'source-cmd --suppress-skip-message "%s"z+source-bash --suppress-skip-message -n "%s"r  z	conda.xshc                H    d| j                  t        j                         dS )Nz$CONDA_EXE = "")r1   r   r  r|   s    r@   r   zXonshActivator._hook_preamble  s#     4 4W5F5F GHJJrB   r  )rp  rq  rr  r   r   r/   r0   r  r  r  r1   r2   r4   r5   r6   r7   r8   r9   r   r   r:   r   rZ   rB   r@   r  r     sz    %388388L
C"%+!O
 "(vULN"OL  	2:  .EKrB   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  rE   r  r   z@SET %s=z@SET "%s=%s"z
@CALL "%s"Nc                     y r<   rZ   r|   s    r@   r   zCmdExeActivator._hook_preamble,  s     	rB   rn  )rp  rq  rr  r   r/   r0   r  r  r1   r2   r4   r5   r6   r7   r8   r9   r:   r   rZ   rB   r@   r  r    sJ    88L
C">2OLN$O!L"OrB   r  c                  ~    e Zd Zdj                  ZdZ eeren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" "rD   z.fishNr  z	set -e %szset -gx %s "%s"zset -g %s "%s"r  r  rN  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  r|   s    r@   r   zFishActivator._hook_preambleH  s    --4->->,? @++2+?+?*@ A**1*;*;)< =447NN3C D	 eg $$+$5$5#6 7"")"6"6!7 8!!(!2!2 3 4++.>>*: ;	 egrB   r  )rp  rq  rr  r   r/   r0   r  r   r   r  r1   r2   r4   r5   r6   r7   r8   r9   r   r   r:   r   rZ   rB   r@   r  r  2  sf    ::L
C"v#3>ROL N'O#L#OrB   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  rE   rD   z.ps1Nr   z$Env:%s = $nullz$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 = "zp"
                $Env:_CE_M = $null
                $Env:_CE_CONDA = $null
                $Env:_CONDA_ROOT = ")r   r   r   r   r   r  r   r  r   r   r   r|   s    r@   r   z"PowerShellActivator._hook_preambleq  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	rB   c                     y)NzRemove-Variable CondaModuleArgsrZ   r|   s    r@   r   z#PowerShellActivator._hook_postamble  s    0rB   r  )rp  rq  rr  r   r   r/   r0   r  r  r1   r2   r4   r5   r6   r7   r8   r9   r   r   r:   r   r   rZ   rB   r@   r  r  ]  sl    %388388L$cC">2OL&N&O#LO	21rB   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-mrO  )
PYTHONPATH	CONDA_EXE_CE_M	_CE_CONDA_CONDA_ROOT
_CONDA_EXEri   )r  r  r  r  r  )r   r   r   r   r  r   r  r   r|   s    r@   r   zJSONFormatMixin._hook_preamble  s\    ;;/ ^^$1%//  %..&33%// rB   rS   rT   rU   rV   c                D     | j                   di |\  }}|xs i |xs g fS rY   r[   rf   s       r@   rg   z-JSONFormatMixin.get_scripts_export_unset_vars  s3     #=$"<"<"Fv"FZ b*"222rB   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   )indentrj   Frk   )r`  ra  dumpsr   dumprP   ro   )r>   r(   rp   merged_cmdsrq   s         r@   rr   zJSONFormatMixin._finalize  s    EMM%   ;::hq11'SG2 		(Bq1 H 77N%'' H 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   rO   r   rN   rZ   r   )exportunsetr   r   r   )r*   r+   )r   varsscripts)r   rK   pop)r>   r   r   rO   r   s        r@   rx   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)rp  rq  rr  __doc__r   r/   r4   r5   r   r    rg   rr   rx   rZ   rB   r@   r  r    sF    ZLL& Q
3
3("
rB   r  )posixashbashdashzshcshtcshxonshzcmd.exer  
powershellzdict[str, type[_Activator]]activator_mapra  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  rH   formatter_maptyper   reversed)r  	shell_etc	activator
formattersbasesrg  clss          r@   _build_activator_clsr    sk     C I%aL)AB-zI9%&E]1%&  {E(5/2B
7CJrB   )r*  zstr | Iterable[str] | Nonerm  zstr | tuple[str, ...] | None)Nr  
__future__r   rt  ra  r   r   r   loggingr   os.pathr   r   r   r   r	   r
   r   r   pathlibr   textwrapr   typingr   ri   r   r   auxlib.compatr   base.constantsr   r   r   base.contextr   r   r   r  r   common.pathr   r   r   r   r   r  deprecationsr    r   r!   r"   r#   r$   collections.abcr%   r&   rp  logr   ABCMetar-   r   r|  r  constantr  r  r  r  r  r  r  r  r  rs  r  r  rZ   rB   r@   <module>r     s;   # 
  	 	 
 	 	 	     4 1 
 H G ! R R 8 $ P P2  "J'l+ O3;; Od1 FF%WX Y FF  
  

8  
  

@ 
  

@ 
  

=B%B!B2(Z 2(j2: 2jKZ K8j ,(J (V.1* .1bJ
j J
\ %.*  O
rB   