
    ip                    f   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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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   SSK!J"r"  SSK#J$r$  \RJ                  " \&5      r'\(       a$  SSK(J)r)J*r*  SSKJ+r+  SSK,J-r-  SSK.J/r/J0r0  SSK1J2r2J3r3  Sr4Sr5\6" \5      r7S(S)S jjr8S*S jr9S+S jr:\Rv                  S,S j5       r<S-S jr= " S S\R|                  5      r? " S S\?5      r@S.S jrA " S  S!\?5      rBS/S" jrCS0S# jrDS1S$ jrES2S% jrFS3S& jrGS4S' jrHg)5zZ
Models for sharded repodata, and to make monolithic repodata look like sharded
repodata.
    )annotationsN)defaultdict)TYPE_CHECKING)urljoinurlparse
urlunparseuses_relative)context)
SubdirData)get_session)_add_http_value_to_dictconda_http_errors)Channel)specs   )shards_cache)IterableKeysView)RepodataCache)Response)RepodataDictShardsIndexDict)PackageRecordDict	ShardDict
   i   c                   [        U 5      nUR                  [        ;   a  [        [        X5      S5      nU$ [        U5      nUR                  (       dj  UR                  (       aY  [	        UR                  SS95      n[        [        XQ5      S5      n[	        [        U5      R                  UR                  S95      nO[        [        X5      S5      nUR                  S5      (       d  US-  nU$ )a  
Join base_url with relative_url, ensuring proper handling of all URL schemes.

Python's urllib.parse.urljoin only handles schemes registered in
``urllib.parse.uses_relative``. For unregistered schemes like ``s3://``,
it returns just ``"."`` instead of the resolved URL. This function falls
back to a scheme-swap workaround for those cases.

The result always ends with "/" to enable proper string concatenation with filenames.

See: https://github.com/conda/conda-libmamba-solver/issues/866
.https)scheme/)r   r   _URLJOIN_SAFE_SCHEMESr   r   _replaceendswith)base_urlrelative_urlparsedresultrelative_parsedhttps_base_urljoined_httpss          V/home/wildlama/miniconda3/lib/python3.13/site-packages/conda_libmamba_solver/shards.py_safe_urljoin_with_slashr,   8   s     hF }}--8#>
 |,O!!fmm#FOO7O$CDw~DcJH\2;;6==;QR8#> ??3#M    c                 P    [         R                  b  [         R                  $ [        $ )a  
If context.repodata_threads is not set, find the size of the connection pool
in a typical https:// session. This should significantly reduce dropped
connections. We match requests' default 10.

Is this shared between all sessions? Or do we get a different pool for a
different get_session(url)?

Other adapters (file://, s3://) used in conda would have different
concurrency behavior;  we are not prepared to have separate threadpools per
connection type.
)r
   repodata_threadsSHARDS_CONNECTIONS_DEFAULT r-   r+   _shards_connectionsr2   d   s"     +'''%%r-   c                    S HO  nU R                  U5      =n(       d  M  [        U[        5      (       a  M4  [        U5      R	                  5       X'   MQ     U $ )zA
Convert bytes checksums to hex; leave unchanged if already str.
)sha256md5)get
isinstancestrbyteshex)record	hash_type
hash_values      r+   ensure_hex_hashr>   v   sL     %	I..:.j#..$)*$5$9$9$;! % Mr-   c                n    [         R                  R                  U 5      n[        UR                  5      nU$ )z3
Given a dependency spec, return the package name.
)r   	MatchSpecparser8   name)specparsed_specrB   s      r+   spec_to_package_namerE      s-     //''-K{ DKr-   c              #    #    [        5       n/ U S   R                  5       QU S   R                  5       Q7 HQ  n[        U5        / UR                  SS5      Q7 H*  nX1;   a  M
  UR	                  U5        [        U5      nUv   M,     MS     g7f)z_
Return all dependency names mentioned in a shard, not including the shard's
own package name.
packagespackages.condadependsr1   N)setvaluesr>   r6   addrE   )shardunique_specspackagerC   rB   s        r+   shard_mentioned_packagesrP      s     
 5LSU:&--/S%8H2I2P2P2RS 2gkk)R02D#T"'-DJ 3 Ts   B
Bc                  P   \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   \\R                  SS
 j5       5       r	\SS j5       r
SS jr\R                  SS j5       r\R                  SS j5       rSS jrSS jr\R                  SS j5       r\R                  SS j5       rSS jrSrg)	ShardBase   z
Abstract base class for shard-like objects.

Defines the common interface for both sharded repodata (Shards)
and traditional repodata presented as shards (ShardLike).
r8   urlr   repodata_no_packageszdict[str, ShardDict | None]visited	_base_urlc                    g)zDReturn the names of all packages available in this shard collection.Nr1   selfs    r+   package_namesShardBase.package_names        	r-   c                B    [        U R                  U R                  5      $ )z
Return self.url joined with base_url from repodata, or self.url if no
base_url was present. Packages are found here.

Note base_url can be a relative or an absolute url.
Uses _safe_urljoin_with_slash to handle non-HTTP schemes (s3://, etc.).
)r,   rT   rW   rY   s    r+   r$   ShardBase.base_url   s     ($..AAr-   c                    XR                   ;   $ )z9Check if a package is available in this shard collection.)r[   rZ   rO   s     r+   __contains__ShardBase.__contains__   s    ,,,,r-   c                    g)z
Return shard URL for a given package. For monolithic repodata, should
not be fetched but is a unique identifier.

Raise KeyError if package is not in the index.
Nr1   ra   s     r+   	shard_urlShardBase.shard_url   s     	r-   c                    g)8
Return True if the given package's shard is in memory.
Nr1   ra   s     r+   shard_loadedShardBase.shard_loaded       
 	r-   c                    g)zF
Return a shard that is already loaded in memory and mark as visited.
Nr1   ra   s     r+   visit_packageShardBase.visit_package   r]   r-   c                     X R                   U'   g)z+
Store new shard data in the visited dict.
NrV   rZ   rO   rM   s      r+   visit_shardShardBase.visit_shard   s     !&Wr-   c                    g)z2
Fetch an individual shard for the given package.
Nr1   ra   s     r+   fetch_shardShardBase.fetch_shard   rk   r-   c                    g)z"
Fetch multiple shards in one go.
Nr1   )rZ   rG   s     r+   fetch_shardsShardBase.fetch_shards   rk   r-   c                    0 U R                   E0 0 S.EnU R                  R                  5        H(  u  p#Uc  M
  S H  nX   R                  X4   5        M     M*     U$ )z:
Return monolithic repodata including all visited shards.
rG   rH   )rU   rV   itemsupdate)rZ   repodata_rM   package_groups        r+   build_repodataShardBase.build_repodata   sk    "
''"
 "

 **,HA}!?'..u/CD "@ -
 r-   r1   NreturnzKeysView[str]r   r8   rO   r8   r   boolrO   r8   r   r8   rO   r8   r   r   )rO   r8   rM   r   rG   Iterable[str]r   zdict[str, ShardDict])r   r   )__name__
__module____qualname____firstlineno____doc____annotations__propertyabcabstractmethodr[   r$   rb   re   ri   rm   rr   ru   rx   r   __static_attributes__r1   r-   r+   rR   rR      s     
H&&((N   B B- 	  	 & 	  	 r-   rR   c                     ^  \ rS rSrSrSSS jjrU 4S jr\SS j5       rSS jr	SS jr
SS jrSS	 jrSS
 jrSrU =r$ )	ShardLike   z:
Present a "classic" repodata.json as per-package shards.
c                   0 UE0 0 S.EU l         UR                  S0 5      UR                  S0 5      S.nX l        [        S 5      nUR	                  5        H-  u  pVUR	                  5        H  u  pxUS   n	XU	   U   U'   M     M/     [        U5      U l        0 U l         U R                   S   S   n
[        U
[        5      (       d+  [        R                  S[        U
5       35        [        5       eXl        g
! [         a
    S	U l         g
f = f)z6
url: must be unique for all ShardLike used together.
r{   rG   rH   c                     0 0 S.$ )Nr{   r1   r1   r-   r+   <lambda>$ShardLike.__init__.<locals>.<lambda>  s	    "%Kr-   rB   infor$   z0repodata["info"]["base_url"] was not a str, got  N)rU   r6   rT   r   r|   dictshardsrV   r7   r8   logwarningtype	TypeErrorrW   KeyError)rZ   r~   rT   all_packagesr   
group_namegrouprO   r;   rB   r$   s              r+   __init__ShardLike.__init__   s   3
3
 3
! !Z4&ll+;R@
 KL!-!3!3!5J#(;;=f~4:tZ(1 $1 "6 -1L 57	 008DHh,,NtT\~N^_`k!%N 	 DN	 s   AC8 8DDc                f   > [         TU ]  5       R                  SS9u  pU SU R                   SU 3$ )Nr   )maxsplit )super__repr__splitrT   )rZ   leftright	__class__s      r+   r   ShardLike.__repr__&  s;    g&(...:q
!E7++r-   c                6    U R                   R                  5       $ N)r   keysrY   s    r+   r[   ShardLike.package_names*  s    {{!!r-   c                B    U R                   U     U R                   SU 3$ )W
Return shard URL for a given package.

Raise KeyError if package is not in the index.
#)r   rT   ra   s     r+   re   ShardLike.shard_url.  s%     	G((1WI&&r-   c                    XR                   ;   $ rh   )r   ra   s     r+   ri   ShardLike.shard_loaded7  s     ++%%r-   c                2    U R                  U5      nUc   eU$ z?
Return a shard that is already in memory and mark as visited.
ru   rq   s      r+   rm   ShardLike.visit_package=  s%       )   r-   c                @    U R                   U   nX R                  U'   U$ )z
"Fetch" an individual shard.

Update self.visited with all not-None packages.

Raise KeyError if package is not in the index.
)r   rV   rq   s      r+   ru   ShardLike.fetch_shardE  s#     G$ %Wr-   c                P    U Vs0 s H  o"U R                  U5      _M     sn$ s  snf )zS
Fetch multiple shards in one go.

Update self.visited with all not-None packages.
r   )rZ   rG   rO   s      r+   rx   ShardLike.fetch_shardsQ  s,     CKK(w))'22(KKKs   #)rW   rU   r   rT   rV   r   )r~   r   rT   r8   r   r   r   r   r   )r   r   r   r   r   r   r   r   r[   re   ri   rm   ru   rx   r   __classcell__)r   s   @r+   r   r      sG    $ L, " "'&
L Lr-   r   c                \    U(       a  UR                  S5      (       d  US-  n[        X5      $ )z
Return shards_base_url joined with base_url and url.
Note shards_base_url can be a relative or an absolute url.
Uses _safe_urljoin_with_slash to handle non-HTTP schemes (s3://, etc.).
r    )r#   r,   )rT   shards_base_urls     r+   _shards_base_urlr   Z  s,     77<<3#C99r-   c                      \ rS rSr% SrS\S'   S\S'    S     SS jjr\S	 5       r\S
 5       r	\SS j5       r
SS jrSS jrSS jrSS jrSS jrS rSrg)Shardsie  zG
Handle repodata_shards.msgpack.zst and individual per-package shards.
r8   r   shards_cache.ShardCache | Noner   Nc                <   Xl         X l        X0l        US   S   U l        [	        U R                  U R                   S   R                  SS5      5      U l        [        U R                  5      R                  n[        U5      U l
        US   0 0 SS.U l        0 U l        g)z
Args:
    shards_index: raw parsed msgpack dict. Don't change it or base_url,
    shards_base_url will be wrong.
    url: URL of repodata_shards.msgpack.zst
r   r$   r   r      )r   rG   rH   repodata_versionN)shards_indexrT   r   rW   r   r6   r   r   r$   r   sessionrU   rV   )rZ   r   rT   cachechannel_base_urls        r+   r   Shards.__init__m  s     )!
 &f-j9 !1HHd''/334ErJ!

 #4#7#78AA"#34 !(  !	%
! 57r-   c                6    U R                   R                  5       $ r   )packages_indexr   rY   s    r+   r[   Shards.package_names  s    ""''))r-   c                     U R                   S   $ )Nr   )r   rY   s    r+   r   Shards.packages_index  s      **r-   c                    U R                   $ )zi
Return self.url joined with shards_base_url.
Note shards_base_url can be a relative or an absolute url.
)r   rY   s    r+   r   Shards.shards_base_url  s     $$$r-   c                t    [        U R                  U   5      R                  5        S3nU R                   U 3$ )r   z.msgpack.zst)r9   r   r:   r   )rZ   rO   
shard_names      r+   re   Shards.shard_url  s@     d11':;??AB,O
&&'
|44r-   c                    XR                   ;   $ r   rp   ra   s     r+   ri   Shards.shard_loaded  s     ,,&&r-   c                $    U R                   U   nU$ r   rp   rq   s      r+   rm   Shards.visit_package  s     W%r-   c                ,    U R                  U/5      U   $ )z
Fetch an individual shard for the given package.

Default implementation calls fetch_shards() with a single package.
Subclasses may override for more efficient single-fetch operations.

Raise KeyError if package is not in the index.
)rx   ra   s     r+   ru   Shards.fetch_shard  s       '+G44r-   c                   0 nS n[        [        U5      5      n0 nU H8  nXPR                  ;   a  U R                  U   X%'   M%  XTU R                  U5      '   M:     [        R
                  R                  [        5       S9 nUR                  5        VVs0 s H*  u  puXR;  d  M  UR                  X0R                  Xu5      Xu4_M,     nnn[        R
                  R                  U5       H3  n	[        R                  SX   5        X   u  puU R                  XXR5        M5     SSS5        U R                  R                  U5        U$ s  snnf ! , (       d  f       N1= f)z
Return mapping of *package names* to Shard for given packages.

If a shard is already in self.visited, it is not fetched again.
c                    [         R                  [         R                  4nU R                  XS9nUR	                  5         UR
                  n[        R                  " XUS9$ )N)timeout)rT   rO   compressed_shard)r
   remote_connect_timeout_secsremote_read_timeout_secsr6   raise_for_statuscontentr   AnnotatedRawShard)srT   package_to_fetchr   responsedatas         r+   fetch"Shards.fetch_shards.<locals>.fetch  s\    3300G uuSu2H%%'##D11D r-   max_workersz. %sN)sortedlistrV   re   
concurrentfuturesThreadPoolExecutorr2   r|   submitr   as_completedr   debug_process_fetch_resultr}   )
rZ   rG   resultsr   urls_packagesrO   executorrT   r   futures
             r+   rx   Shards.fetch_shards  s:    	 $x.)G,,&#'<<#8 9@dnnW56	   22?R?T2UYa %2$7$7$9$9LC) S||SBSNR$9  
 %,,99'B		&'/2&**6I C V 	G$ VUs%   ?EE""EAEE
Ec                Z   U R                   c  [        S5      e[        X#5         UR                  5       nSSS5        [        R
                  " [        R                  " WR                  [        S95      XER                  '   U R                   R                  U5        g! , (       d  f       Nm= f)z!
Process a single fetched shard.
Nzself.shards_cache is Nonemax_output_size)r   
ValueErrorr   r'   msgpackloads	zstandard
decompressr   ZSTD_MAX_SHARD_SIZErO   insert)rZ   r  rT   rO   r  fetch_results         r+   r  Shards._process_fetch_result  s    
 $899s,!==?L - )0  --?R)
$$%
 	  . -,s   B
B*)rW   r   rU   r   r   r   rT   rV   r   )r   r   rT   r8   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r[   r   r   re   ri   rm   ru   rx   r  r   r1   r-   r+   r   r   e  s     00 `d$7+$725$7>\$7L * * + + % %5'	5*X/r-   r   c                   [         R                  (       ab  UR                  R                  5       (       a  UR                  R	                  5       $ [
        R                  R                  R                  U SSS9e[        U 5      nUR                  n0 nUR                  nUR                  nU(       a  [        U5      US'   U(       a  [        U5      US'   Sn[        X5         [         R                  [         R                   4nUR#                  XUR$                  US9n	U	R'                  5         U	R(                  n
SSS5        W	R*                  S:X  a5  UR-                  S	5         UR                  R	                  5       sSSS5        $ [
        R                  R                  R.                  U 0nS
[
        R                  R                  R0                  4S[
        R                  R                  R2                  4S[
        R                  R                  R4                  44 H  u  p[7        XX5        M     UR9                  U5        W
$ ! , (       d  f       GN= f! , (       d  f       N= f)z
Fetch shards index with cache.

Update cache state.

Return shards data, either newly fetched or from cache.

In offline mode, returns cached data even if expired. If no cache exists
in offline mode, raises RepodataIsEmpty to signal unavailability.
i  N)status_coder   zIf-None-MatchzIf-Modified-Sincezrepodata_shards.msgpack.zst)headersproxiesr   i0  r+EtagzLast-ModifiedzCache-Control)r
   offlinecache_path_shardsexists
read_bytescondagatewaysr~   RepodataIsEmptyr   stateetagmodr8   r   r   r   r6   r  r   r   r  lockURL_KEYETAG_KEYLAST_MODIFIED_KEYCACHE_CONTROL_KEYr   r}   )rT   r   r   r   r  r!  last_modifiedfilenamer   r   response_bytessaved_fieldsheaderkeys                 r+   _repodata_shardsr.    s    ""))++**5577 ..))99#3Y]9^^#GKKEG::DIIM#&t9 '*='9#$,H	3	)//,,
 %[['//7 ) 
 	!!#!)) 
* s" ZZ**557  NN++33S9L	((112NN##55	
 
%..11CCD 	 ,D 
LL K 
*	)( s    AI!I
I
I$c                r    [        U [        5      =(       a!    SU s=:*  =(       a    S:  Os  =(       a    U S:g  $ )zO
Determine whether the `HTTPError` is an HTTP 400 error code (except for 416).
i  i  i  )r7   int)r  s    r+   _is_http_error_most_400_codesr1  O  s.     k3'[C;,D,D,D[X[I[[r-   c                   U R                   nUR                  n UR                  S5       n[        R                  " UR                  5       5      nUR                  R                  U5        SSS5        UR                  nUR                  S5      (       a  SnU R                   S3nUR                  R                  5       (       d  SUl        SUl        OIUR!                  5       (       d4  UR                  S5         UR                  R#                  5       nSSS5        Uc/   [%        X5      nUR'                  SS5        UR)                  U5        U(       a;  [B        R                  " [D        RF                  " U[H        S
95      n
[K        XU5      nU$ g! , (       d  f       GN.= f! [        [        R                  4 a     GNNf = f! , (       d  f       N= f! [*        R,                  R.                  R0                   aF  n	[3        U	R4                  5      (       a  UR'                  SS5        UR7                  5          Sn	A	NSn	A	f[*        R8                  R:                   a  n	[=        U	R>                  S5      (       ae  [=        U	R>                  R@                  S	5      (       a@  [3        U	R>                  R@                  R4                  5      (       a  UR'                  SS5        UR7                  5          Sn	A	GNSn	A	ff = f)a  
Check a SubdirData's URL for shards.

Return shards index bytes from cache or network.
Return None if not found; caller should fetch normal repodata.

TODO: If this function fails to retrieve the sharded repodata index file, it will
      mark it is as not supporting this feature in cache. This can problematic
      because sometimes server errors can happen which will lead it to wrongly
      assuming the channel doesn't support sharding. We need to rethink our
      logic for determining shard support.
r  Nr   z/repodata_shards.msgpack.zstr   TFr   r  r  )&
repo_fetch
repo_cacher#  jsonr  readr   r}   FileNotFoundErrorJSONDecodeErrorshould_check_formaturl_w_subdirr  r  r!  r"  staler  r.  set_has_formatsaver  r  r~   UnavailableInvalidChannelr1  r  refresh
exceptionsCondaHTTPErrorhasattr
_caused_byr   r  r  r  r  r   )sdr   r   r4  
state_filer   cache_stateshards_datashards_index_urlerrr   r   s               r+   fetch_shards_indexrJ  V  sT    MME!!J__T"j JJz01E##E*	 # ""K&&x00 oo..JK++2244!K KO!!##&(::EEG ' %./?L**8T: ,$ ,3MM$$[BUV-L LEBFMs #"
 t334   '& >>**DD % 1AA..x?""$$##22 	% CNNJ77 7 7GG5cnn6M6M6Y6YZZ..x?""$$	%s`   F$ A F+F$ :G!.G 
F!F$ !F$ $GG
G(K;><H??!K; BK66K;c           	     :   U  Vs/ s H  n[        U[        5      (       d  M  UPM     n n/ nU  H5  nU H,  nXT;   d  M
  UR                  XEUR                  U5      45        M.     M7     [        R                  S[        U5      5        U (       d  [        R                  S5        U$ U S   R                  nUR                  U VVs/ s H  Gt pxUPM	     snn5      n	U H1  u  pJnU	R                  U5      =n(       d  M   UR                  X5        M3     U$ s  snf s  snnf )z
Given a list of Shards objects and a list of package names, fetch all URLs
from a shared local cache, and update Shards with those per-package shards.
Return the remaining URLs that must be fetched from the network.
z%d shards to fetchzNo sharded channels found.r   )r7   r   appendre   r   r   lenr   retrieve_multipler6   rr   )shardedrG   	shardlikewantedrM   package_nameshared_shard_cacher   re   
from_cacherO   from_cache_shards               r+   batch_retrieve_from_cacherV    s    +2S'YZ	65Ry'GSF $L$uEOOL4QRS % 
 II"CK0		./ 00#55V\6]V\]ayV\6]^J &,!	)~~i888g8 &, M1 T" 7^s   DDD
c                    [        [        5      nU  H  u  p#nX   R                  U5        M     UR                  5        H  u  p%UR	                  U5        M     g)z
Given a list of (Shards, package name, shard URL) tuples, group by Shards and call fetch_shards
with a list of all URLs for that Shard.
N)r   r   rL  r|   rx   )rQ  shard_packagesrM   rO   r   rG   s         r+   batch_retrieve_from_networkrY    sS    
 /:$.?N#$$W- $ *//18$ 2r-   c                   U  Vs0 s H  oS_M     nn/ n[         R                  R                  [        5       S9 nU R	                  5        VVs0 s H/  u  pVUR                  [        [        [        U5      5      S5      U_M1     nnn0 n[         R                  R                  U5       H@  n	Xy   nU	R                  5       n
U
(       a  XU'   M$  UR                  U[        U5      45        MB     [        S UR                  5        5       5      (       a
   SSS5        gU H?  u  pVUUUR                  [        [        U5      5      R                  R                  5      '   MA     [         R                  R                  U5       H-  n	X   nU	R                  5       u  pU S3n[!        X5      n
XU'   M/     SSS5        UR	                  5        VVs0 s H  u  pUc  M
  X_M     snn$ s  snf s  snnf ! , (       d  f       NC= fs  snnf )at  
Args:
    url_to_channel: not modified, must already be expanded to subdirs.

Attempt to fetch the sharded index first and then fall back to retrieving a
traditional `repodata.json` file.

Returns:
    A dict mapping channel URLs to `Shard` or `ShardLike` objects. None if
    no channels have shards. This dict preserves the key order of the input
    `url_to_channel`.
Nr   c              3  (   #    U  H  oS L v   M
     g 7fr   r1   ).0values     r+   	<genexpr>!fetch_channels.<locals>.<genexpr>  s     @*?}*?s   z/repodata.json)r   r   r   r2   r|   r   rJ  r   r   r   r'   rL  allrK   r3  fetch_latest_parsedr   )url_to_channelrT   channel_datanon_sharded_channelsr  channel_urlr   r   futures_non_shardedr  foundrepodata_jsonrM   s                r+   fetch_channelsri    s    GU0UnsdnL0U 				.	.;N;P	.	QU]
 %3$8$8$:	
 %;  OO"Jw{/C$Dd %;	 	 
 ! ((55g>F!/KMMOE,1[)$++['+:N,OP ? @,*=*=*?@@@' 
R	Q0 3NK   
7;+? @ K K _ _` 3
 !((556IJF-5K%}}M
 !M0Cm1E(-% K; 
RP *6););)=S)=:3JCJ)=SS] 1V
 
R	QP Ts6   G"G-6G'BG-BG-	G>G>'G--
G;r   )r$   r8   r%   r8   r   r8   )r   r0  )r;   r   )rC   r8   r   r8   )rM   r   r   r   r   )r   r   r   r9   )r  z	str | intr   r   )rD  r   r   r   r   zShards | None)rO  zlist[Shards]rG   z	list[str])rQ  zlist[tuple[Shards, str, str]])rb  zdict[str, Channel]r   zdict[str, ShardBase] | None)Ir   
__future__r   r   concurrent.futuresr   	functoolsr5  loggingcollectionsr   typingr   urllib.parser   r   r   r	   conda.exceptionsr  conda.gateways.repodatar  r  conda.base.contextr
   conda.core.subdir_datar   !conda.gateways.connection.sessionr   r   r   conda.models.channelr   libmambapy.bindingsr   r   r   	getLoggerr   r   collections.abcr   r   r   requestsr   #conda_libmamba_solver.shards_typingr   r   shards_typingr   r   r0   r  	frozensetr!   r,   r2   r>   r   rE   rP   ABCrR   r   r   r   r.  r1  rJ  rV  rY  ri  r1   r-   r+   <module>r     s  
 # 
     #   E E     & - 9 ) % ! 25!Q;    "-0 $X&$   [ [|\L	 \L~:]/Y ]/@ET\TnB%"<Tr-   