U
    ÌZjÓq  ã                   @   st  d Z ddlmZ ddlZddl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 ddlmZ eƒ ZG dd„ deƒZdd„ ZzddlmZ ej e¡ W n" ek
rØ   eƒ Zdd„ ZY nX dd„ Zeƒ ZG dd„ deeƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZdKdd„Z e�rFeZ!e Z"ndLdd „Z"G d!d"„ d"eƒZ!G d#d$„ d$e#ƒZ$G d%d&„ d&eƒZ%G d'd(„ d(eƒZ&G d)d*„ d*e%ƒZ'G d+d,„ d,eƒZ(G d-d.„ d.eƒZ)e#Z*eZ+e$Z,e(ej-ƒZ.e(d/d0„ ƒZ/dMd1d2„Z0G d3d4„ d4eƒZ1d5d6„ Z2dNd7d8„Z3d9d:„ Z4d;d<„ Z5d=d>„ Z6dOd?d@„Z7dAdB„ Z8G dCdD„ dDeƒZ9G dEdF„ dFeƒZ:G dGdH„ dHe:ƒZ;dIdJ„ Z<dS )PzCollection classes and helpers.é    )Úabsolute_importNé   )Úbinary_types)Úcollections_abc)Úitertools_filterfalse)Úpy2k)Úpy37)Ústring_types)Ú	threadingc                   @   s    e Zd Zdd„ Ze Z ZZdS )ÚImmutableContainerc                 O   s   t d| jj ƒ‚d S )Nz%s object is immutable)Ú	TypeErrorÚ	__class__Ú__name__)ÚselfÚargÚkw© r   ú_/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/util/_collections.pyÚ
_immutable   s    zImmutableContainer._immutableN)r   Ú
__module__Ú__qualname__r   Ú__delitem__Ú__setitem__Ú__setattr__r   r   r   r   r      s   r   c                  C   s   G dd„ dt tƒ} | S )Nc                   @   s^   e Zd Zej Z Z Z ZZ	dd„ Z
dd„ Zdd„ Zddd	„Zdd
d„Zdd„ Zdd„ ZdS )z1_immutabledict_py_fallback.<locals>.immutabledictc                 W   s   t  | ¡}t j|f|žŽ  |S ©N)ÚdictÚ__new__Ú__init__©ÚclsÚargsÚnewr   r   r   r   *   s    
z9_immutabledict_py_fallback.<locals>.immutabledict.__new__c                 W   s   d S r   r   )r   r    r   r   r   r   /   s    z:_immutabledict_py_fallback.<locals>.immutabledict.__init__c                 S   s   t t| ƒffS r   )Ú_immutabledict_reconstructorr   ©r   r   r   r   Ú
__reduce__2   s    z<_immutabledict_py_fallback.<locals>.immutabledict.__reduce__Nc                 S   s0   |s| S t  | j¡}t  || ¡ t  ||¡ |S r   ©r   r   r   r   Úupdate)r   Ú_immutabledict__dr!   r   r   r   Úunion5   s    z7_immutabledict_py_fallback.<locals>.immutabledict.unionc                 [   sD   |s|s| S t  | j¡}t  || ¡ |r4t  ||¡ t  ||¡ |S r   r%   )r   r'   r   r!   r   r   r   Ú_union_w_kw>   s    z=_immutabledict_py_fallback.<locals>.immutabledict._union_w_kwc                 W   sN   d }|D ]4}|r|d kr0t  | j¡}t  || ¡ t  ||¡ q|d krJ| S |S r   r%   )r   Zdictsr!   Údr   r   r   Ú
merge_withJ   s    z<_immutabledict_py_fallback.<locals>.immutabledict.merge_withc                 S   s   dt  | ¡ S )Nzimmutabledict(%s)©r   Ú__repr__r#   r   r   r   r-   W   s    z:_immutabledict_py_fallback.<locals>.immutabledict.__repr__)N)N)r   r   r   r   r   ÚclearÚpopÚpopitemÚ
setdefaultr&   r   r   r$   r(   r)   r+   r-   r   r   r   r   Úimmutabledict$   s   þÿþ 
	
r2   )r   r   ©r2   r   r   r   Ú_immutabledict_py_fallback#   s    6r4   r3   c                  G   s   t | Ž S )zdo the pickle dancer3   ©r   r   r   r   r"   e   s    r"   c                 C   s"   | st S t| tƒr| S t| ƒS d S r   )Ú
EMPTY_DICTÚ
isinstancer2   ©r*   r   r   r   Úcoerce_to_immutabledictj   s
    
r9   c                   @   sN   e Zd ZdZej Z Z Z Z	Z
dd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú
FacadeDictz*A dictionary that is not publicly mutable.c                 G   s   t  | ¡}|S r   )r   r   r   r   r   r   r   {   s    
zFacadeDict.__new__c                 C   s   t dƒ‚d S )Nz\an immutabledict shouldn't need to be copied.  use dict(d) if you need a mutable dictionary.)ÚNotImplementedErrorr#   r   r   r   Úcopy   s    ÿzFacadeDict.copyc                 C   s   t t| ƒffS r   )r:   r   r#   r   r   r   r$   …   s    zFacadeDict.__reduce__c                 C   s   t  | ||¡ dS )z,insert an item into the dictionary directly.N)r   r   ©r   ÚkeyÚvaluer   r   r   Ú_insert_itemˆ   s    zFacadeDict._insert_itemc                 C   s   dt  | ¡ S )NzFacadeDict(%s)r,   r#   r   r   r   r-   Œ   s    zFacadeDict.__repr__N)r   r   r   Ú__doc__r   r   r.   r/   r0   r1   r&   r   r<   r$   r@   r-   r   r   r   r   r:   v   s   r:   c                       sÆ   e Zd ZdZdZdd„ Zdd„ Zdd„ Z‡ f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"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Z‡  ZS )/Ú
Propertiesz8Provide a __getattr__/__setattr__ interface over a dict.©Ú_datac                 C   s   t  | d|¡ d S ©NrD   ©Úobjectr   )r   Údatar   r   r   r   •   s    zProperties.__init__c                 C   s
   t | jƒS r   )ÚlenrD   r#   r   r   r   Ú__len__˜   s    zProperties.__len__c                 C   s   t t| j ¡ ƒƒS r   )ÚiterÚlistrD   Úvaluesr#   r   r   r   Ú__iter__›   s    zProperties.__iter__c                    s"   t tt| ƒƒdd„ | j ¡ D ƒ S )Nc                 S   s   g | ]}t |ƒ‘qS r   )Ústr©Ú.0Úkr   r   r   Ú
<listcomp>Ÿ   s    z&Properties.__dir__.<locals>.<listcomp>)ÚdirÚsuperrB   rD   Úkeysr#   ©r   r   r   Ú__dir__ž   s    ÿzProperties.__dir__c                 C   s   t | ƒt |ƒ S r   ©rL   ©r   Úotherr   r   r   Ú__add__£   s    zProperties.__add__c                 C   s   || j |< d S r   rC   ©r   r>   Úobjr   r   r   r   ¦   s    zProperties.__setitem__c                 C   s
   | j | S r   rC   ©r   r>   r   r   r   Ú__getitem__©   s    zProperties.__getitem__c                 C   s   | j |= d S r   rC   r_   r   r   r   r   ¬   s    zProperties.__delitem__c                 C   s   || j |< d S r   rC   r]   r   r   r   r   ¯   s    zProperties.__setattr__c                 C   s
   d| j iS rE   rC   r#   r   r   r   Ú__getstate__²   s    zProperties.__getstate__c                 C   s   t  | d|d ¡ d S rE   rF   )r   Ústater   r   r   Ú__setstate__µ   s    zProperties.__setstate__c                 C   s.   z| j | W S  tk
r(   t|ƒ‚Y nX d S r   )rD   ÚKeyErrorÚAttributeErrorr_   r   r   r   Ú__getattr__¸   s    zProperties.__getattr__c                 C   s
   || j kS r   rC   r_   r   r   r   Ú__contains__¾   s    zProperties.__contains__c                 C   s
   t | jƒS )z8Return an immutable proxy for this :class:`.Properties`.)ÚImmutablePropertiesrD   r#   r   r   r   Úas_immutableÁ   s    zProperties.as_immutablec                 C   s   | j  |¡ d S r   )rD   r&   ©r   r?   r   r   r   r&   Æ   s    zProperties.updateNc                 C   s   || kr| | S |S d S r   r   )r   r>   Údefaultr   r   r   ÚgetÉ   s    zProperties.getc                 C   s
   t | jƒS r   )rL   rD   r#   r   r   r   rV   Ï   s    zProperties.keysc                 C   s   t | j ¡ ƒS r   )rL   rD   rM   r#   r   r   r   rM   Ò   s    zProperties.valuesc                 C   s   t | j ¡ ƒS r   )rL   rD   Úitemsr#   r   r   r   rm   Õ   s    zProperties.itemsc                 C   s
   || j kS r   rC   r_   r   r   r   Úhas_keyØ   s    zProperties.has_keyc                 C   s   | j  ¡  d S r   )rD   r.   r#   r   r   r   r.   Û   s    zProperties.clear)N)r   r   r   rA   Ú	__slots__r   rJ   rN   rX   r\   r   r`   r   r   ra   rc   rf   rg   ri   r&   rl   rV   rM   rm   rn   r.   Ú__classcell__r   r   rW   r   rB   �   s.   
rB   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚOrderedPropertieszUProvide a __getattr__/__setattr__ interface with an OrderedDict
    as backing store.r   c                 C   s   t  | tƒ ¡ d S r   )rB   r   ÚOrderedDictr#   r   r   r   r   å   s    zOrderedProperties.__init__N)r   r   r   rA   ro   r   r   r   r   r   rq   ß   s   rq   c                   @   s   e Zd ZdZdZdS )rh   zDProvide immutable dict/object attribute to an underlying dictionary.r   N)r   r   r   rA   ro   r   r   r   r   rh   é   s   rh   c                    s0   ‡ fdd„t ˆ |d�D ƒ}ˆ  ¡  ˆ  |¡ dS )zSort an OrderedDict in-place.c                    s   g | ]}|ˆ | f‘qS r   r   rP   r8   r   r   rS   ò   s     z,_ordered_dictionary_sort.<locals>.<listcomp>©r>   N)Úsortedr.   r&   )r*   r>   rm   r   r8   r   Ú_ordered_dictionary_sortï   s    ru   c                 C   s   | j |d� dS )zSort an OrderedDict in place.rs   N©ru   )r*   r>   r   r   r   Úsort_dictionary  s    rw   c                   @   s¶   e Zd ZdZdZd*dd„Zdd„ Zd+dd	„Zd
d„ Zdd„ Z	dd„ Z
d,dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zer’dd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS )-rr   zhDictionary that maintains insertion order.

        Superseded by Python dict as of Python 3.7

        ©Ú_listNc                 C   s   t | |d� d S )Nrs   rv   r_   r   r   r   ru     s    z$OrderedDict._ordered_dictionary_sortc                 C   s   t |  ¡ ffS r   )rr   rm   r#   r   r   r   r$     s    zOrderedDict.__reduce__c                 K   s2   g | _ |d kr |r.| jf |Ž n| j|f|Ž d S r   )ry   r&   )r   Ú_OrderedDict____sequenceÚkwargsr   r   r   r     s
    zOrderedDict.__init__c                 C   s   g | _ t | ¡ d S r   )ry   r   r.   r#   r   r   r   r.     s    zOrderedDict.clearc                 C   s   |   ¡ S r   )Ú__copy__r#   r   r   r   r<   !  s    zOrderedDict.copyc                 C   s   t | ƒS r   )rr   r#   r   r   r   r|   $  s    zOrderedDict.__copy__c                 K   sZ   |d k	rHt |dƒr2| ¡ D ]}|  ||| ¡ qn|D ]\}}|| |< q6|rV|  |¡ d S )NrV   )ÚhasattrrV   r   r&   )r   rz   r{   r>   r?   r   r   r   r&   '  s    

zOrderedDict.updatec                 C   s&   || kr|   ||¡ |S |  |¡S d S r   )r   r`   r=   r   r   r   r1   2  s    zOrderedDict.setdefaultc                 C   s
   t | jƒS r   ©rK   ry   r#   r   r   r   rN   9  s    zOrderedDict.__iter__c                 C   s   t | ƒS r   rY   r#   r   r   r   rV   <  s    zOrderedDict.keysc                    s   ‡ fdd„ˆ j D ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   ©rQ   r>   r#   r   r   rS   @  s     z&OrderedDict.values.<locals>.<listcomp>rx   r#   r   r#   r   rM   ?  s    zOrderedDict.valuesc                    s   ‡ fdd„ˆ j D ƒS )Nc                    s   g | ]}|ˆ | f‘qS r   r   r   r#   r   r   rS   C  s     z%OrderedDict.items.<locals>.<listcomp>rx   r#   r   r#   r   rm   B  s    zOrderedDict.itemsc                 C   s   t |  ¡ ƒS r   )rK   rM   r#   r   r   r   Ú
itervaluesG  s    zOrderedDict.itervaluesc                 C   s   t | ƒS r   )rK   r#   r   r   r   ÚiterkeysJ  s    zOrderedDict.iterkeysc                 C   s   t |  ¡ ƒS r   )rK   rm   r#   r   r   r   Ú	iteritemsM  s    zOrderedDict.iteritemsc                 C   sH   || kr6z| j  |¡ W n tk
r4   |g| _ Y nX t | ||¡ d S r   )ry   Úappendre   r   r   r]   r   r   r   r   P  s    zOrderedDict.__setitem__c                 C   s   t  | |¡ | j |¡ d S r   )r   r   ry   Úremover_   r   r   r   r   Z  s    zOrderedDict.__delitem__c                 G   s.   || k}t j| |f|žŽ }|r*| j |¡ |S r   )r   r/   ry   r„   )r   r>   rk   Zpresentr?   r   r   r   r/   ^  s
    zOrderedDict.popc                 C   s   t  | ¡}| j |d ¡ |S ©Nr   )r   r0   ry   r„   ©r   Úitemr   r   r   r0   e  s    
zOrderedDict.popitem)N)N)N)r   r   r   rA   ro   ru   r$   r   r.   r<   r|   r&   r1   rN   rV   rM   rm   r   r€   r�   r‚   r   r   r/   r0   r   r   r   r   rr     s,   



rr   c                   @   sÂ   e Zd Zd&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eZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZeZd d!„ ZeZd"d#„ ZeZd$d%„ ZeZdS )'Ú
OrderedSetNc                 C   s6   t  | ¡ |d k	r,t|ƒ| _t  | | j¡ ng | _d S r   )Úsetr   Úunique_listry   r&   )r   r*   r   r   r   r   l  s
    

zOrderedSet.__init__c                 C   s$   || kr| j  |¡ t | |¡ d S r   ©ry   rƒ   r‰   Úadd©r   Úelementr   r   r   rŒ   t  s    zOrderedSet.addc                 C   s   t  | |¡ | j |¡ d S r   )r‰   r„   ry   r�   r   r   r   r„   y  s    zOrderedSet.removec                 C   s&   || kr| j  ||¡ t | |¡ d S r   )ry   Úinsertr‰   rŒ   )r   ÚposrŽ   r   r   r   r�   }  s    zOrderedSet.insertc                 C   s$   || kr | j  |¡ t | |¡ d S r   )ry   r„   r‰   r�   r   r   r   Údiscard‚  s    zOrderedSet.discardc                 C   s   t  | ¡ g | _d S r   )r‰   r.   ry   r#   r   r   r   r.   ‡  s    
zOrderedSet.clearc                 C   s
   | j | S r   rx   r_   r   r   r   r`   ‹  s    zOrderedSet.__getitem__c                 C   s
   t | jƒS r   r~   r#   r   r   r   rN   Ž  s    zOrderedSet.__iter__c                 C   s
   |   |¡S r   )r(   rZ   r   r   r   r\   ‘  s    zOrderedSet.__add__c                 C   s   d| j j| jf S ©Nz%s(%r))r   r   ry   r#   r   r   r   r-   ”  s    zOrderedSet.__repr__c                 C   s.   |D ]$}|| kr| j  |¡ t | |¡ q| S r   r‹   )r   ÚiterableÚer   r   r   r&   ™  s
    zOrderedSet.updatec                 C   s   |   | ¡}| |¡ |S r   )r   r&   ©r   r[   Úresultr   r   r   r(   ¢  s    

zOrderedSet.unionc                    s    t ˆ ƒ‰ |  ‡ fdd„| D ƒ¡S )Nc                 3   s   | ]}|ˆ kr|V  qd S r   r   ©rQ   Úa©r[   r   r   Ú	<genexpr>«  s      z*OrderedSet.intersection.<locals>.<genexpr>©r‰   r   rZ   r   r™   r   Úintersection©  s    zOrderedSet.intersectionc                    s<   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—   r#   r   r   rš   ²  s      )r‰   r   r&   r•   r   )r[   r   r   Úsymmetric_difference¯  s    zOrderedSet.symmetric_differencec                    s    t ˆ ƒ‰ |  ‡ fdd„| D ƒ¡S )Nc                 3   s   | ]}|ˆ kr|V  qd S r   r   r—   r™   r   r   rš   ¹  s      z(OrderedSet.difference.<locals>.<genexpr>r›   rZ   r   r™   r   Ú
difference·  s    zOrderedSet.differencec                    s.   t ˆ ƒ‰ t  | ˆ ¡ ‡ fdd„| jD ƒ| _| S )Nc                    s   g | ]}|ˆ kr|‘qS r   r   r—   r™   r   r   rS   À  s      z2OrderedSet.intersection_update.<locals>.<listcomp>)r‰   Úintersection_updatery   rZ   r   r™   r   rŸ   ½  s    zOrderedSet.intersection_updatec                    sD   t  ˆ |¡ ‡ fdd„ˆ jD ƒˆ _ˆ  j‡ fdd„|jD ƒ7  _ˆ S )Nc                    s   g | ]}|ˆ kr|‘qS r   r   r—   r#   r   r   rS   Ç  s      z:OrderedSet.symmetric_difference_update.<locals>.<listcomp>c                    s   g | ]}|ˆ kr|‘qS r   r   r—   r#   r   r   rS   È  s      )r‰   Úsymmetric_difference_updatery   rZ   r   r#   r   r    Å  s    z&OrderedSet.symmetric_difference_updatec                    s&   t  ˆ |¡ ‡ fdd„ˆ jD ƒˆ _ˆ S )Nc                    s   g | ]}|ˆ kr|‘qS r   r   r—   r#   r   r   rS   Ï  s      z0OrderedSet.difference_update.<locals>.<listcomp>)r‰   Údifference_updatery   rZ   r   r#   r   r¡   Í  s    zOrderedSet.difference_update)N)r   r   r   r   rŒ   r„   r�   r‘   r.   r`   rN   r\   r-   Ú__str__r&   Ú__ior__r(   Ú__or__rœ   Ú__and__r�   Ú__xor__rž   Ú__sub__rŸ   Ú__iand__r    Ú__ixor__r¡   Ú__isub__r   r   r   r   rˆ   k  s6   
rˆ   c                   @   s>  e Zd ZdZdMd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d!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$e$Z%dEdF„ Z&dGdH„ Z'dIdJ„ Z(dKdL„ Z)dS )NÚIdentitySetzÏA 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.

    Nc                 C   s   t ƒ | _|r|  |¡ d S r   )r   Ú_membersr&   ©r   r“   r   r   r   r   Ý  s    zIdentitySet.__init__c                 C   s   || j t|ƒ< d S r   ©r¬   Úidrj   r   r   r   rŒ   â  s    zIdentitySet.addc                 C   s   t |ƒ| jkS r   )r¯   r¬   rj   r   r   r   rg   å  s    zIdentitySet.__contains__c                 C   s   | j t|ƒ= d S r   r®   rj   r   r   r   r„   è  s    zIdentitySet.removec                 C   s(   z|   |¡ W n tk
r"   Y nX d S r   )r„   rd   rj   r   r   r   r‘   ë  s    zIdentitySet.discardc                 C   s6   z| j  ¡ }|d W S  tk
r0   tdƒ‚Y nX d S )Nr   zpop from an empty set)r¬   r0   rd   )r   Úpairr   r   r   r/   ñ  s
    

zIdentitySet.popc                 C   s   | j  ¡  d S r   )r¬   r.   r#   r   r   r   r.   ø  s    zIdentitySet.clearc                 C   s   t dƒ‚d S )Nzcannot compare sets using cmp()©r   rZ   r   r   r   Ú__cmp__û  s    zIdentitySet.__cmp__c                 C   s   t |tƒr| j|jkS dS d S )NF©r7   r«   r¬   rZ   r   r   r   Ú__eq__þ  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__c                 C   sV   t || jƒr|}n
|  |¡}t| ƒt|ƒkr0dS t|jjt| j ¡ ƒƒD ]} dS dS ©NFT©r7   r   rI   r   r¬   rg   rK   rV   ©r   r“   r[   Úmr   r   r   Úissubset
  s    
 ÿzIdentitySet.issubsetc                 C   s   t |tƒstS |  |¡S r   )r7   r«   ÚNotImplementedr»   rZ   r   r   r   Ú__le__  s    
zIdentitySet.__le__c                 C   s(   t |tƒstS t| ƒt|ƒk o&|  |¡S r   )r7   r«   r¼   rI   r»   rZ   r   r   r   Ú__lt__  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   )r7   r«   r¼   r¿   rZ   r   r   r   Ú__ge__1  s    
zIdentitySet.__ge__c                 C   s(   t |tƒstS t| ƒt|ƒko&|  |¡S r   )r7   r«   r¼   rI   r¿   rZ   r   r   r   Ú__gt__6  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¯   ©rQ   r^   r   r   r   rš   ?  s     z$IdentitySet.union.<locals>.<genexpr>)r   r¬   r&   ©r   r“   r–   Úmembersr   r   r   r(   ;  s
    zIdentitySet.unionc                 C   s   t |tƒstS |  |¡S r   )r7   r«   r¼   r(   rZ   r   r   r   r¤   B  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š   H  s     z%IdentitySet.update.<locals>.<genexpr>)r¬   r&   r­   r   r   r   r&   G  s    zIdentitySet.updatec                 C   s   t |tƒstS |  |¡ | S r   )r7   r«   r¼   r&   rZ   r   r   r   r£   J  s    

zIdentitySet.__ior__c                    sZ   |   ¡ }| j}t|| j ƒr*t|j ¡ ƒ‰ ndd„ |D ƒ‰ |j ‡ fdd„| ¡ D ƒ¡ |S )Nc                 S   s   h | ]}t |ƒ’qS r   rÂ   rÃ   r   r   r   Ú	<setcomp>V  s     z)IdentitySet.difference.<locals>.<setcomp>c                 3   s"   | ]\}}|ˆ kr||fV  qd S r   r   ©rQ   rR   Úvr™   r   r   rš   X  s      z)IdentitySet.difference.<locals>.<genexpr>©r   r¬   r7   r‰   rV   r&   rm   rÄ   r   r™   r   rž   P  s    ÿzIdentitySet.differencec                 C   s   t |tƒstS |  |¡S r   )r7   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¡   a  s    zIdentitySet.difference_updatec                 C   s   t |tƒstS |  |¡ | S r   )r7   r«   r¼   r¡   rZ   r   r   r   rª   d  s    

zIdentitySet.__isub__c                    sZ   |   ¡ }| j}t|| j ƒr*t|j ¡ ƒ‰ ndd„ |D ƒ‰ |j ‡ fdd„| ¡ D ƒ¡ |S )Nc                 S   s   h | ]}t |ƒ’qS r   rÂ   rÃ   r   r   r   rÆ   p  s     z+IdentitySet.intersection.<locals>.<setcomp>c                 3   s"   | ]\}}|ˆ kr||fV  qd S r   r   rÇ   r™   r   r   rš   q  s     z+IdentitySet.intersection.<locals>.<genexpr>rÉ   rÄ   r   r™   r   rœ   j  s    ÿzIdentitySet.intersectionc                 C   s   t |tƒstS |  |¡S r   )r7   r«   r¼   rœ   rZ   r   r   r   r¥   v  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   )r7   r«   r¼   rŸ   rZ   r   r   r   r¨   ~  s    

zIdentitySet.__iand__c                    sp   |   ¡ }| j‰ t|| j ƒr"|j‰ndd„ |D ƒ‰|j ‡fdd„ˆ  ¡ D ƒ¡ |j ‡ fdd„ˆ ¡ D ƒ¡ |S )Nc                 S   s   i | ]}t |ƒ|“qS r   rÂ   rÃ   r   r   r   Ú
<dictcomp>Š  s      z4IdentitySet.symmetric_difference.<locals>.<dictcomp>c                 3   s"   | ]\}}|ˆ kr||fV  qd S r   r   rÇ   r™   r   r   rš   Œ  s      z3IdentitySet.symmetric_difference.<locals>.<genexpr>c                 3   s"   | ]\}}|ˆ kr||fV  qd S r   r   rÇ   )rÅ   r   r   rš   �  s      )r   r¬   r7   r&   rm   )r   r“   r–   r   )rÅ   r[   r   r�   „  s    ÿÿz IdentitySet.symmetric_differencec                 C   s   t |tƒstS |  |¡S r   ©r7   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   t | ƒt| j ¡ ƒƒS r   )ÚtyperK   r¬   rM   r#   r   r   r   r<   ¡  s    zIdentitySet.copyc                 C   s
   t | jƒS r   )rI   r¬   r#   r   r   r   rJ   ¦  s    zIdentitySet.__len__c                 C   s   t | j ¡ ƒS r   )rK   r¬   rM   r#   r   r   r   rN   ©  s    zIdentitySet.__iter__c                 C   s   t dƒ‚d S )Nzset objects are unhashabler±   r#   r   r   r   Ú__hash__¬  s    zIdentitySet.__hash__c                 C   s   dt | ƒjt| j ¡ ƒf S r’   )rÌ   r   rL   r¬   rM   r#   r   r   r   r-   ¯  s    zIdentitySet.__repr__)N)*r   r   r   rA   r   rŒ   rg   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|   rJ   rN   rÍ   r-   r   r   r   r   r«   Õ  sN   
r«   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚWeakSequencer   c                    s0   t  | ¡fdd„‰ ˆ | _‡ fdd„|D ƒ| _d S )Nc                 S   s   |ƒ }|d k	r|j  | ¡ d S r   )Ú_storager„   )r‡   Úselfrefr   r   r   r   Ú_remove·  s    z&WeakSequence.__init__.<locals>._removec                    s   g | ]}t  |ˆ ¡‘qS r   )ÚweakrefÚref)rQ   rŽ   ©rÑ   r   r   rS   ½  s    z)WeakSequence.__init__.<locals>.<listcomp>)rÒ   rÓ   rÑ   rÏ   )r   Z_WeakSequence__elementsr   rÔ   r   r   ´  s
    
ÿzWeakSequence.__init__c                 C   s   | j  t || j¡¡ d S r   )rÏ   rƒ   rÒ   rÓ   rÑ   r†   r   r   r   rƒ   Á  s    zWeakSequence.appendc                 C   s
   t | jƒS r   )rI   rÏ   r#   r   r   r   rJ   Ä  s    zWeakSequence.__len__c                 C   s   dd„ dd„ | j D ƒD ƒS )Nc                 s   s   | ]}|d k	r|V  qd S r   r   rÃ   r   r   r   rš   È  s     z(WeakSequence.__iter__.<locals>.<genexpr>c                 s   s   | ]}|ƒ V  qd S r   r   )rQ   rÓ   r   r   r   rš   É  s     )rÏ   r#   r   r   r   rN   Ç  s    ÿzWeakSequence.__iter__c                 C   s:   z| j | }W n  tk
r.   td| ƒ‚Y nX |ƒ S d S )NzIndex %s out of range)rÏ   rd   Ú
IndexError)r   Úindexr^   r   r   r   r`   Ì  s
    zWeakSequence.__getitem__N)r   )r   r   r   r   rƒ   rJ   rN   r`   r   r   r   r   rÎ   ³  s
   
rÎ   c                   @   s   e Zd Zddd„ZdS )ÚOrderedIdentitySetNc                 C   s.   t  | ¡ tƒ | _|r*|D ]}|  |¡ qd S r   )r«   r   rr   r¬   rŒ   )r   r“   Úor   r   r   r   Ö  s
    
zOrderedIdentitySet.__init__)N)r   r   r   r   r   r   r   r   r×   Õ  s   r×   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚPopulateDictz•A dict which populates missing values via a creation function.

    Note the creation function takes a key, unlike
    collections.defaultdict.

    c                 C   s
   || _ d S r   ©Úcreator)r   rÛ   r   r   r   r   æ  s    zPopulateDict.__init__c                 C   s   |   |¡ | |< }|S r   rÚ   ©r   r>   Úvalr   r   r   Ú__missing__é  s    zPopulateDict.__missing__N©r   r   r   rA   r   rÞ   r   r   r   r   rÙ   Þ  s   rÙ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚWeakPopulateDictzaLike PopulateDict, but assumes a self + a method and does not create
    a reference cycle.

    c                 C   s   |j | _|j}t |¡| _d S r   )Ú__func__rÛ   Ú__self__rÒ   rÓ   Úweakself)r   Zcreator_methodrã   r   r   r   r   ô  s    zWeakPopulateDict.__init__c                 C   s   |   |  ¡ |¡ | |< }|S r   )rÛ   rã   rÜ   r   r   r   rÞ   ù  s    zWeakPopulateDict.__missing__Nrß   r   r   r   r   rà   î  s   rà   c                 C   s   t t | ¡ƒS r   )ÚpropertyÚoperatorÚ
itemgetter)Úidxr   r   r   Ú<lambda>
  ó    rè   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   ©rQ   Úx)ÚseenÚseen_addr   r   rS     s       zunique_list.<locals>.<listcomp>c                    s(   g | ] }ˆ |ƒˆkrˆˆ |ƒƒs|‘qS r   r   rê   ©Úhashfuncrì   rí   r   r   rS     s    þ)r‰   rŒ   )Úseqrï   r   rî   r   rŠ     s    þrŠ   c                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
ÚUniqueAppenderz½Appends items to a collection ensuring uniqueness.

    Additional appends() of the same object are ignored.  Membership is
    determined by identity (``is a``) not equality (``==``).
    Nc                 C   sH   || _ i | _|rt||ƒ| _n&t|dƒr2|j| _nt|dƒrD|j| _d S )Nrƒ   rŒ   )rH   Ú_uniqueÚgetattrÚ_data_appenderr}   rƒ   rŒ   )r   rH   Zviar   r   r   r   "  s    


zUniqueAppender.__init__c                 C   s*   t |ƒ}|| jkr&|  |¡ d| j|< d S rµ   )r¯   rò   rô   )r   r‡   Zid_r   r   r   rƒ   ,  s    

zUniqueAppender.appendc                 C   s
   t | jƒS r   )rK   rH   r#   r   r   r   rN   2  s    zUniqueAppender.__iter__)N)r   r   r   rA   r   rƒ   rN   r   r   r   r   rñ     s   

rñ   c                 C   s0   t | ƒdkr(t| d tjƒr(t| d ƒS | S d S )Nr   r   )rI   r7   ÚtypesÚGeneratorTyperL   r5   r   r   r   Úcoerce_generator_arg6  s    r÷   c                 C   sF   | d kr|S t | tjƒr&t | tt ƒr,| gS t | tƒr:| S t| ƒS d S r   )r7   r   ÚIterabler	   r   rL   )rë   rk   r   r   r   Úto_list=  s     ÿ
rù   c                 C   s   t |  dd„ |D ƒ¡ƒS )z²return True if any items of set\_ are present in iterable.

    Goes through special effort to ensure __hash__ is not called
    on items in iterable that don't support it.

    c                 S   s   g | ]}|j r|‘qS r   )rÍ   ©rQ   Úir   r   r   rS   R  s      z$has_intersection.<locals>.<listcomp>)Úboolrœ   )Úset_r“   r   r   r   Úhas_intersectionJ  s    rþ   c                 C   s,   | d krt ƒ S t| t ƒs$t t| ƒƒS | S d S r   )r‰   r7   rù   ©rë   r   r   r   Úto_setU  s
    
r   c                 C   s,   | d krt ƒ S t| t ƒs$t t| ƒƒS | S d S r   )Ú
column_setr7   rù   rÿ   r   r   r   Úto_column_set^  s
    
r  c                 K   s&   |   ¡ } |r|  |¡ | jf |Ž | S )z5Copy the given dict and update with the given values.)r<   r&   )r*   Ú_newr   r   r   r   Úupdate_copyg  s
    
r  c                 c   s>   | D ]4}t |tƒs2t|dƒr2t|ƒD ]
}|V  q$q|V  qdS )z�Given an iterator of which further sub-elements may also be
    iterators, flatten the sub-elements into a single iterator.

    rN   N)r7   rO   r}   Úflatten_iterator)rë   ÚelemÚyr   r   r   r  q  s
    
r  c                   @   sd   e Zd ZdZdZddd„Zdd	„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Zedd„ ƒZdd„ ZdS )ÚLRUCachezóDictionary with 'squishy' removal of least
    recently used items.

    Note that either get() or [] should be used here, but
    generally its not safe to do an "in" check first as the dictionary
    can change subsequent to that call.

    )ÚcapacityÚ	thresholdÚ
size_alertÚ_counterÚ_mutexéd   ç      à?Nc                 C   s&   || _ || _|| _d| _t ¡ | _d S r…   )r	  r
  r  r  r
   ÚLockr  )r   r	  r
  r  r   r   r   r   Š  s
    zLRUCache.__init__c                 C   s   |  j d7  _ | j S ©Nr   )r  r#   r   r   r   Ú_inc_counter‘  s    zLRUCache._inc_counterc                 C   s2   t  | ||¡}||k	r*|  ¡ |d< |d S |S d S ©Né   r   )r   rl   r  )r   r>   rk   r‡   r   r   r   rl   •  s
    zLRUCache.getc                 C   s    t  | |¡}|  ¡ |d< |d S r  )r   r`   r  )r   r>   r‡   r   r   r   r`   �  s    zLRUCache.__getitem__c                 C   s   dd„ t  | ¡D ƒS )Nc                 S   s   g | ]}|d  ‘qS )r   r   rú   r   r   r   rS   £  s     z#LRUCache.values.<locals>.<listcomp>)r   rM   r#   r   r   r   rM   ¢  s    zLRUCache.valuesc                 C   s    || kr| | S || |< |S d S r   r   r=   r   r   r   r1   ¥  s    zLRUCache.setdefaultc                 C   sF   t  | |¡}|d kr2|||  ¡ g}t  | ||¡ n||d< |  ¡  d S r  )r   rl   r  r   Ú_manage_size)r   r>   r?   r‡   r   r   r   r   ¬  s    zLRUCache.__setitem__c                 C   s   | j | j | j  S r   )r	  r
  r#   r   r   r   Úsize_thresholdµ  s    zLRUCache.size_thresholdc              	   C   s´   | j  d¡sd S z’t| jƒ}t| ƒ| j| j| j  kr |rHd}|  | ¡ tt	 
| ¡t d¡dd�}|| jd … D ],}z| |d = W qp tk
rš   Y qpY qpX qpqW 5 | j  ¡  X d S )NFr  T)r>   Úreverser   )r  ÚacquireÚreleaserü   r  rI   r	  r
  rt   r   rM   rå   ræ   rd   )r   r  Z
by_counterr‡   r   r   r   r  ¹  s&    

  ÿzLRUCache._manage_size)r  r  N)N)r   r   r   rA   ro   r   r  rl   r`   rM   r1   r   rä   r  r  r   r   r   r   r  ~  s   	

	
r  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚScopedRegistryaÆ  A Registry that can store one or multiple instances of a single
    class on the basis of a "scope" function.

    The object implements ``__call__`` as the "getter", so by
    calling ``myregistry()`` the contained object is returned
    for the current scope.

    :param createfunc:
      a callable that returns a new object to be placed in the registry

    :param scopefunc:
      a callable that will return a key to store/retrieve an object.
    c                 C   s   || _ || _i | _dS )aV  Construct a new :class:`.ScopedRegistry`.

        :param createfunc:  A creation function that will generate
          a new value for the current scope, if none is present.

        :param scopefunc:  A function that returns a hashable
          token representing the current scope (such as, current
          thread identifier).

        N)Ú
createfuncÚ	scopefuncÚregistry)r   r  r  r   r   r   r   Þ  s    zScopedRegistry.__init__c                 C   s@   |   ¡ }z| j| W S  tk
r:   | j ||  ¡ ¡ Y S X d S r   )r  r  rd   r1   r  r_   r   r   r   Ú__call__í  s
    zScopedRegistry.__call__c                 C   s   |   ¡ | jkS )z9Return True if an object is present in the current scope.)r  r  r#   r   r   r   Úhasô  s    zScopedRegistry.hasc                 C   s   || j |  ¡ < dS )z$Set the value for the current scope.N)r  r  ©r   r^   r   r   r   r‰   ù  s    zScopedRegistry.setc                 C   s*   z| j |  ¡ = W n tk
r$   Y nX dS )z Clear the current scope, if any.N)r  r  rd   r#   r   r   r   r.   þ  s    zScopedRegistry.clearN©	r   r   r   rA   r   r  r  r‰   r.   r   r   r   r   r  Ï  s   r  c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚThreadLocalRegistryz\A :class:`.ScopedRegistry` that uses a ``threading.local()``
    variable for storage.

    c                 C   s   || _ t ¡ | _d S r   )r  r
   Úlocalr  )r   r  r   r   r   r     s    zThreadLocalRegistry.__init__c                 C   s8   z
| j jW S  tk
r2   |  ¡  }| j _| Y S X d S r   )r  r?   re   r  )r   rÝ   r   r   r   r    s
    
zThreadLocalRegistry.__call__c                 C   s   t | jdƒS )Nr?   )r}   r  r#   r   r   r   r    s    zThreadLocalRegistry.hasc                 C   s   || j _d S r   )r  r?   r   r   r   r   r‰     s    zThreadLocalRegistry.setc                 C   s$   z
| j `W n tk
r   Y nX d S r   )r  r?   re   r#   r   r   r   r.     s    
zThreadLocalRegistry.clearNr!  r   r   r   r   r"    s   r"  c                 C   s0   d}| D ]"}||kr|d7 }|dkr dS qdS )zrGiven a sequence and search object, return True if there's more
    than one, False if zero or one of them.


    r   r   TFr   )ÚsequenceÚtargetÚcr‡   r   r   r   Ú	has_dupes%  s    
r'  )N)N)N)N)N)=rA   Ú
__future__r   rå   rõ   rÒ   Úcompatr   r   r   r   r   r	   r
   Ú	frozensetÚ	EMPTY_SETrG   r   r4   Zsqlalchemy.cimmutabledictr2   ÚMappingÚregisterÚImportErrorr"   r9   r6   r   r:   rB   rq   rh   ru   rr   rw   r‰   rˆ   r«   rÎ   r×   rÙ   rà   r  Zcolumn_dictZordered_column_setræ   Z_gettersZ_property_gettersrŠ   rñ   r÷   rù   rþ   r   r  r  r  r  r  r"  r'  r   r   r   r   Ú<module>   sv   :	O



ej _"	
ÿ

		

Q8