ó
    Ñ]j+N  ã                  óô  • % S r SSKJr  SSK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  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  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rSSKJr  SSKJr  SSKJr  SSKJ r   \RB                  (       d  \(       d%  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(  O$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$9r+\" S%\S$9r,\" S&\S$9r-\" S'S(S)9r.\/" 5       r0S*\1S+'   \/" S/5      r2S*\1S,'   SXS- jr3SYS. jr4\#" 5       r5S/\1S0'    " S1 S2\&\,\-4   5      r6\" S3\S$9r7\" S4\S$9r8 " S5 S6\\+   5      r9 " S7 S8\9\+   5      r: " S9 S:\%\9\+   5      r;SZS; jr<\=r>\<r? " S< S=\\+   5      r@ " S> S?\$5      rA " S@ SA\\,\-4   5      rB " SB SC\\,\-4   5      rC\DrE\=rF\'rG " SD SE\\+   5      rHS[SF jrISZS\SG jjrJS]SH jrKSI rLS^SJ jrM SZ       S_SK jjrNS`SL jrO " SM SN\R                   \,\-4   5      rQ " SO SP\ \.   5      rR " SQ SR\ 5      rS " SS ST\\+   5      rT " SU SV\T\+   5      rUSW rVg)azCollection classes and helpers.é    )ÚannotationsN)ÚAny)ÚCallable)Úcast)Ú	Container)ÚDict)Ú	FrozenSet)ÚGeneric)ÚIterable)ÚIterator)ÚList)ÚMapping)ÚNoReturn)ÚOptional)Úoverload)ÚSequence)ÚSet)ÚTuple)ÚTypeVar)ÚUnion)Ú
ValuesViewé   )ÚHAS_CYEXTENSION)Úis_non_string_iterable)ÚLiteral)ÚProtocol)Úimmutabledict)ÚIdentitySet)ÚReadOnlyContainer)ÚImmutableDictBase)Ú
OrderedSet)Úunique_listÚ_T)ÚboundÚ_KTÚ_VTÚ_T_coT)Ú	covariantzFrozenSet[Any]Ú	EMPTY_SETÚNONE_SETc                óú   • [        U 5      R                  U5      n/ n[        U 5      [        U5      pT U H.  nXb;   a  UR                  U5        XEpE  O)UR	                  U5        M0     UR                  U5         U$ MJ  )a
  merge two lists, maintaining ordering as much as possible.

this is to reconcile vars(cls) with cls.__annotations__.

Example::

    >>> a = ["__tablename__", "id", "x", "created_at"]
    >>> b = ["id", "name", "data", "y", "created_at"]
    >>> merge_lists_w_ordering(a, b)
    ['__tablename__', 'id', 'name', 'data', 'y', 'x', 'created_at']

This is not necessarily the ordering that things had on the class,
in this case the class is::

    class User(Base):
        __tablename__ = "users"

        id: Mapped[int] = mapped_column(primary_key=True)
        name: Mapped[str]
        data: Mapped[Optional[str]]
        x = Column(Integer)
        y: Mapped[int]
        created_at: Mapped[datetime.datetime] = mapped_column()

But things are *mostly* ordered.

The algorithm could also be done by creating a partial ordering for
all items in both lists and then using topological_sort(), but that
is too much overhead.

Background on how I came up with this is at:
https://gist.github.com/zzzeek/89de958cf0803d148e74861bd682ebae

)ÚsetÚintersectionÚiterÚdiscardÚappendÚextend)ÚaÚbÚoverlapÚresultÚcurrentÚotherÚelements          ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sqlalchemy/util/_collections.pyÚmerge_lists_w_orderingr:   L   s{   € ôF �!‹f×!Ñ! !Ó$€Gà€Fä˜!“Wœd 1›gˆUà
ÛˆGØÓ!Ø—‘ Ô(Ø!(�wÙà�M‰M˜'Ö"ñ ð �M‰M˜%Ô Øà€Mñ ó    c                ó`   • U (       d  [         $ [        U [        5      (       a  U $ [        U 5      $ ©N)Ú
EMPTY_DICTÚ
isinstancer   )Úds    r9   Úcoerce_to_immutabledictrA   „   s(   € ÞÜÐÜ	�A”}×	%Ñ	%Øˆä˜QÓÐr;   zimmutabledict[Any, Any]r>   c                  óJ   • \ rS rSrSrS
S jrSS jrSS jrSS jrSS jr	Sr
g	)Ú
FacadeDicté�   z*A dictionary that is not publicly mutable.c                ó2   • [         R                  " U 5      nU$ r=   )r    Ú__new__)ÚclsÚargsÚnews      r9   rF   ÚFacadeDict.__new__“   s   € Ü×'Ò'¨Ó,ˆØˆ
r;   c                ó   • [        S5      e)Nz\an immutabledict shouldn't need to be copied.  use dict(d) if you need a mutable dictionary.)ÚNotImplementedError©Úselfs    r9   ÚcopyÚFacadeDict.copy—   s   € Ü!ð0ó
ð 	
r;   c                ó&   • [         [        U 5      44$ r=   )rC   ÚdictrM   s    r9   Ú
__reduce__ÚFacadeDict.__reduce__�   s   € ÜœD ›J˜=Ð(Ð(r;   c                ó0   • [         R                  XU5        g)z,insert an item into the dictionary directly.N)rR   Ú__setitem__©rN   ÚkeyÚvalues      r9   Ú_insert_itemÚFacadeDict._insert_item    s   € ä×Ñ˜ EÕ*r;   c                ó2   • S[         R                  U 5      -  $ )NzFacadeDict(%s))rR   Ú__repr__rM   s    r9   r]   ÚFacadeDict.__repr__¤   s   € Ø¤$§-¡-°Ó"5Ñ5Ð5r;   © N)rH   r   ÚreturnzFacadeDict[Any, Any])r`   r   ©r`   r   ©rX   r%   rY   r&   r`   ÚNone)r`   Ústr)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rF   rO   rS   rZ   r]   Ú__static_attributes__r_   r;   r9   rC   rC   �   s   † Ù4ôô
ô)ô+÷6r;   rC   Ú_DTÚ_Fc                  ó@  ^ • \ rS rSr% SrSrS\S'   SS jrSS jrS S jr	S!U 4S	 jjr
S"S
 jrS#S jrS$S jrS%S jrS#S jrS&S jrS'S jrS$S jrS(S jrS)S jrS*S jr\S+S j5       r\S,S j5       r S-     S.S jjrS!S jrS/S jrS0S jrS(S jrS1S jrSrU =r$ )2Ú
Propertiesé­   z8Provide a __getattr__/__setattr__ interface over a dict.©Ú_dataúDict[str, _T]rq   c                ó2   • [         R                  U SU5        g ©Nrq   ©ÚobjectÚ__setattr__)rN   Údatas     r9   Ú__init__ÚProperties.__init__´   s   € Ü×Ñ˜4 ¨$Õ/r;   c                ó,   • [        U R                  5      $ r=   ©Úlenrq   rM   s    r9   Ú__len__ÚProperties.__len__·   ó   € Ü�4—:‘:‹Ðr;   c                óZ   • [        [        U R                  R                  5       5      5      $ r=   )r.   Úlistrq   ÚvaluesrM   s    r9   Ú__iter__ÚProperties.__iter__º   s   € Ü”D˜Ÿ™×*Ñ*Ó,Ó-Ó.Ð.r;   c                óž   >• [        [        5       5      U R                  R                  5        Vs/ s H  n[	        U5      PM     sn-   $ s  snf r=   )ÚdirÚsuperrq   Úkeysrd   )rN   ÚkÚ	__class__s     €r9   Ú__dir__ÚProperties.__dir__½   s7   ø€ Ü”5“7‹|¨t¯z©z¯©Ô/@ÓAÒ/@¨!œs 1žvÑ/@ÑAÑAÐAùÒAs   °A
c                ó0   • [        U 5      [        U5      -   $ r=   )r‚   )rN   r7   s     r9   Ú__add__ÚProperties.__add__À   s   € Ü�D‹zœD ›KÑ'Ð'r;   c                ó    • X R                   U'   g r=   rp   ©rN   rX   Úobjs      r9   rV   ÚProperties.__setitem__Ã   ó   € Ø�
‰
�3Šr;   c                ó    • U R                   U   $ r=   rp   ©rN   rX   s     r9   Ú__getitem__ÚProperties.__getitem__Æ   s   € Ø�z‰z˜#‰Ðr;   c                ó   • U R                   U	 g r=   rp   r—   s     r9   Ú__delitem__ÚProperties.__delitem__É   ó   € Ø�J‰J�s‰Or;   c                ó    • X R                   U'   g r=   rp   r’   s      r9   rw   ÚProperties.__setattr__Ì   r•   r;   c                ó   • SU R                   0$ rt   rp   rM   s    r9   Ú__getstate__ÚProperties.__getstate__Ï   s   € Ø˜Ÿ™Ð$Ð$r;   c                ó8   • [         R                  U SUS   5        g rt   ru   )rN   Ústates     r9   Ú__setstate__ÚProperties.__setstate__Ò   s   € Ü×Ñ˜4 ¨%°©.Õ9r;   c                óT   •  U R                   U   $ ! [         a    [        U5      ef = fr=   )rq   ÚKeyErrorÚAttributeErrorr—   s     r9   Ú__getattr__ÚProperties.__getattr__Õ   s/   € ð	&Ø—:‘:˜c‘?Ð"øÜó 	&Ü  Ó%Ð%ð	&ús   ‚ ‘'c                ó   • XR                   ;   $ r=   rp   r—   s     r9   Ú__contains__ÚProperties.__contains__Û   ó   € Ø—j‘jÑ Ð r;   c                ó,   • [        U R                  5      $ )z8Return an immutable proxy for this :class:`.Properties`.)ÚReadOnlyPropertiesrq   rM   s    r9   Úas_readonlyÚProperties.as_readonlyÞ   s   € ô " $§*¡*Ó-Ð-r;   c                ó:   • U R                   R                  U5        g r=   )rq   Úupdate)rN   rY   s     r9   rµ   ÚProperties.updateã   s   € Ø�
‰
×Ñ˜%Õ r;   c                ó   • g r=   r_   r—   s     r9   ÚgetÚProperties.getæ   s   € Ø-0r;   c                ó   • g r=   r_   ©rN   rX   Údefaults      r9   r¸   r¹   é   ó   € ØHKr;   c                ó   • X;   a  X   $ U$ r=   r_   r»   s      r9   r¸   r¹   ì   s   € ð ‹;Ø‘9ÐàˆNr;   c                ó,   • [        U R                  5      $ r=   )r‚   rq   rM   s    r9   r‰   ÚProperties.keysô   ó   € Ü�D—J‘JÓÐr;   c                óH   • [        U R                  R                  5       5      $ r=   )r‚   rq   rƒ   rM   s    r9   rƒ   ÚProperties.values÷   s   € Ü�D—J‘J×%Ñ%Ó'Ó(Ð(r;   c                óH   • [        U R                  R                  5       5      $ r=   )r‚   rq   ÚitemsrM   s    r9   rÅ   ÚProperties.itemsú   s   € Ü�D—J‘J×$Ñ$Ó&Ó'Ð'r;   c                ó   • XR                   ;   $ r=   rp   r—   s     r9   Úhas_keyÚProperties.has_keyý   r¯   r;   c                ó8   • U R                   R                  5         g r=   )rq   ÚclearrM   s    r9   rË   ÚProperties.clear   s   € Ø�
‰
×ÑÕr;   r_   )rx   rr   ©r`   Úint©r`   úIterator[_T])r`   z	List[str])r7   zProperties[_F]r`   zList[Union[_T, _F]])rX   rd   r“   r#   r`   rc   )rX   rd   r`   r#   )rX   rd   r`   rc   )r`   úDict[str, Any])r¤   rÑ   r`   rc   )rX   rd   r`   Úbool)r`   zReadOnlyProperties[_T])rY   rr   r`   rc   )rX   rd   r`   zOptional[_T])rX   rd   r¼   úUnion[_DT, _T]r`   rÓ   r=   )rX   rd   r¼   zOptional[Union[_DT, _T]]r`   zOptional[Union[_T, _DT]])r`   úList[_T])r`   zList[Tuple[str, _T]]©r`   rc   )re   rf   rg   rh   ri   Ú	__slots__Ú__annotations__ry   r~   r„   rŒ   r�   rV   r˜   r›   rw   r¡   r¥   rª   r­   r²   rµ   r   r¸   r‰   rƒ   rÅ   rÈ   rË   rj   Ú__classcell__)r‹   s   @r9   rn   rn   ­   s¼   ø‡ ÙBà€IàÓô0ôô/÷Bô(ôôôôô%ô:ô&ô!ô.ô
!ð Û0ó Ø0àÛKó ØKð =AðØðØ!9ðà	!õô ô)ô(ô!÷ò r;   rn   c                  ó"   • \ rS rSrSrSrS rSrg)ÚOrderedPropertiesi  zQProvide a __getattr__/__setattr__ interface with an OrderedDict
as backing store.r_   c                ó@   • [         R                  U [        5       5        g r=   )rn   ry   ÚOrderedDictrM   s    r9   ry   ÚOrderedProperties.__init__
  s   € Ü×Ñ˜D¤+£-Õ0r;   N)re   rf   rg   rh   ri   rÖ   ry   rj   r_   r;   r9   rÚ   rÚ     s   † ñð €Iõ1r;   rÚ   c                  ó   • \ rS rSrSrSrSrg)r±   i  zDProvide immutable dict/object attribute to an underlying dictionary.r_   N)re   rf   rg   rh   ri   rÖ   rj   r_   r;   r9   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.)rX   N)ÚsortedrË   rµ   )r@   rX   rŠ   rÅ   s       r9   Ú_ordered_dictionary_sortrá     s<   € ô !' qÒ 2Ó3Ò 2˜1�‘‹YÑ 2€EÐ3à‡G�G„Ià‡H�HˆU…Oùò	 4s   Œ?c                  ó:   • \ rS rSrS	S
S j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=   )Ú_storageÚremove)ÚitemÚselfrefrN   s      r9   Ú_removeÚ&WeakSequence.__init__.<locals>._remove&  s&   € Ù“9ˆDØÑØ—‘×$Ñ$ TÕ*ð  r;   )ÚweakrefÚrefrê   ræ   )rN   Ú_WeakSequence__elementsrê   r8   s       r9   ry   ÚWeakSequence.__init__#  sE   € ô #*§+¢+¨dÓ"3ô 	+ð
 Œá9Có
Ú9C¨gŒG�KŠK˜Ö)¹ñ
ˆ�ùò 
s   ¥ Ac                óv   • U R                   R                  [        R                  " XR                  5      5        g r=   )ræ   r0   rì   rí   rê   )rN   rè   s     r9   r0   ÚWeakSequence.append0  s!   € Ø�‰×ÑœWŸ[š[¨¯|©|Ó<Õ=r;   c                ó,   • [        U R                  5      $ r=   )r}   ræ   rM   s    r9   r~   ÚWeakSequence.__len__3  s   € Ü�4—=‘=Ó!Ð!r;   c                ó6   • S S U R                    5        5       $ )Nc              3  ó.   #   • U  H  oc  M  Uv •  M     g 7fr=   r_   )Ú.0r“   s     r9   Ú	<genexpr>Ú(WeakSequence.__iter__.<locals>.<genexpr>7  s   é € ð 
Ú;�C�C‰CÒ;ùs   ‚Œ	c              3  ó.   #   • U  H  o" 5       v •  M     g 7fr=   r_   )rö   rí   s     r9   r÷   rø   8  s   é € Ð;ª] c˜CŸE˜Eª]ùs   ‚©ræ   rM   s    r9   r„   ÚWeakSequence.__iter__6  s   € ñ
Ù;¨T¯]ª]Ô;ó
ð 	
r;   c                ó*   • U R                   U   " 5       $ r=   rú   )rN   Úindexs     r9   r˜   ÚWeakSequence.__getitem__;  s   € Ø�}‰}˜UÒ#Ó%Ð%r;   )rê   ræ   N)r_   )rî   zSequence[_T])
re   rf   rg   rh   ry   r0   r~   r„   r˜   rj   r_   r;   r9   rã   rã   "  s   † ö
ò>ò"ò
õ
&r;   rã   c                  ó"   • \ rS rSrSSS j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   ry   rÜ   Ú_membersÚadd)rN   ÚiterableÚos      r9   ry   ÚOrderedIdentitySet.__init__@  s6   € Ü×Ò˜TÔ"Ü#›ˆŒÞÛ�Ø—‘˜–ò ð r;   )r  r=   )r  zOptional[Iterable[Any]])re   rf   rg   rh   ry   rj   r_   r;   r9   r   r   ?  s   † ÷ñ r;   r   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚPopulateDictiH  z‰A 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)rN   r  s     r9   ry   ÚPopulateDict.__init__P  s   € Ø�r;   c                ó0   • U R                  U5      =X'   nU$ r=   r
  ©rN   rX   Úvals      r9   Ú__missing__ÚPopulateDict.__missing__S  s   € ØŸ,™, sÓ+Ð+ˆ‰	�CØˆ
r;   r
  N)r  zCallable[[_KT], _VT]©rX   r   r`   r   ©re   rf   rg   rh   ri   ry   r  rj   r_   r;   r9   r  r  H  s   † ñô÷r;   r  c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚWeakPopulateDictiX  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)rN   Úcreator_methodr  s      r9   ry   ÚWeakPopulateDict.__init__^  s*   € Ø%×.Ñ.ˆŒØ!×*Ñ*ˆÜŸš HÓ-ˆ�r;   c                óN   • U R                  U R                  5       U5      =X'   nU$ r=   ©r  r  r  s      r9   r  ÚWeakPopulateDict.__missing__c  s$   € ØŸ,™, t§}¡}£¸Ó<Ð<ˆ‰	�CØˆ
r;   r  N)r  ztypes.MethodTyper  r  r_   r;   r9   r  r  X  s   † ñô
.÷
r;   r  c                  óf   • \ rS rSr% SrSrS\S'   S\S'   S\S	'    S   SS jjrSS jrSS jr	Sr
g
)ÚUniqueAppenderiq  z±Appends items to a collection ensuring uniqueness.

Additional appends() of the same object are ignored.  Membership is
determined by identity (``is a``) not equality (``==``).
)rx   Ú_data_appenderÚ_uniqueú&Union[Iterable[_T], Set[_T], List[_T]]rx   zCallable[[_T], None]r!  zDict[int, Literal[True]]r"  Nc                ó  • Xl         0 U l        U(       a  [        X5      U l        g [	        US5      (       a  [        SU5      R                  U l        g [	        US5      (       a  [        SU5      R                  U l        g g )Nr0   rÔ   r  zSet[_T])rx   r"  Úgetattrr!  Úhasattrr   r0   r  )rN   rx   Úvias      r9   ry   ÚUniqueAppender.__init__~  si   € ð
 Œ	ØˆŒÞÜ")¨$Ó"4ˆDÕÜ�T˜8×$Ñ$Ü"& z°4Ó"8×"?Ñ"?ˆDÕÜ�T˜5×!Ñ!Ü"& y°$Ó"7×";Ñ";ˆDÕð "r;   c                óz   • [        U5      nX R                  ;  a!  U R                  U5        SU R                  U'   g g )NT)Úidr"  r!  )rN   rè   Úid_s      r9   r0   ÚUniqueAppender.appendŒ  s6   € Ü�‹hˆØ—l‘lÓ"Ø×Ñ Ô%Ø $ˆD�L‰L˜Òð #r;   c                ó,   • [        U R                  5      $ r=   )r.   rx   rM   s    r9   r„   ÚUniqueAppender.__iter__’  s   € Ü�D—I‘I‹Ðr;   )r!  r"  rx   r=   )rx   r#  r'  zOptional[str])rè   r#   r`   rc   rÏ   )re   rf   rg   rh   ri   rÖ   r×   ry   r0   r„   rj   r_   r;   r9   r   r   q  sF   ‡ ñð 4€Ià
0Ó0Ø(Ó(Ø%Ó%ð
 "ð<à4ð<ð õ<ô%÷r;   r   c                ó˜   • [        U 5      S:X  a0  [        U S   [        R                  5      (       a  [	        U S   5      $ [        SU 5      $ )Nr   r   ú	List[Any])r}   r?   ÚtypesÚGeneratorTyper‚   r   )Úargs    r9   Úcoerce_generator_argr4  –  s>   € Ü
ˆ3ƒx�1ƒ}œ C¨¡F¬E×,?Ñ,?×@Ñ@Ü�C˜‘F‹|Ðä�K Ó%Ð%r;   c                óv   • U c  U$ [        U 5      (       d  U /$ [        U [        5      (       a  U $ [        U 5      $ r=   )r   r?   r‚   )Úxr¼   s     r9   Úto_listr7  �  s9   € Ø�yØˆÜ! !×$Ñ$Øˆsˆ
Ü	�A”t×	Ñ	Øˆä�A‹wˆr;   c                ó.   ^ • [        U 4S jU 5       5      $ )z¦return True if any items of set\_ are present in iterable.

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

c              3  óR   >#   • U  H  oR                   (       d  M  UT;   v •  M     g 7fr=   )Ú__hash__)rö   ÚiÚset_s     €r9   r÷   Ú#has_intersection.<locals>.<genexpr>¯  s   øé € Ð9¢(˜Q¯j­j‹yˆq�DŽy¢(ùs   ƒ'›')Úany)r<  r  s   ` r9   Úhas_intersectionr?  ¨  s   ø€ ô Ô9¡(Ó9Ó9Ð9r;   c                ór   • U c
  [        5       $ [        U [         5      (       d  [        [        U 5      5      $ U $ r=   )r,   r?   r7  ©r6  s    r9   Úto_setrB  ²  s.   € Ø�yÜ‹uˆÜ�aœ×ÑÜ”7˜1“:‹Ðàˆr;   c                ór   • U c
  [        5       $ [        U [         5      (       d  [        [        U 5      5      $ U $ r=   )Ú
column_setr?   r7  rA  s    r9   Úto_column_setrE  »  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_   )rO   rµ   )r@   Ú_newÚkws      r9   Úupdate_copyrI  Ä  s/   € ð
 	
�‰‹€AÞØ	�‰�ŒØ‡H‚H�Nˆr‚NØ€Hr;   c              #  ó    #   • U  HB  n[        U[        5      (       d&  [        US5      (       a  [        U5       Sh  v•N   M>  Uv •  MD     g N7f)zyGiven an iterator of which further sub-elements may also be
iterators, flatten the sub-elements into a single iterator.

r„   N)r?   rd   r&  Úflatten_iterator)r6  Úelems     r9   rK  rK  Ð  s@   é € ó ˆÜ˜$¤×$Ñ$¬°°z×)BÑ)BÜ'¨Ó-×-Ò-àŒJò	 á-ùs   ‚:A¼A½Ac                  óü   • \ rS rSr% SrSrS\S'   S\S'   S\S	'      S     SS jjrS r\	SS j5       r
\	SS j5       r
 S     SS jjr
SS jrS S jrS!S jrS"S jrS#S jrS$S jr\S%S j5       rS&S jrSrg
)'ÚLRUCacheiÝ  zßDictionary with 'squishy' removal of least
recently used items.

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

)ÚcapacityÚ	thresholdÚ
size_alertrq   Ú_counterÚ_mutexrÎ   rO  ÚfloatrP  z.Optional[Callable[[LRUCache[_KT, _VT]], None]]rQ  Nc                óx   • Xl         X l        X0l        SU l        [        R
                  " 5       U l        0 U l        g )Nr   )rO  rP  rQ  rR  Ú	threadingÚLockrS  rq   )rN   rO  rP  rQ  s       r9   ry   ÚLRUCache.__init__ô  s/   € ð !ŒØ"ŒØ$ŒØˆŒÜ—n’nÓ&ˆŒØ<>ˆ�
r;   c                óD   • U =R                   S-  sl         U R                   $ ©Nr   )rR  rM   s    r9   Ú_inc_counterÚLRUCache._inc_counter  s   € Ø�Š˜Ñ�Ø�}‰}Ðr;   c                ó   • g r=   r_   r—   s     r9   r¸   ÚLRUCache.get  s   € Ø.1r;   c                ó   • g r=   r_   r»   s      r9   r¸   r^    r½   r;   c                óx   • U R                   R                  U5      nUb  U R                  5       US   S'   US   $ U$ ©Né   r   r   )rq   r¸   r[  )rN   rX   r¼   rè   s       r9   r¸   r^    s@   € ð �z‰z�~‰~˜cÓ"ˆØÑØ×*Ñ*Ó,ˆD�‰G�A‰JØ˜‘7ˆNàˆNr;   c                óV   • U R                   U   nU R                  5       US   S'   US   $ ra  )rq   r[  )rN   rX   rè   s      r9   r˜   ÚLRUCache.__getitem__  s.   € Ø�z‰z˜#‰ˆØ×&Ñ&Ó(ˆˆQ‰�‰
Ø�A‰wˆr;   c                ó,   • [        U R                  5      $ r=   )r.   rq   rM   s    r9   r„   ÚLRUCache.__iter__  rÁ   r;   c                ó,   • [        U R                  5      $ r=   r|   rM   s    r9   r~   ÚLRUCache.__len__  r€   r;   c           	     óš   • [         R                  " U R                  R                  5        VVs0 s H
  u  pXS   _M     snn5      $ s  snnf rZ  )Útypingr   rq   rÅ   )rN   rŠ   r;  s      r9   rƒ   ÚLRUCache.values   s<   € Ü× Ò °d·j±j×6FÑ6FÔ6HÔ!IÒ6H©d¨a ! q¡T¢'Ñ6HÒ!IÓJÐJùÓ!Is   ®A
c                ód   • XU R                  5       /4U R                  U'   U R                  5         g r=   )r[  rq   Ú_manage_sizerW   s      r9   rV   ÚLRUCache.__setitem__#  s,   € Ø¨×(9Ñ(9Ó(;Ð'<Ð=ˆ�
‰
�3‰Ø×ÑÕr;   c                ó   • U R                   U	 g r=   rp   )rN   Ú_LRUCache__vs     r9   r›   ÚLRUCache.__delitem__'  r�   r;   c                óN   • U R                   U R                   U R                  -  -   $ r=   )rO  rP  rM   s    r9   Ú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        [        U R                  R                  5       [        R                  " S5      SS9nX R
                  S   H  n U R                  US   	 M     [	        U 5      U R
                  U R
                  U R                  -  -   :”  a  M¬  U R                   R                  5         g ! [         a     Mu  f = f! U R                   R                  5         f = f)NFrb  T)rX   Úreverser   )rS  ÚacquirerÒ   rQ  r}   rO  rP  rà   rq   rƒ   ÚoperatorÚ
itemgetterr¨   Úrelease)rN   rQ  Ú
by_counterrè   s       r9   rm  ÚLRUCache._manage_size.  s  € Ø�{‰{×"Ñ" 5×)Ñ)Øð	"Ü˜dŸo™oÓ.ˆJÜ�d“)˜dŸm™m¨d¯m©m¸d¿n¹nÑ.LÑLÓLÞØ!&�JØ—O‘O DÔ)Ü#Ø—J‘J×%Ñ%Ó'Ü ×+Ò+¨AÓ.Ø ñ�
ð
 '§}¡} Ó7�Dð!Ø ŸJ™J t¨A¡wÒ/ñ 8ô �d“)˜dŸm™m¨d¯m©m¸d¿n¹nÑ.LÑLÕLð  �K‰K×ÑÕ!øô	 $ó !â ð!ûð �K‰K×ÑÕ!ús0   £B*E ÃD2Ã7E Ä2
E Ä<E Ä?E Å E ÅE)rR  rq   rS  rO  rQ  rP  )éd   g      à?N)rO  rÎ   rP  rT  rQ  zOptional[Callable[..., None]])rX   r%   r`   zOptional[_VT])rX   r%   r¼   úUnion[_VT, _T]r`   r~  r=   )rX   r%   r¼   úOptional[Union[_VT, _T]]r`   r  )rX   r%   r`   r&   )r`   zIterator[_KT]rÍ   )r`   zValuesView[_VT]rb   )rp  r%   r`   rc   )r`   rT  rÕ   )re   rf   rg   rh   ri   rÖ   r×   ry   r[  r   r¸   r˜   r„   r~   rƒ   rV   r›   Úpropertyrs  rm  rj   r_   r;   r9   rN  rN  Ý  sË   ‡ ñð€Ið ƒMØÓØ>Ó>ð ØØ48ð	?àð?ð ð?ð 2õ	?òð Û1ó Ø1àÛKó ØKð =AðØðØ!9ðà	!õôô
 ôôKôôð ó>ó ð>÷"r;   rN  c                  ó   • \ rS rSrSS jrSrg)Ú_CreateFuncTypeiF  c                ó   • g r=   r_   rM   s    r9   Ú__call__Ú_CreateFuncType.__call__G  s   €  r;   r_   N)r`   r'   ©re   rf   rg   rh   r„  rj   r_   r;   r9   r‚  r‚  F  s   † ß$r;   r‚  c                  ó   • \ rS rSrSS jrSrg)Ú_ScopeFuncTypeiJ  c                ó   • g r=   r_   rM   s    r9   r„  Ú_ScopeFuncType.__call__K  s   € ˜sr;   r_   Nra   r†  r_   r;   r9   rˆ  rˆ  J  s   † ß"r;   rˆ  c                  óv   • \ rS rSr% SrSrS\S'   S\S'   S\S	'       SS
 jrSS jrSS jr	SS jr
SS jrSrg)ÚScopedRegistryiN  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.
©Ú
createfuncÚ	scopefuncÚregistryz_CreateFuncType[_T]rŽ  rˆ  r�  r   r�  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).

Nr�  )rN   rŽ  r�  s      r9   ry   ÚScopedRegistry.__init__c  s   € ð %ŒØ"ŒØˆ�r;   c                ó´   • U R                  5       n U R                  U   $ ! [         a,    U R                  R                  XR	                  5       5      s $ f = fr=   )r�  r�  r¨   Ú
setdefaultrŽ  r—   s     r9   r„  ÚScopedRegistry.__call__t  sP   € Ø�n‰nÓˆð	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.)r�  r�  rM   s    r9   ÚhasÚScopedRegistry.has{  s   € ð �~‰~Ó 4§=¡=Ñ0Ð0r;   c                ó<   • XR                   U R                  5       '   g)z$Set the value for the current scope.N)r�  r�  ©rN   r“   s     r9   r,   ÚScopedRegistry.set€  s   € ð +.�‰�d—n‘nÓ&Ò'r;   c                ó\   •  U R                   U R                  5       	 g! [         a     gf = f)z Clear the current scope, if any.N)r�  r�  r¨   rM   s    r9   rË   ÚScopedRegistry.clear…  s,   € ð	Ø—‘˜dŸn™nÓ.Ñ/øÜó 	Ùð	ús   ‚ ž
+ª+)rŽ  r�  r�  N)rŽ  úCallable[[], _T]r�  zCallable[[], Any]©r`   r#   ©r`   rÒ   ©r“   r#   r`   rc   rÕ   )re   rf   rg   rh   ri   rÖ   r×   ry   r„  r—  r,   rË   rj   r_   r;   r9   rŒ  rŒ  N  sI   ‡ ñð 6€Ià#Ó#ØÓØƒMðØ*ðØ7Hôô"Dô1ô
.÷
r;   rŒ  c                  óJ   • \ rS rSrSrS
S jrSS jrSS jrSS jrSS j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=   )rŽ  rV  Úlocalr�  )rN   rŽ  s     r9   ry   ÚThreadLocalRegistry.__init__”  s   € Ø$ŒÜ!ŸšÓ)ˆ�r;   c                ó”   •  U R                   R                  $ ! [         a%    U R                  5       =oR                   l        Us $ f = fr=   )r�  rY   r©   rŽ  )rN   r  s     r9   r„  ÚThreadLocalRegistry.__call__˜  sA   € ð	Ø—=‘=×&Ñ&Ð&øÜó 	Ø(,¯©Ó(9Ð9ˆC—-‘-Ô%ØŠJð	ús   ‚ ˜,AÁAc                ó.   • [        U R                  S5      $ )NrY   )r&  r�  rM   s    r9   r—  ÚThreadLocalRegistry.hasŸ  s   € Ü�t—}‘} gÓ.Ð.r;   c                ó$   • XR                   l        g r=   )r�  rY   rš  s     r9   r,   ÚThreadLocalRegistry.set¢  s   € Ø!�‰Õr;   c                ó>   •  U R                   ?g ! [         a     g f = fr=   )r�  rY   r©   rM   s    r9   rË   ÚThreadLocalRegistry.clear¥  s#   € ð	Ø—‘Ñ#øÜó 	Ùð	ús   ‚ �
›)rŽ  r�  N)rŽ  rž  rŸ  r   r¡  rÕ   )re   rf   rg   rh   ri   ry   r„  r—  r,   rË   rj   r_   r;   r9   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       r9   Ú	has_dupesr³  ¬  s0   € ð 	
€AÛˆØŒ>Ø�‰FˆAØ�1�uÙñ	 ð
 r;   )r2   r0  r3   r0  r`   r0  )r@   zMapping[_KT, _VT]r`   zimmutabledict[_KT, _VT]r=   )r3  r   r`   r0  )r6  r   r¼   zOptional[List[Any]]r`   r0  )r<  zContainer[Any]r  zIterable[Any]r`   rÒ   )r6  r   r`   zSet[Any])r@   úDict[Any, Any]rG  zOptional[Dict[Any, Any]]rH  r   r`   r´  )r6  zIterable[_T]r`   rÐ   )Wri   Ú
__future__r   rx  rV  r1  rj  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rì   Ú_has_cyr   r   r   r   ÚTYPE_CHECKINGÚ_py_collectionsr   r   r   r    r!   r"   Ú$sqlalchemy.cyextension.immutabledictÚ"sqlalchemy.cyextension.collectionsr#   r%   r&   r'   Ú	frozensetr)   r×   r*   r:   rA   r>   rC   rk   rl   rn   rÚ   r±   rá   rR   rÜ   Úsort_dictionaryrã   r   r  r  r,   rD  Úcolumn_dictÚordered_column_setr   r4  r7  r?  rB  rE  rI  rK  ÚMutableMappingrN  r‚  rˆ  rŒ  r£  r³  r_   r;   r9   Ú<module>rÀ     sŽ  ðò &Ý "ã Û Û Û Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Û å $Ý *Ý Ý à	××žÝ?Ý;ÝGÝGÝ9Þ;õõõõ NÝKõñ
 ˆT˜Ñ€Ùˆe˜3Ñ€Ùˆe˜3Ñ€Ù� 4Ñ(€á%›K€	ˆ>Ó 'Ù$ d VÓ,€ˆ.Ó ,ô5ôp ñ '4£o€
Ð#Ó 5ô6Ð" 3¨ 8Ñ,ô 6ñ0 ˆe˜3Ñ€áˆT˜Ñ€ôT�˜‘ô Tôn1˜
 2™ô 1ôÐ*¨J°r©Nô ôð €Ø*€ô&�8˜B‘<ô &ô:˜ô ô�4˜˜S˜‘>ô ô �t˜C ˜H‘~ô ð( €
Ø€ØÐ ô"�W˜R‘[ô "ôJ&öô:òôð 9=ð	Øð	Ø5ð	ØDGð	àõ	ô
ôf"ˆv×$Ñ$ S¨# XÑ.ô f"ôR%�h˜u‘oô %ô#�Xô #ô=�W˜R‘[ô =ô@˜.¨Ñ,ô ó<r;   