
    si3_                    8   S 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  SS	KJr  SS
KJrJr  SSKJrJr  SSKJrJrJrJrJrJrJrJrJrJ r   \(       a  SSK!J"r"J#r#  SSKJ$r$  SSKJ%r%  SSKJ&r&  \" \'5      r( " S S\)5      r* " S S\*S9r+ " S S\+5      r,      S#S jr-      S$S jr.S%S jr/          S&S jr0S'S jr1S(S jr2  S)       S*S jjr3  S+       S,S  jjr4S-S! jr5S.S" jr6\Rn                  " \+Rp                  5        g)/zDefines Channel and MultiChannel objects and other channel-related functions.

Object inheritance:

.. autoapi-inheritance-diagram:: Channel MultiChannel
   :top-classes: conda.models.channel.Channel
   :parts: 1
    )annotations)copy)	getLogger)TYPE_CHECKING)
IndexedSet   )DEFAULTS_CHANNEL_NAMEMAX_CHANNEL_PRIORITYUNKNOWN_CHANNEL)context)ensure_text_type
isiterable)is_pathwin_path_backout)
Url
has_schemeis_urljoin_urlpath_to_urlpercent_decodesplit_conda_url_easy_partssplit_platformsplit_scheme_auth_tokenurlparse)IterableIterator)Any)Context)PathTypec                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )ChannelType4   zb
This metaclass does basic caching and enables static constructor method usage with a
single arg.
c                  >^  [        U5      S:X  at  U(       dm  US   n[        U[        5      (       a  U$ U[        R                  ;   a  [        R                  U   $ [        R	                  U5      =n[        R                  U'   U$ SU;   a'  [        U 4S jUS    5       5      n[        US   U5      $ [        TT ]   " U0 UD6$ )N   r   channelsc              3  4   >#    U  H  nT" S0 UD6v   M     g 7f)N r'   ).0_kwargsclss     4lib/python3.13/site-packages/conda/models/channel.py	<genexpr>'ChannelType.__call__.<locals>.<genexpr>F   s     N;MS^7^;Ms   name)	len
isinstanceChannel_cache_
from_valuetupleMultiChannelsuper__call__)r*   argskwargsvaluecr%   	__class__s   `     r+   r7   ChannelType.__call__:   s    t9>&GE%))'//)u---4-?-?-FFGOOE*6!N6*;MNNHv997#T4V44    r'   )__name__
__module____qualname____firstlineno____doc__r7   __static_attributes____classcell__)r<   s   @r+   r!   r!   4   s    
5 5r>   r!   c                     \ rS rSrSr0 r\SS j5       r       S             S S jjr\	S!S j5       r
\	S"S j5       r\	S!S j5       r\S#S	 j5       r\S$S
 j5       r\S%S j5       r\ S&       S'S jj5       r\	S"S j5       r  S(     S)S jjrS*S+S jjr\	S!S j5       r\	S,S j5       r\	S"S j5       r\	S-S j5       rS"S jrS"S jrS.S jrS/S jrS0S jrS0S jrS1S jr\	S2S j5       rS1S jr Sr!g)3r1   L   z
Channel:
scheme <> auth <> location <> token <> channel <> subchannel <> platform <> package_filename

Package Spec:
channel <> subchannel <> namespace <> package_name

c                     0 [         l        g N)r1   r2   r'   r>   r+   _reset_stateChannel._reset_stateX   s	    r>   Nc                l    Xl         X l        X0l        X@l        U=(       d    SU l        X`l        Xpl        g )N schemeauthlocationtokenr.   platformpackage_filename)selfrO   rP   rQ   rR   r.   rS   rT   s           r+   __init__Channel.__init__\   s.     	 
JB	  0r>   c                    U R                   $ rI   rQ   rU   s    r+   channel_locationChannel.channel_locationn       }}r>   c                    U R                   $ rI   r.   rZ   s    r+   channel_nameChannel.channel_namer       yyr>   c                    U R                   $ rI   )rS   rZ   s    r+   subdirChannel.subdirv   r]   r>   c                    [        U 5      $ rI   )parse_conda_channel_urlurls    r+   from_urlChannel.from_urlz   s    &s++r>   c                    [        U 5      $ rI   )_get_channel_for_name)r`   s    r+   from_channel_nameChannel.from_channel_name~   s    $\22r>   c                   U S;   a  [        [        S9$ [        U 5      n [        U 5      (       a6  U R	                  S5      (       a  [        U 5      n [         R                  U 5      $ [        U 5      (       a  [         R                  [        U 5      5      $ [        R                  R                  U 5      (       a6  U R	                  S5      (       a  [        U 5      n [         R                  U 5      $ [        [        R                  U 5      u  pU[        R                  ;   a  [        U[        R                  U   U5      $ [         R!                  U 5      $ )a  Construct a new :class:`Channel` from a single value.

Args:
  value: Anyone of the following forms:

    `None`, or one of the special strings "<unknown>", "None:///<unknown>", or "None":
        represents the unknown channel, used for packages with unknown origin.

    A URL including a scheme like ``file://`` or ``https://``:
        represents a channel URL.

    A local directory path:
        represents a local channel; relative paths must start with ``./``.

    A package file (i.e. the path to a file ending in ``.conda`` or ``.tar.bz2``):
        represents a channel for a single package

    A known channel name:
        represents a known channel, e.g. from the users ``.condarc`` file or
        the global configuration.

Returns:
  A channel object.
)Nz	<unknown>zNone:///<unknown>Noner_   zfile:)r1   r   r   r   
startswithr   rj   r   r   r   plugin_managerhas_package_extensionr   known_subdirscustom_multichannelsr5   rn   )r:   	_strippedrS   s      r+   r3   Channel.from_value   s   4 DD00 'e(((/##E**U^^##K$677##99%@@(((/##E** #11F1F"NIG888#w;;IF  0077r>   c           	        U n[        U5      u  pEpgU(       a#  U(       a  [        UUUUUR                  S5      S9$ U(       a  UR                  (       aI  UR	                  UR                  5      (       a)  UR                  UR                  UR                  SS5      p(OG[        U5      n	[        [        U	R                  U	R                  S95      nU	R                  =(       d    Sn[        UUUUUR                  S5      S9$ [        UR                  UR                  UR                  UR                  U=(       a    UR                  S5      =(       d    UR                  S5      S9$ )N/)rO   rP   rQ   rR   r.   rM   r$   hostnameport)r   r1   striprQ   rr   replacer   strr   r|   r}   pathrO   rP   rR   )
channel_aliaschannel_urlr.   catest_urlrO   rP   rR   rQ   	url_partss
             r+   make_simple_channelChannel.make_simple_channel   s"    (?(L%$F!ZZ_  {{x222;;??!#h.>.>r{{BPQ.R$$X.	sI,>,>Y^^TU ~~+!ZZ_  yyWWhh-djjoG1B1B31G r>   c                  ^   T R                   $ ! [         a     Of = f[        R                  R	                  5        H7  u  pU H,  nT R
                  UR
                  :X  d  M  U=nT l         Us  s  $    M9     [        R                   Hf  nT R
                  (       d  M  [        T R
                  R                  S5      UR                  S5      5      (       d  MQ  T R
                  =nT l         Us  $    [        U 4S j[        R                  /[        R                  Q7 5       5      (       a  T R
                  =nT l         U$ T R                  (       a8  T R                   S[        T R                  T R
                  5       3=nT l         U$ [        T R                  T R
                  5      R                  S5      =nT l         U$ )Nrz   c              3  V   >#    U  H  nUR                   TR                   :H  v   M      g 7frI   rY   )r(   aliasrU   s     r+   r,   )Channel.canonical_name.<locals>.<genexpr>   s)      
 NNdmm+s   &)://)_Channel__canonical_nameAttributeErrorr   rv   itemsr.   custom_channelstokenized_startswithsplitanyr   migrated_channel_aliasesrO   r   rQ   lstrip)rU   	multinamer%   channelcn	that_names   `     r+   canonical_nameChannel.canonical_name   s   	((( 		 $+#?#?#E#E#GI#99,1::B.I $ $H !00Iyyy1		$iooc&:  .2YY6T*	 1  
 %%11
 
 
 *.2B&I ;;;;-s8DMM499#E"FGB& I)1$--)K)R)RSV)WWB&Is    
c                  ^ ^^ Tb  [        T5      (       d  [        ST S35      eT R                  [        :X  a  [	        [
        5      R                  UT5      $ T R                  /mU(       a.  T R                  (       a  TR                  ST R                  /5        TR                  T R                  5        [        T6 mSU U4S jjnU4S jU" 5        5       nU(       a@  T R                  (       a/  U Vs/ s H!  nT R                   ST R                   SU 3PM#     sn$ U Vs/ s H  nT R                   SU 3PM     sn$ s  snf s  snf )	a=  Generate URLs for this channel across specified platforms.

Args:
    with_credentials: If True, include authentication credentials (token, auth) in URLs.
    subdirs: Specific platform subdirs to generate URLs for. If None, uses the channel's
            platform (if defined) or falls back to `context.subdirs`. If this is explicitly
            provided, overrides any platform defined in the channel.

Examples:
    >>> channel = Channel("conda-forge")
    >>> channel.urls()  # Uses context.subdirs
    ['https://conda.anaconda.org/conda-forge/linux-64',
    'https://conda.anaconda.org/conda-forge/noarch']

    >>> channel = Channel("conda-forge/linux-aarch64")
    >>> channel.urls()  # Uses channel's platform
    ['https://conda.anaconda.org/conda-forge/linux-aarch64',
    'https://conda.anaconda.org/conda-forge/noarch']

    >>> channel.urls(subdirs=("osx-64", "noarch"))
    ['https://conda.anaconda.org/conda-forge/osx-64',
    'https://conda.anaconda.org/conda-forge/noarch']

Returns:
    list[str]: List of URLs for accessing this channel's specified subdirectories.
z/`subdirs` must be an iterable of strings. Got: .tc               3     >#    Tb  T S h  vN   g T R                   (       a$  T R                   v   T R                   S:w  a  Sv   g g [        R                   S h  vN   g  NS N7f)Nnoarch)rS   r   subdirs)rU   r   s   r+   
_platforms Channel.urls.<locals>._platforms/  sU     """"mm#==H,"N - #??** # +s"   	A$A AA$A"A$"A$c              3  <   >#    U  H  n[        TU5      v   M     g 7frI   )r   )r(   pbases     r+   r,   Channel.urls.<locals>.<genexpr>:  s     9Lq$""Ls   r   @)returnzIterator[str])r   
ValueErrorr   r   r1   r	   urlsrQ   rR   extendappendr.   r   rP   rO   )rU   with_credentialsr   r   basesbr   s   ` `   @r+   r   Channel.urls  s   > z'':':A'!L  /101667GQQ

KKdjj)*DII		+ 		+ :JL9		@EF1t{{m3tyyk1#6FF49:Eqt{{m3qc*E:: G:s   4(E#Ec                   U R                   [        :X  a  g U R                  /nU(       a.  U R                  (       a  UR	                  SU R                  /5        UR                  U R                  5        U R                  (       aH  UR                  U R                  5        U R                  (       a  UR                  U R                  5        O2[        S [        R                   5       S5      nUR                  U5        [        U6 nU(       a/  U R                  (       a  U R                   SU R                   SU 3$ U R                   SU 3$ )Nr   c              3  4   #    U  H  oS :w  d  M
  Uv   M     g7f)r   Nr'   )r(   ss     r+   r,   Channel.url.<locals>.<genexpr>N  s     =OqH}Os   		r   r   r   )r   r   rQ   rR   r   r   r.   rS   rT   nextr   r   r   rP   rO   )rU   r   r   first_non_noarchs       r+   ri   Channel.url@  s    /1

KKdjj)*DII==KK&$$D112#=GOO=x  KK()		kk]#dii[$88kk]#dV,,r>   c                    U R                   [        :X  a  g U R                   S[        U R                  U R
                  5       3$ )Nr   )r   r   rO   r   rQ   r.   rZ   s    r+   base_urlChannel.base_urlY  s8    /1++c(4==$))"D!EFFr>   c                    U R                   4$ rI   r   rZ   s    r+   	base_urlsChannel.base_urls_  s    r>   c                    U R                  S5      nU R                  (       a  U(       a  UR                  SS5      S   nU$ )NTrz   r$   r   )ri   rT   rsplit)rU   ri   s     r+   
subdir_urlChannel.subdir_urlc  s4    hhtn  S**S!$Q'C
r>   c                    U 4$ rI   r'   rZ   s    r+   r%   Channel.channelsj  s	    wr>   c                    U R                   =(       d    U R                  nU R                  (       a  [        XR                  5      $ U$ rI   )r   r.   rd   r   )rU   r   s     r+   __str__Channel.__str__n  s/    }})		;;D++..Kr>   c                    SU R                   (       a"  [        U R                  U R                   5      -  $ U R                  -  $ )NzChannel("%s"))rd   r   r.   rZ   s    r+   __repr__Channel.__repr__u  s8    04HTYY,
 	
AE
 	
r>   c                   [        U[        5      (       aY  U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $  [        U5      nU R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ ! [
         a   n[        R                  SU5         S nAgS nAff = f)Nz%rF)r0   r1   rQ   r.   rS   	Exceptionlogdebug)rU   other_otheres       r+   __eq__Channel.__eq__z  s    eW%%/ 4II+4MMU^^3	 MMV__4 9		V[[098
  		$"s   0A#C 
C>C99C>c                Z    [        U R                  U R                  U R                  45      $ rI   )hashrQ   r.   rS   rZ   s    r+   __hash__Channel.__hash__  s     T]]DIIt}}=>>r>   c                D    [        U R                  U R                  45      $ rI   )r   rQ   r.   rZ   s    r+   __nonzero__Channel.__nonzero__  s    DMM499-..r>   c                "    U R                  5       $ rI   )r   rZ   s    r+   __bool__Channel.__bool__  s    !!r>   c                    U R                   $ rI   )__dict__rZ   s    r+   __json__Channel.__json__  s    }}r>   c                2    U R                   U R                  4$ rI   )r   r   rZ   s    r+   url_channel_wtfChannel.url_channel_wtf  s    }}d1111r>   c                    U R                   U R                  U R                  U R                  U R                  U R
                  U R                  S.$ )NrN   rN   rZ   s    r+   dumpChannel.dump  s?    kkIIZZII $ 5 5
 	
r>   )__canonical_namerP   rQ   r.   rT   rS   rO   rR   r   rq   )NNNNNNN)rO   
str | NonerP   r   rQ   r   rR   r   r.   r   rS   r   rT   r   )r   r   r   r   ri   r   r   r1   r`   r   r   r1   )r:   r   r   r1   rI   )r   r1   r   r   r.   r   r   r1   FNr   boolr   Iterable[str] | Noner   z	list[str]F)r   r   r   r   r   ztuple[str | None, ...]r   tuple[Channel, ...])r   r   r   r   )r   int)r   r   r   zdict[str, Any])r   ztuple[str | None, str])"r?   r@   rA   rB   rC   r2   staticmethodrJ   rV   propertyr[   r`   rd   rj   rn   r3   r   r   r   ri   r   r   r   r%   r   r   r   r   r   r   r   r   r   rD   r'   r>   r+   r1   r1   L   s    G 
 "# #'+11 1 	1
 1 1 1 %1$       , , 3 3 /8 /8b EI""-0"8B"	" "H & &T "'(,<;<; &<; 
	<;|-2 G G
        

&?/" 2 2	
r>   r1   )	metaclassc                      \ rS rSr S     SS jjr\SS j5       r  S     SS jjr\SS j5       r\SS j5       r	SSS jjr
\SS	 j5       rSS
 jrSrg)r5   i  Nc                   ^ Xl         S U l        T(       a  U4S jU 5       n[        U5      U l        S U l        S U l        S U l        TU l        S U l        g )Nc              3  b   >#    U  H$  n[        S0 0 UR                  5       ES T0ED6v   M&     g7f)rS   Nr'   )r1   r   )r(   r   rS   s     r+   r,   (MultiChannel.__init__.<locals>.<genexpr>  s3      'G CBW\\^BZBC's   ,/)	r.   rQ   r4   	_channelsrO   rP   rR   rS   rT   )rU   r.   r%   rS   s      `r+   rV   MultiChannel.__init__  sV     	 'H x	
  $r>   c                    U R                   $ rI   r_   rZ   s    r+   r   MultiChannel.canonical_name  rb   r>   c                ~    U R                    VVs/ s H  nUR                  X5        H  nUPM     M      snn$ s  snnf rI   )r%   r   )rU   r   r   r   ri   s        r+   r   MultiChannel.urls  sD      ==
(||$4> > (
 	
 
s   %9c                    g rI   r'   rZ   s    r+   r   MultiChannel.base_url  s    r>   c                :    [        S U R                   5       5      $ )Nc              3  8   #    U  H  oR                   v   M     g 7frI   r   r(   r   s     r+   r,   )MultiChannel.base_urls.<locals>.<genexpr>  s     C]'%%]   r4   r%   rZ   s    r+   r   MultiChannel.base_urls  s    CT]]CCCr>   c                    g rI   r'   )rU   r   s     r+   ri   MultiChannel.url  s    r>   c                    U R                   $ rI   )r  rZ   s    r+   r%   MultiChannel.channels  s    ~~r>   c                T    U R                   [        S U R                   5       5      S.$ )Nc              3  @   #    U  H  oR                  5       v   M     g 7frI   )r   r  s     r+   r,   $MultiChannel.dump.<locals>.<genexpr>  s     JMllnnMs   )r.   r%   )r.   r4   r%   rZ   s    r+   r   MultiChannel.dump  s%    IIJDMMJJ
 	
r>   )r  rP   rQ   r.   rT   rS   rO   rR   rI   )r.   r   r%   zIterable[Channel]rS   r   r   r   r   r   r   r   )r   r   r   rq   r   r   )r?   r@   rA   rB   rV   r   r   r   r   r   ri   r%   r   rD   r'   r>   r+   r5   r5     s    
  $	%% $% 	%.  
 "'(,	
	
 &	
 
		
   D D  
r>   r5   c                8    [        S [        X5       5       5      $ )Nc              3  .   #    U  H  u  pX:H  v   M     g 7frI   r'   )r(   r   sws      r+   r,   'tokenized_startswith.<locals>.<genexpr>  s     L$K51qw$Ks   )allzip)test_iterablestartswith_iterables     r+   r   r     s     LC$KLLLr>   c                   [        U 5      [        U5      pU R                  UR                  :w  d  U R                  UR                  :w  a  gS n[        U" U 5      R	                  S5      U" U5      R	                  S5      5      $ )NFc                J    U R                   R                  S5      =(       d    S$ )Nrz   )r   r~   rh   s    r+   <lambda>0tokenized_conda_url_startswith.<locals>.<lambda>  s    s 3 :s :r>   rz   )r   r|   r}   r   r   )r   startswith_urlnorm_url_paths      r+   tokenized_conda_url_startswithr&    sv      (18N3Kn^444==N///:Mh%%c*M.,I,O,OPS,T r>   c           	     .  ^ SU4S jjm[        [        R                  U 5      u  pT" U5      nUb   [        U5      nXl        U(       a  X#l        U$ [        R                  n[        UR                  UR                  UR                  UR                  UUS9$ )Nc                   > U [         R                  ;   a  [         R                  U    $ U R                  SS5      S   nX:X  a  g T" U5      $ )Nrz   r$   r   )r   r   r   )r.   	test_name_get_channel_for_name_helpers     r+   r*  ;_get_channel_for_name.<locals>._get_channel_for_name_helper  sK    7*****400C+A.I /	::r>   )rO   rP   rQ   rR   r.   rS   )r.   r   r   zChannel | None)r   r   ru   r   r.   rS   r   r1   rO   rP   rQ   rR   )r`   rw   rS   r   r   r*  s        @r+   rm   rm     s    ; ))>)>MI*95G w- '""99[[((
 	
r>   c                T   U=(       a    UR                  S5      n[        [        XUS95      nU(       d/  [        [        XS95      R                  S5      S U =(       d    S S S 4$ [        [        R
                  R                  5       SS S9 H  u  pV[        U5      u  pgp[        U[        Xe5      5      (       d  M/  UR                  [        Xe5      SS5      R                  S5      n
[        XZ5      n[        U5      nUR                  UUR                  UR                  UR                   4s  $    [        R"                   H  nUR%                  UR                  5      (       d  M%  UR                  UR                  SS5      R                  S5      n[        R&                  nUR                  X^R                  UR                  UR                   4s  $    [        [        R(                  R                  5       SS	 S9 H  u  p\[        UR                  UR*                  5      n[-        UR/                  S5      UR/                  S5      5      (       d  MV  UR                  USS5      R                  S5      n
UR                  [        UR*                  U
5      U UR                  UR                   4s  $    [        R&                  nUR                  (       a  [-        UR/                  S5      UR                  R/                  S5      5      (       aY  UR                  UR                  SS5      R                  S5      =(       d    S nUR                  XPUR                  UR                   4$ Uc5  Ub  [1        S
5      eUR3                  SS5      u  peU(       d  SnSu  pxn	XeXxU	4$ S nUR                  S5      R/                  S5      nU(       a  US   S:X  a  SSR5                  USS  5      nn[        [        XUS95      R                  S5      UR                  S5      =(       d    S U =(       d    S S S 4$ )Nrz   )r|   r}   r   r{   Tc                    [        U S   5      $ Nr   r/   xs    r+   r"  -_read_channel_configuration.<locals>.<lambda>0  s    cRSTURVir>   )reversekeyrM   r$   c                    [        U S   5      $ r.  r/  r0  s    r+   r"  r2  I  s    S1Yr>   z1Port should not be set if host is not set either.)fileNNr   conda)rstripr   r   sortedr   migrated_custom_channelsr   r   r&  r   r   r~   rm   rQ   rO   rP   rR   r   rr   r   r   r.   r   r   r   r   join)rO   hostr}   r   r   r.   rQ   _scheme_auth_tokensubnamer`   r   migrated_aliasr   that_test_urlbump
path_partss                     r+   _read_channel_configurationrE    s   
 $DKK$D3d;<H T-.55c:Nd
 	
 !((..0$DW ,C8+L(5)(HX4LMM&&x'?QGMMcRG#D2L+L9G   $ "::~6677##N$;$;RCII#ND&&B;;ii"((BB	 ;  %%';N !!1!17<<@s 3]5H5H5MNN&&}b!<BB3GG  w/  
		B	{{+sR[[..s3  R399#>F${{D"''288;; |PQQ!a0H!3wv55
 DC&&s+Jjmw.chhz!"~6dCt45<<SA

34$ r>   c           	     0   [        [        R                  U 5      u	  nnnnnnnnn	[        XXx5      u  n
nnnnU
c  Uc  [	        S5      eU(       a  [        U5      nU(       a  [        U5      n[        U=(       d    SU=(       d    UU
U=(       d    UUUU5      $ )Nz5channel_location and channel_name cannot both be Nonehttps)r   r   ru   rE  r   r   r1   )ri   rO   rP   rR   rS   rT   r<  r}   r   queryr[   r`   configured_schemeconfigured_authconfigured_tokens                  r+   rg   rg   y  s     	#7#8#8#>
 	$F$=
 L$8PQQ %l3)*:;$W!! r>   c                 $    [         R                  4$ rI   )r   local_build_rootr'   r>   r+   get_conda_build_local_urlrN    s    $$&&r>   Nc                    S U  5       n 0 n[        U 5       HE  u  pEUR                  X5       H+  nXc;   a  M
  UR                  [        U[        S-
  5      4X6'   M-     MG     U$ )aP  Make a dictionary of channel priorities.

Maps channel names to priorities, e.g.:

.. code-block:: pycon

   >>> prioritize_channels(["conda-canary", "defaults", "conda-forge"])
   {
       'https://conda.anaconda.org/conda-canary/osx-arm64': ('conda-canary', 0),
       'https://conda.anaconda.org/conda-canary/noarch': ('conda-canary', 0),
       'https://repo.anaconda.com/pkgs/main/osx-arm64': ('defaults', 1),
       'https://repo.anaconda.com/pkgs/main/noarch': ('defaults', 1),
       'https://repo.anaconda.com/pkgs/r/osx-arm64': ('defaults', 2),
       'https://repo.anaconda.com/pkgs/r/noarch': ('defaults', 2),
       'https://conda.anaconda.org/conda-forge/osx-arm64': ('conda-forge', 3),
       'https://conda.anaconda.org/conda-forge/noarch': ('conda-forge', 3),
   }

Compare with ``conda.resolve.Resolve._make_channel_priorities``.
c              3  ^   #    U  H#  n[        U5      R                    H  o"v   M     M%     g 7frI   )r1   r%   )r(   r.   r   s      r+   r,   &prioritize_channels.<locals>.<genexpr>  s#     SHDGDM<R<R<RHs   +-r$   )	enumerater   r   minr
   )r%   r   r   resultpriority_counterr   ri   s          r+   prioritize_channelsrV    sm    2 THSHF%.x%8!<< 0:C}&&$&:Q&>?FK ; &9 Mr>   c                    [        5       nU  H.  n[        U5      nUR                  UR                  X!5      5        M0     U$ rI   )r   r1   updater   )r%   r   r   rT  chnr   s         r+   all_channel_urlsrZ    s;    
 \F#,gll#3=>  Mr>   c                    [         R                  (       + =(       d(    [        U 5      (       + =(       d    U R                  S5      $ )Nzfile:/)r   offliner   rr   rh   s    r+   offline_keepr]    s(    MfSk/MS^^H5MMr>   c                :    [        S U R                   5       5      $ )z*Return current channels as Channel objectsc              3  8   #    U  H  n[        U5      v   M     g 7frI   )r1   )r(   rY  s     r+   r,   #get_channel_objs.<locals>.<genexpr>  s     6#r  r  )ctxs    r+   get_channel_objsrb    s    6666r>   )r  Iterable[Any]r  rc  r   r   )r   Iterable[str]r$  rd  r   r   r   )
rO   r   r<  r   r}   r   r   r   r   zAtuple[str | None, str | None, str | None, str | None, str | None]r   )r   ztuple[PathType])TN)r%   zIterable[Channel | str]r   r   r   r   r   zdict[str, tuple[str, int]])NT)r%   zIterable[str | Channel]r   r   r   r   r   r   )ri   r   r   r   )ra  r   r   r   )9rC   
__future__r   r   loggingr   typingr   boltons.setutilsr   base.constantsr	   r
   r   base.contextr   common.compatr   r   common.pathr   r   
common.urlr   r   r   r   r   r   r   r   r   r   collections.abcr   r   r   r   r   r?   r   typer!   r1   r5   r   r&  rm   rE  rg   rN  rV  rZ  r]  rb  register_reset_callabackrJ   r'   r>   r+   <module>rq     s   #     ' 
 # 8 3   2&& 5$ 50Z
 Z
z
:
7 :
zM M7DM	M-:	
BZZ(Z0:ZBLZFZz)Z' "$(#%## "#  	#P %)!	%	!	 	 		N7
     !5!5 6r>   