
    wg                       U d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZ dd
lmZ  G d deeef   e
eef         Z G d dee         Z G d dej$                  eef         Zej(                  ej*                  ee      ej*                  eeej,                  f      f   Zdj1                         Zded<   ddZ eed        eed       y)zProvide :class:`OrderedBidict`.    )annotationsN)Set   )BidictKeysView)MutableBidict)OrderedBidictBase)KT)VTc                       e Zd ZdZej
                  red
d       Zed
d       Zd fdZ	d fdZ
dddZdddZddZdd	Z xZS )OrderedBidictz<Mutable bidict type that maintains items in insertion order.c                     y N selfs    Z/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/bidict/_orderedbidict.pyinversezOrderedBidict.inverse"   s    47    c                     y r   r   r   s    r   invzOrderedBidict.inv%   s    03r   c                    t         |           | j                  j                          | j                  x| j                  _        | j                  _        y)zRemove all items.N)superclear_node_by_korv_sntlnxtprv)r   	__class__s    r   r   zOrderedBidict.clear(   s8      "*.**4

r   c                    t         |   |      }| j                  | j                  r|n|   }| j	                  |       |S r   )r   _popr   _bykey_dissoc_node)r   keyvalnoder   s       r   r    zOrderedBidict._pop.   s<    gl3!!##>$
r   c                    | st        d      t        | j                  |rdnd      }| j                  j                  |   }| j
                  r|| j                  |      fS | j                  j                  |      |fS )u   *b.popitem() → (k, v)*

        If *last* is true,
        remove and return the most recently added item as a (key, value) pair.
        Otherwise, remove and return the least recently added item.

        :raises KeyError: if *b* is empty.
        zOrderedBidict is emptyr   r   )KeyErrorgetattrr   r   r   r!   r    )r   lastr%   korvs       r   popitemzOrderedBidict.popitem4   sq     344tzzD5e<!!))$/;;4((||  &,,r   c                   | j                   r|n| j                  |   }| j                  |   }|j                  |j                  _        |j                  |j                  _        | j
                  }|r)|j                  }||_        ||_        |x|_        |_        y|j                  }||_        ||_        |x|_        |_        y)zMove the item with the given key to the end if *last* is true, else to the beginning.

        :raises KeyError: if *key* is missing
        N)r!   _fwdmr   r   r   r   )r   r#   r)   r*   r%   sntllastnode	firstnodes           r   move_to_endzOrderedBidict.move_to_endE   s    
 kkstzz#!!$'xxxxzzxxHDHDH&**DHx|IDH DH'++DHy}r   c                    t        |       S )z9A set-like object providing a view on the contained keys.)_OrderedBidictKeysViewr   s    r   keyszOrderedBidict.keys^   s    %d++r   c                    t        |       S )z:A set-like object providing a view on the contained items.)_OrderedBidictItemsViewr   s    r   itemszOrderedBidict.itemsb   s    &t,,r   )returnzOrderedBidict[VT, KT])r8   None)r#   r	   r8   r
   )T)r)   boolr8   ztuple[KT, VT])r#   r	   r)   r:   r8   r9   )r8   zt.KeysView[KT])r8   zt.ItemsView[KT, VT])__name__
__module____qualname____doc__tTYPE_CHECKINGpropertyr   r   r   r    r+   r1   r4   r7   __classcell__)r   s   @r   r   r      sG    F	7 
7	3 
35-",2,-r   r   c                       e Zd ZU ded<   ddZy)r3   zOrderedBidict[KT, t.Any]_mappingc                ,    t        | j                        S r   )reversedrD   r   s    r   __reversed__z#_OrderedBidictKeysView.__reversed__o   s    &&r   N)r8   zt.Iterator[KT]r;   r<   r=   __annotations__rG   r   r   r   r3   r3   l   s    &&'r   r3   c                       e Zd ZU ded<   ddZy)r6   zOrderedBidict[KT, VT]rD   c              #  V   K   | j                   }t        |      D ]  }|||   f  y wr   )rD   rF   )r   obr#   s      r   rG   z$_OrderedBidictItemsView.__reversed__v   s0     ]]B< 	Cr#w,	s   ')N)r8   zt.Iterator[tuple[KT, VT]]rH   r   r   r   r6   r6   s   s    ##r   r6   zv__lt__ __le__ __gt__ __ge__ __eq__ __ne__ __sub__ __rsub__ __or__ __ror__ __xor__ __rxor__ __and__ __rand__ isdisjointzt.Iterable[str]_setmethodnamesc                R     d fd}t         D ]  }t         | ||              y )Nc                R     d fd} |_         j                   d  |_        |S )Nc                   | j                   j                  }t        |t              s t	        t
              | g| S  t	        |	             }t	        |      }t        |      dk7  s?t        |d   x}| j                        r$t        |j                   j                  t              s || S |j                   j                  } t	        |	             } ||      S )Nr   r   )rD   r-   
isinstancedictr(   r   lenr   )
r   argsfwdmfwdm_dict_viewfwdm_dict_view_methodargarg_dictarg_dict_view
methodnameviewnames
           r   methodzT_override_set_methods_to_use_backing_dict.<locals>.make_proxy_method.<locals>.method   s    ==&&DdD)/wsJ/<t<<4WT846N$+NJ$G!D	Q!$q'>3DNNC!#,,"4"4d;,d33 ||))H7GHh79M(77r   .)r   z?_OrderedBidictKeysView[KT] | _OrderedBidictItemsView[KT, t.Any]rT   t.Anyr8   r_   )r;   r=   )r[   r]   clsr\   s   ` r   make_proxy_methodzD_override_set_methods_to_use_backing_dict.<locals>.make_proxy_method   s0    	8* %!$!1!1 2!J<@r   )r[   strr8   r_   )rM   setattr)r`   r\   ra   names   ``  r   )_override_set_methods_to_use_backing_dictre      s+    4   4T,T234r   r4   r7   )r`   z
_OView[KT]r\   rb   r8   r9   )r>   
__future__r   typingr?   collections.abcr   _baser   _bidictr   _orderedbaser   _typingr	   r
   r   r3   	ItemsViewr6   UnionTypeAny_OViewsplitrM   rI   re   r   r   r   <module>rs      s    & "   ! " +  G-%b"f-}RV/D G-^'^B/ 'akk"b&1  
.r23QVV<STVXYX]X]T]<^5__	`B%'  
4> **@& I )*A7 Kr   