U
    [h
A                     @  s  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dZededZededZededZG dd dZG dd dee
eef ZG dd  d eeef ZG d!d" d"ee ZG d#d$ d$Z d,d&d'd(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)Zbound_S_KT_VTc                   @  sh   e Zd ZdZddddddZddddddZddd	d
dZddddddZddddddZdS )ReadOnlyContainer r   r   argkwreturnc                 O  s   t d| jj d S )Nz&%s object is immutable and/or readonly	TypeError	__class____name__selfr   r   r   r   E./venv/lib/python3.8/site-packages/sqlalchemy/util/_py_collections.py	_readonly)   s    
zReadOnlyContainer._readonlyc                 O  s   t d| jj d S )Nz%s object is immutabler!   r%   r   r   r'   
_immutable.   s    zReadOnlyContainer._immutablekeyr    c                 C  s   |    d S Nr(   r&   r+   r   r   r'   __delitem__1   s    zReadOnlyContainer.__delitem__)r+   valuer    c                 C  s   |    d S r,   r-   r&   r+   r0   r   r   r'   __setitem__4   s    zReadOnlyContainer.__setitem__strc                 C  s   |    d S r,   r-   r1   r   r   r'   __setattr__7   s    zReadOnlyContainer.__setattr__N)	r$   
__module____qualname__	__slots__r(   r)   r/   r2   r4   r   r   r   r'   r   &   s   r   c                   @  s   e Zd Zer*dddddZddddZddd	d
ddZd	dddZdddd	dddZd	dddZ	dddd	dddZ
ddd	d
ddZdS )ImmutableDictBaser   r   )argsr    c                 G  s   d S r,   r   clsr9   r   r   r'   __new__>       zImmutableDictBase.__new__r9   c                 G  s   d S r,   r   r:   r   r   r'   __init__@   r=   zImmutableDictBase.__init__r   r   c                 O  s   |    d S r,   )r)   r%   r   r   r'   r(   B   s    zImmutableDictBase._readonlyr    c                 C  s   |    d S r,   r-   r&   r   r   r'   clearE   s    zImmutableDictBase.clearNzOptional[Any])r+   defaultr    c                 C  s   |    d S r,   r-   r&   r+   rC   r   r   r'   popH   s    zImmutableDictBase.popc                 C  s   |    d S r,   r-   rA   r   r   r'   popitemK   s    zImmutableDictBase.popitemc                 C  s   |    d S r,   r-   rD   r   r   r'   
setdefaultN   s    zImmutableDictBase.setdefaultc                 O  s   |    d S r,   r-   r%   r   r   r'   updateQ   s    zImmutableDictBase.update)N)N)r$   r5   r6   r   r<   r?   r(   rB   rE   rF   rG   rH   r   r   r   r'   r8   ;   s   r8   c                      s   e Zd Zdd ZddddZdd Zd$d
ddddZd%d
dddddZd
ddddZddddZ	dddddZ
ddd fd d!Zddd fd"d#Z  ZS )&immutabledictc                 G  s   t | }tj|f|  |S r,   )r8   r<   dictr?   )r;   r9   newr   r   r'   r<   V   s    
zimmutabledict.__new__z3Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]]r>   c                 G  s   d S r,   r   )r&   r9   r   r   r'   r?   [   s    zimmutabledict.__init__c                 C  s   t t| ffS r,   )rI   rJ   rA   r   r   r'   
__reduce__`   s    zimmutabledict.__reduce__NzOptional[Mapping[_KT, _VT]]zimmutabledict[_KT, _VT])_immutabledict__dr    c                 C  s0   |s| S t | j}t||  t|| |S r,   r8   r<   r#   rJ   r?   rH   )r&   rM   rK   r   r   r'   unionc   s    zimmutabledict.unionr   )rM   r   r    c                 K  sD   |s|s| S t | j}t||  |r4t|| t|| |S r,   rN   )r&   rM   r   rK   r   r   r'   _union_w_kwn   s    zimmutabledict._union_w_kw)dictsr    c                 G  sN   d }|D ]4}|r|d kr0t | j}t||  t|| q|d krJ| S |S r,   rN   )r&   rQ   rK   dr   r   r'   
merge_with|   s    zimmutabledict.merge_withr3   r@   c                 C  s   dt |  S )Nzimmutabledict(%s))rJ   __repr__rA   r   r   r'   rT      s    zimmutabledict.__repr__r   r   )_immutabledict__valuer    c                 C  s   |    d S r,   r-   r&   rU   r   r   r'   __ior__   s    zimmutabledict.__ior__zMapping[_KT, _VT]c                   s   t t |S r,   )rI   super__or__rV   r#   r   r'   rY      s    
zimmutabledict.__or__c                   s   t t |S r,   )rI   rX   __ror__rV   rZ   r   r'   r[      s    
zimmutabledict.__ror__)N)N)r$   r5   r6   r<   r?   rL   rO   rP   rS   rT   rW   rY   r[   __classcell__r   r   rZ   r'   rI   U   s     rI   c                      s  e Zd ZU dZded< dRddd fdd	Zd
dddZddd fddZddd fddZdd fddZ	dddd fddZ
ddd fddZdd fddZddddd Zd!dd"d#Zd!d
d$d%d&Zd'dd(d)ZeZd*dd+ fd,d-Zd.d/d$d0d1Zd2d/d$d3d4Zd.d/d$d5d6Zd7d
d$d8d9Zd:d
d$d;d<Zd*d
d$d=d>Zd.d/d$d?d@Zd7d
d$ fdAdBZdCd
d$dDdEZd7dd$ fdFdGZd:d
d$dHdIZd7dd$ fdJdKZd.d/d$dLdMZd7dd$ fdNdOZ dCd
d$dPdQZ!  Z"S )S
OrderedSet_listList[_T]r_   NzOptional[Iterable[_T]]None)rR   r    c                   s,   |d k	r"t || _t | j ng | _d S r,   )unique_listr_   rX   rH   )r&   rR   rZ   r   r'   r?      s    
zOrderedSet.__init__zOrderedSet[_T]r@   c                 C  s&   |   }| j |_t||j |S r,   )r#   r_   copysetrH   )r&   cpr   r   r'   rc      s    zOrderedSet.copyr   )elementr    c                   s$   || kr| j | t | d S r,   r_   appendrX   addr&   rf   rZ   r   r'   ri      s    zOrderedSet.addc                   s   t  | | j| d S r,   )rX   remover_   rj   rZ   r   r'   rk      s    zOrderedSet.removec                   s>   z| j  }W n tk
r,   tdd Y nX t | |S )Npop from an empty set)r_   rE   
IndexErrorKeyErrorrX   rk   r&   r0   rZ   r   r'   rE      s    zOrderedSet.popint)posrf   r    c                   s&   || kr| j || t | d S r,   )r_   insertrX   ri   )r&   rq   rf   rZ   r   r'   rr      s    zOrderedSet.insertc                   s$   || kr | j | t | d S r,   )r_   rk   rX   rj   rZ   r   r'   discard   s    zOrderedSet.discardc                   s   t    g | _d S r,   )rX   rB   r_   rA   rZ   r   r'   rB      s    
zOrderedSet.clearr*   c                 C  s
   | j | S r,   r^   r.   r   r   r'   __getitem__   s    zOrderedSet.__getitem__zIterator[_T]c                 C  s
   t | jS r,   )iterr_   rA   r   r   r'   __iter__   s    zOrderedSet.__iter__otherr    c                 C  s
   |  |S r,   rO   r&   rx   r   r   r'   __add__   s    zOrderedSet.__add__r3   c                 C  s   d| j j| jf S Nz%s(%r))r#   r$   r_   rA   r   r   r'   rT      s    zOrderedSet.__repr__Iterable[_T])	iterablesr    c                   s8   |D ].}|D ]$}|| kr| j | t | qqd S r,   rg   )r&   r~   iterableerZ   r   r'   rH      s
    zOrderedSet.updatezAbstractSet[_S]zOrderedSet[Union[_T, _S]]c                 C  s   |  | | S r,   )rH   rz   r   r   r'   rW      s    
zOrderedSet.__ior__zIterable[_S]c                 G  s   |   }|j|  |S r,   )rc   rH   )r&   rx   resultr   r   r'   rO      s    
zOrderedSet.unionc                 C  s
   |  |S r,   ry   rz   r   r   r'   rY      s    zOrderedSet.__or__Iterable[Any]c                   s(   t    j|  |  fdd| D S )Nc                 3  s   | ]}| kr|V  qd S r,   r   .0a	other_setr   r'   	<genexpr>   s      z*OrderedSet.intersection.<locals>.<genexpr>)rd   rH   r#   rz   r   r   r'   intersection   s    
zOrderedSet.intersectionzAbstractSet[object]c                 C  s
   |  |S r,   )r   rz   r   r   r'   __and__   s    zOrderedSet.__and__c                   sp   t |tr| } n(t |tr,|}t| nt|}t|  fddD }|fdd|D  |S )Nc                 3  s   | ]}| kr|V  qd S r,   r   r   r   r   r'   r     s      z2OrderedSet.symmetric_difference.<locals>.<genexpr>c                 3  s   | ]}| kr|V  qd S r,   r   r   rA   r   r'   r     s      )
isinstancerd   r   listr#   rH   )r&   rx   
collectionr   r   )r   r&   r'   symmetric_difference   s    



zOrderedSet.symmetric_differencec                 C  s   t ttttf  | |S r,   )r   r]   r   r   r   r   rz   r   r   r'   __xor__	  s    zOrderedSet.__xor__c                   s&   t  j|  |  fdd| jD S )Nc                 3  s   | ]}| kr|V  qd S r,   r   r   r   r   r'   r     s      z(OrderedSet.difference.<locals>.<genexpr>)rX   
differencer#   r_   rz   rZ   r   r'   r     s    zOrderedSet.differencezAbstractSet[Optional[_T]]c                 C  s
   |  |S r,   )r   rz   r   r   r'   __sub__  s    zOrderedSet.__sub__c                   s&   t  j|   fdd jD  _d S )Nc                   s   g | ]}| kr|qS r   r   r   rA   r   r'   
<listcomp>  s      z2OrderedSet.intersection_update.<locals>.<listcomp>)rX   intersection_updater_   rz   rZ   rA   r'   r     s    zOrderedSet.intersection_updatec                 C  s   |  | | S r,   )r   rz   r   r   r'   __iand__  s    
zOrderedSet.__iand__c                   sX   t |tr|nt|}t |  fdd jD  _  j fdd|D 7  _d S )Nc                   s   g | ]}| kr|qS r   r   r   rA   r   r'   r      s      z:OrderedSet.symmetric_difference_update.<locals>.<listcomp>c                   s   g | ]}| kr|qS r   r   r   rA   r   r'   r   !  s      )r   r   r   rX   symmetric_difference_updater_   )r&   rx   r   rZ   rA   r'   r     s    z&OrderedSet.symmetric_difference_updatec                 C  s    |  | tttttf  | S r,   )r   r   r]   r   r   r   rz   r   r   r'   __ixor__#  s    
zOrderedSet.__ixor__c                   s&   t  j|   fdd jD  _d S )Nc                   s   g | ]}| kr|qS r   r   r   rA   r   r'   r   )  s      z0OrderedSet.difference_update.<locals>.<listcomp>)rX   difference_updater_   rz   rZ   rA   r'   r   '  s    zOrderedSet.difference_updatec                 C  s   |  | | S r,   )r   rz   r   r   r'   __isub__+  s    
zOrderedSet.__isub__)N)#r$   r5   r6   r7   __annotations__r?   rc   ri   rk   rE   rr   rs   rB   rt   rv   r{   rT   __str__rH   rW   rO   rY   r   r   r   r   r   r   r   r   r   r   r   r   r\   r   r   rZ   r'   r]      s>   
r]   c                   @  sP  e Zd ZU dZded< d[ddddZd	d
dddZd	ddddZd	d
dddZd	d
dddZ	d	dddZ
d
dddZd	ddddZd	ddddZddd d!d"Zd	ddd#d$Zd	ddd%d&Zddd d'd(Zd	ddd)d*Zd	ddd+d,Zdd d d-d.Zd	d dd/d0Zdd
d d1d2Zd	d dd3d4Zdd d d5d6Zd d dd7d8Zdd
d d9d:Zd d dd;d<Zdd d d=d>Zd d dd?d@Zdd
d dAdBZd d ddCdDZdd d dEdFZ d d ddGdHZ!dd
d dIdJZ"d d ddKdLZ#d ddMdNZ$e$Z%dOddPdQZ&dRddSdTZ'dUddVdWZ(dXddYdZZ)dS )\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]_membersNzOptional[Iterable[Any]])r   c                 C  s   t  | _|r| | d S r,   )rJ   r   rH   r&   r   r   r   r'   r?   :  s    zIdentitySet.__init__r   ra   )r0   r    c                 C  s   || j t|< d S r,   r   idro   r   r   r'   ri   ?  s    zIdentitySet.addboolc                 C  s   t || jkS r,   )r   r   ro   r   r   r'   __contains__B  s    zIdentitySet.__contains__c                 C  s   | j t|= d S r,   r   ro   r   r   r'   rk   E  s    zIdentitySet.removec                 C  s(   z|  | W n tk
r"   Y nX d S r,   )rk   rn   ro   r   r   r'   rs   H  s    zIdentitySet.discardr@   c                 C  s6   z| j  }|d W S  tk
r0   tdY nX d S )N   rl   )r   rF   rn   )r&   Zpairr   r   r'   rE   N  s
    

zIdentitySet.popc                 C  s   | j   d S r,   )r   rB   rA   r   r   r'   rB   U  s    zIdentitySet.clearrw   c                 C  s   t |tr| j|jkS dS d S )NFr   r   r   rz   r   r   r'   __eq__X  s    
zIdentitySet.__eq__c                 C  s   t |tr| j|jkS dS d S )NTr   rz   r   r   r'   __ne__^  s    
zIdentitySet.__ne__r   )r   r    c                 C  sV   t || jr|}n
| |}t| t|kr0dS t|jjt| j D ]} dS dS NFTr   r#   lenr   r   r   ru   keysr&   r   rx   mr   r   r'   issubsetd  s    
 zIdentitySet.issubsetc                 C  s   t |tstS | |S r,   )r   r   NotImplementedr   rz   r   r   r'   __le__r  s    
zIdentitySet.__le__c                 C  s(   t |tstS t| t|k o&| |S r,   )r   r   r   r   r   rz   r   r   r'   __lt__w  s    
zIdentitySet.__lt__c                 C  sV   t || jr|}n
| |}t| t|k r0dS t| jjt|j D ]} dS dS r   r   r   r   r   r'   
issuperset|  s    
 zIdentitySet.issupersetc                 C  s   t |tstS | |S r,   )r   r   r   r   rz   r   r   r'   __ge__  s    
zIdentitySet.__ge__c                 C  s(   t |tstS t| t|ko&| |S r,   )r   r   r   r   r   rz   r   r   r'   __gt__  s    
zIdentitySet.__gt__c                 C  s4   |   }| j}|j| |jdd |D  |S )Nc                 s  s   | ]}t ||fV  qd S r,   r   r   objr   r   r'   r     s     z$IdentitySet.union.<locals>.<genexpr>)r#   r   rH   )r&   r   r   membersr   r   r'   rO     s
    zIdentitySet.unionc                 C  s   t |tstS | |S r,   )r   r   r   rO   rz   r   r   r'   rY     s    
zIdentitySet.__or__c                 C  s   | j dd |D  d S )Nc                 s  s   | ]}t ||fV  qd S r,   r   r   r   r   r'   r     s     z%IdentitySet.update.<locals>.<genexpr>)r   rH   r   r   r   r'   rH     s    zIdentitySet.updatec                 C  s   t |tstS | | | S r,   )r   r   r   rH   rz   r   r   r'   rW     s    

zIdentitySet.__ior__c                   sL   |  | j}t|| jr |j ndd |D   fdd| j D |_|S )Nc                 S  s   h | ]}t |qS r   r   r   r   r   r'   	<setcomp>  s     z)IdentitySet.difference.<locals>.<setcomp>c                   s   i | ]\}}| kr||qS r   r   r   kvrx   r   r'   
<dictcomp>  s      z*IdentitySet.difference.<locals>.<dictcomp>r<   r#   r   r   itemsr&   r   r   r   r   r'   r     s    
zIdentitySet.differencec                 C  s   t |tstS | |S r,   )r   r   r   r   rz   r   r   r'   r     s    
zIdentitySet.__sub__c                 C  s   |  |j| _d S r,   )r   r   r   r   r   r'   r     s    zIdentitySet.difference_updatec                 C  s   t |tstS | | | S r,   )r   r   r   r   rz   r   r   r'   r     s    

zIdentitySet.__isub__c                   sL   |  | j}t|| jr |j ndd |D   fdd| j D |_|S )Nc                 S  s   h | ]}t |qS r   r   r   r   r   r'   r     s     z+IdentitySet.intersection.<locals>.<setcomp>c                   s   i | ]\}}| kr||qS r   r   r   r   r   r'   r     s      z,IdentitySet.intersection.<locals>.<dictcomp>r   r   r   r   r'   r     s    
zIdentitySet.intersectionc                 C  s   t |tstS | |S r,   )r   r   r   r   rz   r   r   r'   r     s    
zIdentitySet.__and__c                 C  s   |  |j| _d S r,   )r   r   r   r   r   r'   r     s    zIdentitySet.intersection_updatec                 C  s   t |tstS | | | S r,   )r   r   r   r   rz   r   r   r'   r     s    

zIdentitySet.__iand__c                   sj    j}t|jr |j ndd |D   fddj D |_|jfdd  D  |S )Nc                 S  s   i | ]}t ||qS r   r   r   r   r   r'   r     s      z4IdentitySet.symmetric_difference.<locals>.<dictcomp>c                   s   i | ]\}}| kr||qS r   r   r   r   r   r'   r     s      c                 3  s$   | ]\}}| j kr||fV  qd S r,   )r   r   rA   r   r'   r     s    
 z3IdentitySet.symmetric_difference.<locals>.<genexpr>)r<   r#   r   r   r   rH   r   r   )rx   r&   r'   r     s    
z IdentitySet.symmetric_differencec                 C  s   t |tstS | |S r,   r   r   r   r   rz   r   r   r'   r     s    
zIdentitySet.__xor__c                 C  s   |  |j| _d S r,   )r   r   r   r   r   r'   r     s    z'IdentitySet.symmetric_difference_updatec                 C  s   t |tstS | | | S r,   r   rz   r   r   r'   r     s    

zIdentitySet.__ixor__c                 C  s   |  | j}| j |_|S r,   )r<   r#   r   rc   )r&   r   r   r   r'   rc     s    zIdentitySet.copyrp   c                 C  s
   t | jS r,   )r   r   rA   r   r   r'   __len__  s    zIdentitySet.__len__zIterator[Any]c                 C  s   t | j S r,   )ru   r   valuesrA   r   r   r'   rv     s    zIdentitySet.__iter__r   c                 C  s   t dd S )Nzset objects are unhashable)r"   rA   r   r   r'   __hash__
  s    zIdentitySet.__hash__r3   c                 C  s   dt | jt| j f S r|   )typer$   r   r   r   rA   r   r   r'   rT     s    zIdentitySet.__repr__)N)*r$   r5   r6   __doc__r   r?   ri   r   rk   rs   rE   rB   r   r   r   r   r   r   r   r   rO   rY   rH   rW   r   r   r   r   r   r   r   r   r   r   r   r   rc   __copy__r   rv   r   rT   r   r   r   r'   r   0  sN   
r   Nr}   zOptional[Callable[[_T], int]]r`   )seqhashfuncr    c                   s>   t  j s$fdd| D S  fdd| D S d S )Nc                   s    g | ]}| kr|s|qS r   r   r   x)seenseen_addr   r'   r     s       zunique_list.<locals>.<listcomp>c                   s(   g | ] } |kr |s|qS r   r   r   r   r   r   r   r'   r     s    )rd   ri   )r   r   r   r   r'   rb     s    rb   )N)"Z
__future__r   	itertoolsr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zutil.typingr   r   r   r   r   r   r8   rI   r]   r   rb   r   r   r   r'   <module>	   s@   L  c 