o
    æûõjRÚ  ã                   @   sB  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ ej dkrdd d	lm!Z! nd d	l"m!Z! ej#Z$e$d Z%d
Z&dZ'eG dd„ de(ƒƒZ)edƒZ*edƒZ+e  ,dd¡Z-e-j.Z.e /d¡Z0e1edƒože 2¡  Z3e 4¡ Z5de6ddfdd„Z7dMdd„Z8G dd„ dƒZ9ededef d �Z:d!e:de:fd"d#„Z;d!e:de:fd$d%„Z<d!e:de:fd&d'„Z=d!e:de:fd(d)„Z>d!e:de:fd*d+„Z?d!e:de:fd,d-„Z@G d.d/„ d/ee+ ƒZAG d0d1„ d1ee* ƒZBG d2d3„ d3eBe* e	e(e*f ƒZCG d4d5„ d5eBe* ee* ƒZDG d6d7„ d7eBe* ee( ƒZEG d8d9„ d9ƒZFG d:d;„ d;ƒZGd<eHdeHfd=d>„ZIeG d?d@„ d@ee* ƒƒZJeG dAdB„ dBee* ƒƒZKG dCdD„ dDeFee* ƒZLG dEdF„ dFeGeLe* ƒZMG dGdH„ dHeFee* ƒZNG dIdJ„ dJeGeNe* ƒZOdeLe6 eNe6 B deHfdKdL„ZPdS )Né    N)Úarray)ÚCallableÚ	ItemsViewÚIterableÚIteratorÚKeysViewÚMappingÚ
ValuesView)Ú	dataclass)	ÚTYPE_CHECKINGÚAnyÚClassVarÚGenericÚNoReturnÚTypeVarÚcastÚfinalÚoverloadé   )ÚMDArgÚMultiMappingÚMutableMultiMappingÚSupportsKeys)é   é   )ÚSelfé
   é    c                   @   s8   e Zd ZU dZdeddfdd„ZdZdZedB e	d< dS )	ÚistrzCase insensitive str.ÚkwargsÚreturnNc                 K   s   t dtj› d�ƒ‚)Nztype 'z%.istr' is not an acceptable base type)Ú	TypeErrorr   Ú
__module__)Úclsr   © r$   úJ/opt/steambot/venv/lib/python3.10/site-packages/multidict/_multidict_py.pyÚ__init_subclass__4   s   zistr.__init_subclass__TÚ__istr_identity__)
Ú__name__r"   Ú__qualname__Ú__doc__Úobjectr&   Ú__is_istr__r'   ÚstrÚ__annotations__r$   r$   r$   r%   r   0   s
   
 r   Ú_VÚ_TÚ	_SENTINELÚsentinelÚ_is_gil_enabledÚargr    úthreading.RLock | Nonec                 C   sN   t | tƒr	| jjS t | tƒr| jS t | tttfƒr| jjS t | tƒr%| jS dS )z�Return the RLock backing `arg`, if it's a multidict, one of our
    own views over one, or an iterator over one, that we don't already
    own.N)	Ú
isinstanceÚMultiDictProxyÚ_mdÚ_lockÚ	MultiDictÚ
_ItemsViewÚ	_KeysViewÚ_ValuesViewÚ_Iter©r4   r$   r$   r%   Ú_other_lockM   s   


r@   ÚmdúMultiDict[Any]c                 C   s   t r| jS dS )z?Return the lock a view iterator over `md` should take per step.N)Ú_FREE_THREADEDr9   ©rA   r$   r$   r%   Ú
_iter_lock\   s   rE   c                   @   s:   e Zd ZdZdZdd	d
„Zddd„Zdeddfdd„ZdS )Ú	_PairLockz:Acquire one or two RLocks in a fixed, deadlock-safe order.)Ú_aÚ_bÚaúthreading.RLockÚbr5   r    Nc                 C   sT   |d u s||u r|| _ d | _d S t|ƒt|ƒk r!||| _ | _d S ||| _ | _d S ©N)rG   rH   Úid)ÚselfrI   rK   r$   r$   r%   Ú__init__f   s   
z_PairLock.__init__c                 C   s4   | j d usJ ‚| j  ¡  | jd ur| j ¡  d S d S rL   )rG   ÚacquirerH   ©rN   r$   r$   r%   Ú	__enter__o   s
   

ÿz_PairLock.__enter__Úexcc                 G   s0   | j d usJ ‚| jd ur| j ¡  | j  ¡  d S rL   )rG   rH   Úrelease)rN   rS   r$   r$   r%   Ú__exit__u   s   

z_PairLock.__exit__)rI   rJ   rK   r5   r    N©r    N)	r(   r"   r)   r*   Ú	__slots__rO   rR   r+   rU   r$   r$   r$   r%   rF   a   s    

	rF   Ú_F.)ÚboundÚfnc              	      s2   t  ˆ ¡dtdtdtdtf‡ fdd„ƒ}tt|ƒS )an  Wrap `fn` to hold `self._lock` for the call, on every build.

    update()/extend()/merge()/clear()/popitem() have their own race that,
    unlike the rest of this module's locking, is not specific to
    free-threading: pure-Python bytecode is not atomic even under the GIL
    (the GIL can be released between any two bytecodes), so enough
    concurrent contention lets two calls interleave mid hash-table insert
    or deletion and corrupt the shared index table. `_locked`/`_locked_pair`
    skip locking on a GIL-enabled build because the race they guard against
    is free-threading-only; this variant cannot.
    rN   Úargsr   r    c                    s@   | j � ˆ | g|¢R i |¤ŽW  d   ƒ S 1 sw   Y  d S rL   )r9   ©rN   r[   r   ©rZ   r$   r%   ÚwrapperŒ   s   $ÿz_locked_always.<locals>.wrapper©Ú	functoolsÚwrapsr   r   rX   ©rZ   r^   r$   r]   r%   Ú_locked_always   s    
rc   c                    s8   t  ˆ ¡d	dtdtdtdtdtf
‡ fdd„ƒ}tt|ƒS )
zpLike `_locked_always`, but also pairs in the first argument's lock,
    for the same reason `_locked_pair` does.NrN   r4   r[   r   r    c                    sL   t | jt|ƒƒ� ˆ | |g|¢R i |¤ŽW  d   ƒ S 1 sw   Y  d S rL   )rF   r9   r@   )rN   r4   r[   r   r]   r$   r%   r^   ˜   s   $ÿz$_locked_pair_always.<locals>.wrapperrL   r_   rb   r$   r]   r%   Ú_locked_pair_always”   s   &
rd   c                 C   ó   t s| S t| ƒS )z·Wrap `fn` to hold `self._lock` for the call, but only when it
    guards against a free-threading-only race; see `_locked_always` for
    the unconditional version a few methods need.)rC   rc   r]   r$   r$   r%   Ú_locked    ó   rf   c              	      s:   t sˆ S t ˆ ¡dtdtdtdtf‡ fdd„ƒ}tt|ƒS )z=Like `_locked`, but for view objects: holds `self._md._lock`.rN   r[   r   r    c                    sB   | j j� ˆ | g|¢R i |¤ŽW  d   ƒ S 1 sw   Y  d S rL   )r8   r9   r\   r]   r$   r%   r^   ®   s   
$ÿz_locked_md.<locals>.wrapper©rC   r`   ra   r   r   rX   rb   r$   r]   r%   Ú
_locked_md©   s
    
ri   c                 C   re   )zœWrap `fn` to hold `self._lock` and its first argument's lock, but
    only when it guards against a free-threading-only race; see
    `_locked_pair_always`.)rC   rd   r]   r$   r$   r%   Ú_locked_pair¶   rg   rj   c                    s@   t sˆ S t ˆ ¡d	dtdtdtdtdtf
‡ fdd„ƒ}tt|ƒS )
z?Like `_locked_md`, but also pairs in its first argument's lock.NrN   Úotherr[   r   r    c                    sN   t | jjt|ƒƒ� ˆ | |g|¢R i |¤ŽW  d   ƒ S 1 s w   Y  d S rL   )rF   r8   r9   r@   )rN   rk   r[   r   r]   r$   r%   r^   Ä   s   $ÿz _locked_md_pair.<locals>.wrapperrL   rh   rb   r$   r]   r%   Ú_locked_md_pair¿   s
   &
rl   c                   @   s\   e Zd ZdZ	ddedee ddfdd„Zd	efd
d„Z	e
d	efdd„ƒZd	efdd„ZdS )r>   ©Ú_sizeÚ_iterr9   NÚsizeÚiteratorÚlockr5   c                 C   s   || _ || _|| _d S rL   rm   )rN   rp   rq   rr   r$   r$   r%   rO   Ï   s   
z_Iter.__init__r    c                 C   s   | S rL   r$   rQ   r$   r$   r%   Ú__iter__Ù   ó   z_Iter.__iter__c                 C   ó
   t | jƒS rL   )Únextro   rQ   r$   r$   r%   Ú__next__Ü   ó   
z_Iter.__next__c                 C   ó   | j S rL   )rn   rQ   r$   r$   r%   Ú__length_hint__à   ó   z_Iter.__length_hint__rL   )r(   r"   r)   rW   Úintr   r0   rO   r   rs   rf   rw   rz   r$   r$   r$   r%   r>   Ì   s    üþý
ü
r>   c                   @   s(   e Zd Z		d	dd„Zdefdd„ZdS )
Ú	_ViewBaserA   úMultiDict[_V]c                 C   s
   || _ d S rL   ©r8   )rN   rA   r$   r$   r%   rO   å   s   
z_ViewBase.__init__r    c                 C   ru   rL   ©Úlenr8   rQ   r$   r$   r%   Ú__len__ë   ó   
z_ViewBase.__len__N)rA   r~   )r(   r"   r)   rO   r|   r‚   r$   r$   r$   r%   r}   ä   s
    
þr}   c                
   @   s  e Zd Zededefdd„ƒZdeee	e
f  fdd„Zdeee	e
f  fdd„Zd(d
ededeee	e
f  fdd„Ze ¡ ede	fdd„ƒƒZdee	e
f eB deee	e	e
f dB fdd„Zdee deee	e
f  fdd„Zedee deee	e
f  fdd„ƒZedee dee fdd„ƒZedee deee	e
f eB  fdd„ƒZedee deee	e
f eB  fdd„ƒZedee deee	e
f eB  fd d!„ƒZedee dee fd"d#„ƒZedee deee	e
f eB  fd$d%„ƒZ e Z!edeee	e
f  defd&d'„ƒZ"dS ))r;   Úitemr    c           	      C   s�   t |ttfƒrt|ƒdkrdS |\}}z| j |¡}W n
 ty%   Y dS w t|ƒt@ }| jj	 
|¡D ]\}}}|j|krE||jkrE dS q3dS )Né   FT)r6   ÚtupleÚlistr�   r8   Ú	_identityr!   ÚhashÚMAXSIZEÚ_keysÚ	iter_hashÚidentityÚvalue)	rN   r„   ÚkeyrŽ   r�   Úhash_ÚslotÚidxÚer$   r$   r%   Ú__contains__ð   s   ÿ€z_ItemsView.__contains__c                 C   ó    t t| ƒ|  | jj¡t| jƒƒS rL   ©r>   r�   ro   r8   Ú_versionrE   rQ   r$   r$   r%   rs   ÿ   ó    z_ItemsView.__iter__c                 C   ó$   t t| ƒ| j| jjdd�t| jƒƒS ©NT)Úreverser–   rQ   r$   r$   r%   Ú__reversed__  ó
   ýz_ItemsView.__reversed__FÚversionr›   c                 c   s`   � | j j |¡}	 || j jkrtdƒ‚zt|ƒ}W n
 ty#   Y d S w | j  |j¡|j	fV  q	©NTú#Dictionary changed during iteration)
r8   r‹   Úiter_entriesr—   ÚRuntimeErrorrv   ÚStopIterationÚ_keyr�   rŽ   ©rN   rž   r›   Úentriesr“   r$   r$   r%   ro   	  s   €ÿùz_ItemsView._iterc                 C   sN   g }| j j ¡ D ]}| |j›d|j›�¡ qd |¡}d| jj› d|› d�S )Nú: ú, ú<ú(ú)>)	r8   r‹   r¡   Úappendr�   rŽ   ÚjoinÚ	__class__r(   ©rN   Úlstr“   Úbodyr$   r$   r%   Ú__repr__  s
   
z_ItemsView.__repr__r4   Nc                 C   sb   t |tƒsd S t|ƒdkrd S z| j |d ¡}t|ƒt@ ||d |d fW S  ty0   Y d S w )Nr…   r   r   )r6   r†   r�   r8   rˆ   r‰   rŠ   r!   )rN   r4   r�   r$   r$   r%   Ú_parse_item  s   
ÿz_ItemsView._parse_itemÚitc                 C   s>   t ƒ }|D ]}|  |¡}|d u rq| |d |d f¡ q|S )Nr   r   )Úsetr³   Úadd)rN   r´   Útmpr4   r„   r$   r$   r%   Ú_tmp_set(  s   
z_ItemsView._tmp_setrk   c                 C   sÆ   t ƒ }zt|ƒ}W n ty   t Y S w |D ]I}|  |¡}|d u r#q|\}}}}	g }
d}| jj |¡D ]\}}}||krM|j|krM|
 	|j
|jf¡ |}q4|
D ]\}}||	kr_| ||f¡ qPq|S )Néÿÿÿÿ)rµ   Úiterr!   ÚNotImplementedr³   r8   r‹   rŒ   r�   r¬   r�   rŽ   r¶   )rN   rk   Úretr´   r4   r„   r�   r�   r�   rŽ   ÚmatchesÚlastr‘   r’   r“   Úe_keyÚe_valuer$   r$   r%   Ú__and__2  s0   ÿ
€€þz_ItemsView.__and__c                 C   s”   t ƒ }zt|ƒ}W n ty   t Y S w |D ]0}|  |¡}|d u r#q|\}}}}	| jj |¡D ]\}
}}|j|krF|j	|	krF| 
|¡  nq0q|S rL   )rµ   rº   r!   r»   r³   r8   r‹   rŒ   r�   rŽ   r¶   ©rN   rk   r¼   r´   r4   r„   r�   r�   r�   rŽ   r‘   r’   r“   r$   r$   r%   Ú__rand__I  s"   ÿ

€z_ItemsView.__rand__c                 C   s    t | ƒ}zt|ƒ}W n ty   t Y S w |D ]5}|  |¡}|d u r)| |¡ q|\}}}}	| jj |¡D ]\}
}}|j	|krG|j
|	krG nq6| |¡ q|S rL   ©rµ   rº   r!   r»   r³   r¶   r8   r‹   rŒ   r�   rŽ   rÂ   r$   r$   r%   Ú__or__[  s&   ÿ

€
€z_ItemsView.__or__c                 C   sf   zt |ƒ}W n ty   t Y S w |  |¡}| jj ¡ D ]}|j|jf|vr0| 	|j
|jf¡ q|S rL   )rµ   r!   r»   r¸   r8   r‹   r¡   r�   rŽ   r¶   r�   )rN   rk   r¼   r·   r“   r$   r$   r%   Ú__ror__o  s   ÿ
€z_ItemsView.__ror__c                 C   sl   t ƒ }zt|ƒ}W n ty   t Y S w |  |¡}| jj ¡ D ]}|j|j	f|vr3| 
|j|j	f¡ q |S rL   )rµ   rº   r!   r»   r¸   r8   r‹   r¡   r�   rŽ   r¶   r�   )rN   rk   r¼   r´   r·   r“   r$   r$   r%   Ú__sub__|  s   ÿ
€z_ItemsView.__sub__c                 C   sž   t ƒ }zt|ƒ}W n ty   t Y S w |D ]5}|  |¡}|d u r(| |¡ q|\}}}}	| jj |¡D ]\}
}}|j	|krF|j
|	krF nq5| |¡ q|S rL   rÄ   rÂ   r$   r$   r%   Ú__rsub__‹  s&   ÿ

€
€z_ItemsView.__rsub__c                 C   ó<   zt |ƒ}W n ty   t Y S w | | }|||  O }|S rL   ©rµ   r!   r»   ©rN   rk   Úrgtr¼   r$   r$   r%   Ú__xor__   ó   ÿz_ItemsView.__xor__c                 C   sd   |D ]-}|   |¡}|d u rq|\}}}}| jj |¡D ]\}}	}
|
j|kr.|
j|kr.  dS qqdS ©NFT)r³   r8   r‹   rŒ   r�   rŽ   )rN   rk   r4   r„   r�   r�   r�   rŽ   r‘   r’   r“   r$   r$   r%   Ú
isdisjoint¬  s   
€þz_ItemsView.isdisjoint©F)#r(   r"   r)   ri   r+   Úboolr”   r>   r†   r-   r/   rs   rœ   r|   r   ro   ÚreprlibÚrecursive_reprr²   r0   r³   r   rµ   r¸   rl   r   rÁ   rÃ   rÅ   rÆ   rÇ   rÈ   rÍ   Ú__rxor__rÐ   r$   r$   r$   r%   r;   ï   s8    $."
$((((	$r;   c                   @   s|   e Zd Zededefdd„ƒZdee fdd„Z	dee fdd„Z
dd
ededee fdd„Ze ¡ edefdd„ƒƒZdS )r=   rŽ   r    c                 C   s&   | j j ¡ D ]
}|j|kr dS qdS )NTF)r8   r‹   r¡   rŽ   )rN   rŽ   r“   r$   r$   r%   r”   »  s
   
ÿz_ValuesView.__contains__c                 C   r•   rL   r–   rQ   r$   r$   r%   rs   Â  r˜   z_ValuesView.__iter__c                 C   r™   rš   r–   rQ   r$   r$   r%   rœ   Å  r�   z_ValuesView.__reversed__Frž   r›   c                 c   sR   � | j j |¡}	 || j jkrtdƒ‚zt|ƒ}W n
 ty#   Y d S w |jV  q	rŸ   )r8   r‹   r¡   r—   r¢   rv   r£   rŽ   r¥   r$   r$   r%   ro   Ì  s   €ÿùz_ValuesView._iterc                 C   sF   g }| j j ¡ D ]
}| t|jƒ¡ qd |¡}d| jj› d|› d�S ©Nr¨   r©   rª   r«   )	r8   r‹   r¡   r¬   ÚreprrŽ   r­   r®   r(   r¯   r$   r$   r%   r²   ×  s
   
z_ValuesView.__repr__NrÑ   )r(   r"   r)   ri   r+   rÒ   r”   r>   r/   rs   rœ   r|   r   ro   rÓ   rÔ   r-   r²   r$   r$   r$   r%   r=   º  s    r=   c                   @   sŠ  e Zd Zedefdd„ƒZededefdd„ƒZde	e
 fdd„Zde	e
 fd	d
„Zd$dededee
 fdd„Ze ¡ ede
fdd„ƒƒZedee dee
 fdd„ƒZedee dee fdd„ƒZedee dee
eB  fdd„ƒZedee dee
eB  fdd„ƒZedee dee
 fdd„ƒZedee dee fdd„ƒZedee dee
eB  fdd „ƒZeZedee defd!d"„ƒZd#S )%r<   r    c                 C   s   t dd„ | jj ¡ D ƒƒS )Nc                 s   ó   � | ]}d V  qdS )r   Nr$   )Ú.0Ú_r$   r$   r%   Ú	<genexpr>ä  ó   € z$_KeysView.__len__.<locals>.<genexpr>)Úsumr8   r‹   Úiter_first_entriesrQ   r$   r$   r%   r‚   â  s   z_KeysView.__len__r�   c                 C   sT   t |tƒsdS | j |¡}t|ƒt@ }| jj |¡D ]\}}}|j|kr' dS qdS rÏ   )	r6   r-   r8   rˆ   r‰   rŠ   r‹   rŒ   r�   ©rN   r�   r�   r�   r‘   r’   r“   r$   r$   r%   r”   æ  s   

ÿz_KeysView.__contains__c                 C   s"   t t| jƒ|  | jj¡t| jƒƒS rL   ©r>   r�   r8   ro   r—   rE   rQ   r$   r$   r%   rs   ñ  s   "z_KeysView.__iter__c                 C   s&   t t| jƒ| j| jjdd�t| jƒƒS rš   rà   rQ   r$   r$   r%   rœ   ô  s
   ýz_KeysView.__reversed__Frž   r›   c                 c   sp   � | j j}|jr| |¡}n| |¡}	 || j jkrtdƒ‚zt|ƒ}W n
 ty.   Y d S w | j  	|j
¡V  qrŸ   )r8   r‹   Ú
maybe_dupsrÞ   r¡   r—   r¢   rv   r£   r¤   r�   )rN   rž   r›   Úkeysr¦   r“   r$   r$   r%   ro   û  s   €
ÿùz_KeysView._iterc                 C   sD   g }| j j ¡ D ]	}| |j›¡ qd |¡}d| jj› d|› d�S rÖ   )r8   r‹   rÞ   r¬   r�   r­   r®   r(   r¯   r$   r$   r%   r²   
  s
   
z_KeysView.__repr__rk   c           
      C   s�   t ƒ }zt|ƒ}W n ty   t Y S w |D ].}t|tƒsq| j |¡}t|ƒt	@ }| jj
 |¡D ]\}}}	|	j|krD| |	j¡  nq2q|S rL   )rµ   rº   r!   r»   r6   r-   r8   rˆ   r‰   rŠ   r‹   rŒ   r�   r¶   r�   ©
rN   rk   r¼   r´   r�   r�   r�   r‘   r’   r“   r$   r$   r%   rÁ     s$   ÿ

þ€z_KeysView.__and__c                 C   sb   t ƒ }zt|ƒ}W n ty   t Y S w |D ]}t|tƒsq|| jv r)| |¡ qtt t	 |ƒS rL   )
rµ   rº   r!   r»   r6   r-   r8   r¶   r   r0   ©rN   rk   r¼   r´   r�   r$   r$   r%   rÃ   %  s   ÿ


€z_KeysView.__rand__c                 C   sd   t | ƒ}zt|ƒ}W n ty   t Y S w |D ]}t|tƒs%| |¡ q|| jvr/| |¡ q|S rL   )rµ   rº   r!   r»   r6   r-   r¶   r8   rä   r$   r$   r%   rÅ   3  s   ÿ



€z_KeysView.__or__c                 C   s‚   zt |ƒ}W n ty   t Y S w t ƒ }|D ]}t|tƒsq| j |¡}| |¡ q| jj 	¡ D ]}|j
|vr>| |j¡ q1|S rL   )rµ   r!   r»   r6   r-   r8   rˆ   r¶   r‹   rÞ   r�   r�   )rN   rk   r¼   r·   r�   r�   r“   r$   r$   r%   rÆ   B  s    ÿ

€z_KeysView.__ror__c           
      C   s’   t | ƒ}zt|ƒ}W n ty   t Y S w |D ].}t|tƒs q| j |¡}t|ƒt	@ }| jj
 |¡D ]\}}}	|	j|krE| |	j¡  nq3q|S rL   )rµ   rº   r!   r»   r6   r-   r8   rˆ   r‰   rŠ   r‹   rŒ   r�   Údiscardr�   rã   r$   r$   r%   rÇ   U  s$   ÿ

þ€z_KeysView.__sub__c                 C   sR   zt |ƒ}W n ty   t Y S w |D ]}t|tƒsq|| jv r&| |¡ q|S rL   )rµ   r!   r»   r6   r-   r8   rå   )rN   rk   r¼   r�   r$   r$   r%   rÈ   g  s   ÿ


€z_KeysView.__rsub__c                 C   rÉ   rL   rÊ   rË   r$   r$   r%   rÍ   t  rÎ   z_KeysView.__xor__c                 C   s*   |D ]}t |tƒs
q|| jv r dS qdS rÏ   )r6   r-   r8   )rN   rk   r�   r$   r$   r%   rÐ   €  s   

ÿz_KeysView.isdisjointNrÑ   )r(   r"   r)   ri   r|   r‚   r+   rÒ   r”   r>   r-   rs   rœ   r   ro   rÓ   rÔ   r²   rl   r   rµ   rÁ   r0   rÃ   rÅ   rÆ   rÇ   rÈ   rÍ   rÕ   rÐ   r$   r$   r$   r%   r<   á  s8    
   	r<   c                   @   óB   e Zd ZU dZee ed< dedefdd„Zdedefdd„Z	d	S )
Ú_CSMixinFÚ_cir�   r    c                 C   s   |S rL   r$   ©rN   r�   r$   r$   r%   r¤   �  rt   z_CSMixin._keyc                 C   s,   t |ƒtu r|S t|tƒrt |¡S tdƒ‚©Nz8MultiDict keys should be either str or subclasses of str)Útyper-   r6   Ú__str__r!   ré   r$   r$   r%   rˆ   �  s
   

z_CSMixin._identityN©
r(   r"   r)   rè   r   rÒ   r.   r-   r¤   rˆ   r$   r$   r$   r%   rç   Š  s   
 rç   c                   @   ræ   )
Ú_CIMixinTrè   r�   r    c                 C   s2   t |ƒtu r
t|ƒS t |ƒtu r|S tt |¡ƒS rL   )rë   r-   r   rì   ré   r$   r$   r%   r¤   ›  s
   z_CIMixin._keyc                 C   sF   t |tƒr|j}|d u r| ¡ }||_|S t |tƒrt |¡S tdƒ‚rê   )r6   r   r'   Úlowerr-   r!   )rN   r�   r¼   r$   r$   r%   rˆ   ¤  s   


z_CIMixin._identityNrí   r$   r$   r$   r%   rî   ˜  s   
 	rî   Únc                 C   s   | d d d dB   ¡ S )Nr   r   r…   é   )Ú
bit_length)rð   r$   r$   r%   Úestimate_log2_keysize²  s   ró   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )Ú_Entryr‰   r�   r�   rŽ   N)r(   r"   r)   r|   r.   r-   r/   r$   r$   r$   r%   rô   ·  s
   
 rô   c                	   @   sâ  e Zd ZU dZee ed< dZee ed< dd„ eddƒD ƒZ	ee
eef  ed< eed	< eed
< eed< eee dB  ed< dZe
eef dB ed< dZeed< ejdefdd„ƒZejdefdd„ƒZejjdkrrdefdd„Zed	edeee dB  defdd„ƒZd5dd„Zd6dd„Zd7d ed!edefd"d#„Zd edefd$d%„Z d&edefd'd(„Z!d ede"e#eeee f  fd)d*„Z$d ed+eddfd,d-„Z%d7d.ede"ee  fd/d0„Z&d7d.ede"ee  fd1d2„Z'd eddfd3d4„Z(dS )8Ú_HtKeysr   ÚLOG_MINSIZEé   ÚMINSIZEc              	   C   s6   i | ]}|t |d k rdnddd„ td|> ƒD ƒƒ“qS )r÷   rK   Úhc                 s   rØ   ©r¹   Nr$   ©rÙ   Úir$   r$   r%   rÛ   Å  rÜ   z_HtKeys.<dictcomp>.<genexpr>r   )r   Úrange)rÙ   Ú	log2_sizer$   r$   r%   Ú
<dictcomp>Ã  s    ý"ÿÿz_HtKeys.<dictcomp>r   ÚPREALLOCATED_INDICESrþ   ÚusableÚindicesNr¦   Úresume_slotsFrá   r    c                 C   s
   d| j > S ©Nr   )rþ   rQ   r$   r$   r%   ÚnslotsÖ  rx   z_HtKeys.nslotsc                 C   s
   | j d S r  )r  rQ   r$   r$   r%   ÚmaskÚ  rx   z_HtKeys.maskÚpypyc                 C   s>   t  | ¡t | j¡ t | j¡ | jd u rd S t | j¡ S ©Nr   )r+   Ú
__sizeof__ÚsysÚ	getsizeofr  r¦   r  rQ   r$   r$   r%   r	  à  s   
ÿ
þýÿ
ýÿz_HtKeys.__sizeof__c                 C   sœ   d|> }|d> d }|dk r| j |  ¡ }n.|dk r'tddd„ t|ƒD ƒƒ}n|dk r8td	d
d„ t|ƒD ƒƒ}ntddd„ t|ƒD ƒƒ}| ||||d�}|S )Nr   r   r   é   rù   c                 s   rØ   rú   r$   rû   r$   r$   r%   rÛ   ï  rÜ   z_HtKeys.new.<locals>.<genexpr>r   Úlc                 s   rØ   rú   r$   rû   r$   r$   r%   rÛ   ñ  rÜ   Úqc                 s   rØ   rú   r$   rû   r$   r$   r%   rÛ   ó  rÜ   )rþ   r  r  r¦   )r   Ú__copy__r   rý   )r#   rþ   r¦   rp   r  r  r¼   r$   r$   r%   Únewè  s    üz_HtKeys.newú_HtKeys[_V]c                 C   s.   dd„ | j D ƒ}t| j| j| j ¡ || jd�S )Nc                 S   s.   g | ]}|d urt |j|j|j|jƒnd ‘qS rL   )rô   r‰   r�   r�   rŽ   ©rÙ   r“   r$   r$   r%   Ú
<listcomp>ý  s     ÿÿz!_HtKeys.clone.<locals>.<listcomp>)rþ   r  r  r¦   rá   )r¦   rõ   rþ   r  r  r  rá   )rN   r¦   r$   r$   r%   Úcloneü  s   þûz_HtKeys.clonec                 C   sŽ   | j }| j}t| jƒD ]9\}}|d usJ ‚|j}||@ }|}|| dkr@|dL }||d | d @ }|s:|  |¡}n|| dks$|||< qd S ©Nr¹   é   r   )r  r  Ú	enumerater¦   r‰   Ú_find_empty_slot_resume)rN   r  r  r’   r“   r�   rü   Úperturbr$   r$   r%   Úbuild_indices
  s    
û
õz_HtKeys.build_indicesr�   Úabsentc                 C   s‚   | j }| j}||@ }|}|| }|dkr|s| js|  |¡S |dkr?|dL }|d | d |@ }|s7|  |¡S || }|dks"|S r  )r  r  rá   Ú_find_empty_slot_noting_dupsr  )rN   r�   r  r  r  rü   r  Úixr$   r$   r%   Úfind_empty_slot  s   

ûz_HtKeys.find_empty_slotc                 C   sž   | j }| j}| j}||@ }|}|| }|dkrM|dkr-|| jt @ |kr-d| _|  |¡S |dL }|d | d |@ }|sEd| _|  |¡S || }|dks|S )Nr¹   r   Tr  r   )r  r  r¦   r‰   Ú	HASH_MARKrá   r  r  )rN   r�   r  r  r¦   rü   r  r  r$   r$   r%   r  +  s$   

÷
z$_HtKeys._find_empty_slot_noting_dupsÚstartc                 C   s¬   | j }| j}| j}|d u rd n| |¡}|d u r|n|d d |@ }d}|| dkr<|d d |@ }|d7 }|| dks*|d u rP|tk sI| jtk rK|S i  }| _|||< |S )Nr  r   r   r¹   )r  r  r  ÚgetÚ_RESUME_SLOTS_MIN_STEPSrþ   Ú_LOG_RESUME_SLOTS_MINSIZE)rN   r   r  r  r  Úresumerü   Ústepsr$   r$   r%   r  B  s"   þ

z_HtKeys._find_empty_slot_resumec           	      c   sŠ   � | j }| j}| j}||@ }|}|| }|dkrC|dkr+|| }|j|kr+|||fV  |dL }|d | d |@ }|| }|dksd S d S ©Nr¹   éþÿÿÿr  r   )r  r  r¦   r‰   )	rN   r�   r  r  r¦   rü   r  r  r“   r$   r$   r%   rŒ   W  s    €
ùz_HtKeys.iter_hashr’   c                 C   s`   | j }| j}||@ }|}|| }||kr*|dL }|d | d |@ }|| }||ksd||< d S )Nr  r   r'  )r  r  )rN   r�   r’   r  r  rü   r  r  r$   r$   r%   Údel_idxg  s   ýz_HtKeys.del_idxr›   c                 C   s   |rt | jƒn| j}td |ƒS rL   )Úreversedr¦   Úfilter)rN   r›   r¦   r$   r$   r%   r¡   s  s   
z_HtKeys.iter_entriesc                 #   s°   � | j s|  |¡E d H  d S |s*tƒ }|  ¡ D ]}|j|vr'| |j¡ |V  qd S | j}tt|ƒd ddƒD ]}|| ‰ ˆ d urU|t‡ fdd„|  	ˆ j
¡D ƒƒkrUˆ V  q7d S )Nr   r¹   c                 3   s&   � | ]\}}}|j ˆ j kr|V  qd S rL   )r�   )rÙ   rÚ   r  Úe2©Úentryr$   r%   rÛ   ‡  s   € þýz-_HtKeys.iter_first_entries.<locals>.<genexpr>)rá   r¡   rµ   r�   r¶   r¦   rý   r�   rv   rŒ   r‰   )rN   r›   Úseenr“   r¦   r’   r$   r,  r%   rÞ   w  s(   €
€ý

þ€ùz_HtKeys.iter_first_entriesc           	      C   s‚   | j }| j}| j}||@ }|}|| }|dkr?|dkr'|| }|jt@ r'||_|dL }|d | d |@ }|| }|dksd S d S r&  )r  r  r¦   r‰   r  )	rN   r�   r  r  r¦   rü   r  r  r-  r$   r$   r%   Úrestore_hashŽ  s   
ùz_HtKeys.restore_hash)r    r  rV   rÑ   ))r(   r"   r)   rö   r   r|   r.   rø   rý   r   Údictr   r‡   rô   r/   r  rá   rÒ   r`   Úcached_propertyr  r  r
  ÚimplementationÚnamer	  Úclassmethodr   r  r  r  r  r  r  r   r†   rŒ   r(  r¡   rÞ   r/  r$   r$   r$   r%   rõ   ¿  s<   
 ü$

$rõ   c                       s  e Zd ZU dZdZejed< dedede	f‡ fdd„Z
ed}d
ee defdd„ƒZd~dd„Zededee fdd„ƒZedededee eB fdd„ƒZeefdedeeB dee eB fdd„ƒZededefdd„ƒZedededeeB fdd„ƒZeefdedeeB deeB fdd„ƒZdedefdd„Zededed	B fdd„ƒZedededeeB fdd„ƒZd}deded	B deeB d	B fd d„Zdee fd!d"„Zdefd#d$„Zdee fd%d&„Z de!eef fd'd(„Z"de#e fd)d*„Z$e%d+ede&fd,d-„ƒZ'edede&fd.d/„ƒZ(e) *¡ edefd0d1„ƒƒZ+e,j-j.d2k�r#defd3d4„Z/de0e1e	 e0ee0eef   f fd5d6„Z2ede3eee f fd7d8„ƒZ4e5ded9edd	fd:d;„ƒZ6de	fd<d=„Z7e7Z8ed}d
ee dedd	fd>d?„ƒZ9d
ee de:eef deee;e B  fd@dA„Z<dBe=e;e  dd	fdCdD„Z>e5ddEdF„ƒZ?e5ded9edd	fdGdH„ƒZ@e5dedd	fdIdJ„ƒZAe		d}dKdLdedd	ded	B fdMdN„ƒZBedededefdOdN„ƒZBe5d}deded	B ded	B fdPdN„ƒZBededefdQdR„ƒZCedededeeB fdSdR„ƒZCe5efdedeeB deeB fdTdR„ƒZCeD�seCZEededee fdUdV„ƒZFedededee eB fdWdV„ƒZFe5efdedeeB dee eB fdXdV„ƒZFe5de0eef fdYdZ„ƒZGed}d
ee dedd	fd[d\„ƒZHdBee;e  d]e3ee;e f d^e3ee0e;e ef f d_ee0eef  d`edd	fdadb„ZId^e3ee0e;e ef f dd	fdcdd„ZJed}d
ee dedd	fdedf„ƒZKdBee;e  d`edd	fdgdh„ZLeM�rÊddidj„ZNnddkdj„ZNdledd	fdmdn„ZOdledefdodp„ZPdqedd	fdrds„ZQd€due;e dve&dd	fdwdx„ZRdyedzedd	fd{d|„ZS‡  ZTS )�r:   z/Dictionary with the support for duplicate keys.)r‹   Ú_usedr—   r9   r9   r[   r   r    c                    s   t ƒ  | ¡}t ¡ |_|S rL   )ÚsuperÚ__new__Ú	threadingÚRLockr9   )r#   r[   r   rN   ©r®   r$   r%   r7  «  s   
zMultiDict.__new__Nr4   c                K   s¬   |   ¡  |s)d }t|tƒr|j}nt|tƒr|}|d ur)|j| ju r)|  |¡ d S |  ||¡}tt	t
t|ƒƒƒ}|dkr>d}d| _t |g ¡| _|  t	ttt  |ƒ¡ d S )Né   r   )Ú_incr_versionr6   r7   r8   r:   rè   Ú_from_mdÚ_parse_argsró   r   r|   rv   r5  rõ   r  r‹   Ú_extend_itemsr   rô   r/   )rN   r4   r   rA   r´   rþ   r$   r$   r%   rO   °  s"   


zMultiDict.__init__rA   r~   c                 C   s   |j  ¡ }|j| _|| _ d S rL   )r‹   r  r5  )rN   rA   râ   r$   r$   r%   r=  È  s   

zMultiDict._from_mdr�   c                 C   ó   d S rL   r$   ré   r$   r$   r%   ÚgetallÏ  rt   zMultiDict.getallÚdefaultc                 C   r@  rL   r$   ©rN   r�   rB  r$   r$   r%   rA  Ñ  rt   c           
      C   s†   |   |¡}t|ƒt@ }g }d}| j |¡D ]\}}}	||kr1|	j|kr1| |	j¡ |}| jjs1 nq|r6|S |t	ur<|S t
d|›�ƒ‚)ú-Return a list of all values matching the key.r¹   úKey not found: )rˆ   r‰   rŠ   r‹   rŒ   r�   r¬   rŽ   rá   r2   ÚKeyError)
rN   r�   rB  r�   r�   Úresr¾   r‘   r’   r“   r$   r$   r%   rA  Ó  s    
€c                 C   r@  rL   r$   ré   r$   r$   r%   Úgetoneé  rt   zMultiDict.getonec                 C   r@  rL   r$   rC  r$   r$   r%   rH  ë  rt   c                 C   s\   |   |¡}t|ƒt@ }| j |¡D ]\}}}|j|kr |j  S q|tur'|S td|›�ƒ‚)úwGet first value matching the key.

        Raises KeyError if the key is not found and no default is provided.
        rE  )	rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r2   rF  ©rN   r�   rB  r�   r�   r‘   r’   r“   r$   r$   r%   rH  í  s   


ÿc                 C   ó
   |   |¡S rL   ©rH  ré   r$   r$   r%   Ú__getitem__þ  rƒ   zMultiDict.__getitem__c                C   r@  rL   r$   ré   r$   r$   r%   r!    rt   zMultiDict.getc                C   r@  rL   r$   rC  r$   r$   r%   r!    rt   c                 C   s   |   ||¡S ©z„Get first value matching the key.

        If the key is not found, returns the default (or None if no default is provided)
        rL  rC  r$   r$   r%   r!    s   c                 C   s   t |  ¡ ƒS rL   )rº   râ   rQ   r$   r$   r%   rs     s   zMultiDict.__iter__c                 C   ry   rL   )r5  rQ   r$   r$   r%   r‚     r{   zMultiDict.__len__c                 C   ó   t | ƒS ©z+Return a new view of the dictionary's keys.)r<   rQ   r$   r$   r%   râ     ó   zMultiDict.keysc                 C   rO  ©zFReturn a new view of the dictionary's items as ``(key, value)`` pairs.)r;   rQ   r$   r$   r%   Úitems  rQ  zMultiDict.itemsc                 C   rO  ©z-Return a new view of the dictionary's values.)r=   rQ   r$   r$   r%   Úvalues  rQ  zMultiDict.valuesrk   c           	      C   sÈ   t |tƒstS t |tƒr| |jkS t |tƒrC| j}|j}| j|jkr$dS t| 	¡ | 	¡ ƒD ]\}}|j
|j
ks=|j|jkr@ dS q-dS | jt|ƒkrLdS |  ¡ D ]\}}| |t¡}||kra dS qPdS rÏ   )r6   r   r»   r7   r8   r:   r‹   r5  Úzipr¡   r�   rŽ   r�   rS  r!  r2   )	rN   rk   ÚlftÚrhtÚe1r+  ÚkÚvÚnvr$   r$   r%   Ú__eq__  s,   



ÿÿzMultiDict.__eq__c                 C   sP   t |tƒsdS |  |¡}t|ƒt@ }| j |¡D ]\}}}|j|kr% dS qdS rÏ   )r6   r-   rˆ   r‰   rŠ   r‹   rŒ   r�   rß   r$   r$   r%   r”   5  s   


ÿzMultiDict.__contains__c                 C   s0   d  dd„ | j ¡ D ƒ¡}d| jj› d|› d�S )Nr¨   c                 s   s"   � | ]}|j ›d |j›�V  qdS ©r§   N©r�   rŽ   r  r$   r$   r%   rÛ   C  ó   €  z%MultiDict.__repr__.<locals>.<genexpr>r©   rª   r«   )r­   r‹   r¡   r®   r(   ©rN   r±   r$   r$   r%   r²   @  s   zMultiDict.__repr__r  c                 C   s   t  | ¡t | j¡ S rL   )r+   r	  r
  r  r‹   rQ   r$   r$   r%   r	  H  s   zMultiDict.__sizeof__c                 C   s   | j t|  ¡ ƒffS rL   )r®   r‡   rS  rQ   r$   r$   r%   Ú
__reduce__K  ó   zMultiDict.__reduce__c                 C   sx   i }i }| j }| j ¡ D ]-}| |j¡}|du r*|jg }||j< |||  |j¡< n| |j¡ | j |kr9t	dƒ‚q|S )ú4Return a dict with lists of all values for each key.Nr    )
r—   r‹   r¡   r!  r�   rŽ   r¤   r�   r¬   r¢   )rN   Úresultr.  rž   r“   rU  r$   r$   r%   Úto_dictN  s   
ýzMultiDict.to_dictrŽ   c                 C   s6   |   |¡}t|ƒt@ }|  t||||ƒ¡ |  ¡  d S rL   )rˆ   r‰   rŠ   Ú_add_with_hashrô   r<  )rN   r�   rŽ   r�   r�   r$   r$   r%   r¶   d  s   
zMultiDict.addc                 C   s   | j }|| ƒS ©zReturn a copy of itself.r:  )rN   r#   r$   r$   r%   Úcopyk  s   zMultiDict.copyc                K   s<   |   ||¡}|  ttt|ƒƒ¡ |  tttt  |ƒ¡ dS )zhExtend current MultiDict with more values.

        This method must be used instead of update.
        N)	r>  Ú_reserver   r|   rv   r?  r   rô   r/   )rN   r4   r   r´   r$   r$   r%   Úextendr  s   zMultiDict.extendc                 #   sÎ  � | j }tˆ tƒrˆ j| u rdd„ | j ¡ D ƒ‰ nˆ | u r'dd„ | j ¡ D ƒ‰ ˆ �rFtˆ tƒr2ˆ j‰ tˆ tƒr¤tˆ ƒt|ƒ V  | jˆ jurqˆ j	}ˆ j ¡ D ]!}||j
ƒ}||j
ur^|j|_||ƒ}tt|ƒt@ |||jƒV  qNnˆ j ¡ D ]}t|j|j|j
|jƒV  qv|r | ¡ D ]\}}||ƒ}tt|ƒt@ |||ƒV  q‹d S d S tˆ dƒr»ttt ˆ ƒ‰ ‡ fdd„ˆ  ¡ D ƒ‰ |rÊtˆ ƒ‰ ˆ  t| ¡ ƒ¡ ztˆ ƒV  W n tyÝ   dV  Y nw tˆ ƒD ]a\}	}
t|
ƒdksùtd|	› d	t|
ƒ› d
�ƒ‚z|
d }W n t�y } z	td|	› d�ƒ|‚d }~ww z|
d }W n t�y2 } z	td|	› d�ƒ|‚d }~ww ||ƒ}tt|ƒt@ |||ƒV  qâd S t|ƒV  | ¡ D ]\}}||ƒ}tt|ƒt@ |||ƒV  �qOd S )Nc                 S   ó   g | ]}|j |jf‘qS r$   r_  r  r$   r$   r%   r  „  ó    z)MultiDict._parse_args.<locals>.<listcomp>c                 S   rl  r$   r_  r  r$   r$   r%   r  †  rm  râ   c                    s   g | ]}|ˆ | f‘qS r$   r$   )rÙ   rZ  r?   r$   r%   r  Ÿ  rm  r   r…   z#multidict update sequence element #z has length z; 2 is requiredz's key could not be fetchedr   z's value could not be fetched)rˆ   r6   r7   r8   r‹   r¡   r:   r�   rè   r¤   r�   r�   r'   rô   r‰   rŠ   rŽ   rS  Úhasattrr   r   r/   râ   r‡   rk  r!   r  Ú
ValueErrorÚ	Exception)rN   r4   r   Úidentity_funcÚkey_funcr“   r�   r�   rŽ   Úposr„   rS   r$   r?   r%   r>  |  s˜   €

€



úý

ÿÿÿ
ÿý€ÿ
ÿý€ÿë
þzMultiDict._parse_argsrS  c                 C   s    |D ]}|   |¡ q|  ¡  d S rL   )rg  r<  )rN   rS  r“   r$   r$   r%   r?  Ã  s   zMultiDict._extend_itemsc                 C   s"   d| _ t tjg ¡| _|  ¡  dS )z Remove all items from MultiDict.r   N)r5  rõ   r  rö   r‹   r<  rQ   r$   r$   r%   ÚclearÈ  s   zMultiDict.clearc           
      C   sÖ   |   |¡}t|ƒt@ }d}g }| j |¡D ]=\}}}	|	j|krR|s<| |	j|	jf¡ ||	_||	_|t	B |	_d}|  
¡  n|	jt	@ sL|  ||¡ | |	¡ | jjsR nq|sc| jt||||ƒdd� d S | j |¡ d S )NFT©r  )rˆ   r‰   rŠ   r‹   rŒ   r�   r¬   r�   rŽ   r  r<  Ú_del_atrá   rg  rô   r/  )
rN   r�   rŽ   r�   r�   ÚfoundÚremovedr‘   r’   r“   r$   r$   r%   Ú__setitem__Ñ  s,   





€zMultiDict.__setitem__c                 C   sv   |   |¡}t|ƒt@ }g }| j |¡D ]\}}}|j|kr.|  ||¡ | |¡ | jjs. nq|s5t	|ƒ‚|  
¡  d S rL   )rˆ   r‰   rŠ   r‹   rŒ   r�   rv  r¬   rá   rF  r<  )rN   r�   r�   r�   rx  r‘   r’   r“   r$   r$   r%   Ú__delitem__í  s   


€zMultiDict.__delitem__rN   zMultiDict[_T | None]c                 C   r@  rL   r$   rC  r$   r$   r%   Ú
setdefaultÿ  s   zMultiDict.setdefaultc                 C   r@  rL   r$   rC  r$   r$   r%   r{    rt   c                 C   sf   |   |¡}t|ƒt@ }| j |¡D ]\}}}|j|kr |j  S q| jt||||ƒdd� |  	¡  |S )zAReturn value for key, set value to default if key is not present.Tru  )
rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   rg  rô   r<  rJ  r$   r$   r%   r{    s   


ÿþc                 C   r@  rL   r$   ré   r$   r$   r%   Úpopone  rt   zMultiDict.poponec                 C   r@  rL   r$   rC  r$   r$   r%   r|    rt   c           	      C   sn   |   |¡}t|ƒt@ }| j |¡D ]\}}}|j|kr,|j}|  ||¡ |  ¡  |  S q|t	u r5t
|ƒ‚|S )z²Remove the first occurrence of key and return the corresponding value.

        If key is not found, default is returned if given, otherwise
        KeyError is raised.

        )rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   rv  r<  r2   rF  )	rN   r�   rB  r�   r�   r‘   r’   r“   rŽ   r$   r$   r%   r|    s   

üc                 C   r@  rL   r$   ré   r$   r$   r%   Úpopall1  rt   zMultiDict.popallc                 C   r@  rL   r$   rC  r$   r$   r%   r}  3  rt   c           	      C   sŒ   |   |¡}t|ƒt@ }g }| j |¡D ]\}}}|j|kr2| |¡ |  ||¡ |  ¡  | jj	s2 nq|s?|t
u r=t|ƒ‚|S dd„ |D ƒS )z¾Remove all occurrences of key and return the list of corresponding
        values.

        If key is not found, default is returned if given, otherwise
        KeyError is raised.

        c                 S   s   g | ]}|j ‘qS r$   )rŽ   r  r$   r$   r%   r  P  s    z$MultiDict.popall.<locals>.<listcomp>)rˆ   r‰   rŠ   r‹   rŒ   r�   r¬   rv  r<  rá   r2   rF  )	rN   r�   rB  r�   r�   rx  r‘   r’   r“   r$   r$   r%   r}  5  s    
	

€c                 C   s’   | j dkr	tdƒ‚| jj}t|ƒd }|| }|du r'|d8 }|| }|du s| j |j|¡ ||d…= ~|  j d8  _ |  ¡  |  |j	¡|j
fS )z1Remove and return an arbitrary (key, value) pair.r   zempty multidictr   N)r5  rF  r‹   r¦   r�   r(  r‰   r<  r¤   r�   rŽ   )rN   r¦   rs  r-  r$   r$   r%   ÚpopitemR  s   
þ
zMultiDict.popitemc             	   K   sj   |   ||¡}|  ttt|ƒƒ¡}i }i }g }z|  tttt  |ƒ||||¡ W |  	|¡ dS |  	|¡ w )z1Update the dictionary, overwriting existing keys.N)
r>  Ú_reserve_batchr   r|   rv   Ú_update_itemsr   rô   r/   Ú_post_update)rN   r4   r   r´   ÚreserveÚupdatedÚdeletedÚreplacedr$   r$   r%   Úupdatem  s   ÿzMultiDict.updaterƒ  r„  r…  r‚  c                 C   sÔ   |D ]e}d}|j }| j |j¡D ]@\}	}
}t|ƒ}|j |ks"||v r#q|sEd}|||< |r3| |d ¡ | |j|jf¡ |j|_|j|_q||vrP||jf||< q|sg|r\|  	|¡ d}|  
|¡ ||t|ƒ< qd S )NFTr   )r�   r‹   rŒ   r‰   rM   Úpopr¬   r�   rŽ   rj  rg  )rN   rS  rƒ  r„  r…  r‚  r-  rw  r�   r‘   r’   r“   Úeidr$   r$   r%   r€    s4   
€

€èzMultiDict._update_itemsc           
      C   sŽ   |rA| j }|j}|j}t|jƒD ]0}|| }|dk rq| t|| ƒ¡}|d ur@|\}}	|j|	u r@d ||< d||< |  jd8  _q|  	¡  d S )Nr   r'  r   )
r‹   r  r¦   rý   r  r!  rM   rŽ   r5  r<  )
rN   r„  râ   r  r¦   r‘   r’   Údoomedr“   rŽ   r$   r$   r%   r�  ¡  s"   
€zMultiDict._post_updatec                K   sT   |   ||¡}|  ttt|ƒƒ¡}z|  tttt  |ƒ|¡ W |  	¡  dS |  	¡  w )z4Merge into the dictionary, adding non-existing keys.N)
r>  r  r   r|   rv   Ú_merge_itemsr   rô   r/   r<  )rN   r4   r   r´   r‚  r$   r$   r%   Úmerge³  s
   zMultiDict.mergec           	      C   st   i }|D ]3}|j }| j |j¡D ]\}}}|j |kr"t|ƒ|vr" nq|r,|  |¡ d}|  |¡ ||t|ƒ< qd S r  )r�   r‹   rŒ   r‰   rM   rj  rg  )	rN   rS  r‚  Úaddedr-  r�   r‘   r’   r“   r$   r$   r%   rŠ  ½  s   €

€özMultiDict._merge_itemsc                 C   s6   t � ttƒ}W d   ƒ n1 sw   Y  || _d S rL   )Ú_VERSION_LOCKrv   r—   )rN   r[  r$   r$   r%   r<  Î  s   
ÿ
zMultiDict._incr_versionc                 C   s   t tƒ| _d S rL   )rv   r—   rQ   r$   r$   r%   r<  Õ  ó   Úextrac                 C   s(   | j j|k r|  t| j| ƒ¡ d S d S rL   )r‹   r  Ú_resizeró   r5  )rN   r�  r$   r$   r%   rj  Ø  s   ÿzMultiDict._reservec                 C   s6   | j }t|jƒ}|| jks||j |k r|  |¡ |S rL   )r‹   r�   r¦   r5  r  rj  )rN   r�  râ   rð   r$   r$   r%   r  Ü  s
   

zMultiDict._reserve_batchÚlog2_newsizec                 C   sf   | j }| j}t|jƒ|kr|j}ndd„ |jD ƒ}t ||¡}|j|_| j|8  _| ¡  || _ d S )Nc                 S   s   g | ]}|d ur|‘qS rL   r$   r  r$   r$   r%   r  ì  rm  z%MultiDict._resize.<locals>.<listcomp>)	r‹   r5  r�   r¦   rõ   r  rá   r  r  )rN   r‘  ÚoldkeysÚ
newentriesr¦   Únewkeysr$   r$   r%   r�  å  s   
zMultiDict._resizeFr-  r  c                 C   s†   | j jdkr|  | jd tjd B  ¡ ¡ | j }| |j|¡}|j	 
|¡ t|j	ƒd |j|< |  ¡  |  jd7  _| jd8  _d S )Nr   r   r   )r‹   r  r�  r5  rõ   rø   rò   r  r‰   r¦   r¬   r�   r  r<  )rN   r-  r  râ   r‘   r$   r$   r%   rg  ó  s   zMultiDict._add_with_hashr‘   r’   c                 C   s*   d | j j|< d| j j|< |  jd8  _d S )Nr'  r   )r‹   r¦   r  r5  )rN   r‘   r’   r$   r$   r%   rv  þ  s   zMultiDict._del_atrL   )rA   r~   r    NrV   rÑ   )Ur(   r"   r)   r*   rW   r8  r9  r.   r+   r   r7  rd   r   r/   rO   r=  r   r-   r‡   rA  r0   rf   r2   r1   rH  rM  r!  r   rs   r|   r‚   r   râ   r   rS  r=   rU  rj   rÒ   r]  r”   rÓ   rÔ   r²   r
  r2  r3  r	  r†   rë   rb  r0  rf  rc   r¶   ri  r  rk  r   rô   r>  r   r?  rt  ry  rz  r{  r|  r   r‡  r}  r~  r†  r€  r�  r‹  rŠ  rC   r<  rj  r  r�  rg  rv  Ú__classcell__r$   r$   r:  r%   r:   Ÿ  sò   
 

 ($$
*	þ
ý
üGÿÿÿÿþ"$ (
þýüûú
ù&"	
	r:   c                   @   s   e Zd ZdZdS )ÚCIMultiDictz@Dictionary with the support for duplicate case-insensitive keys.N)r(   r"   r)   r*   r$   r$   r$   r%   r–    s    r–  c                   @   s   e Zd ZU dZdZee ed< d1dd„Zde	fd	d
„Z
ededee fdd„ƒZedededee eB fdd„ƒZefdedeeB dee eB fdd„Zededefdd„ƒZedededeeB fdd„ƒZefdedeeB deeB fdd„Zdedefdd„ZedededB fdd„ƒZedededeeB fdd„ƒZd2dededB deeB dB fdd„Zdee fdd„Zdefdd„Zdee fd d!„Zdeeef fd"d#„Zdee fd$d%„Zd&ede fd'd(„Z!dede fd)d*„Z"e# $¡ defd+d,„ƒZ%de&eee f fd-d.„Z'dee fd/d0„Z(dS )3r7   z'Read-only proxy for MultiDict instance.r   r8   r4   ú"MultiDict[_V] | MultiDictProxy[_V]c                 C   s@   t |ttfƒstdt|ƒ› �ƒ‚t |tƒr|j| _d S || _d S )Nz8ctor requires MultiDict or MultiDictProxy instance, not )r6   r:   r7   r!   rë   r8   ©rN   r4   r$   r$   r%   rO     s   ÿ

zMultiDictProxy.__init__r    c                 C   s   t d| jj› d�ƒ‚)Nzcan't pickle z objects)r!   r®   r(   rQ   r$   r$   r%   rb    rc  zMultiDictProxy.__reduce__r�   c                 C   r@  rL   r$   ré   r$   r$   r%   rA    rt   zMultiDictProxy.getallrB  c                 C   r@  rL   r$   rC  r$   r$   r%   rA    rt   c                 C   ó"   |t ur| j ||¡S | j |¡S )rD  )r2   r8   rA  rC  r$   r$   r%   rA     s   c                 C   r@  rL   r$   ré   r$   r$   r%   rH  '  rt   zMultiDictProxy.getonec                 C   r@  rL   r$   rC  r$   r$   r%   rH  )  rt   c                 C   r™  )rI  )r2   r8   rH  rC  r$   r$   r%   rH  +  s   c                 C   rK  rL   rL  ré   r$   r$   r%   rM  7  rƒ   zMultiDictProxy.__getitem__Nc                C   r@  rL   r$   ré   r$   r$   r%   r!  :  rt   zMultiDictProxy.getc                C   r@  rL   r$   rC  r$   r$   r%   r!  <  rt   c                 C   s   | j  ||¡S rN  )r8   rH  rC  r$   r$   r%   r!  >  s   c                 C   s   t | j ¡ ƒS rL   )rº   r8   râ   rQ   r$   r$   r%   rs   E  rŽ  zMultiDictProxy.__iter__c                 C   ru   rL   r€   rQ   r$   r$   r%   r‚   H  rƒ   zMultiDictProxy.__len__c                 C   ó
   | j  ¡ S rP  )r8   râ   rQ   r$   r$   r%   râ   K  rx   zMultiDictProxy.keysc                 C   rš  rR  )r8   rS  rQ   r$   r$   r%   rS  O  rx   zMultiDictProxy.itemsc                 C   rš  rT  )r8   rU  rQ   r$   r$   r%   rU  S  rx   zMultiDictProxy.valuesrk   c                 C   s
   | j |kS rL   r   )rN   rk   r$   r$   r%   r]  W  rƒ   zMultiDictProxy.__eq__c                 C   s
   || j v S rL   r   ré   r$   r$   r%   r”   Z  rƒ   zMultiDictProxy.__contains__c                 C   s.   d  dd„ |  ¡ D ƒ¡}d| jj› d|› d�S )Nr¨   c                 s   s"   � | ]\}}|›d |›�V  qdS r^  r$   )rÙ   rZ  r[  r$   r$   r%   rÛ   _  r`  z*MultiDictProxy.__repr__.<locals>.<genexpr>r©   rª   r«   )r­   rS  r®   r(   ra  r$   r$   r%   r²   ]  s   zMultiDictProxy.__repr__c                 C   rš  )rd  )r8   rf  rQ   r$   r$   r%   rf  b  rx   zMultiDictProxy.to_dictc                 C   ru   rh  )r:   r8   rQ   r$   r$   r%   ri  f  rx   zMultiDictProxy.copy)r4   r—  rL   ))r(   r"   r)   r*   rW   r:   r/   r.   rO   r   rb  r   r-   r‡   rA  r0   r2   r1   rH  rM  r!  r   rs   r|   r‚   r   râ   r   rS  r=   rU  r+   rÒ   r]  r”   rÓ   rÔ   r²   r0  rf  ri  r$   r$   r$   r%   r7     sB   
 

 &"$r7   c                       sD   e Zd ZdZdee ee B f‡ fdd„Zdee fdd„Z	‡  Z
S )ÚCIMultiDictProxyz)Read-only proxy for CIMultiDict instance.r4   c                    s0   t |ttfƒstdt|ƒ› �ƒ‚tƒ  |¡ d S )Nz<ctor requires CIMultiDict or CIMultiDictProxy instance, not )r6   r–  r›  r!   rë   r6  rO   r˜  r:  r$   r%   rO   n  s   ÿÿzCIMultiDictProxy.__init__r    c                 C   ru   rh  )r–  r8   rQ   r$   r$   r%   ri  w  rx   zCIMultiDictProxy.copy)r(   r"   r)   r*   r:   r/   r7   rO   r–  ri  r•  r$   r$   r:  r%   r›  k  s    	r›  c                 C   s.   t | tƒr| j} | jS t | tƒstdƒ‚| jS )Nz&Parameter should be multidict or proxy)r6   r7   r8   r:   r!   r—   rD   r$   r$   r%   Ú
getversion|  s   

þrœ  )rA   rB   r    r5   )QÚenumr`   Ú	itertoolsrÓ   r
  r8  r   Úcollections.abcr   r   r   r   r   r   r	   Údataclassesr
   Útypingr   r   r   r   r   r   r   r   r   Ú_abcr   r   r   r   Úversion_infor   Útyping_extensionsÚmaxsizerŠ   r  r#  r"  r-   r   r/   r0   ÚEnumr1   r2   Úcountr—   rn  r3   rC   ÚLockr�  r+   r@   rE   rF   rX   rc   rd   rf   ri   rj   rl   r>   r}   r;   r=   r<   rç   rî   r|   ró   rô   rõ   r:   r–  r7   r›  rœ  r$   r$   r$   r%   Ú<module>   sz    $	,


		 L' * `    ic"