
    siG_                       S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJr  SSKrSSKrSSKJr  SSKJr  SSKJ r   SSK!J"r"J#r#  SSK$J%r%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,J-r-  SSK.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9  SSK:J;r;  \(       a,  SSK<r=SSK>J?r?J@r@  SSKAJBrB  SSKJCrCJDrDJErEJFrFJGrG  SSKHJIrI  SS KJJKrK  \" \L5      rM\ " S!5      rN\R                  " S"S#9S$ 5       rP\R                  " S%S&9S' 5       rQ\R                  " S"S#9S( 5       rR\R                  " S%S&9S) 5       rS\R                  " 5       SWS+ j5       rT\R                  " \R                  R                  S,S-5      R                  S.5      S/9    SXS0 j5       rX\R                      SYS1 j5       rY\R                      SZS2 j5       rZ\" S3\S4   \S5   5      r[      S[S6 jr\\R                  " S7S&9\" S8S95      S\S: j5       5       r]\ " S; S<5      5       r^\R                  S]S= j5       r_\R                  " S7S&9S^S> j5       r`\ " S? S@5      5       ra\R                  " S7S&9S_SA j5       rb\ " SB SC5      5       rc\R                  S`SD j5       rd\ " SE SF5      5       re\R                        SaSG j5       rf\R                  SbSH j5       rg\R                  " S7S&9      ScSI j5       rh\ " SJ SK5      5       ri\R                        SdSL j5       rj\R                  " S*SM9SeSN j5       rk\R                        SfSO j5       rl\R                        SfSP j5       rm\R                  " S7S"SQ9SR 5       rn\R                  SgSS j5       ro\ " ST SU5      5       rp\R                        ShSV j5       rqg)iz2Collection of pytest fixtures used in conda tests.    )annotationsN)contextmanagernullcontext)	dataclass)chain)	getLogger)Path)copyfile)TYPE_CHECKINGLiteralTypeVaroverload)
deprecated   )CONDA_SOURCE_ROOT)dals)PACKAGE_CACHE_MAGIC_FILEPREFIX_MAGIC_FILE)contextreset_context)main_subshell)YamlRawParameter)jsonyaml)path_to_url)PackageCacheData)
SubdirData)CondaExitZero)TemporaryDirectory)PackageRecord   )PYTHON_BINARY)IterableIterator)MultiCapture)CaptureFixtureExceptionInfoFixtureRequestMonkeyPatchTempPathFactory)MockerFixture)PathTypea  
    custom_channels:
      darwin: https://some.url.somewhere/stuff
      chuck: http://another.url:8080/with/path
    custom_multichannels:
      michele:
        - https://do.it.with/passion
        - learn_from_every_thing
      steve:
        - more-downloads
    channel_settings:
      - channel: darwin
        param_one: value_one
        param_two: value_two
      - channel: "http://localhost"
        param_one: value_one
        param_two: value_two
    migrated_custom_channels:
      darwin: s3://just/cant
      chuck: file:///var/lib/repo/
    migrated_channel_aliases:
      - https://conda.anaconda.org
    channel_alias: ftp://new.url:8082
    conda-build:
      root-dir: /some/test/path
    proxy_servers:
      http: http://user:pass@corp.com:8080
      https: none
      ftp:
      sftp: ''
      ftps: false
      rsync: 'false'
    aggressive_update_packages: []
    channel_priority: false
    T)autousec                 6    [         R                  " S[        S9  g)z
Suppress `Unclosed Socket Warning`

It seems urllib3 keeps a socket open to avoid costly recreation costs.

xref: https://github.com/kennethreitz/requests/issues/1882
ignore)categoryN)warningsfilterwarningsResourceWarning     6lib/python3.13/site-packages/conda/testing/fixtures.pysuppress_resource_warningr7   b   s     H?r5   function)scopec                    [        [        U 5      S9n UR                  U R                  5        [        R
                  R                  U R                  5      $ )N)dir)r   straddfinalizercleanuppypathlocalname)tmpdirrequests     r6   rC   rC   n   s9    CK0F(77==%%r5   c                 .    [         R                  " 5         g N)r   clear_cached_local_channel_datar4   r5   r6   clear_subdir_cacherH   u   s    ..0r5   c               #  (   #    Sv   [        5         g7f)z:Resets the context object after each test function is run.N)r   r4   r5   r6   reset_conda_contextrJ   z   s      
Os   monkeypatchc              #     #    U R                  S5      nUR                  S[        U5      5        [        5         Uv   g7f)z:
Used to isolate package or index cache from other tests.
pkgsCONDA_PKGS_DIRSN)mktempsetenvr<   r   )tmp_path_factoryrK   pkgs_dirs      r6   temp_package_cacherS      s6     
  &&v.H(#h-8O
Ns   <>CONDA_TEST_SOLVERSzlibmamba,classic,)paramsc              #  J   #    [        X R                  5       Sh  vN   g N7f)a4  
A parameterized fixture that sets the solver backend to (1) libmamba
and (2) classic for each test. It's using autouse=True, so only import it in
modules that actually need it.

Note that skips and xfails need to be done _inside_ the test body.
Decorators can't be used because they are evaluated before the
fixture has done its work!

So, instead of:

    @pytest.mark.skipif(context.solver == "libmamba", reason="...")
    def test_foo():
        ...

Do:

    def test_foo():
        if context.solver == "libmamba":
            pytest.skip("...")
        ...
N)_solver_helperparamrD   s    r6   parametrized_solver_fixturer[      s     : g}}555s   #!#c              #  8   #    [        U S5       S h  vN   g  N7f)NclassicrX   rZ   s    r6   solver_classicr_      s      gy111   c              #  8   #    [        U S5       S h  vN   g  N7f)Nlibmambar^   rZ   s    r6   solver_libmambarc      s      gz222r`   Solverrb   r]   c              #  P  #    [         R                  R                  R                  5         U R	                  [         R                  R                  R                  5        U R                  S5      nUR                  SU5        [        5         [         R                  U:X  d   eUv   g 7f)NrK   CONDA_SOLVER)	r   plugin_managerget_cached_solver_backendcache_clearr=   getfixturevaluerP   r   solver)rD   rk   mps      r6   rX   rX      sy     
 44@@B//IIUUV		 	 	/BIInf%O>>V###
Ls   B$B&sessionz25.9z26.3c              #     #    U R                   R                  R                  S5      nUR                  5          UR                  v   S S S 5        g ! , (       d  f       g = f7f)Ncapturemanager)configpluginmanager	getpluginglobal_and_fixture_disabled_global_capturing)rD   
capmanagers     r6   session_capsysrv      sE      --778HIJ		/	/	1*** 
2	1	1s   6A!A	A!
AA!c                      \ rS rSr% S\S'   \      SS j5       r\    SS j5       rSS.     SS jjr\SS	 j5       rS
r	g)CondaCLIFixture   zCaptureFixture | Nonecapsysc                   g rF   r4   )selfraisesargvs      r6   __call__CondaCLIFixture.__call__   s    
 *-r5   c                    g rF   r4   )r|   r~   s     r6   r   r      s      #r5   Nr}   c                  U R                   (       a  U R                   R                  5         SnU(       a  [        R                  " U5      O	[	        5        n[        U R                  U5      6 nSSS5        U R                   (       a  U R                   R                  5       u  pVOS=pV[        5         XVU(       a  W4$ U4$ ! , (       d  f       NW= f)ax  Test conda CLI. Mimic what is done in `conda.cli.main.main`.

`conda ...` == `conda_cli(...)`

:param argv: Arguments to parse.
:param raises: Expected exception to intercept. If provided, the raised exception
    will be returned instead of exit code (see pytest.raises and pytest.ExceptionInfo).
:return: Command results (stdout, stderr, exit code or pytest.ExceptionInfo).
N)rz   
readouterrpytestr}   r   r   
_cast_argsr   )r|   r}   r~   code	exceptionouterrs          r6   r   r      s     ;;KK""$ &,V]]6"+-?9 $//$"78D @ ;;{{--/HCC 	f66$66 @?s   B>>
Cc              #     #    [        [        U 5      n U  H&  nUv   US   S:w  d  M  US:X  a  Sv   U  Sh  vN   M(     g N	7f)zCast args to string and inspect for `conda run`.

`conda run` is a unique case that requires `--dev` to use the src shell scripts
and not the shell scripts provided by the installer.
r   -runz--devN)mapr<   )r~   args     r6   r   CondaCLIFixture._cast_args
  sH      3~CI 1v} %<!M   s   !AAA 
Ar4   )r~   r,   r}   -type[Exception] | tuple[type[Exception], ...]returntuple[str, str, ExceptionInfo])r~   r,   r   tuple[str, str, int])r~   r,   r}   4type[Exception] | tuple[type[Exception], ...] | Noner   2tuple[str | None, str | None, int | ExceptionInfo])r~   ztuple[PathType, ...]r   zIterable[str])
__name__
__module____qualname____firstlineno____annotations__r   r   staticmethodr   __static_attributes__r4   r5   r6   rx   rx      s    !!-- >- 
(	- - ## 
# # HL77 E7 
<	7B    r5   rx   c              #  &   #    [        U 5      v   g7f)zA function scoped fixture returning CondaCLIFixture instance.

Use this for any commands that are local to the current test (e.g., creating a
conda environment only used in the test).
Nrx   )rz   s    r6   	conda_clir   "  s      &
!!   c               #  &   #    [        S5      v   g7f)zA session scoped fixture returning CondaCLIFixture instance.

Use this for any commands that are global to the test session (e.g., creating a
conda environment shared across tests, `conda info`, etc.).
Nr   r4   r5   r6   session_conda_clir   ,  s      $
r   c                  |    \ rS rSrSr\        S	S j5       r\      S
S j5       rSS.       SS jjrSrg)PipCLIFixturei6  z7Fixture for calling pip in specific conda environments.c                   g rF   r4   )r|   prefixr}   r~   s       r6   r   PipCLIFixture.__call__:  s     *-r5   c                   g rF   r4   )r|   r   r~   s      r6   r   r   B  s    
  #r5   Nr   c               `   [        U5      nU[        -  n[        U5      SS/U Vs/ s H  n[        U5      PM     sn-   nU(       a  [        R                  " U5      O	[        5        n [        R                  " USSSS9n	U	R                  n
U	R                  nU	R                  nSSS5        WWU(       a  W4$ W
4$ s  snf ! [        R                   a.  nUR                  n
UR                  nUR                  n SnANYSnAf[         a    [        SU SU 35      ef = f! , (       d  f       N= f)a  Test pip CLI in a specific conda environment.

`pip ...` in environment == `pip_cli(..., prefix=env_path)`

:param argv: Arguments to pass to pip.
:param prefix: Path to the conda environment containing pip.
:param raises: Expected exception to intercept. If provided, the raised exception
    will be returned instead of exit code (see pytest.raises and pytest.ExceptionInfo).
:return: Command results (stdout, stderr, exit code or pytest.ExceptionInfo).
z-mpipT)capture_outputtextcheckNz Python not found in environment z: )r	   r"   r<   r   r}   r   
subprocessr   
returncodestdoutstderrCalledProcessErrorFileNotFoundErrorRuntimeError)r|   r   r}   r~   prefix_path
python_exer   cmdr   resultr   r   r   es                 r6   r   r   I  s   " 6l =0
:e,D/IDSCD/II '-V]]6"+-?9##'	 (( @* vFy<<<<1 0J 00 "||$ "6{m2j\R  @?s5   B;'D);C  D$C=8D=DD
D-r4   )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   __doc__r   r   r   r4   r5   r6   r   r   6  s    A-- - >	-
 
(- - ## # 
	# # HL	+=+= += E	+=
 
<+= +=r5   r   c               #  $   #    [        5       v   g7f)a  A function scoped fixture returning PipCLIFixture instance.

Use this for calling pip commands in specific conda environments during tests.
Uses `python -m pip` for reliable cross-platform execution.

Example:
    def test_pip_install(tmp_env, pip_cli):
        with tmp_env("python=3.10", "pip") as prefix:
            stdout, stderr, code = pip_cli("install", "requests", prefix=prefix)
            assert code == 0
N)r   r4   r5   r6   pip_clir   w  s      /s   c                  B    \ rS rSr% S\S'      S       SS jjrSrg)	PathFactoryFixturei  r	   tmp_pathNc                    U=(       d    SnU=(       d"    [         R                  " 5       R                  SS nU=(       d    SnU R                  X!-   U-   -  $ )au  Unique, non-existent path factory.

Extends pytest's `tmp_path` fixture with a new unique, non-existent path for usage in cases
where we need a temporary path that doesn't exist yet.

:param name: Path name to append to `tmp_path`
:param prefix: Prefix to prepend to unique name generated
:param suffix: Suffix to append to unique name generated
:return: A new unique path
 N   )uuiduuid4hexr   )r|   rB   r   suffixs       r6   r   PathFactoryFixture.__call__  sI      2+tzz|''+2}} 677r5   r4   )NNN)rB   
str | Noner   r   r   r   r   r	   )r   r   r   r   r   r   r   r4   r5   r6   r   r     sB    N  !!	88 8 	8
 
8 8r5   r   c              #  &   #    [        U 5      v   g7f)zA function scoped fixture returning PathFactoryFixture instance.

Use this to generate any number of temporary paths for the test that are unique and
do not exist yet.
N)r   )r   s    r6   path_factoryr     s      X
&&r   c                  `    \ rS rSr% S\S'   S\S'   SS jr\SSS.       SS	 jj5       rS
rg)TmpEnvFixturei  z$PathFactoryFixture | TempPathFactoryr   rx   r   c                    [        U R                  [        5      (       a  U R                  5       $ U R                  R                  S5      $ )Nztmp_env-)
isinstancer   r   rO   r|   s    r6   get_pathTmpEnvFixture.get_path  s>    d'');<<$$&& $$++J77r5   N)r   shallowc             '  J  #    U(       a  U(       a  [        S5      e[        U=(       d    U R                  5       5      nU(       d
  Uc;  U(       d4  U[        -  nUR                  R                  SSS9  UR                  5         OU R                  " SSU 3/UQSPSP76   Uv   g7f)	aV  Generate a conda environment with the provided packages.

:param args: The arguments to pass to conda create (e.g., packages, flags, etc.)
:param prefix: The prefix at which to install the conda environment
:param shallow: Whether the environment is created only on disk without call to `conda create`
:return: The conda environment's prefix
z.shallow=True cannot be used with any argumentsNT)parentsexist_okcreate	--prefix=--yes--quiet)
ValueErrorr	   r   r   parentmkdirtouchr   )r|   r   r   argsr@   s        r6   r   TmpEnvFixture.__call__  s      tMNNf/0wt--DKKdT:JJLNNF8$  	
  s   B!B#r4   )r   r	   )r   r<   r   zstr | os.PathLike | Noner   zbool | Noner   Iterator[Path])	r   r   r   r   r   r   r   r   r   r4   r5   r6   r   r     sU    668  ,0#	   )  	 
 
   r5   r   c              #  &   #    [        X5      v   g7f)zA function scoped fixture returning TmpEnvFixture instance.

Use this when creating a conda environment that is local to the current test.
Nr   r   r   s     r6   tmp_envr     s      
00r   c                H    U " SS9 nUsSSS5        $ ! , (       d  f       g= f)zuA function scoped fixture returning an empty environment.

Use this when creating a conda environment that is empty.
T)r   Nr4   )r   r   s     r6   	empty_envr     s     
	& 
		s   
!c              #  &   #    [        X5      v   g7f)zA session scoped fixture returning TmpEnvFixture instance.

Use this when creating a conda environment that is shared across tests.
Nr   )rQ   r   s     r6   session_tmp_envr     s      (
<<r   c                  >    \ rS rSr% S\S'   S\S'   \S	S j5       rSrg)
TmpChannelFixturei   r   r   rx   r   c              '    #    U R                   " SSU R                  5        3/UQSPSPSP7S[        06  [        [        R
                  " 5       R                  5      n[	        U5      nU R                  5       nU[        R                  -  nUR                  SS9  US	-  nUR                  SS9  0 0 S
.n[        U5      n0 n	U(       a  UR                  S5      n
UR                  U
5       H  nUS   nX;   a  X   R                  U
5        U
1X'   [        X,-  X\-  5        [        S0 UR!                  5       R#                  5        VVs0 s H  u  pUS;  d  M  X_M     snnD6US   U'   UR%                  UR&                  5        M     U(       a  M  US-  R)                  [*        R,                  " U5      5        US-  R)                  [*        R,                  " 0 5      5        [.        R0                  " U	R3                  5       5       H-  n
[5        [	        U5      R                  U
5      5      (       a  M-   e   U[7        [9        U5      5      4v   g s  snnf 7f)Nr   r   r   r   z--download-onlyr}   Tr   noarch)infopackagesr   fn)urlchannelschannelchannel_namer   zrepodata.jsonr4   )r   r   r   r	   r   first_writablerR   r   subdirr   listpopqueryaddr
   r    dumpitemsextenddepends
write_textr   dumpsr   from_iterablevaluesanyr   r<   )r|   specsrR   
pkgs_cacher   r   r   repodata
iter_specsseenspecpackage_recordfnamefieldvalues                  r6   r   TmpChannelFixture.__call__  sB     	))+,-	
 	
 		

 	
 	
 !	
 (779BBC%h/
##%7>>)T"8#T"B/%[
$&>>!$D","2"24"8&t,=KOOD)#f )6>: /< / -;,?,?,A,G,G,I,ILE (VV %,I/$U+ !!."8"89' #9 j0 
/	!--djj.BC	/	!--djjn= ''6D'177=>>>> 7 {3w<000!s%   EIII2IBI1#Ir4   N)r  r<   r   zIterator[tuple[Path, str]])r   r   r   r   r   r   r   r   r4   r5   r6   r   r      s     $$71 71r5   r   c              #  &   #    [        X5      v   g7f)z?A function scoped fixture returning TmpChannelFixture instance.N)r   r   s     r6   tmp_channelr  @  s      L
44r   rB   c              #  X  #    U v   U R                    VVVs/ s H5  u  pnU[        R                  L d  M  UR                  S5      (       d  M3  UPM7     snnn=n(       aC  [        R                  SSR                  U5       35        U R                  5         [        / 5        ggs  snnnf 7f)z:A monkeypatch fixture that resets context after each test.CONDA_z+monkeypatch cleanup: undo & reset context: z, N)	_setitemosenviron
startswithlogdebugjoinundor   )rK   objrB   _
conda_varss        r6   context_aware_monkeypatchr   I  s      
 (000LCq"** 	!%!: 	0 z 
 			?		*@U?VWXb s   B*B#B#B#AB*c              #  0  #    U " 5       S-  nUR                  SS9  U[        -  R                  5         UR                  SUR                  [        U5      =n4S9  [        R                  U4:X  d   eUv   [        R                  R                  US5        g7f)zHA function scoped fixture returning a temporary package cache directory.rM   Tr   z$conda.base.context.Context.pkgs_dirsnew_callablereturn_valueN)r   r   r   patchPropertyMockr<   r   	pkgs_dirsr   _cache_r   )r   mockerrR   pkgs_dir_strs       r6   tmp_pkgs_dirr+  Z  s     
 ~&HNN4N ((//1
LL.((&)(m3l5  
 ///
N  t4s   BBc              #     #    U " 5       S-  nUR                  SS9  UR                  SUR                  [        U5      =n4S9  [        R
                  U4:X  d   eUv   g7f)zFA function scoped fixture returning a temporary environment directory.envsTr   z$conda.base.context.Context.envs_dirsr"  N)r   r%  r&  r<   r   	envs_dirs)r   r)  envs_direnvs_dir_strs       r6   tmp_envs_dirr1  o  sj     
 ~&HNN4N 
LL.((&)(m3l5  
 ///
Ns   AA)r9   r-   c               #     #    S[         R                  ;   a  Sv   g[        R                  R	                  5        n U R                  S[        5        Sv   SSS5        g! , (       d  f       g= f7f)a  
We need to set this so Python loads the dev version of 'conda', usually taken
from `conda/` in the root of the cloned repo. This root is usually the working
directory when we run `pytest`.
Otherwise, it will import the one installed in the base environment, which might
have not been overwritten with `pip install -e . --no-deps`. This doesn't happen
in other tests because they run with the equivalent of `python -m conda`. However,
some tests directly run `conda (shell function) which calls `conda` (Python entry
point). When a script is called this way, it bypasses the automatic "working directory
is first on sys.path" behavior you find in `python -m` style calls. See
https://docs.python.org/3/library/sys_path_init.html for details.

PYTHONPATHN)r  r  r   r)   r   rP   r   )rK   s    r6   r3  r3    sI      rzz!'')[|->? *))s   8A/A	A/
A,(A/c            	         [        5         [        R                  " S[        R                  " S[
        R                  " [        5      5      05        g )Ntestdata)r   r   _set_raw_datar   make_raw_parametersr   loadsTEST_CONDARCr4   r5   r6   context_testdatar:    s9    O(<<DJJ|4	
r5   c                  `    \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
\S'   S rSSS jjrSrg)HttpTestServerFixturei  z;Fixture providing HTTP test server for serving local files.zhttp.server.ThreadingHTTPServerserverr<   hostintportr   r	   	directoryc                H    [         R                  SU R                   35        g)z!Log server startup for debugging.zHTTP test server started: N)r  r  r   r   s    r6   __post_init__#HttpTestServerFixture.__post_init__  s    		.txxj9:r5   c                l    UR                  S5      nU(       a  U R                   SU 3$ U R                  $ )z
Get full URL for a given path on the server.

:param path: Relative path on the server (e.g., "subdir/package.tar.bz2")
:return: Full URL
/)lstripr   )r|   r@   s     r6   get_urlHttpTestServerFixture.get_url  s2     {{3'+$((1TF#99r5   r4   N)r   )r@   r<   r   r<   )	r   r   r   r   r   r   rC  rH  r   r4   r5   r6   r<  r<    s.    E++
I
I	HO;: :r5   r<  c           	   #  8  #    SSK Jn  [        U SS5      =n(       ak  [        U5      nUR	                  5       (       d  [        SU 35      eUR                  5       (       d  [        SU 35      e[        UR                  5       5      nO!U" SS9nUR                  5         [        U5      nUR                  U5      nUR                  R                  5       SS	 u  pxS
U;   a  SU S3OUn	SU	 S
U 3n
[        UUUU
[        U5      S9nUv   UR                  5         g7f)a  
Function-scoped HTTP test server for serving local files.

This fixture starts an HTTP server on a random port and serves files
from a directory. The server supports both IPv4 and IPv6.

Usage without parametrize (dynamic content):
    def test_dynamic(http_test_server):
        # Server uses temporary directory automatically
        (http_test_server.directory / "file.txt").write_text("content")
        url = http_test_server.get_url("file.txt")
        response = requests.get(url)
        assert response.status_code == 200

Usage with parametrize (pre-existing directory):
    @pytest.mark.parametrize("http_test_server", ["tests/data/mock-channel"], indirect=True)
    def test_existing(http_test_server):
        url = http_test_server.get_url("file.txt")
        response = requests.get(url)
        assert response.status_code == 200

Use ``None`` in parametrize to mix pre-existing directories with dynamic content:
    @pytest.mark.parametrize("http_test_server", ["tests/data", None], indirect=True)

:param request: pytest fixture request object
:param path_factory: path_factory fixture for creating unique temp directories
:return: HttpTestServerFixture with server, host, port, url, and directory attributes
:raises ValueError: If parametrized directory is invalid
r!   )http_test_serverrY   NzDirectory does not exist: zPath is not a directory: rK  r  r   :[]zhttp://)r=  r>  r@  r   rA  )r   rK  getattrr	   existsr   is_dirr<   resolver   run_test_serversocketgetsocknamer<  shutdown)rD   r   http_server_modulerA  directory_path
server_dirr=  r>  r@  url_hostr   fixtures               r6   rK  rK    s%    D 9GWd33y3 i$$&&9)EFF$$&&8DEE..01	 "'9:

O	//	:F**,Ra0JD!Tk4&{tHH:Qtf
%C#y/G M OOs   DD)rK   r)   r   r   )rD   r(   r   z(Iterable[Literal['libmamba', 'classic']])rD   r(   r   zIterable[Literal['classic']])rD   r(   r   zIterable[Literal['libmamba']])rD   r(   rk   rd   r   zIterable[Solver])r   zIterator[MultiCapture])rz   r&   r   Iterator[CondaCLIFixture])r   r\  )r   zIterator[PipCLIFixture])r   r	   r   zIterator[PathFactoryFixture])r   r   r   rx   r   Iterator[TmpEnvFixture])r   r   r   r	   )rQ   r*   r   rx   r   r]  )r   r   r   rx   r   zIterator[TmpChannelFixture])rK   r)   r   r)   )r   r   r)  r+   r   r   )r   None)rD   r(   r   r   r   zIterator[HttpTestServerFixture])rr   
__future__r   r  r   r   r1   
contextlibr   r   dataclassesr   	itertoolsr   loggingr   pathlibr	   shutilr
   typingr   r   r   r   r?   r   conda.deprecationsr   r   r   
auxlib.ishr   base.constantsr   r   base.contextr   r   cli.mainr   common.configurationr   common.serializer   r   
common.urlr   core.package_cache_datar   core.subdir_datar   
exceptionsr   gateways.disk.creater   models.recordsr    integrationr"   http.serverhttpcollections.abcr#   r$   _pytest.capturer%   r&   r'   r(   r)   r*   pytest_mockr+   common.pathr,   r   r  r9  r[  r7   rC   rH   rJ   rS   r  getsplitr[   r_   rc   rd   rX   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r  r   r+  r1  r3  r:  r<  rK  r4   r5   r6   <module>r}     s   9 " 	    2 !     < < 	  )    H 1 $ 3 ) $ 6 ) & 5 * &2,  *&  "$N @ @ j!& "& 1 1 j! "   ::>>.0BCII#N66-6	68 22!2 2 33"3 3 
7:.	0B	C " i FF+  !+ F  F  F R " " i   !  == == ==@ i  ! 8 8 82 ' ' - - -d 1$11 1 1   i =%=&= = != <1 <1 <1~ 5$55 !5 5 ]# $  5$5.;55 5( $.; " i. /*   : : :0 BB$B %B Br5   