
    whnc                       S r SSK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  SSKJr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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(  SSK)J*r*J+r+J,r,J-r-J.r.  SSK/J!r0  SSK/J1r1J2r2J3r3J4r4  SSK5J6r6  \(       a&  SSK7J8r8  SSKJ9r9J:r:  SSK;J<r<  SSK=J>r>  SSK&J?r?  SSK)J@r@  \R                  " S\B 35      rC\ " S S5      5       rD " S  S!5      rEg)"a  
This module provides a convenient interface between `libmamba.Solver`
and conda's `PrefixData`. In other words, it allows to expose channels
loaded in `conda` to the `libmamba` machinery without using the
`libmamba` networking stack.

Internally, the `libmamba`'s index is made of:

- A 'Pool' object, exposed to libsolv.
- The pool is made of `Repo` objects.
- Each repo corresponds to a repodata.json file.
- Each repodata comes from a channel+subdir combination.

Some notes about channels
-------------------------

In a way, conda channels are an abstraction over a collection of
channel subdirs. For example, when the user wants 'conda-forge', it
actually means 'repodata.json' files from the configured platform subdir
and 'noarch'. Some channels are actually 'MultiChannel', which provide
a collection of channels. The most common example is 'defaults', which
includes 'main', 'r' and 'msys2'.

So, for conda-forge on Linux amd64 we get:

- https://conda.anaconda.org/conda-forge/linux-64
- https://conda.anaconda.org/conda-forge/noarch

For defaults on macOS with Apple Silicon (M1 and friends):

- https://repo.anaconda.org/main/osx-arm64
- https://repo.anaconda.org/main/noarch
- https://repo.anaconda.org/r/osx-arm64
- https://repo.anaconda.org/r/noarch
- https://repo.anaconda.org/msys2/osx-arm64
- https://repo.anaconda.org/msys2/noarch

However, users will just say 'defaults' or 'conda-forge', for convenience.
This means that we need to deal with several formats of channel information,
which ultimately lead to a collection of subdir-specific URLs:

- Channel names from the CLI or configuration files / env-vars
- Channel URLs if names are not available (channel not served in anaconda.org)
- conda.models.channel.Channel objects

Their origins can be:

- Specified by the user on the command-line (-c arguments)
- Specified by the configuration files (.condarc) or environment vars (context object)
- Added from channel-specific MatchSpec (e.g. `conda-forge::python`)
- Added from installed packages in target environment (e.g. a package that was installed
  from a non-default channel remembers where it comes from)

Also note that a channel URL might have authentication in the form:

- https://user:password@server.com/channel
- https://server.com/t/your_token_goes_here/channel

Finally, a channel can be mounted in a local directory and referred to via
a regular path, or a file:// URL, with or without normalization on Windows.

The approach
------------
We pass the subdir-specific, authenticated URLs to conda's 'SubdirData.repo_patch',
which download the JSON files but do not process them to PackageRecords.
Once the cache has been populated, we can instantiate 'libmamba.Repo' objects directly.
We maintain a map of subdir-specific URLs to `conda.model.channel.Channel`
and `libmamba.Repo` objects.
    )annotationsN)	dataclass)partial)Path)TYPE_CHECKING)KNOWN_SUBDIRSREPODATA_FNChannelPriority)context)on_win)DummyExecutorThreadLimitedThreadPoolExecutor)path_to_urlremove_authsplit_anaconda_token)PackageCacheData)
SubdirData)Channel)	MatchSpec)PackageRecord)MambaNativeExceptionQuery)DatabasePackageTypesPipAsPythonDependency
PrioritiesRepodataOrigin)ChannelResolveParamsCondaURL
NoArchTypePackageInfo   )logger_callback)Iterable)AnyLiteral)	PathsType)RepodataState)QueryResult)RepoInfozconda.c                  V    \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   \SS
 j5       rSrg)_ChannelRepoInfo~   z;A dataclass mapping conda Channels, libmamba Repos and URLszChannel | Nonechannelr*   repostr
url_w_credurl_no_credc                    U R                   (       a  U R                   R                  $ U R                  R                  S5      nUS   [        ;   a  US   $ US   $ )N/)r.   canonical_namer2   splitr   )self	url_partss     R/home/kuhnn/miniconda3/lib/python3.13/site-packages/conda_libmamba_solver/index.pyr7   _ChannelRepoInfo.canonical_name   sO    <<<<...$$**3/	R=M)R= }     N)returnr0   )	__name__
__module____qualname____firstlineno____doc____annotations__propertyr7   __static_attributes__r>   r=   r;   r,   r,   ~   s-    A
NO r=   r,   c                     \ rS rSrSrS\SS4         SS jjr\SS j5       r  S     SS jjr	SS jr
SS	 jr  S     S S
 jjrS!S jrS"S jrS#S jr S$         S%S jjrS&S jrS'S jrS(S jrS)S jr S*     S+S jjr  S,       S-S jjr  S,       S-S jjrS.S jr S*     S/S jjrSrg)0LibMambaIndexHelper   a  
Interface between conda and libmamba for the purpose of building the "index".
The index is the collection of package records that can be part of a solution.
It is built by collecting all the repodata.json files from channels and their
subdirs. For existing environments, the installed packages are also added to
the index (this helps with simplifying solutions and outputs). The local cache
can also be added as a "channel", which is useful in offline mode or with no
channels configured.
r>   c                   / nU H  nUR                   (       ae  [        R                  SUR                   U5        [        S0 UR	                  5       R                  5        VV	s0 s H  u  pUS:w  d  M  X_M     sn	nD6nUR                  U5        M     X`l        U=(       d    [        R                  U l	        X0l
        U R                  5       U l        U R                  5       U l        U(       a*  U R                  R                  U R!                  U5      5        U(       a*  U R                  R                  U R#                  U5      5        U R%                  5         g s  sn	nf )NzrPlatform-aware channels are not supported. Ignoring platform %s from channel %s. Use subdirs keyword if necessary.platformr>   )rL   loginfor   dumpitemsappendchannelsr   subdirsrepodata_fn_init_dbdb_load_channelsreposextend_load_pkgs_cache_load_installed_set_repo_priorities)
r9   rR   rS   rT   installed_records	pkgs_dirsplatform_less_channelsr.   kvs
             r;   __init__LibMambaIndexHelper.__init__   s    "$G8 $$ "aglln6J6J6L$`6LdaPQU_P_TQT6L$`a"))'2   /1'//&--/-1-@-@-B
JJd33I>?JJd223DEF!!# %as   "E2Ec           
         UR                   (       d  [        SU S35      eUR                   n[        S0 UR                  5       R	                  5        VVs0 s H  u  p4US:w  d  M  X4_M     snnD6nU " U4U4S9$ s  snnf )NzChannel z" must define 'platform' attribute.rL   )rR   rS   r>   )rL   
ValueErrorr   rO   rP   )clsr.   subdirr`   ra   s        r;   from_platform_aware_channel/LibMambaIndexHelper.from_platform_aware_channel   s{    xy0RSTT!!Yglln.B.B.DX.DdaZTQT.DXYWJ	:: Ys   A:%A:Nc                P   U=(       d&    U R                    Vs/ s H  o3R                  PM     snnSnU Hi  nU(       a8  U R                  R                  U5       H  nU" U5      (       d  M  US-  nM     MB  U[	        U R                  R                  U5      5      -  nMk     U$ s  snf )Nr   r"   )rX   r/   rV   packages_in_repolen)r9   rX   filter_	repo_infocountr/   pkgs          r;   
n_packagesLibMambaIndexHelper.n_packages   s    
 E$**E*Y..*ED7733D9Cs||
 : TWW55d;<<   Fs   B#c                   0 nUR                  SU R                  S9 H{  nU R                   Hh  nUR                  U:X  d  M  [        R                  SUR                  5        XUR                  '   U R                  R                  UR                  5        Mj     M}     U R                  USS9 HC  nU R                   H0  nUR                  UR                  :X  d  M  UR                  Ul	        M2     ME     U R                  5         g )NFwith_credentialsrS   zReloading repo %stry_solv)urlsrS   rX   r2   rM   debugr1   rV   remove_repor/   rW   r\   )r9   r.   rx   urlrn   new_repo_infos         r;   reload_channel"LibMambaIndexHelper.reload_channel   s    <<<MC!ZZ	((C/II193H3HI18--.GG''	7	 ( N "000FM!ZZ	((M,E,EE%2%7%7IN ( G 	!!#r=   c                   0 U R                    Vs0 s H9  oR                  [        R                  R                  :w  d  M,  UR                  U_M;     snE[        R
                  EnUR                  5        VVs0 s He  u  p4UR                  (       d  M  U[        [        R                  " UR                  R                  SS5      5      U[        U R                  5      S9_Mg     nnn[        R                  R                  5        VVVs0 s H  u  pVUU Vs/ s H  nUR                  (       d  M  UR                  UR                  [        [        R                  " UR                  R                  SS5      5      UR                  [        U R                  5      S95      PM     sn_M     nnnn[!        [        U R                  5      [        R                  " [#        [        R                  5      5      [         R$                  " U5      [         R&                  " U5      [#        [(        R*                  " 5       5      [,        R.                  " 5       S9n[1        U5      n	U	R3                  [4        5        U	$ s  snf s  snnf s  snf s  snnnf )N %20)r{   display_name	platforms)r   channel_aliascustom_channelscustom_multichannelshome_dircurrent_working_dir)rR   locationr   r   namer   rP   base_urlLibmambaChannelr   parsereplacesetrS   r   getr   r0   
ChannelMapMultiChannelMapr   homeosgetcwdr   
set_loggerr#   )
r9   cr   r   r.   channel_namerR   r   paramsrV   s
             r;   rU   LibMambaIndexHelper._init_db   s   
 #'--`-Q::AVAVA_A_3_yqvvqy-`
 %%	
 $3#8#8#:
 $;D/NN7#3#3#;#;C#GH!dll+ 
 $; 	 
, +2*F*F*L*L*N 
 +O&   (  (G####LL#$NN7+;+;+C+CC+OP%,\\"%dll"3  (  +O 	  
 &$,,'"..W-B-B)CD0;;OL!5!E!EFZ![% "		
 f
o&	K a
 
s6   +I2I27I7AI7JI=.A4I="J=Jc           
        Uc  U R                  5       n0 nUR                  5        H1  u  pEUR                  S5      (       a  UR                  SS5      nXSU'   M3     UnU R	                  [        UR                  5       5      5      n/ nUR                  5        HO  u  nu  p[        U5      u  p[        U5      nU R                  U	UU
US9nUR                  [        X   UUUS95        MQ     U$ )Nzfile://r   r   rv   r.   r/   r1   r2   )_channel_urlsrP   
startswithr   _fetch_repodata_jsonstuplekeysr   r   _load_repo_info_from_json_pathrQ   r,   )r9   urls_to_channelrw   encoded_urls_to_channelr{   r.   urls_to_json_path_and_statechannel_repo_infosr1   	json_pathstateurl_no_token_r2   r/   s                  r;   rW   "LibMambaIndexHelper._load_channels  s
   
 ""002O #%+113LC~~i((kk#u-+2C( 4 2&*&@&@G[G[G]A^&_#.I.O.O.Q*J*2:>OL%l3K66!	 7 D %% +7) +	 /R" "!r=   c           	     (   0 n[        5       n/ nU R                   H>  nUR                  SU R                  S9 H  nUR	                  [        U5      5        M     M@     U GH  nUR                  SS9 Vs/ s H0  nUR                  [        U R                  5      5      (       d  M.  UPM2     nnUR                  U5      (       a  Mf  UR                  SS9 Vs/ s H@  nUR                  [        U R                  5      5      (       d  M.  UR                  SS5      PMB     nnXg:w  a5  UR                  U Vs0 s H  oUU_M     sn5        UR                  U5        M  U H  nXR;  d  M
  XAU'   UR                  U5        M!     GM"     U$ s  snf s  snf s  snf )z*Maps authenticated URLs to channel objectsTrt   F)ru   r   r   )r   rR   rx   rS   rQ   r   endswithr   
issupersetr   updateadd)r9   rx   seen_noauthchannels_with_subdirsr.   r{   noauth_urls	auth_urlss           r;   r   !LibMambaIndexHelper._channel_urls2  su   e "}}G||T4<<|P%,,WS\: Q % -G #<<<??C<<dll 34 ?  
 %%k22 #<<<>>C<<dll 34 (C'>  
 'Y?Yc'\Y?@"";/ #) 'IOOC( #) -0 / @s   4-F%F-F
F
3F
c           
     j   [         R                  (       d  [         R                  S:X  a  [        O[	        [
        [         R                  S9nU" 5        nUR                  U R                  U5       VVVs0 s H  u  pEnU[        U5      U4_M     snnnsS S S 5        $ s  snnnf ! , (       d  f       g = f)Nr"   )max_workers)	r   ry   repodata_threadsr   r   r   map_fetch_one_repodata_jsonr0   )r9   rx   Executorexecutorr{   pathr   s          r;   r   )LibMambaIndexHelper._fetch_repodata_jsonsT  s     }} 8 8A = 8gF^F^_ 	
 Z8 +3,,t7T7TVZ*[*[&S c$i''*[ Z Zs   !B$4B
B$B$$
B2c                   [         R                  " U5      nUR                  (       d  [        S5      eS[        R
                  ;   a  [        [        R                  R                  5       5       H^  u  p4[        U[        5      (       d  M  US S XR                  4:X  d  M2  UR                  [        S5      :X  d  MM  [        R                  U	 M`     [        X R                  S9n[        R                   (       d  [        R"                  (       a'  UR$                  nUR&                  R)                  5       nOUR*                  R-                  5       u  pgXU4$ )Nz#Channel URLs must specify a subdir!PYTEST_CURRENT_TEST   inf)rT   )r   from_urlrg   re   r   environlistr   _cache_rP   
isinstancer   rT   _mtimefloatr   offlineuse_index_cachecache_path_json
repo_cache
load_state
repo_fetchfetch_latest_path)r9   r{   r.   keycachedsubdir_datar   r   s           r;   r   ,LibMambaIndexHelper._fetch_one_repodata_json`  s    ""3'~~BCC BJJ.  $J$6$6$<$<$>?!#u--r7s$4$455&--5QV<:W"**3/	  @ !6F6FG??g55 $33I**557E  +55GGIIu$$r=   c                   U(       a"  [         (       a  [        R                  S5        Sn[        U5      nUR	                  S5      nU(       a  [        X#R                  UR                  S9nOS n[        U5      nUR                  nU[        R                  ;   a  UR                  nU(       a[  U(       aT   [        R                  SXU5        U R                  R                  [        U5      UU[!        [        R"                  5      S9$  [        R                  S	XU5        U R                  R'                  [        U5      UU[!        [        R"                  5      [        R(                  (       a  [*        R,                  O[*        R.                  S
9n
U(       a.  U(       a'   U R                  R7                  U
[        U5      US9  U
$ U
$ ! [$         a  n	[        R                  SU	S9   S n	A	NS n	A	ff = f! [0         aZ  n	S[        U	5      ;   aD  [        R2                  (       a/  [        R5                  SU5        [        R                  SXS9   S n	A	g U	eS n	A	ff = f! [0         a  n	[        R                  SXS9   S n	A	U
$ S n	A	ff = f)NzIOverriding truthy 'try_solv' as False on Windows for performance reasons.Fz.solv)r{   etagmodz(Loading %s (%s) from SOLV repodata at %s)r   expected
channel_idadd_pip_as_python_dependencyz&Failed to load from SOLV. Trying JSON.)exc_infoz(Loading %s (%s) from JSON repodata at %s)r   r{   r   r   package_typeszdoes not existzCould not load repodata for %s.z0Ignored MambaNativeException in offline mode: %s)r/   r   metadataz!Ignored SOLV writing error for %s)r   rM   ry   r   with_suffixr   r   r   r   r7   r   r   r   rV   "add_repo_from_native_serializationr0   r   r   	Exceptionadd_repo_from_repodata_jsonuse_only_tar_bz2r   
TarBz2OnlyCondaOrElseTarBz2r   r   warningnative_serialize_repo)r9   r   channel_urlr   rw   	solv_pathrepodata_originr.   r   excr/   s              r;   r   2LibMambaIndexHelper._load_repo_info_from_json_pathz  s(     IIabHO	))'2	,::SXS\S\]O"O+&++
555
 !JR		>
Yb wwAAY,)1F<<2	 B  	II:JU^ 7766^%-B88.
 // !++%77 7 D2 Y--C	N_ . 
 tM  R		BS	QR& $ 	3s8+ =zJ		Lc	`I	" ( Y		=z	XYsQ   4AG BG1 $I 
G.G))G.1
I;AIII
J"I<<Jc                    U Vs/ s H  o R                  U5      PM     nnU R                  R                  US[        R                  S9nU R                  R                  U5        [        S USSS9$ s  snf )N	installed)packagesr   r   r   )!_package_info_from_package_recordrV   add_repo_from_packagesr   Noset_installed_repor,   )r9   recordsrecordr   r/   s        r;   r[   #LibMambaIndexHelper._load_installed  sy    QXYQXv::6BQXYww--)>)A)A . 

 	""4(t
 	
 Zs   A1c           
     V   / nU H  n[        U5      nUR                  5         UR                  5        Vs/ s H  nU R                  U5      PM     nnU R                  R                  XcS9n[        U5      R                  SS5      nUR                  [        S XxUS95        M     U$ s  snf )N)r   r   r   r   r   )
r   loadvaluesr   rV   r   r   r   rQ   r,   )	r9   r^   rX   r   package_cache_datar   r   r/   path_as_urls	            r;   rZ   $LibMambaIndexHelper._load_pkgs_cache  s    D!1$!7##% 17799F 66v>9   771181OD%d+33C?KLL  tQ\  s   B&c                   UR                  SS 5      (       aH  UR                  R                  S;   a.  [        UR                  R                  R	                  5       5      nO[        S5      n[        S0 SUR                  _SUR                  _SUR                  =(       d    S_SUR                  =(       d    S	_S
[        UR                  5      _SUR                  S5      =(       d    S_SUR                  _SUR                  =(       d1    UR                   SUR                   SUR                  =(       d    S 3_SUR                  S5      =(       d    S_SUR                  S5      =(       d    S_SUR                  S5      =(       d    S_SUR                  S5      =(       d    S_S[        UR                  S5      =(       d    / 5      _S[        UR                  S5      =(       d    / 5      _S[        UR                  S5      =(       d    / 5      _S[        UR                  S5      =(       d    / 5      _SU_SUR                  S5      =(       d    S	_S[        UR                  S5      =(       d    S	S-  5      _6$ )Nnoarch)pythongenericr   r   versionbuild_string build_numberr   r.   package_urlr{   rL   filename-licensemd5sha256
signaturestrack_featuresdepends
constrainsdefaulted_keyssize	timestampi  r>   )r   r   valuer    titler!   r   r   buildr  r0   r.   rg   fnr   int)r9   r   r   s      r;   r   5LibMambaIndexHelper._package_info_from_package_record  s-   ::h%%&--*=*=AV*V 3 3 9 9 ;<F%F 

NN
  +
  ,,1	

 '
 

5)/R
 ]]
 YYXV[[M6>>2B!FLLDVTVCW"X
 JJy)/R
 

5!'R
 ::h'-2
 zz,/52
  

+; < BC
 I.4"5
  FJJ|4:;!
"  

+; < BC#
$ %
& F#(q'
( 6::k27a4?@)
 	
r=   c                   [         R                  [        R                  [        R                  4;   n[        U R                  5      nU(       aH  [        U R                   Vs1 s H  o3R                  iM     sn5      nU R                  S   R                  nU R                   H  nUR                  c  M  U(       a$  UR                  W:w  a  WS-  nUR                  nWnOSnU(       a  SnOUnUS-  n[        R                  SUR                  UU5        U R                  R                  UR                  [        Xx5      5        M     g s  snf )Nr   r"   zChannel: %s, prio: %s : %s)r   channel_priorityr
   STRICTFLEXIBLErl   rX   r7   r/   rM   ry   r2   rV   set_repo_priorityr   )	r9   has_prioritysubprio_indexr/   channel_priocurrent_channel_namern   prioritysubprioritys	            r;   r\   (LibMambaIndexHelper._set_repo_priorities   s   //""$$4
 

 DJJ

K
 3 3
KLL#'::a=#?#? I~~%++/CC A%L+4+C+C('  +"II,%%	 GG%%innj6WX1 $  Ls   !Ec                    [        U[        [        45      (       a  U/n[        [	        [        U5      5      n[
        R                  " U R                  U5      nU R                  X25      $ N)	r   r0   r   r   r   r   findrV   _process_query_result)r9   queriesreturn_typeresults       r;   searchLibMambaIndexHelper.search)  sS    
 gY/00iGs3()DGGW-))&>>r=   c                |    [        U5      n[        R                  " U R                  X5      nU R	                  XC5      $ r$  )r0   r   r  rV   r&  r9   querytreer(  r)  s        r;   r  LibMambaIndexHelper.depends4  s2     E
tww4))&>>r=   c                |    [        U5      n[        R                  " U R                  X5      nU R	                  XC5      $ r$  )r0   r   whoneedsrV   r&  r-  s        r;   r2  LibMambaIndexHelper.whoneeds>  s2     E
5))&>>r=   c                    [        5       nU HF  nU R                  UR                  5       5      nU H  nUR                  UR                  5        M      MH     [        U5      $ )zG
Returns all the package names that (might) depend on the passed specs
)r   r  dist_strr   r   r   )r9   specsexplicit_poolspecpkg_recordsr   s         r;   r7  !LibMambaIndexHelper.explicit_poolH  sR     #&%D,,t}}7K%!!&++. &  ]##r=   c                   US:X  a  U$ UR                  5       nUR                  S0 5      R                  S5      S:w  a  UR                  S0 5      R                  SS5      nUR                  S0 5      R                  SS5      nUR                  S0 5      R                  SS	UR                  5        35      n[        U S
U SU 35      eUS:X  a/  / nUS   S    H  n[	        S0 UD6nUR                  U5        M!     U$ U$ )Nrawr)  statusOKr.  typez	<Unknown>msgzFaulty response: z query 'z
' failed: r   pkgsr>   )to_dictr   jsonre   r   rQ   )	r9   r)  r(  
query_typer.  	error_msgr9  rp   r   s	            r;   r&  )LibMambaIndexHelper._process_query_resultS  s	   
 %M!::h#''1T9GR044V[IJJJw+//EE

8R044U>OPVP[P[P]<_`I
|8E7*YKPQQ)#Kh'/&--""6* 0 r=   )rR   rV   rT   rX   rS   )
rR   zIterable[Channel]rS   zIterable[str]rT   r0   r]   Iterable[PackageRecord]r^   r'   )r.   r   r?   rI   )NN)rX   zIterable[RepoInfo] | Nonerm   zcallable | Noner?   r  )r.   r   r?   None)r?   r   )NT)r   zdict[str, Channel] | Nonerw   boolr?   zlist[_ChannelRepoInfo])r?   zdict[str, Channel])rx   zdict[str, str]r?   z$dict[str, tuple[str, RepodataState]])r{   r0   r?   z&tuple[str, os.PathLike, RepodataState])T)
r   r0   r   r0   r   r(   rw   rI  r?   zRepoInfo | None)r   rG  r?   r,   )r^   r'   r?   zlist[RepoInfo])r   r   r?   r!   )r?   rH  )r   )r'  z+Iterable[str | MatchSpec] | str | MatchSpecr(  !Literal['records', 'dict', 'raw']r?   2list[PackageRecord] | dict[str, Any] | QueryResult)Fr   )r.  zstr | MatchSpecr/  rI  r(  rJ  r?   rK  )r6  zIterable[MatchSpec]r?   z
tuple[str])r)  r)   r(  rJ  r?   rK  )r@   rA   rB   rC   rD   r	   rb   classmethodrh   rq   r}   rU   rW   r   r   r   r   r[   rZ   r   r\   r*  r  r2  r7  r&  rG   r>   r=   r;   rI   rI      s    "$&57!$#$ $ 	$
 3$ $@ ; ; ,0#'( ! 
	 $)Z 6:#"2#" #" 
 	#"J D
%6 X\II+.I7DIPTI	IV

&
8$YX :C	?<	? 7	? 
<		? 9B	?? ? 7	?
 
<? 9B	?? ? 7	?
 
<?	$ :C 7 
<	 r=   rI   )FrD   
__future__r   loggingr   dataclassesr   	functoolsr   pathlibr   typingr   conda.base.constantsr   r	   r
   conda.base.contextr   conda.common.compatr   conda.common.ior   r   conda.common.urlr   r   r   conda.core.package_cache_datar   conda.core.subdir_datar   conda.models.channelr   conda.models.match_specr   conda.models.recordsr   
libmambapyr   r   libmambapy.solver.libsolvr   r   r   r   r   libmambapy.specsr   r   r   r    r!   mamba_utilsr#   collections.abcr$   r%   r&   conda.common.pathr'   conda.gateways.repodatar(   r)   r*   	getLoggerr@   rM   r,   rI   r>   r=   r;   <module>re     s   DL #  	 !     L L & & J K K : - ( - . 2   )(#+5&2 &
+,   $V Vr=   