
    [hJA                        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 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 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 d dlmZ ddlmZ  ede          Z ede          Z ede          Z ede          Z G d d          Z G d dee
eef                   Z G d d eeef                   Z G d! d"ee                   Z G d# d$          Z 	 d-d.d,Z!d%S )/    )annotations)filterfalse)AbstractSet)Any)Callable)cast)
Collection)Dict)Iterable)Iterator)List)Mapping)NoReturn)Optional)Set)Tuple)TYPE_CHECKING)TypeVar)Union   )Self_T)bound_S_KT_VTc                  :    e Zd ZdZddZddZdd
ZddZddZdS )ReadOnlyContainer argr   kwreturnr   c                :    t          d| j        j        z            )Nz&%s object is immutable and/or readonly	TypeError	__class____name__selfr    r!   s      n/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/util/_py_collections.py	_readonlyzReadOnlyContainer._readonly)   s!    4t~7NN
 
 	
    c                :    t          d| j        j        z            )Nz%s object is immutabler$   r(   s      r*   
_immutablezReadOnlyContainer._immutable.   s    04>3JJKKKr,   keyc                .    |                                   d S Nr+   r)   r/   s     r*   __delitem__zReadOnlyContainer.__delitem__1       r,   valuec                .    |                                   d S r1   r2   r)   r/   r6   s      r*   __setitem__zReadOnlyContainer.__setitem__4   r5   r,   strc                .    |                                   d S r1   r2   r8   s      r*   __setattr__zReadOnlyContainer.__setattr__7   r5   r,   Nr    r   r!   r   r"   r   )r/   r   r"   r   )r/   r   r6   r   r"   r   )r/   r:   r6   r   r"   r   )	r'   
__module____qualname__	__slots__r+   r.   r4   r9   r<   r   r,   r*   r   r   &   s        I
 
 
 

L L L L           r,   r   c                  V    e Zd ZerddZddZdd
ZddZdddZddZ	dddZ
ddZdS )ImmutableDictBaseargsr   r"   r   c                    d S r1   r   clsrC   s     r*   __new__zImmutableDictBase.__new__>         r,   c                    d S r1   r   rE   s     r*   __init__zImmutableDictBase.__init__@   rH   r,   r    r!   r   c                .    |                                   d S r1   )r.   r(   s      r*   r+   zImmutableDictBase._readonlyB   s    r,   c                .    |                                   d S r1   r2   r)   s    r*   clearzImmutableDictBase.clearE   r5   r,   Nr/   defaultOptional[Any]c                .    |                                   d S r1   r2   r)   r/   rO   s      r*   popzImmutableDictBase.popH   r5   r,   c                .    |                                   d S r1   r2   rM   s    r*   popitemzImmutableDictBase.popitemK   r5   r,   c                .    |                                   d S r1   r2   rR   s      r*   
setdefaultzImmutableDictBase.setdefaultN   r5   r,   c                .    |                                   d S r1   r2   r(   s      r*   updatezImmutableDictBase.updateQ   r5   r,   )rC   r   r"   r   )rC   r   r=   r"   r   r1   )r/   r   rO   rP   r"   r   )r'   r>   r?   r   rG   rJ   r+   rN   rS   rU   rW   rY   r   r,   r*   rB   rB   ;   s         +1111****                      r,   rB   c                  p     e Zd Zd ZddZd Z	 dddZ	 dddZddZddZ	d dZ
d! fdZd! fdZ xZS )"immutabledictc                ^    t                               |           }t          j        |g|R   |S r1   )rB   rG   dictrJ   )rF   rC   news      r*   rG   zimmutabledict.__new__V   s2    '',,c!D!!!!
r,   rC   3Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]]c                    d S r1   r   )r)   rC   s     r*   rJ   zimmutabledict.__init__[   s	     	r,   c                0    t           t          |           ffS r1   )r\   r^   rM   s    r*   
__reduce__zimmutabledict.__reduce__`   s    tDzzm++r,   N_immutabledict__dOptional[Mapping[_KT, _VT]]r"   immutabledict[_KT, _VT]c                    |s| S t                               | j                  }t                              ||            t                              ||           |S r1   rB   rG   r&   r^   rJ   rY   )r)   rd   r_   s      r*   unionzimmutabledict.unionc   sS      	K''77c4   C
r,   r!   r   c                    |s|s| S t                               | j                  }t                              ||            |rt                              ||           t                              ||           |S r1   rh   )r)   rd   r!   r_   s       r*   _union_w_kwzimmutabledict._union_w_kwn   sv      	2 	K''77c4    	"KKS!!!C
r,   dictsc                    d }|D ][}|rW|:t                               | j                  }t                              ||            t                              ||           \|| S |S r1   rh   )r)   rl   r_   ds       r*   
merge_withzimmutabledict.merge_with|   sr      	$ 	$A $;+33DNCCCMM#t,,,C###;K
r,   r:   c                <    dt                               |           z  S )Nzimmutabledict(%s))r^   __repr__rM   s    r*   rq   zimmutabledict.__repr__   s    "T]]4%8%888r,   _immutabledict__valuer   r   c                .    |                                   d S r1   r2   )r)   rr   s     r*   __ior__zimmutabledict.__ior__   r5   r,   Mapping[_KT, _VT]c                `    t          t                                          |                    S r1   )r\   super__or__r)   rr   r&   s     r*   rx   zimmutabledict.__or__   s*     GGNN7##
 
 	
r,   c                `    t          t                                          |                    S r1   )r\   rw   __ror__ry   s     r*   r{   zimmutabledict.__ror__   s*     GGOOG$$
 
 	
r,   )rC   r`   r1   )rd   re   r"   rf   )rd   re   r!   r   r"   rf   )rl   re   r"   rf   r"   r:   )rr   r   r"   r   )rr   ru   r"   rf   )r'   r>   r?   rG   rJ   rc   ri   rk   ro   rq   rt   rx   r{   __classcell__r&   s   @r*   r\   r\   U   s         
   
, , , 26	 	 	 	 	 26       9 9 9 9   
 
 
 
 
 

 
 
 
 
 
 
 
 
 
r,   r\   c                  :    e Zd ZU dZded<   d6d7 fd	Zd8dZd9 fdZd9 fdZd: fdZ	d; fdZ
d9 fdZd< fdZd=dZd>dZd?dZd@dZeZdA fd ZdBd#ZdCd%ZdBd&ZdDd(ZdEd*ZdFd+ZdBd,ZdD fd-ZdGd/ZdH fd0ZdEd1ZdH fd2ZdBd3ZdH fd4Z dGd5Z! xZ"S )I
OrderedSet_listList[_T]r   Nrn   Optional[Iterable[_T]]r"   Nonec                    |<t          |          | _        t                                          | j                   d S g | _        d S r1   )unique_listr   rw   rY   )r)   rn   r&   s     r*   rJ   zOrderedSet.__init__   s>    =$QDJGGNN4:&&&&&DJJJr,   OrderedSet[_T]c                    |                                  }| j                                        |_        t                              ||j                   |S r1   )r&   r   copysetrY   )r)   cps     r*   r   zOrderedSet.copy   s?    ^^:??$$

2rx   	r,   elementr   c                    || vr| j                             |           t                                          |           d S r1   r   appendrw   addr)   r   r&   s     r*   r   zOrderedSet.add   s@    $Jg&&&Gr,   c                ~    t                                          |           | j                            |           d S r1   )rw   remover   r   s     r*   r   zOrderedSet.remove   s5    w
'"""""r,   c                    	 | j                                         }n# t          $ r t          d          d w xY wt	                                          |           |S )Npop from an empty set)r   rS   
IndexErrorKeyErrorrw   r   )r)   r6   r&   s     r*   rS   zOrderedSet.pop   sb    	>JNN$$EE 	> 	> 	>233=	>us    8posintc                    || vr| j                             ||           t                                          |           d S r1   )r   insertrw   r   )r)   r   r   r&   s      r*   r   zOrderedSet.insert   sB    $Jc7+++Gr,   c                    || v r=| j                             |           t                                          |           d S d S r1   )r   r   rw   r   s     r*   discardzOrderedSet.discard   sE    d??Jg&&&GGNN7##### ?r,   c                V    t                                                       g | _        d S r1   )rw   rN   r   )r)   r&   s    r*   rN   zOrderedSet.clear   s    


r,   r/   c                    | j         |         S r1   r   r3   s     r*   __getitem__zOrderedSet.__getitem__   s    z#r,   Iterator[_T]c                *    t          | j                  S r1   )iterr   rM   s    r*   __iter__zOrderedSet.__iter__   s    DJr,   otherc                ,    |                      |          S r1   ri   r)   r   s     r*   __add__zOrderedSet.__add__       zz%   r,   r:   c                0    | j         j        d| j        dS N())r&   r'   r   rM   s    r*   rq   zOrderedSet.__repr__   s    >222DJJJ??r,   	iterablesIterable[_T]c                    |D ]F}|D ]A}|| vr;| j                             |           t                                          |           BGd S r1   r   )r)   r   iterableer&   s       r*   rY   zOrderedSet.update   sc    ! 	# 	#H # #D==J%%a(((GGKKNNN#	# 	#r,   AbstractSet[_S]OrderedSet[Union[_T, _S]]c                0    |                      |           | S r1   )rY   r   s     r*   rt   zOrderedSet.__ior__   s    Er,   Iterable[_S]c                B    |                                  } |j        |  |S r1   )r   rY   )r)   r   results      r*   ri   zOrderedSet.union   s#    ,0IIKKur,   c                ,    |                      |          S r1   r   r   s     r*   rx   zOrderedSet.__or__   r   r,   Iterable[Any]c                v    t                       j        |  |                     fd| D                       S )Nc              3  $   K   | ]
}|v |V  d S r1   r   .0a	other_sets     r*   	<genexpr>z*OrderedSet.intersection.<locals>.<genexpr>   s'      @@Aia@@r,   )r   rY   r&   )r)   r   r   s     @r*   intersectionzOrderedSet.intersection   sC    !ee		%  ~~@@@@@@@@@@r,   AbstractSet[object]c                ,    |                      |          S r1   )r   r   s     r*   __and__zOrderedSet.__and__   s      '''r,   c                L    t          |t                    r|x}nEt          |t                    r|}t          |          nt          |          }t          |                               fd D                       }|                     fd|D                        |S )Nc              3  $   K   | ]
}|v|V  d S r1   r   r   s     r*   r   z2OrderedSet.symmetric_difference.<locals>.<genexpr>  s-      FFa1I3E3E3E3E3E3EFFr,   c              3  $   K   | ]
}|v|V  d S r1   r   r   r   r)   s     r*   r   z2OrderedSet.symmetric_difference.<locals>.<genexpr>  s'      ==Aq}}a}}}}==r,   )
isinstancer   r	   listr&   rY   )r)   r   
collectionr   r   s   `   @r*   symmetric_differencezOrderedSet.symmetric_difference   s    eS!! 	(%**Jz** 	(JE

IIeJJIFFFF4FFFFF==========r,   c                    t          t          t          t          t          f                  |                               |          S r1   )r   r   r   r   r   r   r   s     r*   __xor__zOrderedSet.__xor__	  s4    JuRV}-t44II
 
 	
r,   c                ~     t                      j        | |                     fd| j        D                       S )Nc              3  $   K   | ]
}|v |V  d S r1   r   r   s     r*   r   z(OrderedSet.difference.<locals>.<genexpr>  s'      FFAqI~~a~~~~FFr,   )rw   
differencer&   r   )r)   r   r   r&   s     @r*   r   zOrderedSet.difference  s@    &EGG&.	~~FFFFFFFFFFr,   AbstractSet[Optional[_T]]c                ,    |                      |          S r1   )r   r   s     r*   __sub__zOrderedSet.__sub__  s    u%%%r,   c                f      t                      j        |   fd j        D              _        d S )Nc                    g | ]}|v |	S r   r   r   s     r*   
<listcomp>z2OrderedSet.intersection_update.<locals>.<listcomp>      999AqDyyayyyr,   )rw   intersection_updater   r)   r   r&   s   ` r*   r   zOrderedSet.intersection_update  s9    ##U++9999999


r,   c                0    |                      |           | S r1   )r   r   s     r*   __iand__zOrderedSet.__iand__  s      '''r,   c                     t          |t                    r|nt          |          }t                                          |            fd j        D              _         xj         fd|D             z  c_        d S )Nc                    g | ]}|v |	S r   r   r   s     r*   r   z:OrderedSet.symmetric_difference_update.<locals>.<listcomp>   r   r,   c                    g | ]}|v |	S r   r   r   s     r*   r   z:OrderedSet.symmetric_difference_update.<locals>.<listcomp>!  s    :::QT		q			r,   )r   r	   r   rw   symmetric_difference_updater   )r)   r   r   r&   s   `  r*   r   z&OrderedSet.symmetric_difference_update  s    (
;;LUUe
++J7779999999


::::*::::



r,   c                    |                      |           t          t          t          t          t
          f                  |           S r1   )r   r   r   r   r   r   r   s     r*   __ixor__zOrderedSet.__ixor__#  s3    ((///JuRV}-t444r,   c                f      t                      j        |   fd j        D              _        d S )Nc                    g | ]}|v |	S r   r   r   s     r*   r   z0OrderedSet.difference_update.<locals>.<listcomp>)  r   r,   )rw   difference_updater   r   s   ` r*   r   zOrderedSet.difference_update'  s9    !!5))9999999


r,   c                0    |                      |           | S r1   )r   r   s     r*   __isub__zOrderedSet.__isub__+  s    u%%%r,   r1   )rn   r   r"   r   )r"   r   )r   r   r"   r   )r"   r   )r   r   r   r   r"   r   r"   r   )r/   r   r"   r   )r"   r   )r   r   r"   r   r|   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )#r'   r>   r?   r@   __annotations__rJ   r   r   r   rS   r   r   rN   r   r   r   rq   __str__rY   rt   ri   rx   r   r   r   r   r   r   r   r   r   r   r   r   r}   r~   s   @r*   r   r      s        IOOO              
# # # # # #          
$ $ $ $ $ $
               ! ! ! !@ @ @ @ G# # # # # #      
! ! ! !A A A A
( ( ( (   
 
 
 

G G G G G G& & & &: : : : : :   ; ; ; ; ; ;5 5 5 5: : : : : :       r,   r   c                  D   e Zd ZU dZded<   d6d7dZd8dZd9dZd8dZd8dZ	d:dZ
d;dZd<dZd<dZd=dZd<dZd<dZd=dZd<dZd<dZd>dZd?dZd@dZd?d Zd>d!ZdAd"Zd@d#ZdAd$Zd>d%ZdAd&Zd@d'ZdAd(Zd>d)Z dAd*Z!d@d+Z"dAd,Z#dBd-Z$e$Z%dCd/Z&dDd1Z'dEd3Z(dFd5Z)dS )GIdentitySetzA set that considers only object id() for uniqueness.

    This strategy has edge cases for builtin types- it's possible to have
    two 'foo' strings in one of these sets, for example.  Use sparingly.

    zDict[int, Any]_membersNr   Optional[Iterable[Any]]c                ^    t                      | _        |r|                     |           d S d S r1   )r^   r   rY   r)   r   s     r*   rJ   zIdentitySet.__init__:  s7     	"KK!!!!!	" 	"r,   r6   r   r"   r   c                4    || j         t          |          <   d S r1   r   idr)   r6   s     r*   r   zIdentitySet.add?  s    #(bii   r,   boolc                .    t          |          | j        v S r1   )r   r   r   s     r*   __contains__zIdentitySet.__contains__B  s    %yyDM))r,   c                0    | j         t          |          = d S r1   r   r   s     r*   r   zIdentitySet.removeE  s    M"U))$$$r,   c                T    	 |                      |           d S # t          $ r Y d S w xY wr1   )r   r   r   s     r*   r   zIdentitySet.discardH  sA    	KK 	 	 	DD	s    
''c                    	 | j                                         }|d         S # t          $ r t          d          w xY w)N   r   )r   rU   r   )r)   pairs     r*   rS   zIdentitySet.popN  sM    	4=((**D7N 	4 	4 	42333	4s    # =c                8    | j                                          d S r1   )r   rN   rM   s    r*   rN   zIdentitySet.clearU  s    r,   r   c                P    t          |t                    r| j        |j        k    S dS )NFr   r   r   r   s     r*   __eq__zIdentitySet.__eq__X  s(    e[)) 	=EN225r,   c                P    t          |t                    r| j        |j        k    S dS )NTr  r   s     r*   __ne__zIdentitySet.__ne__^  s(    e[)) 	=EN224r,   r   c                *   t          || j                  r|}n|                     |          }t          |           t          |          k    rdS t          |j        j        t          | j                                                            D ]} dS dS NFTr   r&   lenr   r   r   r   keysr)   r   r   ms       r*   issubsetzIdentitySet.issubsetd  s    h// 	-EENN8,,Et99s5zz!!5N'dm.@.@.B.B)C)C
 
 	 	A 55tr,   c                d    t          |t                    st          S |                     |          S r1   )r   r   NotImplementedr  r   s     r*   __le__zIdentitySet.__le__r  s,    %-- 	"!!}}U###r,   c                    t          |t                    st          S t          |           t          |          k     o|                     |          S r1   )r   r   r  r	  r  r   s     r*   __lt__zIdentitySet.__lt__w  sB    %-- 	"!!4yy3u::%>$--*>*>>r,   c                *   t          || j                  r|}n|                     |          }t          |           t          |          k     rdS t          | j        j        t          |j                                                            D ]} dS dS r  r  r  s       r*   
issupersetzIdentitySet.issuperset|  s    h// 	-EENN8,,Et99s5zz!!5M&U^-@-@-B-B(C(C
 
 	 	A 55tr,   c                d    t          |t                    st          S |                     |          S r1   )r   r   r  r  r   s     r*   __ge__zIdentitySet.__ge__  ,    %-- 	"!!u%%%r,   c                    t          |t                    st          S t          |           t          |          k    o|                     |          S r1   )r   r   r  r	  r  r   s     r*   __gt__zIdentitySet.__gt__  sB    %-- 	"!!4yy3u::%@$//%*@*@@r,   c                    |                                  }| j        }|j                            |           |j                            d |D                        |S )Nc              3  8   K   | ]}t          |          |fV  d S r1   r   r   objs     r*   r   z$IdentitySet.union.<locals>.<genexpr>  s,      BB#3~BBBBBBr,   )r&   r   rY   )r)   r   r   memberss       r*   ri   zIdentitySet.union  sX    !!-w'''BBBBBBBBr,   c                d    t          |t                    st          S |                     |          S r1   )r   r   r  ri   r   s     r*   rx   zIdentitySet.__or__  s,    %-- 	"!!zz%   r,   c                N    | j                             d |D                        d S )Nc              3  8   K   | ]}t          |          |fV  d S r1   r  r  s     r*   r   z%IdentitySet.update.<locals>.<genexpr>  s,      @@bggs^@@@@@@r,   )r   rY   r   s     r*   rY   zIdentitySet.update  s-    @@x@@@@@@@@r,   c                h    t          |t                    st          S |                     |           | S r1   )r   r   r  rY   r   s     r*   rt   zIdentitySet.__ior__  s1    %-- 	"!!Er,   c                    |                      | j                  }t          || j                  r|j        nd |D             fd| j                                        D             |_        |S )Nc                ,    h | ]}t          |          S r   r  r  s     r*   	<setcomp>z)IdentitySet.difference.<locals>.<setcomp>      111RWW111r,   c                $    i | ]\  }}|v	||S r   r   r   kvr   s      r*   
<dictcomp>z*IdentitySet.difference.<locals>.<dictcomp>  +     
 
 
QaunnAqnnnr,   rG   r&   r   r   itemsr)   r   r   r   s      @r*   r   zIdentitySet.difference  s    dn-- h// 	2%EE11111E
 
 
 
!]0022
 
 
 r,   c                d    t          |t                    st          S |                     |          S r1   )r   r   r  r   r   s     r*   r   zIdentitySet.__sub__  r  r,   c                D    |                      |          j        | _        d S r1   )r   r   r   s     r*   r   zIdentitySet.difference_update  s    11:r,   c                h    t          |t                    st          S |                     |           | S r1   )r   r   r  r   r   s     r*   r   zIdentitySet.__isub__  s3    %-- 	"!!u%%%r,   c                    |                      | j                  }t          || j                  r|j        nd |D             fd| j                                        D             |_        |S )Nc                ,    h | ]}t          |          S r   r  r  s     r*   r&  z+IdentitySet.intersection.<locals>.<setcomp>  r'  r,   c                $    i | ]\  }}|v 	||S r   r   r)  s      r*   r,  z,IdentitySet.intersection.<locals>.<dictcomp>  s+     
 
 
Qa5jjAqjjjr,   r.  r0  s      @r*   r   zIdentitySet.intersection  s    dn-- h// 	2%EE11111E
 
 
 
!]0022
 
 
 r,   c                d    t          |t                    st          S |                     |          S r1   )r   r   r  r   r   s     r*   r   zIdentitySet.__and__  s.    %-- 	"!!  '''r,   c                D    |                      |          j        | _        d S r1   )r   r   r   s     r*   r   zIdentitySet.intersection_update  s    ))(33<r,   c                h    t          |t                    st          S |                     |           | S r1   )r   r   r  r   r   s     r*   r   zIdentitySet.__iand__  s3    %-- 	"!!  '''r,   c                T                           j                  }t          | j                  r|j        nd |D             fd j                                        D             |_        |j                             fd                                D                        |S )Nc                .    i | ]}t          |          |S r   r  r  s     r*   r,  z4IdentitySet.symmetric_difference.<locals>.<dictcomp>  s     666cRWWc666r,   c                $    i | ]\  }}|v	||S r   r   r)  s      r*   r,  z4IdentitySet.symmetric_difference.<locals>.<dictcomp>  r-  r,   c              3  8   K   | ]\  }}|j         v||fV  d S r1   )r   )r   r*  r+  r)   s      r*   r   z3IdentitySet.symmetric_difference.<locals>.<genexpr>  s@       
 
q!0F0FQF0F0F0F0F
 
r,   )rG   r&   r   r   r/  rY   r0  s   `  @r*   r   z IdentitySet.symmetric_difference  s    dn--h// 	7%EE66X666E
 
 
 
!]0022
 
 
 	 
 
 
 
${{}}
 
 
 	
 	
 	
 r,   c                d    t          |t                    st          S |                     |          S r1   r   r   r  r   r   s     r*   r   zIdentitySet.__xor__  s.    %-- 	"!!((///r,   c                D    |                      |          j        | _        d S r1   )r   r   r   s     r*   r   z'IdentitySet.symmetric_difference_update  s    11(;;Dr,   c                h    t          |t                    st          S |                     |           | S r1   r?  r   s     r*   r   zIdentitySet.__ixor__  s3    %-- 	"!!!!%(((r,   c                v    |                      | j                  }| j                                        |_        |S r1   )rG   r&   r   r   )r)   r   s     r*   r   zIdentitySet.copy  s/    dn---,,..r,   r   c                *    t          | j                  S r1   )r	  r   rM   s    r*   __len__zIdentitySet.__len__  s    4=!!!r,   Iterator[Any]c                N    t          | j                                                  S r1   )r   r   valuesrM   s    r*   r   zIdentitySet.__iter__  s    DM((**+++r,   r   c                     t          d          )Nzset objects are unhashable)r%   rM   s    r*   __hash__zIdentitySet.__hash__
  s    4555r,   r:   c                ~    t          |           j        dt          | j                                                  dS r   )typer'   r   r   rG  rM   s    r*   rq   zIdentitySet.__repr__  s8    ::...T]5I5I5K5K0L0L0L0LMMr,   r1   )r   r   )r6   r   r"   r   )r6   r   r"   r   )r"   r   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r   r   r"   r   )r"   r   )r"   r   )r"   rE  rZ   r|   )*r'   r>   r?   __doc__r   rJ   r   r   r   r   rS   rN   r  r  r  r  r  r  r  r  ri   rx   rY   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   __copy__rD  r   rI  rq   r   r,   r*   r   r   0  s          " " " " "
) ) ) )* * * *% % % %   4 4 4 4            $ $ $ $
? ? ? ?
   & & & &
A A A A
   ! ! ! !
A A A A      & & & &
; ; ; ;      ( ( ( (
= = = =      0 0 0 0
E E E E      
 H" " " ", , , ,6 6 6 6N N N N N Nr,   r   Nseqr   hashfuncOptional[Callable[[_T], int]]r"   r   c                t    t                      j        sfd| D             S fd| D             S )Nc                2    g | ]}|v |          |S r   r   )r   xseenseen_adds     r*   r   zunique_list.<locals>.<listcomp>  s*    DDDa!4------r,   c                V    g | ]%} |          v  |                    #|&S r   r   )r   rS  rO  rT  rU  s     r*   r   zunique_list.<locals>.<listcomp>  sM     
 
 
x{{$&&xx/D/D& &&&r,   )r   r   )rN  rO  rT  rU  s    `@@r*   r   r     sq     UUDxH 
DDDDD3DDDD
 
 
 
 
 

 
 
 	
r,   r1   )rN  r   rO  rP  r"   r   )"
__future__r   	itertoolsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   util.typingr   r   r   r   r   r   rB   r\   r   r   r   r   r,   r*   <module>r[     s   # " " " " " ! ! ! ! ! !                                                                                                                  WTWTge3ge3       *    )4S>   4I
 I
 I
 I
 I
%c3h/ I
 I
 I
XL L L L LR L L L^^N ^N ^N ^N ^N ^N ^N ^ND BF
 
 
 
 
 
 
r,   