
    -hq                     .   S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSKJ
r
  SS	KJr  SS
KJr  SSKJr  \" 5       r " S S\5      rS r SSKJr  \R*                  R-                  \5        S r\" 5       r " S S\\5      r " S S\5      r " S S\5      r " S S\\5      rS<S jr \(       a  \r!\ r"OS<S jr" " S S\5      r! " S S\#5      r$ " S  S!\5      r% " S" S#\5      r& " S$ S%\%5      r' " S& S'\5      r( " S( S)\5      r)\#r*\r+\$r,\(" \RZ                  5      r.\(" S* 5      r/S<S+ jr0 " S, S-\5      r1S. r2S<S/ jr3S0 r4S1 r5S2 r6S<S3 jr7S4 r8 " S5 S6\5      r9 " S7 S8\5      r: " S9 S:\:5      r;S; r<g! \ a    \" 5       rS r GNf = f)=zCollection classes and helpers.    )absolute_importN   )binary_types)collections_abc)itertools_filterfalse)py2k)py37)string_types)	threadingc                   &    \ rS rSrS r\=r=rrSrg)ImmutableContainer   c                 F    [        SU R                  R                  -  5      e)Nz%s object is immutable)	TypeError	__class____name__)selfargkws      qC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/util/_collections.py
_immutableImmutableContainer._immutable   s    04>>3J3JJKK     N)	r   
__module____qualname____firstlineno__r   __delitem____setitem____setattr____static_attributes__r   r   r   r   r      s    L /98K8+r   r   c                  .     " S S[         [        5      n U $ )Nc                   n    \ rS rSr\R
                  =r=r=r=r	r
S rS rS rSS jrSS jrS rS	 rS
rg)1_immutabledict_py_fallback.<locals>.immutabledict$   c                 ^    [         R                  U 5      n[         R                  " U/UQ76   U$ N)dict__new____init__clsargsnews      r   r)   9_immutabledict_py_fallback.<locals>.immutabledict.__new__*   s&    ,,s#CMM#%%Jr   c                     g r'   r   )r   r-   s     r   r*   :_immutabledict_py_fallback.<locals>.immutabledict.__init__/   s    r   c                 &    [         [        U 5      44$ r'   )_immutabledict_reconstructorr(   r   s    r   
__reduce__<_immutabledict_py_fallback.<locals>.immutabledict.__reduce__2   s    /$t*>>r   Nc                     U(       d  U $ [         R                  U R                  5      n[         R                  X 5        [         R	                  X!5        U$ r'   r(   r)   r   r*   update)r   _immutabledict__dr.   s      r   union7_immutabledict_py_fallback.<locals>.immutabledict.union5   s9    ,,t~~.CMM#$KK!Jr   c                     U(       d	  U(       d  U $ [         R                  U R                  5      n[         R                  X05        U(       a  [         R	                  X15        [         R	                  X25        U$ r'   r8   )r   r:   r   r.   s       r   _union_w_kw=_immutabledict_py_fallback.<locals>.immutabledict._union_w_kw>   sJ    r,,t~~.CMM#$C%KK Jr   c                     S nU HX  nU(       d  M  Uc4  [         R                  U R                  5      n[         R                  X 5        [         R	                  X#5        MZ     Uc  U $ U$ r'   r8   )r   dictsr.   ds       r   
merge_with<_immutabledict_py_fallback.<locals>.immutabledict.merge_withJ   sV    C1{"ll4>>:c0KK'  {Jr   c                 2    S[         R                  U 5      -  $ )Nzimmutabledict(%s)r(   __repr__r4   s    r   rG   :_immutabledict_py_fallback.<locals>.immutabledict.__repr__W   s    &t)<<<r   r   r'   )r   r   r   r   r   r   clearpoppopitem
setdefaultr9   r)   r*   r5   r;   r>   rC   rG   r!   r   r   r   immutabledictr$   $   sU     -?,I,I	J 	J	J	J 6	
		?	
			=r   rM   )r   r(   rM   s    r   _immutabledict_py_fallbackrO   #   s    4=*D 4=l r   rN   c                      [        U 6 $ )zdo the pickle dancerN   r   s    r   r3   r3   e   s    c""r   c                 `    U (       d  [         $ [        U [        5      (       a  U $ [        U 5      $ r'   )
EMPTY_DICT
isinstancerM   )rB   s    r   coerce_to_immutabledictrU   j   s(    	A}	%	%Qr   c                   ^    \ rS rSrSr\R                  =r=r=r	=r
rS rS rS rS rS rSrg	)

FacadeDictv   z*A dictionary that is not publicly mutable.c                 0    [         R                  U 5      nU$ r'   )r(   r)   r+   s      r   r)   FacadeDict.__new__{   s    ll3
r   c                     [        S5      e)Nz\an immutabledict shouldn't need to be copied.  use dict(d) if you need a mutable dictionary.)NotImplementedErrorr4   s    r   copyFacadeDict.copy   s    !0
 	
r   c                 &    [         [        U 5      44$ r'   )rW   r(   r4   s    r   r5   FacadeDict.__reduce__   s    DJ=((r   c                 0    [         R                  XU5        g)z,insert an item into the dictionary directly.N)r(   r   r   keyvalues      r   _insert_itemFacadeDict._insert_item   s    E*r   c                 2    S[         R                  U 5      -  $ )NzFacadeDict(%s)rF   r4   s    r   rG   FacadeDict.__repr__   s    $--"555r   r   N)r   r   r   r   __doc__r   r   rI   rJ   rK   rL   r9   r)   r]   r5   re   rG   r!   r   r   r   rW   rW   v   s=    42D2O2OOEOCO'OJ
)+6r   rW   c                      ^  \ rS rSrSrSrS rS rS rU 4S jr	S r
S	 rS
 rS rS rS rS rS rS rS rS rSS jrS rS rS rS rS rSrU =r$ )
Properties   z8Provide a __getattr__/__setattr__ interface over a dict._datac                 2    [         R                  U SU5        g Nrn   objectr    )r   datas     r   r*   Properties.__init__   s    4$/r   c                 ,    [        U R                  5      $ r'   )lenrn   r4   s    r   __len__Properties.__len__   s    4::r   c                 Z    [        [        U R                  R                  5       5      5      $ r'   )iterlistrn   valuesr4   s    r   __iter__Properties.__iter__   s    D**,-..r   c                    > [        [        [        U 5      5      U R                  R	                  5        Vs/ s H  n[        U5      PM     sn-   $ s  snf r'   )dirsuperrk   rn   keysstr)r   kr   s     r   __dir__Properties.__dir__   sH    5T*+ JJOO-/
-qCF-/
 
 	
 /
s   Ac                 0    [        U 5      [        U5      -   $ r'   r{   r   others     r   __add__Properties.__add__   s    DzDK''r   c                      X R                   U'   g r'   rm   r   rc   objs      r   r   Properties.__setitem__       

3r   c                      U R                   U   $ r'   rm   r   rc   s     r   __getitem__Properties.__getitem__       zz#r   c                     U R                   U	 g r'   rm   r   s     r   r   Properties.__delitem__   s    JJsOr   c                      X R                   U'   g r'   rm   r   s      r   r    Properties.__setattr__   r   r   c                     SU R                   0$ rp   rm   r4   s    r   __getstate__Properties.__getstate__   s    $$r   c                 8    [         R                  U SUS   5        g rp   rq   )r   states     r   __setstate__Properties.__setstate__   s    4%.9r   c                 T     U R                   U   $ ! [         a    [        U5      ef = fr'   )rn   KeyErrorAttributeErrorr   s     r   __getattr__Properties.__getattr__   s/    	&::c?" 	& %%	&s    'c                     XR                   ;   $ r'   rm   r   s     r   __contains__Properties.__contains__       jj  r   c                 ,    [        U R                  5      $ )z8Return an immutable proxy for this :class:`.Properties`.)ImmutablePropertiesrn   r4   s    r   as_immutableProperties.as_immutable   s     #4::..r   c                 :    U R                   R                  U5        g r'   )rn   r9   r   rd   s     r   r9   Properties.update   s    

% r   c                     X;   a  X   $ U$ r'   r   )r   rc   defaults      r   getProperties.get   s    ;9Nr   c                 ,    [        U R                  5      $ r'   )r{   rn   r4   s    r   r   Properties.keys       DJJr   c                 H    [        U R                  R                  5       5      $ r'   )r{   rn   r|   r4   s    r   r|   Properties.values   s    DJJ%%'((r   c                 H    [        U R                  R                  5       5      $ r'   )r{   rn   itemsr4   s    r   r   Properties.items   s    DJJ$$&''r   c                     XR                   ;   $ r'   rm   r   s     r   has_keyProperties.has_key   r   r   c                 8    U R                   R                  5         g r'   )rn   rI   r4   s    r   rI   Properties.clear   s    

r   r   r'   )r   r   r   r   ri   	__slots__r*   rw   r}   r   r   r   r   r   r    r   r   r   r   r   r9   r   r   r|   r   r   rI   r!   __classcell__)r   s   @r   rk   rk      sy    BI0/

(%:&!/
! )(! r   rk   c                   "    \ rS rSrSrSrS rSrg)OrderedProperties   zQProvide a __getattr__/__setattr__ interface with an OrderedDict
as backing store.r   c                 @    [         R                  U [        5       5        g r'   )rk   r*   OrderedDictr4   s    r   r*   OrderedProperties.__init__   s    D+-0r   N)r   r   r   r   ri   r   r*   r!   r   r   r   r   r      s     I1r   r   c                       \ rS rSrSrSrSrg)r      zDProvide immutable dict/object attribute to an underlying dictionary.r   N)r   r   r   r   ri   r   r!   r   r   r   r   r      s
    NIr   r   c                     [        XS9 Vs/ s H  o"X   4PM
     nnU R                  5         U R                  U5        gs  snf )zSort an OrderedDict in-place.rc   N)sortedrI   r9   )rB   rc   r   r   s       r   _ordered_dictionary_sortr      s<     !'q 23 21Y 2E3GGIHHUO	 4s   ?c                 "    U R                  US9  g)zSort an OrderedDict in place.r   Nr   )rB   rc   s     r   sort_dictionaryr     s     	
""s"+r   c                       \ rS rSrSrSrSS jrS rSS jrS r	S	 r
S
 rSS jrS rS rS rS rS r\(       a	  S rS rS rS rS rS rS rSrg)r   i  zXDictionary that maintains insertion order.

Superseded by Python dict as of Python 3.7

_listNc                     [        XS9  g )Nr   r   r   s     r   r   $OrderedDict._ordered_dictionary_sort  s
    $T3r   c                 0    [         U R                  5       44$ r'   )r   r   r4   s    r   r5   OrderedDict.__reduce__  s    //r   c                 t    / U l         Uc  U(       a  U R                  " S0 UD6  g g U R                  " U40 UD6  g )Nr   )r   r9   )r   _OrderedDict____sequencekwargss      r   r*   OrderedDict.__init__  s9    DJ#KK)&)  L3F3r   c                 <    / U l         [        R                  U 5        g r'   )r   r(   rI   r4   s    r   rI   OrderedDict.clear  s    DJJJtr   c                 "    U R                  5       $ r'   )__copy__r4   s    r   r]   OrderedDict.copy!  s    ==?"r   c                     [        U 5      $ r'   )r   r4   s    r   r   OrderedDict.__copy__$  s    t$$r   c                     UbL  [        US5      (       a,  UR                  5        H  nU R                  X1U   5        M     OU H	  u  p4X@U'   M     U(       a  U R                  U5        g g )Nr   )hasattrr   r   r9   )r   r   r   rc   rd   s        r   r9   OrderedDict.update'  sd    '<00+002((3.?@  3 '3
$)S	 '3F# r   c                 T    X;  a  U R                  X5        U$ U R                  U5      $ r'   )r   r   rb   s      r   rL   OrderedDict.setdefault2  s+      ,'',,r   c                 ,    [        U R                  5      $ r'   rz   r   r4   s    r   r}   OrderedDict.__iter__9  s    

##r   c                     [        U 5      $ r'   r   r4   s    r   r   OrderedDict.keys<  s    :r   c                 J    U R                    Vs/ s H  oU   PM	     sn$ s  snf r'   r   r   s     r   r|   OrderedDict.values?  s     )-4#I444s    c                 L    U R                    Vs/ s H  oX   4PM
     sn$ s  snf r'   r   r   s     r   r   OrderedDict.itemsB  s#    04

;
$)$
;;;s   !c                 4    [        U R                  5       5      $ r'   )rz   r|   r4   s    r   
itervaluesOrderedDict.itervaluesG  s    DKKM**r   c                     [        U 5      $ r'   )rz   r4   s    r   iterkeysOrderedDict.iterkeysJ  s    Dz!r   c                 4    [        U R                  5       5      $ r'   )rz   r   r4   s    r   	iteritemsOrderedDict.iteritemsM  s    DJJL))r   c                     X;  a   U R                   R                  U5        [        R	                  XU5        g ! [         a    U/U l          N+f = fr'   )r   appendr   r(   r   r   s      r   r   OrderedDict.__setitem__P  sL    'JJ%%c*
 T,	 & ' #&DJ's   9 AAc                 d    [         R                  X5        U R                  R                  U5        g r'   )r(   r   r   remover   s     r   r   OrderedDict.__delitem__Z  s"    T'JJc"r   c                     X;   n[         R                  " X/UQ76 nU(       a  U R                  R                  U5        U$ r'   )r(   rJ   r   r  )r   rc   r   presentrd   s        r   rJ   OrderedDict.pop^  s6    kGHHT11E

!!#&Lr   c                 l    [         R                  U 5      nU R                  R                  US   5        U$ Nr   )r(   rK   r   r  r   items     r   rK   OrderedDict.popiteme  s+    <<%DJJd1g&Kr   r'   )r   r   r   r   ri   r   r   r5   r*   rI   r]   r   r9   rL   r}   r   r|   r   r   r   r   r   r   r   rJ   rK   r!   r   r   r   r   r     sr    	 		4	0	4		#	%		$	-	$		5	< +"*	-	#		r   r   c                       \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS r\rS r\rS r\rS r\rS r\rS r\rS r\rS r\rS r\rSrg)
OrderedSetik  Nc                     [         R                  U 5        Ub0  [        U5      U l        [         R	                  X R                  5        g / U l        g r'   )setr*   unique_listr   r9   )r   rB   s     r   r*   OrderedSet.__init__l  s5    T=$QDJJJtZZ(DJr   c                 n    X;  a  U R                   R                  U5        [        R                  X5        g r'   r   r   r  addr   elements     r   r  OrderedSet.addt  s&    JJg&r   c                 d    [         R                  X5        U R                  R                  U5        g r'   )r  r  r   r  s     r   r  OrderedSet.removey  s     

4!

'"r   c                 n    X ;  a  U R                   R                  X5        [        R                  X5        g r'   )r   insertr  r  )r   posr  s      r   r  OrderedSet.insert}  s&    JJc+r   c                 p    X;   a1  U R                   R                  U5        [        R                  X5        g g r'   )r   r  r  r  s     r   discardOrderedSet.discard  s*    ?JJg&JJt% r   c                 <    [         R                  U 5        / U l        g r'   )r  rI   r   r4   s    r   rI   OrderedSet.clear  s    		$
r   c                      U R                   U   $ r'   r   r   s     r   r   OrderedSet.__getitem__  r   r   c                 ,    [        U R                  5      $ r'   r   r4   s    r   r}   OrderedSet.__iter__  r   r   c                 $    U R                  U5      $ r'   )r;   r   s     r   r   OrderedSet.__add__  s    zz%  r   c                 R    U R                   R                  < SU R                  < S3$ N())r   r   r   r4   s    r   rG   OrderedSet.__repr__  s    >>22DJJ??r   c                     U H:  nX ;  d  M
  U R                   R                  U5        [        R                  X5        M<     U $ r'   r  )r   iterablees      r   r9   OrderedSet.update  s6    A}

!!!$   r   c                 J    U R                  U 5      nUR                  U5        U$ r'   )r   r9   r   r   results      r   r;   OrderedSet.union  s!    %er   c                 P   ^ [        T5      mU R                  U4S jU  5       5      $ )Nc              3   6   >#    U  H  oT;   d  M
  Uv   M     g 7fr'   r   .0ar   s     r   	<genexpr>*OrderedSet.intersection.<locals>.<genexpr>  s     <Aeaa   		r  r   r   s    `r   intersectionOrderedSet.intersection  s!    E
~~<<<<r   c                    ^ ^ [        T5      mT R                  U4S jT  5       5      nUR                  U 4S jT 5       5        U$ )Nc              3   6   >#    U  H  oT;  d  M
  Uv   M     g 7fr'   r   r7  s     r   r:  2OrderedSet.symmetric_difference.<locals>.<genexpr>  s     B4aE>4r<  c              3   6   >#    U  H  oT;  d  M
  Uv   M     g 7fr'   r   )r8  r9  r   s     r   r:  rB    s     8A4-aar<  )r  r   r9   r2  s   `` r   symmetric_differenceOrderedSet.symmetric_difference  s7    E
B4BB888r   c                 P   ^ [        T5      mU R                  U4S jU  5       5      $ )Nc              3   6   >#    U  H  oT;  d  M
  Uv   M     g 7fr'   r   r7  s     r   r:  (OrderedSet.difference.<locals>.<genexpr>  s     @A%aar<  r=  r   s    `r   
differenceOrderedSet.difference  s!    E
~~@@@@r   c                     [        U5      n[         R                  X5        U R                   Vs/ s H  o"U;   d  M
  UPM     snU l        U $ s  snf r'   )r  intersection_updater   r   r   r9  s      r   rL  OrderedSet.intersection_update  sA    E
,!%:AEza:
 ;s
   	AAc                    [         R                  X5        U R                   Vs/ s H  o"U ;   d  M
  UPM     snU l        U =R                  UR                   Vs/ s H  o"U ;   d  M
  UPM     sn-  sl        U $ s  snf s  snf r'   )r  symmetric_difference_updater   rM  s      r   rP  &OrderedSet.symmetric_difference_update  s`    ''4!%9ADya9


%++;+Qdq+;;
 :;s   	A8A8	A=&A=c                     [         R                  X5        U R                   Vs/ s H  o"U ;   d  M
  UPM     snU l        U $ s  snf r'   )r  difference_updater   rM  s      r   rS  OrderedSet.difference_update  s8    d*!%9ADya9
 :s
   	AAr   r'   ) r   r   r   r   r*   r  r  r  r  rI   r   r}   r   rG   __str__r9   __ior__r;   __or__r>  __and__rD  __xor__rI  __sub__rL  __iand__rP  __ixor__rS  __isub__r!   r   r   r   r  r  k  s    
#
&
 !@ G G
 F= G #GA G #H +H
 !Hr   r  c                       \ rS rSrSrS*S jrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%\%r&S% r'S& r(S' r)S( r*S)r+g)+IdentitySeti  zA 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                 T    [        5       U l        U(       a  U R                  U5        g g r'   )r(   _membersr9   r   r.  s     r   r*   IdentitySet.__init__  s    KK! r   c                 2    XR                   [        U5      '   g r'   ra  idr   s     r   r  IdentitySet.add  s    #(bi r   c                 2    [        U5      U R                  ;   $ r'   )rf  ra  r   s     r   r   IdentitySet.__contains__  s    %yDMM))r   c                 0    U R                   [        U5      	 g r'   re  r   s     r   r  IdentitySet.remove  s    MM"U)$r   c                 H     U R                  U5        g ! [         a     g f = fr'   )r  r   r   s     r   r  IdentitySet.discard  s%    	KK 		s    
!!c                 t     U R                   R                  5       nUS   $ ! [         a    [        S5      ef = f)Nr   zpop from an empty set)ra  rK   r   )r   pairs     r   rJ   IdentitySet.pop  s=    	4==((*D7N 	4233	4s   ! 7c                 8    U R                   R                  5         g r'   )ra  rI   r4   s    r   rI   IdentitySet.clear  s    r   c                     [        S5      e)Nzcannot compare sets using cmp()r   r   s     r   __cmp__IdentitySet.__cmp__  s    9::r   c                 `    [        U[        5      (       a  U R                  UR                  :H  $ g)NFrT   r_  ra  r   s     r   __eq__IdentitySet.__eq__  s%    e[))==ENN22r   c                 `    [        U[        5      (       a  U R                  UR                  :g  $ gNTrx  r   s     r   __ne__IdentitySet.__ne__  s%    e[))==ENN22r   c                 "   [        XR                  5      (       a  UnOU R                  U5      n[        U 5      [        U5      :  a  g[        UR                  R
                  [        U R                  R                  5       5      5       H  n  g   gNFTrT   r   rv   r   ra  r   rz   r   r   r.  r   ms       r   issubsetIdentitySet.issubset
  sq    h//ENN8,Et9s5z!&NN''dmm.@.@.B)C
A 
 r   c                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   )rT   r_  NotImplementedr  r   s     r   __le__IdentitySet.__le__  s$    %--!!}}U##r   c                     [        U[        5      (       d  [        $ [        U 5      [        U5      :  =(       a    U R	                  U5      $ r'   )rT   r_  r  rv   r  r   s     r   __lt__IdentitySet.__lt__  s6    %--!!4y3u:%>$--*>>r   c                 "   [        XR                  5      (       a  UnOU R                  U5      n[        U 5      [        U5      :  a  g[        U R                  R
                  [        UR                  R                  5       5      5       H  n  g   gr  r  r  s       r   
issupersetIdentitySet.issuperset"  sq    h//ENN8,Et9s5z!&MM&&U^^-@-@-B(C
A 
 r   c                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   )rT   r_  r  r  r   s     r   __ge__IdentitySet.__ge__1  $    %--!!u%%r   c                     [        U[        5      (       d  [        $ [        U 5      [        U5      :  =(       a    U R	                  U5      $ r'   )rT   r_  r  rv   r  r   s     r   __gt__IdentitySet.__gt__6  s6    %--!!4y3u:%@$//%*@@r   c                     U R                  5       nU R                  nUR                  R                  U5        UR                  R                  S U 5       5        U$ )Nc              3   <   #    U  H  n[        U5      U4v   M     g 7fr'   rf  r8  r   s     r   r:  $IdentitySet.union.<locals>.<genexpr>?  s     B#3~   )r   ra  r9   )r   r.  r3  memberss       r   r;   IdentitySet.union;  sF    !--w'BBBr   c                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   )rT   r_  r  r;   r   s     r   rW  IdentitySet.__or__B  s$    %--!!zz%  r   c                 H    U R                   R                  S U 5       5        g )Nc              3   <   #    U  H  n[        U5      U4v   M     g 7fr'   r  r  s     r   r:  %IdentitySet.update.<locals>.<genexpr>H  s     @xbgs^xr  )ra  r9   rb  s     r   r9   IdentitySet.updateG  s    @x@@r   c                 ^    [        U[        5      (       d  [        $ U R                  U5        U $ r'   )rT   r_  r  r9   r   s     r   rV  IdentitySet.__ior__J  s&    %--!!Er   c                 d  ^ U R                  5       nU R                  n[        XR                   5      (       a$  [        UR                  R	                  5       5      mOU Vs1 s H  n[        U5      iM     snmUR                  R                  U4S jUR                  5        5       5        U$ s  snf )Nc              3   >   >#    U  H  u  pUT;  d  M  X4v   M     g 7fr'   r   r8  r   vr   s      r   r:  )IdentitySet.difference.<locals>.<genexpr>X       B1E>VaV   
r   ra  rT   r  r   rf  r9   r   r   r.  r3  r  r   r   s        @r   rI  IdentitySet.differenceP  s    !--h//))..01E(01RW1EBB	
 	 2    B-c                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   )rT   r_  r  rI  r   s     r   rZ  IdentitySet.__sub__\  r  r   c                 D    U R                  U5      R                  U l        g r'   )rI  ra  rb  s     r   rS  IdentitySet.difference_updatea  s    1::r   c                 ^    [        U[        5      (       d  [        $ U R                  U5        U $ r'   )rT   r_  r  rS  r   s     r   r]  IdentitySet.__isub__d  s(    %--!!u%r   c                 d  ^ U R                  5       nU R                  n[        XR                   5      (       a$  [        UR                  R	                  5       5      mOU Vs1 s H  n[        U5      iM     snmUR                  R                  U4S jUR                  5        5       5        U$ s  snf )Nc              3   >   >#    U  H  u  pUT;   d  M  X4v   M     g 7fr'   r   r  s      r   r:  +IdentitySet.intersection.<locals>.<genexpr>q  s       
.tq!u*FQFr  r  r  s        @r   r>  IdentitySet.intersectionj  s    !--h//))..01E(01RW1E 
&}}
 	
 	 2r  c                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   )rT   r_  r  r>  r   s     r   rX  IdentitySet.__and__v  s&    %--!!  ''r   c                 D    U R                  U5      R                  U l        g r'   )r>  ra  rb  s     r   rL  IdentitySet.intersection_update{  s    ))(3<<r   c                 ^    [        U[        5      (       d  [        $ U R                  U5        U $ r'   )rT   r_  r  rL  r   s     r   r[  IdentitySet.__iand__~  s(    %--!!  'r   c                   ^^ U R                  5       nU R                  m[        XR                   5      (       a  UR                  mOU Vs0 s H  n[        U5      U_M     snmUR                  R	                  U4S jTR                  5        5       5        UR                  R	                  U4S jTR                  5        5       5        U$ s  snf )Nc              3   >   >#    U  H  u  pUT;  d  M  X4v   M     g 7fr'   r   r  s      r   r:  3IdentitySet.symmetric_difference.<locals>.<genexpr>  r  r  c              3   >   >#    U  H  u  pUT;  d  M  X4v   M     g 7fr'   r   )r8  r   r  r  s      r   r:  r    s     B'1AVaVr  )r   ra  rT   rf  r9   r   )r   r.  r3  r   r  r   s       @@r   rD   IdentitySet.symmetric_difference  s    !--h//%%E-56XcRWc\X6EBB	
 	BB	
  7s   
Cc                 Z    [        U[        5      (       d  [        $ U R                  U5      $ r'   rT   r_  r  rD  r   s     r   rY  IdentitySet.__xor__  s&    %--!!((//r   c                 D    U R                  U5      R                  U l        g r'   )rD  ra  rb  s     r   rP  'IdentitySet.symmetric_difference_update  s    11(;DDr   c                 ^    [        U[        5      (       d  [        $ U R                  U5        U $ r'   r  r   s     r   r\  IdentitySet.__ixor__  s(    %--!!!!%(r   c                 f    [        U 5      " [        U R                  R                  5       5      5      $ r'   )typerz   ra  r|   r4   s    r   r]   IdentitySet.copy  s#    Dz$t}}335677r   c                 ,    [        U R                  5      $ r'   )rv   ra  r4   s    r   rw   IdentitySet.__len__      4==!!r   c                 H    [        U R                  R                  5       5      $ r'   )rz   ra  r|   r4   s    r   r}   IdentitySet.__iter__  s    DMM((*++r   c                     [        S5      e)Nzset objects are unhashablert  r4   s    r   __hash__IdentitySet.__hash__  s    455r   c                 ~    [        U 5      R                  < S[        U R                  R	                  5       5      < S3$ r)  )r  r   r{   ra  r|   r4   s    r   rG   IdentitySet.__repr__  s)    :..T]]5I5I5K0LMMr   ra  r'   ),r   r   r   r   ri   r*   r  r   r  r  rJ   rI   ru  ry  r}  r  r  r  r  r  r  r;   rW  r9   rV  rI  rZ  rS  r]  r>  rX  rL  r[  rD  rY  rP  r\  r]   r   rw   r}   r  rG   r!   r   r   r   r_  r_    s    "
)*%4;$
?
&
A
!
A
&
;
(
=0
E8 H",6Nr   r_  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
WeakSequencei  c                     [         R                  " U 5      4S jnX l        U Vs/ s H  n[         R                  " X25      PM     snU l        g s  snf )Nc                 P    U" 5       nUb  UR                   R                  U 5        g g r'   )_storager  )r	  selfrefr   s      r   _remove&WeakSequence.__init__.<locals>._remove  s&    9D$$T*  r   )weakrefrefr  r  )r   _WeakSequence__elementsr  r  s       r   r*   WeakSequence.__init__  sE     #*++d"3 	+
 9C
9CgGKK)
 
s    Ac                 v    U R                   R                  [        R                  " XR                  5      5        g r'   )r  r   r  r  r  r  s     r   r   WeakSequence.append  s!    W[[||<=r   c                 ,    [        U R                  5      $ r'   )rv   r  r4   s    r   rw   WeakSequence.__len__  r  r   c                 6    S S U R                    5        5       $ )Nc              3   .   #    U  H  oc  M  Uv   M     g 7fr'   r   r  s     r   r:  (WeakSequence.__iter__.<locals>.<genexpr>  s      
;CCC;s   	c              3   .   #    U  H  o" 5       v   M     g 7fr'   r   )r8  r  s     r   r:  r    s     ;]cCEE]s   )r  r4   s    r   r}   WeakSequence.__iter__  s    
;T]];
 	
r   c                 h     U R                   U   nU" 5       $ ! [         a    [        SU-  5      ef = f)NzIndex %s out of range)r  r   
IndexError)r   indexr   s      r   r   WeakSequence.__getitem__  s@    	--&C 5L  	>4u<==	>s    1)r  r  N)r   )
r   r   r   r   r*   r   rw   r}   r   r!   r   r   r   r  r    s    
>"

r   r  c                       \ rS rSrSS jrSrg)OrderedIdentitySeti  Nc                     [         R                  U 5        [        5       U l        U(       a  U H  nU R	                  U5        M     g g r'   )r_  r*   r   ra  r  )r   r.  os      r   r*   OrderedIdentitySet.__init__  s6    T"#  r   r  r'   )r   r   r   r   r*   r!   r   r   r   r  r    s    r   r  c                   $    \ rS rSrSrS rS rSrg)PopulateDicti  zA dict which populates missing values via a creation function.

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

c                     Xl         g r'   creator)r   r  s     r   r*   PopulateDict.__init__  s    r   c                 0    U R                  U5      =X'   nU$ r'   r  r   rc   vals      r   __missing__PopulateDict.__missing__  s    ,,s++	C
r   r  Nr   r   r   r   ri   r*   r  r!   r   r   r   r  r    s    r   r  c                   $    \ rS rSrSrS rS rSrg)WeakPopulateDicti  zYLike PopulateDict, but assumes a self + a method and does not create
a reference cycle.

c                 t    UR                   U l        UR                  n[        R                  " U5      U l        g r'   )__func__r  __self__r  r  weakself)r   creator_methodr  s      r   r*   WeakPopulateDict.__init__  s*    %..!**H-r   c                 N    U R                  U R                  5       U5      =X'   nU$ r'   r  r  r  s      r   r  WeakPopulateDict.__missing__  s$    ,,t}}<<	C
r   r  Nr  r   r   r   r  r    s    
.
r   r  c                 @    [        [        R                  " U 5      5      $ r'   )propertyoperator
itemgetter)idxs    r   <lambda>r  
  s    ,,S12r   c                    [        5       nUR                  nU(       d)  U  Vs/ s H  oDU;  d  M
  U" U5      (       a  M  UPM     sn$ U  Vs/ s H(  nU" U5      U;  d  M  U" U" U5      5      (       a  M&  UPM*     sn$ s  snf s  snf r'   )r  r  )seqhashfuncseenseen_addxs        r   r  r    s    5DxxHD3a4-3DD 
{$& /7/D 
 	
 E
s!   	A=A=A=BB4Bc                   .    \ rS rSrSrSS jrS rS rSrg)	UniqueAppenderi  zAppends items to a collection ensuring uniqueness.

Additional appends() of the same object are ignored.  Membership is
determined by identity (``is a``) not equality (``==``).
Nc                     Xl         0 U l        U(       a  [        X5      U l        g [	        US5      (       a  UR
                  U l        g [	        US5      (       a  UR                  U l        g g )Nr   r  )rs   _uniquegetattr_data_appenderr   r   r  )r   rs   vias      r   r*   UniqueAppender.__init__"  sU    	")$"4DT8$$"&++DT5!!"&((D "r   c                 z    [        U5      nX R                  ;  a!  U R                  U5        SU R                  U'   g g r|  )rf  r   r"  )r   r	  id_s      r   r   UniqueAppender.append,  s6    hll"% $DLL #r   c                 ,    [        U R                  5      $ r'   )rz   rs   r4   s    r   r}   UniqueAppender.__iter__2  s    DIIr   )r"  r   rs   r'   )	r   r   r   r   ri   r*   r   r}   r!   r   r   r   r  r    s    +%r   r  c                     [        U 5      S:X  a0  [        U S   [        R                  5      (       a  [	        U S   5      $ U $ )Nr   r   )rv   rT   typesGeneratorTyper{   rQ   s    r   coerce_generator_argr-  6  s6    
3x1}CFE,?,?@@CF|
r   c                     U c  U$ [        U [        R                  5      (       a  [        U [        [        -   5      (       a  U /$ [        U [
        5      (       a  U $ [        U 5      $ r'   )rT   r   Iterabler
   r   r{   )r  r   s     r   to_listr0  =  sY    ya1122j	<,&7 7 s
	At		Awr   c                     [        U R                  U Vs/ s H  o"R                  (       d  M  UPM     sn5      5      $ s  snf )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_intersectionr5  J  s0     !!h"Eh**1h"EFGG"Es   >>c                 r    U c
  [        5       $ [        U [         5      (       d  [        [        U 5      5      $ U $ r'   )r  rT   r0  r  s    r   to_setr8  U  s.    yua71:r   c                 r    U c
  [        5       $ [        U [         5      (       d  [        [        U 5      5      $ U $ r'   )
column_setrT   r0  r7  s    r   to_column_setr;  ^  s0    y|a$$'!*%%r   c                 z    U R                  5       n U(       a  U R                  U5        U R                  " S0 UD6  U $ )z5Copy the given dict and update with the given values.r   )r]   r9   )rB   _newr   s      r   update_copyr>  g  s/     	
A	HHNrNHr   c              #      #    U  HE  n[        U[        5      (       d)  [        US5      (       a  [        U5       H  nUv   M	     MA  Uv   MG     g7f)zyGiven an iterator of which further sub-elements may also be
iterators, flatten the sub-elements into a single iterator.

r}   N)rT   r   r   flatten_iterator)r  elemys      r   r@  r@  q  sE     
 $$$z)B)B%d+ , J s   AAc                   d    \ rS rSrSrSrSS jrS rSS jrS r	S	 r
S
 rS r\S 5       rS rSrg)LRUCachei~  zDictionary 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                 j    Xl         X l        X0l        SU l        [        R
                  " 5       U l        g r  )rE  rF  rG  rH  r   LockrI  )r   rE  rF  rG  s       r   r*   LRUCache.__init__  s&     "$nn&r   c                 D    U =R                   S-  sl         U R                   $ Nr   )rH  r4   s    r   _inc_counterLRUCache._inc_counter  s    }}r   c                 j    [         R                  XU5      nX2La  U R                  5       US'   US   $ U$ N   r   )r(   r   rO  )r   rc   r   r	  s       r   r   LRUCache.get  s8    xx7+'')DG7NNr   c                 \    [         R                  X5      nU R                  5       US'   US   $ rR  )r(   r   rO  )r   rc   r	  s      r   r   LRUCache.__getitem__  s-    *##%QAwr   c                 \    [         R                  U 5       Vs/ s H  oS   PM	     sn$ s  snf rN  )r(   r|   )r   r4  s     r   r|   LRUCache.values  s'    "kk$/0/!/000s   )c                      X;   a  X   $ X U'   U$ r'   r   rb   s      r   rL   LRUCache.setdefault  s    ;9ILr   c                     [         R                  X5      nUc)  XU R                  5       /n[         R                  XU5        OX#S'   U R	                  5         g rN  )r(   r   rO  r   _manage_size)r   rc   rd   r	  s       r   r   LRUCache.__setitem__  sK    xx"< 1 1 34DT-Gr   c                 N    U R                   U R                   U R                  -  -   $ r'   )rE  rF  r4   s    r   size_thresholdLRUCache.size_threshold  s    }}t}}t~~===r   c                    U R                   R                  S5      (       d  g  [        U R                  5      n[	        U 5      U R
                  U R
                  U R                  -  -   :  a  U(       a  SnU R                  U 5        [        [        R                  U 5      [        R                  " S5      SS9nX R
                  S   H	  n XS   	 M     [	        U 5      U R
                  U R
                  U R                  -  -   :  a  M  U R                   R                  5         g ! [         a     Mj  f = f! U R                   R                  5         f = f)NFrS  T)rc   reverser   )rI  acquirer2  rG  rv   rE  rF  r   r(   r|   r  r  r   release)r   rG  
by_counterr	  s       r   r\  LRUCache._manage_size  s   {{""5))	"doo.Jd)dmmdmmdnn.LLL!&JOOD)#KK%8+>+>q+A4
 '}}7D! aM 8 d)dmmdmmdnn.LLL KK!	 $ ! ! KK!s0   B%D3 	D"7D3 "
D0,D3 /D00D3 3E)rH  rI  rE  rG  rF  )d   g      ?Nr'   )r   r   r   r   ri   r   r*   rO  r   r   r|   rL   r   r  r_  r\  r!   r   r   r   rD  rD  ~  sK     LI'
1 > >"r   rD  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
ScopedRegistryi  a  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                 *    Xl         X l        0 U l        g)a&  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   rk  rl  s      r   r*   ScopedRegistry.__init__  s     %"r   c                     U R                  5       n U R                  U   $ ! [         a,    U R                  R                  XR	                  5       5      s $ f = fr'   )rl  rm  r   rL   rk  r   s     r   __call__ScopedRegistry.__call__  sP    nn	D==%% 	D==++C1BCC	Ds   ! 3AAc                 <    U R                  5       U R                  ;   $ )z9Return True if an object is present in the current scope.)rl  rm  r4   s    r   hasScopedRegistry.has  s     ~~4==00r   c                 <    XR                   U R                  5       '   g)z$Set the value for the current scope.N)rm  rl  r   r   s     r   r  ScopedRegistry.set  s     +.dnn&'r   c                 \     U R                   U R                  5       	 g! [         a     gf = f)z Clear the current scope, if any.N)rm  rl  r   r4   s    r   rI   ScopedRegistry.clear  s,    	dnn./ 		s    
++)rk  rm  rl  Nr   r   r   r   ri   r*   rp  rs  r  rI   r!   r   r   r   ri  ri    s!    D1
.
r   ri  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
ThreadLocalRegistryi  zTA :class:`.ScopedRegistry` that uses a ``threading.local()``
variable for storage.

c                 D    Xl         [        R                  " 5       U l        g r'   )rk  r   localrm  )r   rk  s     r   r*   ThreadLocalRegistry.__init__  s    $!)r   c                      U R                   R                  $ ! [         a%    U R                  5       =oR                   l        Us $ f = fr'   )rm  rd   r   rk  )r   r  s     r   rp  ThreadLocalRegistry.__call__  sA    	==&&& 	(,(99C--%J	s    ,AAc                 .    [        U R                  S5      $ )Nrd   )r   rm  r4   s    r   rs  ThreadLocalRegistry.has  s    t}}g..r   c                 $    XR                   l        g r'   )rm  rd   rv  s     r   r  ThreadLocalRegistry.set  s    !r   c                 >     U R                   ?g ! [         a     g f = fr'   )rm  rd   r   r4   s    r   rI   ThreadLocalRegistry.clear  s#    	# 		s    
)rk  rm  Nrz  r   r   r   r|  r|    s     
*/"r   r|  c                 @    SnU  H  nX1L d  M	  US-  nUS:  d  M    g   g)zjGiven 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  %  s0     	
A>FA1u	 
 r   r'   )=ri   
__future__r   r  r+  r  compatr   r   r   r   r	   r
   r   	frozenset	EMPTY_SETrr   r   rO   sqlalchemy.cimmutabledictrM   MappingregisterImportErrorr3   rU   rS   r(   rW   rk   r   r   r   r   r   r  r  r_  r  r  r  r  r:  column_dictordered_column_setr  _getters_property_gettersr  r  r-  r0  r5  r8  r;  r>  r@  rD  ri  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   !F   FF