
    +hq                        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e      Zd Z	 ddlmZ ej*                  j-                  e       d Z e       Z G d dee      Z G d de      Z G d de      Z G d dee      Zd<dZ ereZ!e Z"nd<dZ" G d de      Z! G d de#      Z$ G d  d!e      Z% G d" d#e      Z& G d$ d%e%      Z' G d& d'e      Z( G d( d)e      Z)e#Z*eZ+e$Z, e(ejZ                        Z. e(d*       Z/d<d+Z0 G d, d-e      Z1d. Z2d<d/Z3d0 Z4d1 Z5d2 Z6d<d3Z7d4 Z8 G d5 d6e      Z9 G d7 d8e      Z: G d9 d:e:      Z;d; Z<y# e$ r  e       Zd ZY w xY w)=zCollection classes and helpers.    )absolute_importN   )binary_types)collections_abc)itertools_filterfalse)py2k)py37)string_types)	threadingc                       e Zd Zd ZexZxZZy)ImmutableContainerc                 F    t        d| j                  j                  z        )Nz%s object is immutable)	TypeError	__class____name__)selfargkws      O/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/util/_collections.py
_immutablezImmutableContainer._immutable   s    04>>3J3JJKK    N)r   
__module____qualname__r   __delitem____setitem____setattr__ r   r   r   r      s    L /98K8+r   r   c                  .     G d dt         t              } | S )Nc                   b    e Zd Zej                  xZxZxZxZZ	d Z
d Zd Zd	dZd	dZd Zd Zy)
1_immutabledict_py_fallback.<locals>.immutabledictc                 \    t         j                  |       }t        j                  |g|  |S N)dict__new____init__clsargsnews      r   r$   z9_immutabledict_py_fallback.<locals>.immutabledict.__new__*   s&    ,,s#CMM#%%Jr   c                      y r"   r   )r   r(   s     r   r%   z:_immutabledict_py_fallback.<locals>.immutabledict.__init__/   s    r   c                 &    t         t        |       ffS r"   )_immutabledict_reconstructorr#   r   s    r   
__reduce__z<_immutabledict_py_fallback.<locals>.immutabledict.__reduce__2   s    /$t*>>r   Nc                     |s| S t         j                  | j                        }t         j                  ||        t         j	                  ||       |S r"   r#   r$   r   r%   update)r   _immutabledict__dr)   s      r   unionz7_immutabledict_py_fallback.<locals>.immutabledict.union5   s=    ,,t~~.CMM#t$KKS!Jr   c                     |s|s| S t         j                  | j                        }t         j                  ||        |rt         j	                  ||       t         j	                  ||       |S r"   r0   )r   r2   r   r)   s       r   _union_w_kwz=_immutabledict_py_fallback.<locals>.immutabledict._union_w_kw>   sP    r,,t~~.CMM#t$C%KKR Jr   c                     d }|D ]R  }|s|5t         j                  | j                        }t         j                  ||        t         j	                  ||       T || S |S r"   r0   )r   dictsr)   ds       r   
merge_withz<_immutabledict_py_fallback.<locals>.immutabledict.merge_withJ   s]    C ({"ll4>>:c40KKQ'( {Jr   c                 2    dt         j                  |       z  S )Nzimmutabledict(%s)r#   __repr__r-   s    r   r<   z:_immutabledict_py_fallback.<locals>.immutabledict.__repr__W   s    &t)<<<r   r"   )r   r   r   r   r   clearpoppopitem
setdefaultr1   r$   r%   r.   r3   r5   r9   r<   r   r   r   immutabledictr    $   sU     -?,I,I	J 	J	J	J 6	
		?	
			=r   rA   )r   r#   rA   s    r   _immutabledict_py_fallbackrC   #   s    4=*D 4=l r   rB   c                      t        |  S )zdo the pickle dancerB   r   s    r   r,   r,   e   s    c""r   c                 L    | st         S t        | t              r| S t        |       S r"   )
EMPTY_DICT
isinstancerA   )r8   s    r   coerce_to_immutabledictrI   j   s%    	A}	%Qr   c                   V    e Zd ZdZej
                  xZxZxZxZ	Z
d Zd Zd Zd Zd Zy)
FacadeDictz*A dictionary that is not publicly mutable.c                 0    t         j                  |       }|S r"   )r#   r$   r&   s      r   r$   zFacadeDict.__new__{   s    ll3
r   c                     t        d      )Nz\an immutabledict shouldn't need to be copied.  use dict(d) if you need a mutable dictionary.)NotImplementedErrorr-   s    r   copyzFacadeDict.copy   s    !0
 	
r   c                 &    t         t        |       ffS r"   )rK   r#   r-   s    r   r.   zFacadeDict.__reduce__   s    DJ=((r   c                 2    t         j                  | ||       y)z,insert an item into the dictionary directly.N)r#   r   r   keyvalues      r   _insert_itemzFacadeDict._insert_item   s    sE*r   c                 2    dt         j                  |       z  S )NzFacadeDict(%s)r;   r-   s    r   r<   zFacadeDict.__repr__   s    $--"555r   N)r   r   r   __doc__r   r   r=   r>   r?   r@   r1   r$   rO   r.   rU   r<   r   r   r   rK   rK   v   s=    42D2O2OOEOCO'OJ
)+6r   rK   c                        e Zd ZdZdZd Zd Zd Z fdZd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Z xZS )
Propertiesz8Provide a __getattr__/__setattr__ interface over a dict._datac                 2    t         j                  | d|       y Nr[   objectr   )r   datas     r   r%   zProperties.__init__   s    4$/r   c                 ,    t        | j                        S r"   )lenr[   r-   s    r   __len__zProperties.__len__   s    4::r   c                 Z    t        t        | j                  j                                     S r"   )iterlistr[   valuesr-   s    r   __iter__zProperties.__iter__   s    D**,-..r   c                     t        t        t        |             | j                  j	                         D cg c]  }t        |       c}z   S c c}w r"   )dirsuperrY   r[   keysstr)r   kr   s     r   __dir__zProperties.__dir__   sC    5T*+ JJOO-/
CF/
 
 	
 /
s   Ac                 0    t        |       t        |      z   S r"   rf   r   others     r   __add__zProperties.__add__   s    DzDK''r   c                 "    || j                   |<   y r"   rZ   r   rS   objs      r   r   zProperties.__setitem__       

3r   c                      | j                   |   S r"   rZ   r   rS   s     r   __getitem__zProperties.__getitem__       zz#r   c                     | j                   |= y r"   rZ   rz   s     r   r   zProperties.__delitem__   s    JJsOr   c                 "    || j                   |<   y r"   rZ   rv   s      r   r   zProperties.__setattr__   rx   r   c                     d| j                   iS r]   rZ   r-   s    r   __getstate__zProperties.__getstate__   s    $$r   c                 8    t         j                  | d|d          y r]   r^   )r   states     r   __setstate__zProperties.__setstate__   s    4%.9r   c                 R    	 | j                   |   S # t        $ r t        |      w xY wr"   )r[   KeyErrorAttributeErrorrz   s     r   __getattr__zProperties.__getattr__   s/    	&::c?" 	& %%	&s    &c                     || j                   v S r"   rZ   rz   s     r   __contains__zProperties.__contains__       djj  r   c                 ,    t        | j                        S )z8Return an immutable proxy for this :class:`.Properties`.)ImmutablePropertiesr[   r-   s    r   as_immutablezProperties.as_immutable   s     #4::..r   c                 :    | j                   j                  |       y r"   )r[   r1   r   rT   s     r   r1   zProperties.update   s    

% r   c                     || v r| |   S |S r"   r   )r   rS   defaults      r   getzProperties.get   s    $;9Nr   c                 ,    t        | j                        S r"   )rf   r[   r-   s    r   rl   zProperties.keys       DJJr   c                 H    t        | j                  j                               S r"   )rf   r[   rg   r-   s    r   rg   zProperties.values   s    DJJ%%'((r   c                 H    t        | j                  j                               S r"   )rf   r[   itemsr-   s    r   r   zProperties.items   s    DJJ$$&''r   c                     || j                   v S r"   rZ   rz   s     r   has_keyzProperties.has_key   r   r   c                 8    | j                   j                          y r"   )r[   r=   r-   s    r   r=   zProperties.clear   s    

r   r"   )r   r   r   rW   	__slots__r%   rc   rh   ro   rt   r   r{   r   r   r   r   r   r   r   r1   r   rl   rg   r   r   r=   __classcell__)r   s   @r   rY   rY      st    BI0/

(%:&!/
! )(!r   rY   c                       e Zd ZdZdZd Zy)OrderedPropertieszUProvide a __getattr__/__setattr__ interface with an OrderedDict
    as backing store.r   c                 @    t         j                  | t                      y r"   )rY   r%   OrderedDictr-   s    r   r%   zOrderedProperties.__init__   s    D+-0r   N)r   r   r   rW   r   r%   r   r   r   r   r      s     I1r   r   c                       e Zd ZdZdZy)r   zDProvide immutable dict/object attribute to an underlying dictionary.r   N)r   r   r   rW   r   r   r   r   r   r      s
    NIr   r   c                     t        | |      D cg c]	  }|| |   f }}| j                          | j                  |       yc c}w )zSort an OrderedDict in-place.rS   N)sortedr=   r1   )r8   rS   rn   r   s       r   _ordered_dictionary_sortr      s?     !'qc 231a1Y3E3GGIHHUO	 4s   Ac                 (    | j                  |       y)zSort an OrderedDict in place.r   Nr   )r8   rS   s     r   sort_dictionaryr     s     	
""s"+r   c                       e Zd ZdZdZddZd ZddZd Zd Z	d	 Z
dd
Zd Zd Zd Zd Zd Zer	d Zd Zd Zd Zd Zd Zd Zy)r   zhDictionary that maintains insertion order.

        Superseded by Python dict as of Python 3.7

        _listNc                     t        | |       y )Nr   r   rz   s     r   r   z$OrderedDict._ordered_dictionary_sort  s    $Ts3r   c                 0    t         | j                         ffS r"   )r   r   r-   s    r   r.   zOrderedDict.__reduce__  s    //r   c                 h    g | _         ||r | j                  di | y y  | j                  |fi | y )Nr   )r   r1   )r   _OrderedDict____sequencekwargss      r   r%   zOrderedDict.__init__  s=    DJ#DKK)&)  L3F3r   c                 <    g | _         t        j                  |        y r"   )r   r#   r=   r-   s    r   r=   zOrderedDict.clear  s    DJJJtr   c                 "    | j                         S r"   )__copy__r-   s    r   rO   zOrderedDict.copy!  s    ==?"r   c                     t        |       S r"   )r   r-   s    r   r   zOrderedDict.__copy__$  s    t$$r   c                     |Ft        |d      r+|j                         D ]  }| j                  |||           n|D ]
  \  }}|| |<    |r| j                  |       y y )Nrl   )hasattrrl   r   r1   )r   r   r   rS   rT   s        r   r1   zOrderedDict.update'  ss    '<0+002 A((l3.?@A '3 *
U$)S	*F# r   c                 T    || vr| j                  ||       |S | j                  |      S r"   )r   r{   rR   s      r   r@   zOrderedDict.setdefault2  s/    $  e,'',,r   c                 ,    t        | j                        S r"   re   r   r-   s    r   rh   zOrderedDict.__iter__9  s    

##r   c                     t        |       S r"   rq   r-   s    r   rl   zOrderedDict.keys<  s    :r   c                 F    | j                   D cg c]  }| |   	 c}S c c}w r"   r   rz   s     r   rg   zOrderedDict.values?  s    )-4#DI444s   c                 J    | j                   D cg c]	  }|| |   f c}S c c}w r"   r   rz   s     r   r   zOrderedDict.itemsB  s#    04

;S$s)$;;;s    c                 4    t        | j                               S r"   )re   rg   r-   s    r   
itervalueszOrderedDict.itervaluesG  s    DKKM**r   c                     t        |       S r"   )re   r-   s    r   iterkeyszOrderedDict.iterkeysJ  s    Dz!r   c                 4    t        | j                               S r"   )re   r   r-   s    r   	iteritemszOrderedDict.iteritemsM  s    DJJL))r   c                     || vr	 | j                   j                  |       t        j	                  | ||       y # t        $ r |g| _         Y +w xY wr"   )r   appendr   r#   r   rv   s      r   r   zOrderedDict.__setitem__P  sP    $'JJ%%c*
 T3,	 & ' #&DJ's   9 AAc                 f    t         j                  | |       | j                  j                  |       y r"   )r#   r   r   removerz   s     r   r   zOrderedDict.__delitem__Z  s$    T3'JJc"r   c                 v    || v }t        j                  | |g| }|r| j                  j                  |       |S r"   )r#   r>   r   r   )r   rS   r   presentrT   s        r   r>   zOrderedDict.pop^  s:    TkGHHT311E

!!#&Lr   c                 l    t         j                  |       }| j                  j                  |d          |S Nr   )r#   r?   r   r   r   items     r   r?   zOrderedDict.popiteme  s+    <<%DJJd1g&Kr   r"   )r   r   r   rW   r   r   r.   r%   r=   rO   r   r1   r@   rh   rl   rg   r   r   r   r   r   r   r   r>   r?   r   r   r   r   r     sr    	 		4	0	4		#	%		$	-	$		5	< +"*	-	#		r   r   c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZeZd ZeZd ZeZd ZeZd ZeZd ZeZd ZeZd ZeZd ZeZy)
OrderedSetNc                     t         j                  |        |1t        |      | _        t         j	                  | | j                         y g | _        y r"   )setr%   unique_listr   r1   )r   r8   s     r   r%   zOrderedSet.__init__l  s7    T=$QDJJJtTZZ(DJr   c                 n    || vr| j                   j                  |       t        j                  | |       y r"   r   r   r   addr   elements     r   r   zOrderedSet.addt  s*    $JJg&gr   c                 f    t         j                  | |       | j                  j                  |       y r"   )r   r   r   r   s     r   r   zOrderedSet.removey  s"    

4!

'"r   c                 p    || vr| j                   j                  ||       t        j                  | |       y r"   )r   insertr   r   )r   posr   s      r   r   zOrderedSet.insert}  s,    $JJc7+gr   c                 p    || v r2| j                   j                  |       t        j                  | |       y y r"   )r   r   r   r   s     r   discardzOrderedSet.discard  s.    d?JJg&JJtW% r   c                 <    t         j                  |        g | _        y r"   )r   r=   r   r-   s    r   r=   zOrderedSet.clear  s    		$
r   c                      | j                   |   S r"   r   rz   s     r   r{   zOrderedSet.__getitem__  r|   r   c                 ,    t        | j                        S r"   r   r-   s    r   rh   zOrderedSet.__iter__  r   r   c                 $    | j                  |      S r"   )r3   rr   s     r   rt   zOrderedSet.__add__  s    zz%  r   c                 N    | j                   j                  d| j                  dS N())r   r   r   r-   s    r   r<   zOrderedSet.__repr__  s    >>22DJJ??r   c                     |D ]8  }|| vs| j                   j                  |       t        j                  | |       : | S r"   r   )r   iterablees      r   r1   zOrderedSet.update  s?     	!A}

!!!$a 	! r   c                 J    | j                  |       }|j                  |       |S r"   )r   r1   r   rs   results      r   r3   zOrderedSet.union  s!    %er   c                 N    t              | j                  fd| D              S )Nc              3   ,   K   | ]  }|v s|  y wr"   r   .0ars   s     r   	<genexpr>z*OrderedSet.intersection.<locals>.<genexpr>  s     <Aea<   	r   r   rr   s    `r   intersectionzOrderedSet.intersection  s!    E
~~<<<<r   c                      t               j                  fd D              }|j                   fdD               |S )Nc              3   ,   K   | ]  }|vs|  y wr"   r   r   s     r   r   z2OrderedSet.symmetric_difference.<locals>.<genexpr>  s     Ba1E>Br   c              3   ,   K   | ]  }|vs|  y wr"   r   )r   r   r   s     r   r   z2OrderedSet.symmetric_difference.<locals>.<genexpr>  s     8A!4-a8r   )r   r   r1   r   s   `` r   symmetric_differencezOrderedSet.symmetric_difference  s7    E
B4BB888r   c                 N    t              | j                  fd| D              S )Nc              3   ,   K   | ]  }|vs|  y wr"   r   r   s     r   r   z(OrderedSet.difference.<locals>.<genexpr>  s     @A%a@r   r   rr   s    `r   
differencezOrderedSet.difference  s!    E
~~@@@@r   c                     t        |      }t         j                  | |       | j                  D cg c]	  }||v s| c}| _        | S c c}w r"   )r   intersection_updater   r   rs   r   s      r   r   zOrderedSet.intersection_update  sA    E
e,!%:AqEza:
 ;s
   	AAc                     t         j                  | |       | j                  D cg c]	  }|| v s| c}| _        | xj                  |j                  D cg c]	  }|| v s| c}z  c_        | S c c}w c c}w r"   )r   symmetric_difference_updater   r   s      r   r   z&OrderedSet.symmetric_difference_update  s^    ''e4!%9AqDya9


%++;Qdq;;
 :;s   	A/A/	A4A4c                     t         j                  | |       | j                  D cg c]	  }|| v s| c}| _        | S c c}w r"   )r   difference_updater   r   s      r   r  zOrderedSet.difference_update  s8    dE*!%9AqDya9
 :s   	==r"   )r   r   r   r%   r   r   r   r   r=   r{   rh   rt   r<   __str__r1   __ior__r3   __or__r   __and__r   __xor__r   __sub__r   __iand__r   __ixor__r  __isub__r   r   r   r   r   k  s    
#
&
 !@ G G
 F= G #GA G #H +H
 !Hr   r   c                       e Zd ZdZd(dZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$e$Z%d$ Z&d% Z'd& Z(d' Z)y))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.

    Nc                 J    t               | _        |r| j                  |       y y r"   )r#   _membersr1   r   r   s     r   r%   zIdentitySet.__init__  s    KK! r   c                 4    || j                   t        |      <   y r"   r  idr   s     r   r   zIdentitySet.add  s    #(bi r   c                 0    t        |      | j                  v S r"   )r  r  r   s     r   r   zIdentitySet.__contains__  s    %yDMM))r   c                 0    | j                   t        |      = y r"   r  r   s     r   r   zIdentitySet.remove  s    MM"U)$r   c                 F    	 | j                  |       y # t        $ r Y y w xY wr"   )r   r   r   s     r   r   zIdentitySet.discard  s%    	KK 		s    	  c                 r    	 | j                   j                         }|d   S # t        $ r t        d      w xY w)Nr   zpop from an empty set)r  r?   r   )r   pairs     r   r>   zIdentitySet.pop  s=    	4==((*D7N 	4233	4s   ! 6c                 8    | j                   j                          y r"   )r  r=   r-   s    r   r=   zIdentitySet.clear  s    r   c                     t        d      )Nzcannot compare sets using cmp()r   rr   s     r   __cmp__zIdentitySet.__cmp__  s    9::r   c                 V    t        |t              r| j                  |j                  k(  S y)NFrH   r  r  rr   s     r   __eq__zIdentitySet.__eq__  s"    e[)==ENN22r   c                 V    t        |t              r| j                  |j                  k7  S yNTr  rr   s     r   __ne__zIdentitySet.__ne__  s"    e[)==ENN22r   c                    t        || j                        r|}n| j                  |      }t        |       t        |      kD  ryt        |j                  j
                  t        | j                  j                                     D ]  } y yNFTrH   r   rb   r   r  r   re   rl   r   r   rs   ms       r   issubsetzIdentitySet.issubset
  su    h/ENN8,Et9s5z!&NN''dmm.@.@.B)C
 	A 	 r   c                 P    t        |t              st        S | j                  |      S r"   )rH   r  NotImplementedr'  rr   s     r   __le__zIdentitySet.__le__  s!    %-!!}}U##r   c                     t        |t              st        S t        |       t        |      k  xr | j	                  |      S r"   )rH   r  r)  rb   r'  rr   s     r   __lt__zIdentitySet.__lt__  s3    %-!!4y3u:%>$--*>>r   c                    t        || j                        r|}n| j                  |      }t        |       t        |      k  ryt        | j                  j
                  t        |j                  j                                     D ]  } y yr#  r$  r%  s       r   
issupersetzIdentitySet.issuperset"  su    h/ENN8,Et9s5z!&MM&&U^^-@-@-B(C
 	A 	 r   c                 P    t        |t              st        S | j                  |      S r"   )rH   r  r)  r.  rr   s     r   __ge__zIdentitySet.__ge__1  !    %-!!u%%r   c                     t        |t              st        S t        |       t        |      kD  xr | j	                  |      S r"   )rH   r  r)  rb   r.  rr   s     r   __gt__zIdentitySet.__gt__6  s3    %-!!4y3u:%@$//%*@@r   c                     | j                         }| j                  }|j                  j                  |       |j                  j                  d |D               |S )Nc              3   6   K   | ]  }t        |      |f  y wr"   r  r   rw   s     r   r   z$IdentitySet.union.<locals>.<genexpr>?  s     B#3~B   )r   r  r1   )r   r   r   memberss       r   r3   zIdentitySet.union;  sF    !--w'BBBr   c                 P    t        |t              st        S | j                  |      S r"   )rH   r  r)  r3   rr   s     r   r  zIdentitySet.__or__B  s!    %-!!zz%  r   c                 H    | j                   j                  d |D               y )Nc              3   6   K   | ]  }t        |      |f  y wr"   r6  r7  s     r   r   z%IdentitySet.update.<locals>.<genexpr>H  s     @bgs^@r8  )r  r1   r  s     r   r1   zIdentitySet.updateG  s    @x@@r   c                 T    t        |t              st        S | j                  |       | S r"   )rH   r  r)  r1   rr   s     r   r  zIdentitySet.__ior__J  s#    %-!!Er   c                 T   | j                         }| j                  }t        || j                         r$t        |j                  j	                               n|D ch c]  }t        |       c}|j                  j                  fd|j                         D               |S c c}w )Nc              3   6   K   | ]  \  }}|vs||f  y wr"   r   r   rn   vrs   s      r   r   z)IdentitySet.difference.<locals>.<genexpr>X       B11E>aVB   	r   r  rH   r   rl   r  r1   r   r   r   r   r9  rw   rs   s        @r   r   zIdentitySet.differenceP  s    !--h/))..01E(01RW1EBB	
 	 2   B%c                 P    t        |t              st        S | j                  |      S r"   )rH   r  r)  r   rr   s     r   r  zIdentitySet.__sub__\  r1  r   c                 D    | j                  |      j                  | _        y r"   )r   r  r  s     r   r  zIdentitySet.difference_updatea  s    1::r   c                 T    t        |t              st        S | j                  |       | S r"   )rH   r  r)  r  rr   s     r   r
  zIdentitySet.__isub__d  s%    %-!!u%r   c                 T   | j                         }| j                  }t        || j                         r$t        |j                  j	                               n|D ch c]  }t        |       c}|j                  j                  fd|j                         D               |S c c}w )Nc              3   6   K   | ]  \  }}|v s||f  y wr"   r   r@  s      r   r   z+IdentitySet.intersection.<locals>.<genexpr>q  s$      
q!!u*QF
rC  rD  rE  s        @r   r   zIdentitySet.intersectionj  s    !--h/))..01E(01RW1E 
&}}
 	
 	 2rF  c                 P    t        |t              st        S | j                  |      S r"   )rH   r  r)  r   rr   s     r   r  zIdentitySet.__and__v  s#    %-!!  ''r   c                 D    | j                  |      j                  | _        y r"   )r   r  r  s     r   r   zIdentitySet.intersection_update{  s    ))(3<<r   c                 T    t        |t              st        S | j                  |       | S r"   )rH   r  r)  r   rr   s     r   r  zIdentitySet.__iand__~  s%    %-!!  'r   c                    | j                         }| j                  t        || j                         r|j                  n|D ci c]  }t        |      | c}|j                  j	                  fdj                         D               |j                  j	                  fdj                         D               |S c c}w )Nc              3   6   K   | ]  \  }}|vs||f  y wr"   r   r@  s      r   r   z3IdentitySet.symmetric_difference.<locals>.<genexpr>  rB  rC  c              3   6   K   | ]  \  }}|vs||f  y wr"   r   )r   rn   rA  r9  s      r   r   z3IdentitySet.symmetric_difference.<locals>.<genexpr>  s      B1'1AaVBrC  )r   r  rH   r  r1   r   )r   r   r   rw   r9  rs   s       @@r   r   z IdentitySet.symmetric_difference  s    !--h/%%E-56cRWc\6EBB	
 	BB	
  7s   Cc                 P    t        |t              st        S | j                  |      S r"   rH   r  r)  r   rr   s     r   r  zIdentitySet.__xor__  s#    %-!!((//r   c                 D    | j                  |      j                  | _        y r"   )r   r  r  s     r   r   z'IdentitySet.symmetric_difference_update  s    11(;DDr   c                 T    t        |t              st        S | j                  |       | S r"   rS  rr   s     r   r	  zIdentitySet.__ixor__  s%    %-!!!!%(r   c                 f     t        |       t        | j                  j                                     S r"   )typere   r  rg   r-   s    r   rO   zIdentitySet.copy  s%    tDz$t}}335677r   c                 ,    t        | j                        S r"   )rb   r  r-   s    r   rc   zIdentitySet.__len__      4==!!r   c                 H    t        | j                  j                               S r"   )re   r  rg   r-   s    r   rh   zIdentitySet.__iter__  s    DMM((*++r   c                     t        d      )Nzset objects are unhashabler  r-   s    r   __hash__zIdentitySet.__hash__  s    455r   c                 z    t        |       j                  dt        | j                  j	                               dS r   )rW  r   rf   r  rg   r-   s    r   r<   zIdentitySet.__repr__  s)    :..T]]5I5I5K0LMMr   r"   )*r   r   r   rW   r%   r   r   r   r   r>   r=   r  r  r!  r'  r*  r,  r.  r0  r3  r3   r  r1   r  r   r  r  r
  r   r  r   r  r   r  r   r	  rO   r   rc   rh   r\  r<   r   r   r   r  r    s    "
)*%4;$
?
&
A
!
A
&
;
(
=0
E8 H",6Nr   r  c                   ,    e Zd ZddZd Zd Zd Zd Zy)WeakSequencec                     t        j                  |       fd}|| _        |D cg c]  }t        j                  ||       c}| _        y c c}w )Nc                 N     |       }||j                   j                  |        y y r"   )_storager   )r   selfrefr   s      r   _removez&WeakSequence.__init__.<locals>._remove  s&    9D$$T*  r   )weakrefrefrd  rb  )r   _WeakSequence__elementsrd  r   s       r   r%   zWeakSequence.__init__  sE     #*++d"3 	+
 9C
.5GKK)
 
s   A
c                 v    | j                   j                  t        j                  || j                               y r"   )rb  r   re  rf  rd  r   s     r   r   zWeakSequence.append  s#    W[[t||<=r   c                 ,    t        | j                        S r"   )rb   rb  r-   s    r   rc   zWeakSequence.__len__  rY  r   c                 6    d d | j                   D        D        S )Nc              3   &   K   | ]	  }||  y wr"   r   r7  s     r   r   z(WeakSequence.__iter__.<locals>.<genexpr>  s      
sC
s   c              3   *   K   | ]  } |         y wr"   r   )r   rf  s     r   r   z(WeakSequence.__iter__.<locals>.<genexpr>  s     ;cCE;s   )rb  r-   s    r   rh   zWeakSequence.__iter__  s    
;T]];
 	
r   c                 f    	 | j                   |   } |       S # t        $ r t        d|z        w xY w)NzIndex %s out of range)rb  r   
IndexError)r   indexrw   s      r   r{   zWeakSequence.__getitem__  s@    	--&C 5L  	>4u<==	>s    0N)r   )r   r   r   r%   r   rc   rh   r{   r   r   r   r_  r_    s    
>"

r   r_  c                       e Zd ZddZy)OrderedIdentitySetNc                     t         j                  |        t               | _        |r|D ]  }| j	                  |        y y r"   )r  r%   r   r  r   )r   r   os      r   r%   zOrderedIdentitySet.__init__  s;    T"#  r   r"   )r   r   r   r%   r   r   r   rq  rq    s    r   rq  c                       e Zd ZdZd Zd Zy)PopulateDictzA dict which populates missing values via a creation function.

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

    c                     || _         y r"   creator)r   rx  s     r   r%   zPopulateDict.__init__  s	    r   c                 2    | j                  |      x| |<   }|S r"   rw  r   rS   vals      r   __missing__zPopulateDict.__missing__  s    ,,s++S	C
r   Nr   r   r   rW   r%   r|  r   r   r   ru  ru    s    r   ru  c                       e Zd ZdZd Zd Zy)WeakPopulateDictzaLike PopulateDict, but assumes a self + a method and does not create
    a reference cycle.

    c                 r    |j                   | _        |j                  }t        j                  |      | _        y r"   )__func__rx  __self__re  rf  weakself)r   creator_methodr  s      r   r%   zWeakPopulateDict.__init__  s*    %..!**H-r   c                 P    | j                  | j                         |      x| |<   }|S r"   )rx  r  rz  s      r   r|  zWeakPopulateDict.__missing__  s&    ,,t}}<<S	C
r   Nr}  r   r   r   r  r    s    
.
r   r  c                 >    t        t        j                  |             S r"   )propertyoperator
itemgetter)idxs    r   <lambda>r  
  s    ,,S12 r   c                     t               }|j                  }|s| D cg c]  }||vs ||      r| c}S | D cg c]  } ||      |vr | ||            s| c}S c c}w c c}w r"   )r   r   )seqhashfuncseenseen_addxs        r   r   r     sq    5DxxHDa!4-DD 
{$&x/D 
 	
 E
s   	AAA!A$c                   $    e Zd ZdZddZd Zd Zy)UniqueAppenderzAppends items to a collection ensuring uniqueness.

    Additional appends() of the same object are ignored.  Membership is
    determined by identity (``is a``) not equality (``==``).
    Nc                     || _         i | _        |rt        ||      | _        y t	        |d      r|j
                  | _        y t	        |d      r|j                  | _        y y )Nr   r   )r`   _uniquegetattr_data_appenderr   r   r   )r   r`   vias      r   r%   zUniqueAppender.__init__"  sS    	")$"4DT8$"&++DT5!"&((D "r   c                 x    t        |      }|| j                  vr!| j                  |       d| j                  |<   y y r   )r  r  r  )r   r   id_s      r   r   zUniqueAppender.append,  s8    hdll"% $DLL #r   c                 ,    t        | j                        S r"   )re   r`   r-   s    r   rh   zUniqueAppender.__iter__2  s    DIIr   r"   )r   r   r   rW   r%   r   rh   r   r   r   r  r    s    +%r   r  c                 x    t        |       dk(  r+t        | d   t        j                        rt	        | d         S | S )Nr   r   )rb   rH   typesGeneratorTyperf   rE   s    r   coerce_generator_argr  6  s3    
3x1}CFE,?,?@CF|
r   c                     | |S t        | t        j                        rt        | t        t        z         r| gS t        | t
              r| S t        |       S r"   )rH   r   Iterabler
   r   rf   )r  r   s     r   to_listr  =  sN    ya112j	<,&7 s
	At	Awr   c                 v    t        | j                  |D cg c]  }|j                  s| c}            S c c}w )zreturn 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.

    )boolr   r\  )set_r   is      r   has_intersectionr  J  s.     !!h"E!**1"EFGG"Es   66c                 f    | 
t               S t        | t               st        t        |             S | S r"   )r   rH   r  r  s    r   to_setr  U  s+    yua71:r   c                 f    | 
t               S t        | t               st        t        |             S | S r"   )
column_setrH   r  r  s    r   to_column_setr  ^  s-    y|a$'!*%%r   c                 p    | j                         } |r| j                  |        | j                  di | | S )z5Copy the given dict and update with the given values.r   )rO   r1   )r8   _newr   s      r   update_copyr  g  s1     	
A	AHHNrNHr   c              #      K   | D ]7  }t        |t              s!t        |d      rt        |      D ]  }|  4| 9 yw)zGiven an iterator of which further sub-elements may also be
    iterators, flatten the sub-elements into a single iterator.

    rh   N)rH   rm   r   flatten_iterator)r  elemys      r   r  r  q  sJ     
  $$z)B%d+  Js   >A c                   X    e Zd ZdZdZddZd ZddZd Zd Z	d	 Z
d
 Zed        Zd Zy)LRUCachezDictionary 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_mutexNc                 n    || _         || _        || _        d| _        t	        j
                         | _        y r   )r  r  r  r  r   Lockr  )r   r  r  r  s       r   r%   zLRUCache.__init__  s,     "$nn&r   c                 D    | xj                   dz  c_         | j                   S Nr   )r  r-   s    r   _inc_counterzLRUCache._inc_counter  s    }}r   c                 l    t         j                  | ||      }||ur| j                         |d<   |d   S |S N   r   )r#   r   r  )r   rS   r   r   s       r   r   zLRUCache.get  s<    xxc7+w'')DG7NNr   c                 ^    t         j                  | |      }| j                         |d<   |d   S r  )r#   r{   r  )r   rS   r   s      r   r{   zLRUCache.__getitem__  s/    c*##%QAwr   c                 X    t         j                  |       D cg c]  }|d   	 c}S c c}w r  )r#   rg   )r   r  s     r   rg   zLRUCache.values  s#    "kk$/0!000s   'c                 "    || v r| |   S || |<   |S r"   r   rR   s      r   r@   zLRUCache.setdefault  s!    $;9DILr   c                     t         j                  | |      }|+||| j                         g}t         j                  | ||       n||d<   | j	                          y r  )r#   r   r  r   _manage_size)r   rS   rT   r   s       r   r   zLRUCache.__setitem__  sS    xxc"< 1 1 34DT3-DGr   c                 N    | j                   | j                   | j                  z  z   S r"   )r  r  r-   s    r   size_thresholdzLRUCache.size_threshold  s    }}t}}t~~===r   c                    | j                   j                  d      sy 	 t        | j                        }t	        |       | j
                  | j
                  | j                  z  z   kD  r|rd}| j                  |        t        t        j                  |       t        j                  d      d      }|| j
                  d  D ]	  }	 | |d   =  t	        |       | j
                  | j
                  | j                  z  z   kD  r| j                   j                          y # t        $ r Y ew xY w# | j                   j                          w xY w)NFr  T)rS   reverser   )r  acquirer  r  rb   r  r  r   r#   rg   r  r  r   release)r   r  
by_counterr   s       r   r  zLRUCache._manage_size  s   {{""5)	"doo.Jd)dmmdmmdnn.LLL!&JOOD)#KK%8+>+>q+A4
 't}}7 !D! aM! d)dmmdmmdnn.LLL KK!	 $ ! ! KK!s0   B"D& D4D& 	D# D& "D##D& &E)d   g      ?Nr"   )r   r   r   rW   r   r%   r  r   r{   rg   r@   r   r  r  r  r   r   r   r  r  ~  sK     LI'
1 > >"r   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)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                 .    || _         || _        i | _        y)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  s      r   r%   zScopedRegistry.__init__  s     %"r   c                     | j                         }	 | j                  |   S # t        $ r- | j                  j                  || j	                               cY S w xY wr"   )r  r  r   r@   r  rz   s     r   __call__zScopedRegistry.__call__  sR    nn	D==%% 	D==++C1BCC	Ds   ! 3AAc                 :    | j                         | j                  v S )z9Return True if an object is present in the current scope.)r  r  r-   s    r   haszScopedRegistry.has  s     ~~4==00r   c                 >    || j                   | j                         <   y)z$Set the value for the current scope.N)r  r  r   rw   s     r   r   zScopedRegistry.set  s     +.dnn&'r   c                 Z    	 | j                   | j                         = y# t        $ r Y yw xY w)z Clear the current scope, if any.N)r  r  r   r-   s    r   r=   zScopedRegistry.clear  s,    	dnn./ 		s    	**N	r   r   r   rW   r%   r  r  r   r=   r   r   r   r  r    s!    D1
.
r   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)ThreadLocalRegistryz\A :class:`.ScopedRegistry` that uses a ``threading.local()``
    variable for storage.

    c                 D    || _         t        j                         | _        y r"   )r  r   localr  )r   r  s     r   r%   zThreadLocalRegistry.__init__  s    $!)r   c                     	 | j                   j                  S # t        $ r& | j                         x}| j                   _        |cY S w xY wr"   )r  rT   r   r  )r   r{  s     r   r  zThreadLocalRegistry.__call__  sC    	==&&& 	(,(99C$--%J	s    ,AAc                 .    t        | j                  d      S )NrT   )r   r  r-   s    r   r  zThreadLocalRegistry.has  s    t}}g..r   c                 &    || j                   _        y r"   )r  rT   r  s     r   r   zThreadLocalRegistry.set  s    !r   c                 <    	 | j                   `y # t        $ r Y y w xY wr"   )r  rT   r   r-   s    r   r=   zThreadLocalRegistry.clear  s#    	# 		s    	Nr  r   r   r   r  r    s     
*/"r   r  c                 8    d}| D ]  }||u s|dz  }|dkD  s y y)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   s       r   	has_dupesr  %  s7     	
A 6>FA1u	
 r   r"   )=rW   
__future__r   r  r  re  compatr   r   r   r   r	   r
   r   	frozenset	EMPTY_SETr_   r   rC   sqlalchemy.cimmutabledictrA   MappingregisterImportErrorr,   rI   rG   r#   rK   rY   r   r   r   r   r   r   r   r  r_  rq  ru  r  r  column_dictordered_column_setr  _getters_property_gettersr   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   <module>r     s   & &      # )      K	9 97t
#7$$]3  _
6#T 64L L^1
 1,j  K.O,
bd bJg! g!T[N& [N|6 D 4  t ( 
  ++, 2 


V 6
H
N"t N"b5V 5p. <G  #.0M##s   !E6 6F	F	