
    `fXc                        d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ d
dlmZmZ d
dlmZ 	 ddlm Z! n# e"$ r dZ!Y nw xY w	 ddl#m$Z$m%Z% n# e"$ r  G d d          Z$e$Z%Y nw xY wdZ&dZ'd Z(d Z) G d de          Z G d d          Z* G d de+e*          Z, G d d          Z- e	j.        e-            G d de	          Z/ G d d e/e*          Z0 G d! d"          Z1 e
j.        e1            G d# d$          Z2 G d% d&e2          Z3 ej.        e3            G d' d(ee2          Z4dS ))z8Custom maps, sets, sequences, and other data structures.    N)OrderedDict)deque)CallableMappingMutableMapping
MutableSetSequence)heapifyheappopheappush)chaincount)Empty)AnyDictIterableList   )firstuniq)
match_case)reversed_dict)
LazyObjectLazySettingsc                       e Zd ZdS )r   N)__name__
__module____qualname__     J/var/www/html/env/lib/python3.11/site-packages/celery/utils/collections.pyr   r      s        r    r   )AttributeDictMixinAttributeDict	BufferMapChainMapConfigurationViewDictAttribute	Evictable
LimitedSetMessagebufferr   force_mappinglpmergezK<{name}({size}): maxlen={0.maxlen}, expires={0.expires}, minlen={0.minlen}>c                     t          | t          t          f          r| j        } t          | t                    st          |           n| S )z?Wrap object into supporting the mapping interface if necessary.)
isinstancer   r   _wrappedr   r'   )ms    r!   r+   r+   '   sD     !j,/00 J#-a#9#9@=q@r    c                 V    | j         fd|                                D              | S )zpIn place left precedent dictionary merge.

    Keeps values from `L`, if the value in `R` is :const:`None`.
    c                 2    g | ]\  }}| ||          S Nr   ).0kvsetitems      r!   
<listcomp>zlpmerge.<locals>.<listcomp>6   s(    :::tq!AMWWQ]]MMMr    )__setitem__items)LRr7   s     @r!   r,   r,   /   s3     mG::::qwwyy::::Hr    c                   L    e Zd ZdZd Z eed          serddZdS ddZdS dS )	r   z#Dict where insertion order matters.c                 ^    t          t          |                                                     S r3   )nextiterkeysselfs    r!   _LRUkeyzOrderedDict._LRUkey=   s"     D%%&&&r    move_to_endTc                 X    |st          d          |                     |          | |<   d S )Nzno last=True on PyPy)NotImplementedErrorpop)rC   keylasts      r!   rE   zOrderedDict.move_to_endF   s3     F ..DEEE HHSMMS			r    c                     | j         |         }|d         }|d         }||d<   ||d<   | j        }|r|d         }||d<   ||d<   |x|d<   |d<   d S |d         }||d<   ||d<   |x|d<   |d<   d S Nr   r   )_OrderedDict__map_OrderedDict__root)rC   rI   rJ   link	link_prev	link_nextroot
first_nodes           r!   rE   zOrderedDict.move_to_endQ   s    -c2 G	 G	(	!(	!. 	37D"DG"DG(,,DGd1ggg!%aJ"DG(DG.22DGjmmmr    N)T)	r   r   r   __doc__rD   hasattr_OrderedDict_dict_is_orderedrE   r   r    r!   r   r   :   s        --' ' ' 7<// 3 	3* * * * * *3 3 3 3 3 33 3r    r   c                   (    e Zd ZdZd ZdeddfdZdS )r"   z[Mixin for Mapping interface that adds attribute access.

    I.e., `d.key -> d[key]`).
    c                 |    	 | |         S # t           $ r' t          t          |           j        d|          w xY w)z`d.key -> d[key]`.z object has no attribute )KeyErrorAttributeErrortyper   )rC   r5   s     r!   __getattr__zAttributeDictMixin.__getattr__k   s_    	J7N 	J 	J 	J ::&HH1HHJ J J	Js   
 1;rI   returnNc                     || |<   dS )z"`d[key] = value -> d.key = value`.Nr   rC   rI   values      r!   __setattr__zAttributeDictMixin.__setattr__t   s    S			r    )r   r   r   rT   r]   strrb   r   r    r!   r"   r"   e   sR         
J J Js d      r    r"   c                       e Zd ZdZdS )r#   z$Dict subclass with attribute access.N)r   r   r   rT   r   r    r!   r#   r#   y   s        ....r    r#   c                   z    e Zd ZdZdZd Zd Zd ZddZddZ	d Z
d	 Zd
 Zd ZeZd Zd ZeZd ZeZeZeZeZdS )r'   z[Dict interface to attributes.

    `obj[k] -> obj.k`
    `obj[k] = val -> obj.k = val`
    Nc                 >    t                               | d|           d S )Nobj)objectrb   )rC   rg   s     r!   __init__zDictAttribute.__init__   s     4,,,,,r    c                 ,    t          | j        |          S r3   )getattrrg   rC   rI   s     r!   r]   zDictAttribute.__getattr__       tx%%%r    c                 .    t          | j        ||          S r3   setattrrg   r`   s      r!   rb   zDictAttribute.__setattr__   s    txe,,,r    c                 8    	 | |         S # t           $ r |cY S w xY wr3   rZ   rC   rI   defaults      r!   getzDictAttribute.get   5    	9 	 	 	NNN	   
 c                     || vr|| |<   d S d S r3   r   rs   s      r!   
setdefaultzDictAttribute.setdefault   s    d??DIII ?r    c                 h    	 t          | j        |          S # t          $ r t          |          w xY wr3   )rk   rg   r[   rZ   rl   s     r!   __getitem__zDictAttribute.__getitem__   s@    	 48S))) 	  	  	 3--	 s    1c                 2    t          | j        ||           d S r3   ro   r`   s      r!   r9   zDictAttribute.__setitem__   s    #u%%%%%r    c                 ,    t          | j        |          S r3   )rU   rg   rl   s     r!   __contains__zDictAttribute.__contains__   rm   r    c                 D    t          t          | j                            S r3   )r@   dirrg   rB   s    r!   _iterate_keyszDictAttribute._iterate_keys   s    CMM"""r    c                 *    |                                  S r3   r   rB   s    r!   __iter__zDictAttribute.__iter__   s    !!###r    c              #   j   K   |                                  D ]}|t          | j        |          fV  d S r3   r   rk   rg   rl   s     r!   _iterate_itemszDictAttribute._iterate_items   sK      %%'' 	. 	.Cwtx-------	. 	.r    c              #   f   K   |                                  D ]}t          | j        |          V  d S r3   r   rl   s     r!   _iterate_valueszDictAttribute._iterate_values   sF      %%'' 	) 	)C$(C((((((	) 	)r    r3   )r   r   r   rT   rg   ri   r]   rb   ru   ry   r{   r9   r~   r   iterkeysr   r   	iteritemsr   
itervaluesr:   rA   valuesr   r    r!   r'   r'   }   s         C- - -& & &- - -          
     & & && & &# # # H$ $ $. . . I) ) ) !JEDFFFr    r'   c                       e Zd ZdZdZdZdZdZdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd ZddZd Zd Zd Zd ZeZddZd Zd Zed             Zd ZeZd Zd Z e Z!d Z"e"Z#d Z$e$Z%d Z&e Z'e"Z(e$Z)dS )r%   z!Key lookup on a sequence of maps.Nr   c                     t          |pi g          }| j                            |                    d          ||d         |dd          g            d S )Nkey_tr   r   )r   mapschangesdefaults
_observers)list__dict__updateru   )rC   r   kwargss      r!   ri   zChainMap.__init__   se    DLRD!!**W%%G!""X 	 	
 	
 	
 	
 	
r    c                     t          |          }| j                            d|           | j                            d|           d S rL   )r+   r   insertr   )rC   ds     r!   add_defaultszChainMap.add_defaults   sE    !Q"""	Ar    c                 v    	  | j         d         j        |g|R  S # t          $ r t          d|          w xY w)Nr   z$Key not found in the first mapping: )r   rH   rZ   rs   s      r!   rH   zChainMap.pop   sh    	@#49Q<#C2'2222 	@ 	@ 	@>s>>@ @ @	@s    8c                      t          |          r3   rr   rl   s     r!   __missing__zChainMap.__missing__   s    smmr    c                 >    | j         |                      |          n|S r3   )r   rl   s     r!   _keyzChainMap._key   s    "&*"8tzz#cAr    c                     |                      |          }| j        D ]}	 ||         c S # t          $ r Y w xY w|                     |          S r3   )r   r   rZ   r   )rC   rI   r   mappings       r!   r{   zChainMap.__getitem__   sk    yy~~y 	 	Gt}$$$   $$$s   *
77c                 @    || j         |                     |          <   d S r3   r   r   r`   s      r!   r9   zChainMap.__setitem__       ',TYYs^^$$$r    c                 ~    	 | j         |                     |          = d S # t          $ r t          d|          w xY w)Nz Key not found in first mapping: )r   r   rZ   rl   s     r!   __delitem__zChainMap.__delitem__  sX    	GTYYs^^,,, 	G 	G 	GEcEEFFF	Gs    <c                 8    | j                                          d S r3   r   clearrB   s    r!   r   zChainMap.clear	  s    r    c                 ^    	 | |                      |                   S # t          $ r |cY S w xY wr3   )r   rZ   rs   s      r!   ru   zChainMap.get  s@    			#'' 	 	 	NNN	s    ,,c                 R    t           t                      j        | j                   S r3   )lensetunionr   rB   s    r!   __len__zChainMap.__len__  s    ;355;	*+++r    c                 *    |                                  S r3   r   rB   s    r!   r   zChainMap.__iter__  s    !!###r    c                 n    |                                t          fd| j        D                       S )Nc              3       K   | ]}|v V  	d S r3   r   )r4   r0   rI   s     r!   	<genexpr>z(ChainMap.__contains__.<locals>.<genexpr>  s'      //3!8//////r    )r   anyr   rl   s    `r!   r~   zChainMap.__contains__  s7    iinn////TY//////r    c                 *    t          | j                  S r3   )r   r   rB   s    r!   __bool__zChainMap.__bool__   s    49~~r    c                 F    |                      |          }|| vr|| |<   d S d S r3   )r   rs   s      r!   ry   zChainMap.setdefault%  s.    iinnd??DIII ?r    c                 N     | j         j        |i |}| j        D ]
} ||i | |S r3   )r   r   r   )rC   argsr   resultcallbacks        r!   r   zChainMap.update+  sI    $$d5f55 	& 	&HHd%f%%%%r    c           	          d                     | d                    t          t          | j                                      S )Nz{0.__class__.__name__}({1})z, )formatjoinmapreprr   rB   s    r!   __repr__zChainMap.__repr__2  s7    ,33$))Cdi00113 3 	3r    c                 8     | t          j        |g|R            S )z?Create a ChainMap with a single dict created from the iterable.)dictfromkeys)clsiterabler   s      r!   r   zChainMap.fromkeys7  s&     s4=1D111222r    c                 r     | j         | j        d                                         g| j        dd          R  S rL   )	__class__r   copyrB   s    r!   r   zChainMap.copy=  s8    t~dil//11BDIabbMBBBBr    c                 R    t          fdt          | j                  D              S )Nc              3   .   K   | ]} |          V  d S r3   r   )r4   r   ops     r!   r   z!ChainMap._iter.<locals>.<genexpr>H  s+      ::rr!uu::::::r    )r   reversedr   )rC   r   s    `r!   _iterzChainMap._iterB  s/     ::::hty&9&9:::;;r    c                 H    t          |                     d                     S )Nc                 *    |                                  S r3   )rA   )r   s    r!   <lambda>z(ChainMap._iterate_keys.<locals>.<lambda>L  s     r    )r   r   rB   s    r!   r   zChainMap._iterate_keysJ  s     DJJ1122333r    c                        fd D             S )Nc              3   ,   K   | ]}||         fV  d S r3   r   r4   rI   rC   s     r!   r   z*ChainMap._iterate_items.<locals>.<genexpr>Q  s,      11Sd3i 111111r    r   rB   s   `r!   r   zChainMap._iterate_itemsO  s    1111D1111r    c                        fd D             S )Nc              3   (   K   | ]}|         V  d S r3   r   r   s     r!   r   z+ChainMap._iterate_values.<locals>.<genexpr>V  s'      **cS	******r    r   rB   s   `r!   r   zChainMap._iterate_valuesT  s    ****T****r    c                 :    | j                             |           d S r3   )r   append)rC   r   s     r!   bind_tozChainMap.bind_toY  s    x(((((r    r3   )*r   r   r   rT   r   r   r   r   r   ri   r   rH   r   r   r{   r9   r   r   ru   r   r   r~   r   __nonzero__ry   r   r   classmethodr   r   __copy__r   r   r   r   r   r   r   r   rA   r:   r   r   r    r!   r%   r%      s       ++EGHDJ	
 	
 	
  @ @ @  B B B% % %- - -G G G     , , ,$ $ $0 0 0
   K         3 3 3
 3 3 [3
C C C H< < <4 4 4 H2 2 2 I+ + + !J) ) ) DEFFFr    r%   c                   Z     e Zd ZdZd fd	Zd Z fdZd Zd ZddZ	d	 Z
d
 Zd Z xZS )r&   a  A view over an applications configuration dictionaries.

    Custom (but older) version of :class:`collections.ChainMap`.

    If the key does not exist in ``changes``, the ``defaults``
    dictionaries are consulted.

    Arguments:
        changes (Mapping): Map of configuration changes.
        defaults (List[Mapping]): List of dictionaries containing
            the default configuration.
    Nc                     |g n|} t                      j        |g|R   | j                            |r|                    d          dz   n||           d S )N_)prefix_keys)superri   r   r   rstrip)rC   r   r   rA   r   r   s        r!   ri   zConfigurationView.__init__o  sz    !)22x,8,,,,/5A6==%%++6 	 	
 	
 	
 	
 	
r    c                 v    | j         }|r.|                    |          s||z   n|}t          ||          |fS |fS r3   )r   
startswithr   )rC   rI   r   pkeys       r!   _to_keyszConfigurationView._to_keysx  sK     	1'*~~f'='=F6C<<3DdF++S00tr    c                    |                                }t                      j        }|| j        r t	          fd| j        D                       ndz   D ]}	  ||          c S # t
          $ r Y w xY w	 |                               S # t
          $ r, t          |          dk    rt           dj        |            w xY w)Nc              3   .   K   | ]} |          V  d S r3   r   )r4   frI   s     r!   r   z0ConfigurationView.__getitem__.<locals>.<genexpr>  s+      11aaff111111r    r   r   z)Key not found: {0!r} (with prefix: {0!r}))	r   r   r{   r   tuplerZ   r   r   r   )rC   rI   rA   getitemr5   r   s    `   r!   r{   zConfigurationView.__getitem__  s   }}S!!''%59ZG1111dj111111RI 	 	Awqzz!!!   	##C((( 	 	 	4yy1}}F?FMO O O		s   
A''
A43A48B 6Cc                 @    || j         |                     |          <   d S r3   r   r`   s      r!   r9   zConfigurationView.__setitem__  r   r    c                 <     t          d  fd|D                       S )Nc              3   B   K   | ]}                     |          V  d S r3   )ru   r   s     r!   r   z*ConfigurationView.first.<locals>.<genexpr>  s-      ::cDHHSMM::::::r    )r   )rC   rA   s   ` r!   r   zConfigurationView.first  s(    T::::T:::;;;r    c                 8    	 | |         S # t           $ r |cY S w xY wr3   rr   rs   s      r!   ru   zConfigurationView.get  rv   rw   c                 8    | j                                          dS )z&Remove all changes, but keep defaults.Nr   rB   s    r!   r   zConfigurationView.clear  s     	r    c                 n    |                      |          t          fd| j        D                       S )Nc              3   P   K   | ]t          fd D                       V   dS )c              3       K   | ]}|v V  	d S r3   r   )r4   r5   r0   s     r!   r   z;ConfigurationView.__contains__.<locals>.<genexpr>.<genexpr>  s'      ,,!qAv,,,,,,r    N)r   )r4   r0   rA   s    @r!   r   z1ConfigurationView.__contains__.<locals>.<genexpr>  sA      @@3,,,,t,,,,,@@@@@@r    )r   r   r   )rC   rI   rA   s     @r!   r~   zConfigurationView.__contains__  s9    }}S!!@@@@di@@@@@@r    c                     |j         d         }|j         d         }| j                             |||j         d         |j         d         |g|z              d S )Nr   r   r   r   )r   r   r   r   r   )r   r   )rC   otherr   r   s       r!   	swap_withzConfigurationView.swap_with  sg    .+>*-.)>(+X% 	 	
 	
 	
 	
 	
r    )NNNr3   )r   r   r   rT   ri   r   r{   r9   r   ru   r   r~   r   __classcell__r   s   @r!   r&   r&   a  s         
 
 
 
 
 
      &- - -< < <     
A A A


 

 

 

 

 

 

r    r&   c                       e Zd ZdZdZddZd Zd Zd Zdd	Z	d
 Z
d ZeZddZddedefdZd Zd Zd Zd Zd Zd Zd Zd ZeZed             ZdS )r)   a/  Kind-of Set (or priority queue) with limitations.

    Good for when you need to test for membership (`a in set`),
    but the set should not grow unbounded.

    ``maxlen`` is enforced at all times, so if the limit is reached
    we'll also remove non-expired items.

    You can also configure ``minlen``: this is the minimal residual size
    of the set.

    All arguments are optional, and no limits are enabled by default.

    Arguments:
        maxlen (int): Optional max number of items.
            Adding more items than ``maxlen`` will result in immediate
            removal of items sorted by oldest insertion time.

        expires (float): TTL for all items.
            Expired items are purged as keys are inserted.

        minlen (int): Minimal residual size of this set.
            .. versionadded:: 4.0

            Value must be less than ``maxlen`` if both are configured.

            Older expired items will be deleted, only after the set
            exceeds ``minlen`` number of items.

        data (Sequence): Initial data to initialize set with.
            Can be an iterable of ``(key, value)`` pairs,
            a dict (``{key: insertion_time}``), or another instance
            of :class:`LimitedSet`.

    Example:
        >>> s = LimitedSet(maxlen=50000, expires=3600, minlen=4000)
        >>> for i in range(60000):
        ...     s.add(i)
        ...     s.add(str(i))
        ...
        >>> 57000 in s  # last 50k inserted values are kept
        True
        >>> '10' in s  # '10' did expire and was purged from set.
        False
        >>> len(s)  # maxlen is reached
        50000
        >>> s.purge(now=time.monotonic() + 7200)  # clock + 2 hours
        >>> len(s)  # now only minlen items are cached
        4000
        >>>> 57000 in s  # even this item is gone now
        False
       r   Nc                    |dn|| _         |dn|| _        |dn|| _        i | _        g | _        |r|                     |           | j         | j        cxk    rdk    sn t          d          | j        dk     rt          d          d S )Nr   z:minlen must be a positive number, less or equal to maxlen.zexpires cannot be negative!)maxlenminlenexpires_data_heapr   
ValueError)rC   r   r  datar   s        r!   ri   zLimitedSet.__init__  s    !>aav!>aav#Oqq

 	KK{dk....Q....LN N N<!:;;; r    c                     d | j                                         D             | j        dd<   t          | j                   dS )z=Time consuming recreating of heap.  Don't run this too often.c                     g | ]}|S r   r   )r4   entrys     r!   r8   z,LimitedSet._refresh_heap.<locals>.<listcomp>  s    @@@5@@@r    N)r  r   r  r
   rB   s    r!   _refresh_heapzLimitedSet._refresh_heap  sF     A@DJ,=,=,?,?@@@
111
r    c                 R    | j         | j        k    r|                                  d S d S r3   )_heap_overloadmax_heap_percent_overloadr	  rB   s    r!   _maybe_refresh_heapzLimitedSet._maybe_refresh_heap	  s4    $"@@@      A@r    c                 P    | j                                          g | j        dd<   dS )z)Clear all data, start from scratch again.N)r  r   r  rB   s    r!   r   zLimitedSet.clear  s+     	

111r    c                 *   |pt          j                    }|| j        v r|                     |           ||f}|| j        |<   t	          | j        |           | j        r3t          | j                  | j        k    r|                                  dS dS dS )z=Add a new item, or reset the expiry time of an existing item.N)	time	monotonicr  discardr   r  r   r   purge)rC   itemnowr  s       r!   addzLimitedSet.add  s     %T^%%4:LLd 
4U###; 	3tz??dk99JJLLLLL	 	99r    c                 B   |sdS t          |t                    rI| j                            |j                   |                                  |                                  dS t          |t                    r|                                D ]v\  }}t          |t          t          f          r|d         }t          |t                    s"t          dt          |          d|           |                     ||           wdS |D ]}|                     |           dS )z8Update this set from other LimitedSet, dict or iterable.Nr   z$Expecting float timestamp, got type z with value: )r.   r)   r  r   r	  r  r   r:   r   r   floatr  r\   r  )rC   r   rI   insertedrg   s        r!   r   zLimitedSet.update   sK     	FeZ(( 	Jek***   JJLLLLLt$$ 	!& ( (Xh66 +'{H!(E22 F$E>>E E:BE EF F F h''''( (    r    c                 d    | j                             |d            |                                  d S r3   )r  rH   r  rC   r  s     r!   r  zLimitedSet.discard:  s2     	
tT"""  """""r    c                 8   |pt          j                    }t          |t                    r
 |            n|}| j        rNt          | j                  | j        k    r1|                                  t          | j                  | j        k    1| j        rt          | j                  | j	        cxk    rdk    rcn dS | j
        d         \  }}|| j        z   |k    rdS |                                  t          | j                  | j	        cxk    rdk    XdS  dS dS dS )zCheck oldest items and remove them if needed.

        Arguments:
            now (float): Time of purging -- by default right now.
                This can be useful for unit testing.
        r   N)r  r  r.   r   r   r   r  rH   r  r   r  )rC   r  inserted_timer   s       r!   r  zLimitedSet.purgeA  s*    %T^%%!#x009cceeec; 	dj//DK//


 dj//DK// < 	dj//DK44441444444#':a= q 4</#55E


	 dj//DK444414444444	 	44r    rt   r^   c                     | j         rKt          | j                   \  }}	 | j                            |           |S # t          $ r Y nw xY w| j         K|S )z?Remove and return the oldest item, or :const:`None` when empty.)r  r   r  rH   rZ   )rC   rt   r   r  s       r!   rH   zLimitedSet.popV  st    j 	dj))GAt
t$$$     	 j 	 s   < 
A	A	c                 H    d | j                                         D             S )a6  Whole set as serializable dictionary.

        Example:
            >>> s = LimitedSet(maxlen=200)
            >>> r = LimitedSet(maxlen=200)
            >>> for i in range(500):
            ...     s.add(i)
            ...
            >>> r.update(s.as_dict())
            >>> r == s
            True
        c                     i | ]\  }}||	S r   r   )r4   r  rI   s      r!   
<dictcomp>z&LimitedSet.as_dict.<locals>.<dictcomp>p  s    GGG-(CXGGGr    )r  r   rB   s    r!   as_dictzLimitedSet.as_dictb  s'     HG4:3D3D3F3FGGGGr    c                 "    | j         |j         k    S r3   r  )rC   r   s     r!   __eq__zLimitedSet.__eq__r  s    zU[((r    c                 z    t                               | t          |           j        t	          |                     S )N)namesize)REPR_LIMITED_SETr   r\   r   r   rB   s    r!   r   zLimitedSet.__repr__v  s5    &&tDzz*T ' 
 
 	
r    c                 b    d t          | j                                                  D             S )Nc              3       K   | ]	\  }}|V  
d S r3   r   )r4   r   is      r!   r   z&LimitedSet.__iter__.<locals>.<genexpr>~  s&      ::da::::::r    )sortedr  r   rB   s    r!   r   zLimitedSet.__iter__|  s,    ::fTZ%6%6%8%899::::r    c                 *    t          | j                  S r3   )r   r  rB   s    r!   r   zLimitedSet.__len__  s    4:r    c                     || j         v S r3   r$  rl   s     r!   r~   zLimitedSet.__contains__  s    dj  r    c                 ^    | j         | j        | j        |                                 | j        ffS r3   )r   r   r  r"  r   rB   s    r!   
__reduce__zLimitedSet.__reduce__  s0    ~Kt||~~t{ D D 	Dr    c                 *    t          | j                  S r3   )boolr  rB   s    r!   r   zLimitedSet.__bool__  s    DJr    c                 |    t          | j                  dz  t          t          | j                  d          z  dz
  S )z5Compute how much is heap bigger than data [percents].d   r   )r   r  maxr  rB   s    r!   r  zLimitedSet._heap_overload  s3     4:$s3tz??A'>'>>DDr    )r   r   Nr   r3   )r   r   r   rT   r  ri   r	  r  r   r  r   r  	pop_valuer  r   rH   r"  r%  r   r   r   r~   r1  r   r   propertyr  r   r    r!   r)   r)     s       3 3j !#< < < <$  ! ! !
  
 
 
 
  4# # #
 I   *
 
3 
# 
 
 
 
H H H ) ) )
 
 
; ; ;  ! ! !D D D
      KE E XE E Er    r)   c                   <    e Zd ZdZeZd	dZdefdeddfdZd	dZ	dS )
r(   z2Mixin for classes supporting the ``evict`` method.r^   Nc                 <    |                      t                     dS )z&Force evict until maxsize is enforced.)rangeN)_evictr   rB   s    r!   evictzEvictable.evict  s    %     r    r5  limitc                 Z     	  fd ||          D              d S # t           $ r Y d S w xY w)Nc                 8    g | ]}                                 S r   )_evict1)r4   r   rC   s     r!   r8   z$Evictable._evict.<locals>.<listcomp>  s!    222T\\^^222r    )
IndexError)rC   r>  r;  s   `  r!   r<  zEvictable._evict  sR    	2222UU5\\222222 	 	 	DD	s    
**c                     | j         | j        k    rt                      	 |                                  d S # | j        $ r t                      w xY wr3   )_evictcountmaxsizerB  _pop_to_evictr   rB   s    r!   rA  zEvictable._evict1  s`    t|++,,	     z 	 	 	,,	s	   6 A)r^   N)
r   r   r   rT   r   r=  r;  intr<  rA  r   r    r!   r(   r(     su        <<E! ! ! ! #&U  C t         r    r(   c                   z    e Zd ZdZeZdefdZd Zd Zd Z	d Z
d Zd	 Zd
 ZdefdZd Zd Zed             ZdS )r*   zA buffer of pending messages.Nc                     || _          ||pg           | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _	        d S r3   )
rE  r  r   _appendpopleft_popr   _lenextend_extend)rC   rE  r   r   s       r!   ri   zMessagebuffer.__init__  sR    E(.b))	y'I%	I%	y'r    c                 l    |                      |           | j        o|                                  d S  d S r3   )rJ  rE  r<  r  s     r!   putzMessagebuffer.put  s5    T&&&&r    c                 l    |                      |           | j        o|                                  d S  d S r3   )rO  rE  r<  )rC   its     r!   rN  zMessagebuffer.extend  s5    R&&&&r    c                     	 |                                  S # t          $ r! |r
|d         cY S |                                 w xY w)Nr   )rL  rB  r   rC   rt   s     r!   takezMessagebuffer.take  sV    	99;; 	 	 	 "qz!!!**,,	s    AAc                 *    |                                  S r3   )rV  rB   s    r!   rF  zMessagebuffer._pop_to_evict      yy{{r    c                 b    dt          |           j         dt          |            d| j         dS N<z: />)r\   r   r   rE  rB   s    r!   r   zMessagebuffer.__repr__  s4    E4::&EE#d))EEdlEEEEr    c              #   \   K   	 	 |                                  V  n# t          $ r Y d S w xY w*r3   )rL  rB  rB   s    r!   r   zMessagebuffer.__iter__  sN      	iikk!!!!   	s    
**c                 *    |                                  S r3   )rM  rB   s    r!   r   zMessagebuffer.__len__  rX  r    r^   c                     || j         v S r3   r  r  s     r!   r~   zMessagebuffer.__contains__  s    ty  r    c                 *    t          | j                  S r3   )r   r  rB   s    r!   __reversed__zMessagebuffer.__reversed__  s    	"""r    c                     | j         |         S r3   ra  )rC   indexs     r!   r{   zMessagebuffer.__getitem__  s    yr    c                      t          |           S r3   r   rB   s    r!   rD  zMessagebuffer._evictcount  s     4yyr    )r   r   r   rT   r   r   ri   rQ  rN  rV  rF  r   r   r   r3  r~   rc  r{   r8  rD  r   r    r!   r*   r*     s        ''E)-U ( ( ( (' ' '
' ' '
    F F F    !D ! ! ! !# # #        X  r    r*   c                   ~     e Zd ZdZeZeZdZdZdZ	d fd	Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zed             Z xZS )r$   zMap of buffers.Nr     c                     t                                                       || _        d| _        |r|                     |           t          d |                                 D                       | _        d S )Nri  c              3   4   K   | ]}t          |          V  d S r3   rg  )r4   bufs     r!   r   z%BufferMap.__init__.<locals>.<genexpr>  s(      ::cS::::::r    )r   ri   rE  
bufmaxsizer   sumr:   total)rC   rE  r   rm  r   s       r!   ri   zBufferMap.__init__  sk     	"KK!!!::TZZ\\:::::


r    c                     |                      |                              |           | xj        dz  c_        |                     |           | j        o|                                  d S  d S )Nr   )_get_or_create_bufferrQ  ro  rE   rE  r<  )rC   rI   r  s      r!   rQ  zBufferMap.put  sh    ""3''++D111

a

&&&&r    c                     |                      |                              |           | xj        t          |          z  c_        | j        o|                                  d S  d S r3   )rq  rN  ro  r   rE  r<  )rC   rI   rS  s      r!   rN  zBufferMap.extend  s[    ""3''..r222

c"gg

&&&&r    c                     d\  }}	 | |         }	 |                                 }| xj        dz  c_        |                     |           n$# | j        $ r d}Y nw xY w# t          $ r d}Y nw xY w|r|r|d         S |                                 |S )N)NFr   Tr   )rV  ro  rE   r   rZ   )rC   rI   rt   r  throwrl  s         r!   rV  zBufferMap.take  s    !e	&s)C&xxzz

a

   %%%% :     	 	 	EEE	  	 "qz!**,,s"   A $A
 
AAA+*A+c                 j    	 | |         S # t           $ r |                                 x}| |<   |cY S w xY wr3   )rZ   _new_buffer)rC   rI   rl  s      r!   rq  zBufferMap._get_or_create_buffer3  sO    	9 	 	 	"..000C$s)JJJ	s   
 %22c                 8    |                      | j                  S )N)rE  )Bufferrm  rB   s    r!   rv  zBufferMap._new_buffer;  s    {{4?{333r    c                 F     | |                                           j        | S r3   )rD   rV  rU  s     r!   _LRUpopzBufferMap._LRUpop?  s    (tDLLNN#('22r    c                 |   t          d          D ]}|                                 }| |         }	 |                                 | xj        dz  c_        t	          |          s|                     |           n|                     |            d S # t          | j        f$ r |                     |           Y w xY wd S )Nr5  r   )	r;  rD   rV  ro  r   rH   rE   rB  r   )rC   r   rI   rl  s       r!   rF  zBufferMap._pop_to_evictC  s    s 	 	A,,..Cs)C


 

a

3xx *HHSMMMM $$S))) 
+   	 	s   B&B98B9c                 R    dt          |           j         d| j         d| j         dS rZ  )r\   r   ro  rE  rB   s    r!   r   zBufferMap.__repr__X  s0    F4::&FF$*FFt|FFFFr    c                     | j         S r3   )ro  rB   s    r!   rD  zBufferMap._evictcount\  s     zr    )Nri  )r   r   r   rT   r*   rx  r   rE  ro  rm  ri   rQ  rN  rV  rq  rv  rz  rF  r   r8  rD  r   r   s   @r!   r$   r$     s        FEGEJ; ; ; ; ; ;' ' '' ' '  ,  4 4 43 3 3  *G G G   X    r    r$   )5rT   r  collectionsr   rV   r   collections.abcr   r   r   r   r	   heapqr
   r   r   	itertoolsr   r   queuer   typingr   r   r   r   
functionalr   r   textr   __pypy__r   rW   ImportErrordjango.utils.functionalr   r   __all__r)  r+   r,   r"   r   r#   r'   registerr%   r&   r)   r(   r*   r$   r   r    r!   <module>r     s   > >  3 3 3 3 3 3       S S S S S S S S S S S S S S , , , , , , , , , , " " " " " " " "       , , , , , , , , , , , , # # # # # # # #      :::::::   @@@@@@@@@          LLL
 
A A A  (3 (3 (3 (3 (3, (3 (3 (3V       (/ / / / /D, / / /G G G G G G G GT   & & &T T T T T~ T T TnU
 U
 U
 U
 U
"4 U
 U
 U
p]E ]E ]E ]E ]E ]E ]E ]E@ 
 J          0C C C C CI C C CL  -      b b b b bY b b b b bs$   A A%$A%)A2 2B	B	