
    i                       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                                Zded<   ddZ eed            eed           dS )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.returnOrderedBidict[VT, KT]c                    d S N selfs    @/usr/local/lib/python3.11/dist-packages/bidict/_orderedbidict.pyinversezOrderedBidict.inverse"   s    47C    c                    d S r   r   r   s    r   invzOrderedBidict.inv%   s    03r   Nonec                    t                                                       | j                                         | j        x| j        _        | j        _        dS )zRemove all items.N)superclear_node_by_korv_sntlnxtprv)r   	__class__s    r   r   zOrderedBidict.clear(   sA      """*.*4
r   keyr	   r
   c                    t                                          |          }| j        | j        r|n|         }|                     |           |S r   )r   _popr   _bykey_dissoc_node)r   r"   valnoder!   s       r   r$   zOrderedBidict._pop.   sI    ggll3!"=###>$
r   Tlastbooltuple[KT, VT]c                    | st          d          t          | j        |rdnd          }| j        j        |         }| j        r||                     |          fS | 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   r)   r(   korvs       r   popitemzOrderedBidict.popitem4   s      	53444tzD#;55e<<!)$/; 	)4((|  &&,,r   c                2   | j         r|n| j        |         }| j        |         }|j        |j        _        |j        |j        _        | j        }|r%|j        }||_        ||_        |x|_        |_        dS |j        }||_        ||_        |x|_        |_        dS )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    
 k6sstz#!$'xxz 		,xHDHDH&**DHx|||IDH DH'++DHy}}}r   t.KeysView[KT]c                     t          |           S )z9A set-like object providing a view on the contained keys.)_OrderedBidictKeysViewr   s    r   keyszOrderedBidict.keys^   s    %d+++r   t.ItemsView[KT, VT]c                     t          |           S )z:A set-like object providing a view on the contained items.)_OrderedBidictItemsViewr   s    r   itemszOrderedBidict.itemsb   s    &t,,,r   )r   r   )r   r   )r"   r	   r   r
   )T)r)   r*   r   r+   )r"   r	   r)   r*   r   r   )r   r7   )r   r;   )__name__
__module____qualname____doc__tTYPE_CHECKINGpropertyr   r   r   r$   r0   r6   r:   r>   __classcell__)r!   s   @r   r   r      s        FF 4	777 
7	333 
35 5 5 5 5 5     - - - - -", , , , ,2, , , ,- - - - - - - -r   r   c                  "    e Zd ZU ded<   ddZdS )r9   zOrderedBidict[KT, t.Any]_mappingr   t.Iterator[KT]c                *    t          | j                  S r   )reversedrH   r   s    r   __reversed__z#_OrderedBidictKeysView.__reversed__o   s    &&&r   N)r   rI   r?   r@   rA   __annotations__rL   r   r   r   r9   r9   l   s6         &&&&' ' ' ' ' 'r   r9   c                  "    e Zd ZU ded<   ddZdS )r=   zOrderedBidict[KT, VT]rH   r   t.Iterator[tuple[KT, VT]]c              #  T   K   | j         }t          |          D ]}|||         fV  d S r   )rH   rK   )r   obr"   s      r   rL   z$_OrderedBidictItemsView.__reversed__v   sC      ]B<< 	 	Cr#w,	 	r   N)r   rP   rM   r   r   r   r=   r=   s   s6         ####     r   r=   zv__lt__ __le__ __gt__ __ge__ __eq__ __ne__ __sub__ __rsub__ __or__ __ror__ __xor__ __rxor__ __and__ __rand__ isdisjointzt.Iterable[str]_setmethodnamescls
_OView[KT]viewnamestrr   r   c                `     d fd}t           D ]}t           | ||                     d S )N
methodnamerW   r   t.Anyc                H     d fd} |_         j         d  |_        |S )	Nr   ?_OrderedBidictKeysView[KT] | _OrderedBidictItemsView[KT, t.Any]argsrZ   r   c                   | j         j        }t          |t                    s t	          t
                    | g|R  S  t	          |	                      }t	          |          }t          |          dk    s<t          |d         x}| j                  rt          |j         j        t                    s || S |j         j        } t	          |	                      } ||          S )Nr   r   )rH   r2   
isinstancedictr.   r   lenr!   )
r   r]   fwdmfwdm_dict_viewfwdm_dict_view_methodargarg_dictarg_dict_viewrY   rV   s
           r   methodzT_override_set_methods_to_use_backing_dict.<locals>.make_proxy_method.<locals>.method   s    =&DdD)) =/wsJ//<t<<<<4WT84466N$+NJ$G$G!D		Q!$q'>3DNCC !#,"4d;;  -,d33 |)H7GHh7799M((777r   .)r   r\   r]   rZ   r   rZ   )r?   rA   )rY   rh   rT   rV   s   ` r   make_proxy_methodzD_override_set_methods_to_use_backing_dict.<locals>.make_proxy_method   sN    	8 	8 	8 	8 	8 	8 	8* %!$!1@@J@@r   )rY   rW   r   rZ   )rS   setattr)rT   rV   rj   names   ``  r   )_override_set_methods_to_use_backing_dictrm      sc          4   4 4T,,T2233334 4r   r:   r>   )rT   rU   rV   rW   r   r   )rB   
__future__r   typingrC   collections.abcr   _baser   _bidictr   _orderedbaser   _typingr	   r
   r   r9   	ItemsViewr=   UnionTypeAny_OViewsplitrS   rN   rm   r   r   r   <module>r{      s   & % % " " " " " "           ! ! ! ! ! ! " " " " " " + + + + + +            G- G- G- G- G-%b"f-}RV/D G- G- G-^' ' ' ' '^B/ ' ' '    ak"b&1    
.r23QV<STVXYX]T]<^5__	`B%''  
 
 
 
4 4 4 4> * )*@& I I I ) )*A7 K K K K Kr   