Ë
    r™ãjÕJ  ã                  ój  — U d Z ddlmZ ddl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 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlmZ ddlm Z  ddlm!Z! ddl"m#Z# ddl"m$Z$ dd l"m%Z% dd!lm&Z&  ed"e¬#«      Z' ed$e¬#«      Z( ed%e¬#«      Z) ed&d'¬(«      Z* e+«       Z,d)e-d*<    e+dg«      Z.d)e-d+<   dUd,„Z/dVd-„Z0 e#«       Z1d.e-d/<    G d0„ d1e$e(e)f   «      Z2 ed2e¬#«      Z3 ed3e¬#«      Z4 G d4„ d5ee'   «      Z5 G d6„ d7e5e'   «      Z6 G d8„ d9e%e5e'   «      Z7dWd:„Z8e9Z:e8Z; G d;„ d<ee'   «      Z<eZ= G d=„ d>ee(e)f   «      Z> G d?„ d@ee(e)f   «      Z?e@ZAe9ZBe ZC G dA„ dBee'   «      ZDdXdC„ZEdWdYdD„ZFdZdE„ZGdF„ ZHd[dG„ZI	 dW	 	 	 	 	 	 	 d\dH„ZJd]dI„ZK G dJ„ dKej˜                  e(e)f   «      ZM G dL„ dMee*   «      ZN G dN„ dOe«      ZO G dP„ dQee'   «      ZP G dR„ dSePe'   «      ZQdT„ ZRy)^zCollection classes and helpers.é    )ÚannotationsN)ÚAny)ÚCallable)Úcast)Ú	Container)ÚDict)Ú	FrozenSet)ÚGeneric)ÚIterable)ÚIterator)ÚList)ÚLiteral)ÚMapping)ÚNoReturn)ÚOptional)Úoverload)ÚProtocol)ÚSequence)ÚSet)ÚTuple)ÚTypeVar)ÚUnion)Ú
ValuesViewé   )ÚIdentitySet)Ú
OrderedSet)Úunique_list)Úimmutabledict)ÚImmutableDictBase)ÚReadOnlyContainer)Úis_non_string_iterableÚ_T)ÚboundÚ_KTÚ_VTÚ_T_coT)Ú	covariantzFrozenSet[Any]Ú	EMPTY_SETÚNONE_SETc                óø   — t        | «      j                  |«      }g }t        | «      t        |«      }}	 |D ].  }||v r|j                  |«       ||}} n'|j	                  |«       Œ0 |j                  |«       	 |S ŒH)af  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          úg/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/util/_collections.pyÚmerge_lists_w_orderingr9   :   sˆ   € ôF �!‹f×!Ñ! !Ó$€Gà€Fä˜!“Wœd 1›gˆU€Gà
Øò 		ˆGØ˜'Ñ!Ø—‘ Ô(Ø!(¨%�w�Ùà�M‰M˜'Õ"ð		ð �M‰M˜%Ô Øà€Mð ó    c                óL   — | st         S t        | t        «      r| S t        | «      S ©N)Ú
EMPTY_DICTÚ
isinstancer   )Úds    r8   Úcoerce_to_immutabledictr@   r   s%   € ÙÜÐÜ	�A”}Ô	%Øˆä˜QÓÐr:   zimmutabledict[Any, Any]r=   c                  ó8   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zdd„Zy)Ú
FacadeDictz*A dictionary that is not publicly mutable.c                ó0   — t        j                  | «      }|S r<   )r   Ú__new__)ÚclsÚargsÚnews      r8   rD   zFacadeDict.__new__�   s   € Ü$5×$=Ñ$=¸cÓ$BˆØˆ
r:   c                ó   — t        d«      ‚)Nz\an immutabledict shouldn't need to be copied.  use dict(d) if you need a mutable dictionary.)ÚNotImplementedError©Úselfs    r8   ÚcopyzFacadeDict.copy…   s   € Ü!ð0ó
ð 	
r:   c                ó&   — t         t        | «      ffS r<   )rB   ÚdictrJ   s    r8   Ú
__reduce__zFacadeDict.__reduce__‹   s   € ÜœD ›J˜=Ð(Ð(r:   c                ó2   — t         j                  | ||«       y)z,insert an item into the dictionary directly.N)rN   Ú__setitem__©rK   ÚkeyÚvalues      r8   Ú_insert_itemzFacadeDict._insert_itemŽ   s   € ä×Ñ˜˜s EÕ*r:   c                ó2   — dt         j                  | «      z  S )NzFacadeDict(%s))rN   Ú__repr__rJ   s    r8   rW   zFacadeDict.__repr__’   s   € Ø¤$§-¡-°Ó"5Ñ5Ð5r:   N)rF   r   ÚreturnzFacadeDict[Any, Any])rX   r   ©rX   r   ©rS   r$   rT   r%   rX   ÚNone)rX   Ústr)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rL   rO   rU   rW   © r:   r8   rB   rB   ~   s   „ Ù4óó
ó)ó+ô6r:   rB   Ú_DTÚ_Fc                  ó  ‡ — e Zd ZU dZdZded<   dd„Zdd„Zdd„Zdˆ fd„Z	d d	„Z
d!d
„Zd"d„Zd#d„Zd!d„Zd$d„Zd%d„Zd"d„Zd&d„Zd'd„Zd(d„Zed)d„«       Zed*d„«       Z	 d+	 	 	 	 	 d,d„Zdd„Zd-d„Zd.d„Zd&d„Zd/d„Zˆ xZS )0Ú
Propertiesz8Provide a __getattr__/__setattr__ interface over a dict.©Ú_dataúDict[str, _T]rg   c                ó2   — t         j                  | d|«       y ©Nrg   ©ÚobjectÚ__setattr__)rK   Údatas     r8   Ú__init__zProperties.__init__¢   s   € Ü×Ñ˜4 ¨$Õ/r:   c                ó,   — t        | j                  «      S r<   ©Úlenrg   rJ   s    r8   Ú__len__zProperties.__len__¥   ó   € Ü�4—:‘:‹Ðr:   c                óZ   — t        t        | j                  j                  «       «      «      S r<   )r-   Úlistrg   ÚvaluesrJ   s    r8   Ú__iter__zProperties.__iter__¨   s   € Ü”D˜Ÿ™×*Ñ*Ó,Ó-Ó.Ð.r:   c                ó˜   •— t        t        «       «      | j                  j                  «       D �cg c]  }t	        |«      ‘Œ c}z   S c c}w r<   )ÚdirÚsuperrg   Úkeysr\   )rK   ÚkÚ	__class__s     €r8   Ú__dir__zProperties.__dir__«   s1   ø€ Ü”5“7‹|¨t¯z©z¯©Ó/@ÖA¨!œs 1�vÒAÑAÐAùÒAs   °Ac                ó0   — t        | «      t        |«      z   S r<   )rv   )rK   r6   s     r8   Ú__add__zProperties.__add__®   s   € Ü�D‹zœD ›KÑ'Ð'r:   c                ó"   — || j                   |<   y r<   rf   ©rK   rS   Úobjs      r8   rQ   zProperties.__setitem__±   ó   € Øˆ�
‰
�3Šr:   c                ó    — | j                   |   S r<   rf   ©rK   rS   s     r8   Ú__getitem__zProperties.__getitem__´   s   € Ø�z‰z˜#‰Ðr:   c                ó   — | j                   |= y r<   rf   r‡   s     r8   Ú__delitem__zProperties.__delitem__·   ó   € Ø�J‰J�s‰Or:   c                ó"   — || j                   |<   y r<   rf   rƒ   s      r8   rm   zProperties.__setattr__º   r…   r:   c                ó   — d| j                   iS rj   rf   rJ   s    r8   Ú__getstate__zProperties.__getstate__½   s   € Ø˜Ÿ™Ð$Ð$r:   c                ó8   — t         j                  | d|d   «       y rj   rk   )rK   Ústates     r8   Ú__setstate__zProperties.__setstate__À   s   € Ü×Ñ˜4 ¨%°©.Õ9r:   c                óR   — 	 | j                   |   S # t        $ r t        |«      ‚w xY wr<   )rg   ÚKeyErrorÚAttributeErrorr‡   s     r8   Ú__getattr__zProperties.__getattr__Ã   s/   € ð	&Ø—:‘:˜c‘?Ð"øÜò 	&Ü  Ó%Ð%ð	&ús   ‚ ‘&c                ó   — || j                   v S r<   rf   r‡   s     r8   Ú__contains__zProperties.__contains__É   ó   € Ø�d—j‘jÐ Ð r:   c                ó,   — t        | j                  «      S )z8Return an immutable proxy for this :class:`.Properties`.)ÚReadOnlyPropertiesrg   rJ   s    r8   Úas_readonlyzProperties.as_readonlyÌ   s   € ô " $§*¡*Ó-Ð-r:   c                ó:   — | j                   j                  |«       y r<   )rg   Úupdate)rK   rT   s     r8   r�   zProperties.updateÑ   s   € Ø�
‰
×Ñ˜%Õ r:   c                 ó   — y r<   ra   r‡   s     r8   ÚgetzProperties.getÔ   s   € Ø-0r:   c                 ó   — y r<   ra   ©rK   rS   Údefaults      r8   rŸ   zProperties.get×   ó   € ØHKr:   c                ó   — || v r| |   S |S r<   ra   r¡   s      r8   rŸ   zProperties.getÚ   s   € ð �$‰;Ø˜‘9ÐàˆNr:   c                ó,   — t        | j                  «      S r<   )rv   rg   rJ   s    r8   r|   zProperties.keysâ   ó   € Ü�D—J‘JÓÐr:   c                óH   — t        | j                  j                  «       «      S r<   )rv   rg   rw   rJ   s    r8   rw   zProperties.valueså   s   € Ü�D—J‘J×%Ñ%Ó'Ó(Ð(r:   c                óH   — t        | j                  j                  «       «      S r<   )rv   rg   ÚitemsrJ   s    r8   r©   zProperties.itemsè   s   € Ü�D—J‘J×$Ñ$Ó&Ó'Ð'r:   c                ó   — || j                   v S r<   rf   r‡   s     r8   Úhas_keyzProperties.has_keyë   r˜   r:   c                ó8   — | j                   j                  «        y r<   )rg   ÚclearrJ   s    r8   r­   zProperties.clearî   s   € Ø�
‰
×ÑÕr:   )rn   rh   ©rX   Úint©rX   úIterator[_T])rX   z	List[str])r6   zProperties[_F]rX   zList[Union[_T, _F]])rS   r\   r„   r"   rX   r[   )rS   r\   rX   r"   )rS   r\   rX   r[   )rX   úDict[str, Any])r�   r²   rX   r[   )rS   r\   rX   Úbool)rX   zReadOnlyProperties[_T])rT   rh   rX   r[   )rS   r\   rX   zOptional[_T])rS   r\   r¢   úUnion[_DT, _T]rX   r´   r<   )rS   r\   r¢   zOptional[Union[_DT, _T]]rX   zOptional[Union[_T, _DT]])rX   úList[_T])rX   zList[Tuple[str, _T]]©rX   r[   )r]   r^   r_   r`   Ú	__slots__Ú__annotations__ro   rs   rx   r   r�   rQ   rˆ   rŠ   rm   rŽ   r‘   r•   r—   r›   r�   r   rŸ   r|   rw   r©   r«   r­   Ú__classcell__)r~   s   @r8   re   re   ›   s·   ø… ÙBà€IàÓó0óó/õBó(óóóóó%ó:ó&ó!ó.ó
!ð Ú0ó Ø0àÚKó ØKð =AðØðØ!9ðà	!óó ó)ó(ó!÷r:   re   c                  ó   — e Zd ZdZdZd„ Zy)ÚOrderedPropertieszUProvide a __getattr__/__setattr__ interface with an OrderedDict
    as backing store.ra   c                ó@   — t         j                  | t        «       «       y r<   )re   ro   ÚOrderedDictrJ   s    r8   ro   zOrderedProperties.__init__ø   s   € Ü×Ñ˜D¤+£-Õ0r:   N)r]   r^   r_   r`   r·   ro   ra   r:   r8   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.ra   N)r]   r^   r_   r`   r·   ra   r:   r8   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­   r�   )r?   rS   r}   r©   s       r8   Ú_ordered_dictionary_sortrÁ     s?   € ô !' q¨cÔ 2Ö3˜1ˆa��1‘ŠYÐ3€EÐ3à‡G�G„Ià‡H�HˆU…Oùò	 4s   �Ac                  ó.   — e Zd Zd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<   )Ú_storageÚremove)ÚitemÚselfrefrK   s      r8   Ú_removez&WeakSequence.__init__.<locals>._remove  s&   € Ù“9ˆDØÐØ—‘×$Ñ$ TÕ*ð  r:   )ÚweakrefÚrefrÊ   rÆ   )rK   Ú_WeakSequence__elementsrÊ   r7   s       r8   ro   zWeakSequence.__init__  sE   € ô #*§+¡+¨dÓ"3ó 	+ð
 ˆŒà9Cö
Ø.5ŒG�K‰K˜ Õ)ò
ˆ�ùò 
s   ¤A
c                óv   — | j                   j                  t        j                  || j                  «      «       y r<   )rÆ   r/   rË   rÌ   rÊ   )rK   rÈ   s     r8   r/   zWeakSequence.append  s#   € Ø�‰×ÑœWŸ[™[¨¨t¯|©|Ó<Õ=r:   c                ó,   — t        | j                  «      S r<   )rr   rÆ   rJ   s    r8   rs   zWeakSequence.__len__!  s   € Ü�4—=‘=Ó!Ð!r:   c                ó6   — d„ d„ | j                   D «       D «       S )Nc              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wr<   ra   )Ú.0r„   s     r8   ú	<genexpr>z(WeakSequence.__iter__.<locals>.<genexpr>%  s   è ø€ ò 
Ø¸s¹ŒCñ
ùs   ‚Šc              3  ó*   K  — | ]  } |«       –— Œ y ­wr<   ra   )rÒ   rÌ   s     r8   rÓ   z(WeakSequence.__iter__.<locals>.<genexpr>&  s   è ø€ Ò; c™CŸEÑ;ùs   ‚©rÆ   rJ   s    r8   rx   zWeakSequence.__iter__$  s   € ñ
Ù;¨T¯]©]Ô;ô
ð 	
r:   c                ó*   —  | j                   |   «       S r<   rÕ   )rK   Úindexs     r8   rˆ   zWeakSequence.__getitem__)  s   € Ø#ˆt�}‰}˜UÑ#Ó%Ð%r:   N)ra   )rÍ   zSequence[_T])r]   r^   r_   ro   r/   rs   rx   rˆ   ra   r:   r8   rÃ   rÃ     s   „ ô
ò>ò"ò
ó
&r:   rÃ   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚPopulateDictz•A dict which populates missing values via a creation function.

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

    c                ó   — || _         y r<   ©Úcreator)rK   rÜ   s     r8   ro   zPopulateDict.__init__8  s	   € Øˆ�r:   c                ó2   — | j                  |«      x| |<   }|S r<   rÛ   ©rK   rS   Úvals      r8   Ú__missing__zPopulateDict.__missing__;  s   € ØŸ,™, sÓ+Ð+ˆˆS‰	�CØˆ
r:   N)rÜ   zCallable[[_KT], _VT]©rS   r   rX   r   ©r]   r^   r_   r`   ro   rà   ra   r:   r8   rÙ   rÙ   0  s   „ ñóôr:   rÙ   c                  ó    — e Zd ZdZdd„Zd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__rÜ   Ú__self__rË   rÌ   Úweakself)rK   Úcreator_methodrè   s      r8   ro   zWeakPopulateDict.__init__F  s*   € Ø%×.Ñ.ˆŒØ!×*Ñ*ˆÜŸ™ HÓ-ˆ�r:   c                óP   — | j                  | j                  «       |«      x| |<   }|S r<   )rÜ   rè   rÞ   s      r8   rà   zWeakPopulateDict.__missing__K  s&   € ØŸ,™, t§}¡}£¸Ó<Ð<ˆˆS‰	�CØˆ
r:   N)ré   ztypes.MethodTyperá   râ   ra   r:   r8   rä   rä   @  s   „ ñó
.ô
r:   rä   c                  óV   — e Zd ZU dZdZded<   ded<   ded<   	 d	 	 	 dd
„Zdd„Zdd„Zy	)ÚUniqueAppenderz½Appends items to a collection ensuring uniqueness.

    Additional appends() of the same object are ignored.  Membership is
    determined by identity (``is a``) not equality (``==``).
    )rn   Ú_data_appenderÚ_uniqueú&Union[Iterable[_T], Set[_T], List[_T]]rn   zCallable[[_T], None]rí   zDict[int, Literal[True]]rî   Nc                óè   — || _         i | _        |rt        ||«      | _        y t	        |d«      rt        d|«      j                  | _        y t	        |d«      rt        d|«      j                  | _        y y )Nr/   rµ   ÚaddzSet[_T])rn   rî   Úgetattrrí   Úhasattrr   r/   rñ   )rK   rn   Úvias      r8   ro   zUniqueAppender.__init__f  sg   € ð
 ˆŒ	ØˆŒÙÜ")¨$°Ó"4ˆDÕÜ�T˜8Ô$Ü"& z°4Ó"8×"?Ñ"?ˆDÕÜ�T˜5Ô!Ü"& y°$Ó"7×";Ñ";ˆDÕð "r:   c                óx   — t        |«      }|| j                  vr!| j                  |«       d| j                  |<   y y )NT)Úidrî   rí   )rK   rÈ   Úid_s      r8   r/   zUniqueAppender.appendt  s8   € Ü�‹hˆØ�d—l‘lÑ"Ø×Ñ Ô%Ø $ˆD�L‰L˜Òð #r:   c                ó,   — t        | j                  «      S r<   )r-   rn   rJ   s    r8   rx   zUniqueAppender.__iter__z  s   € Ü�D—I‘I‹Ðr:   r<   )rn   rï   rô   zOptional[str])rÈ   r"   rX   r[   r°   )	r]   r^   r_   r`   r·   r¸   ro   r/   rx   ra   r:   r8   rì   rì   Y  sF   … ñð 4€Ià
0Ó0Ø(Ó(Ø%Ó%ð
 "ð<à4ð<ð ó<ó%ôr:   rì   c                óŒ   — t        | «      dk(  r+t        | d   t        j                  «      rt	        | d   «      S t        d| «      S )Nr   r   ú	List[Any])rr   r>   ÚtypesÚGeneratorTyperv   r   )Úargs    r8   Úcoerce_generator_argrþ   ~  s;   € Ü
ˆ3ƒx�1‚}œ C¨¡F¬E×,?Ñ,?Ô@Ü�C˜‘F‹|Ðä�K Ó%Ð%r:   c                ó`   — | €|S t        | «      s| gS t        | t        «      r| S t        | «      S r<   )r!   r>   rv   )Úxr¢   s     r8   Úto_listr  …  s3   € Ø€yØˆÜ! !Ô$Øˆsˆ
Ü	�A”tÔ	Øˆä�A‹wˆr:   c                ó,   ‡ — t        ˆ fd„|D «       «      S )z²return True if any items of set\_ are present in iterable.

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

    c              3  ó@   •K  — | ]  }|j                   sŒ|‰v –— Œ y ­wr<   )Ú__hash__)rÒ   ÚiÚset_s     €r8   rÓ   z#has_intersection.<locals>.<genexpr>—  s   øè ø€ Ò9˜Q¨a¯j«jˆq�DŒyÑ9ùs   ƒ•	)Úany)r  Úiterables   ` r8   Úhas_intersectionr	  �  s   ø€ ô Ó9 (Ô9Ó9Ð9r:   c                óf   — | €
t        «       S t        | t         «      st        t        | «      «      S | S r<   )r+   r>   r  ©r   s    r8   Úto_setr  š  s+   € Ø€yÜ‹uˆÜ�aœÔÜ”7˜1“:‹Ðàˆr:   c                óf   — | €
t        «       S t        | t         «      st        t        | «      «      S | S r<   )Ú
column_setr>   r  r  s    r8   Ú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.ra   )rL   r�   )r?   Ú_newÚkws      r8   Úupdate_copyr  ¬  s1   € ð
 	
�‰‹€AÙØ	�‰�ŒØ€A‡H�H�Nˆr‚NØ€Hr:   c              #  ó†   K  — | D ]6  }t        |t        «      s t        |d«      rt        |«      E d{  –—†  Œ3|–— Œ8 y7 Œ­w)z�Given an iterator of which further sub-elements may also be
    iterators, flatten the sub-elements into a single iterator.

    rx   N)r>   r\   ró   Úflatten_iterator)r   Úelems     r8   r  r  ¸  s@   è ø€ ð ò ˆÜ˜$¤Ô$¬°°zÔ)BÜ'¨Ó-×-Ñ-à‹Jñ	à-ús   ‚0A²?³Ac                  óØ   — e Zd ZU dZdZded<   ded<   ded<   	 	 	 d	 	 	 	 	 dd
„Zd„ Zedd„«       Z	edd„«       Z		 d	 	 	 	 	 dd„Z	dd„Z
dd„Zdd„Zd d„Zd!d„Zd"d„Zed#d„«       Zd$d„Zy	)%ÚLRUCachezóDictionary with 'squishy' removal of least
    recently used items.

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

    )ÚcapacityÚ	thresholdÚ
size_alertrg   Ú_counterÚ_mutexr¯   r  Úfloatr  z.Optional[Callable[[LRUCache[_KT, _VT]], None]]r  Nc                ó|   — || _         || _        || _        d| _        t	        j
                  «       | _        i | _        y )Nr   )r  r  r  r  Ú	threadingÚLockr  rg   )rK   r  r  r  s       r8   ro   zLRUCache.__init__Ü  s5   € ð !ˆŒØ"ˆŒØ$ˆŒØˆŒÜ—n‘nÓ&ˆŒØ<>ˆ�
r:   c                óD   — | xj                   dz  c_         | j                   S ©Nr   )r  rJ   s    r8   Ú_inc_counterzLRUCache._inc_counteré  s   € Ø�Š˜Ñ�Ø�}‰}Ðr:   c                 ó   — y r<   ra   r‡   s     r8   rŸ   zLRUCache.getí  s   € Ø.1r:   c                 ó   — y r<   ra   r¡   s      r8   rŸ   zLRUCache.getð  r£   r:   c                óv   — | j                   j                  |«      }|�| j                  «       |d   d<   |d   S |S ©Né   r   r   )rg   rŸ   r$  )rK   rS   r¢   rÈ   s       r8   rŸ   zLRUCache.getó  s@   € ð �z‰z�~‰~˜cÓ"ˆØÐØ×*Ñ*Ó,ˆD�‰G�A‰JØ˜‘7ˆNàˆNr:   c                óV   — | j                   |   }| j                  «       |d   d<   |d   S r(  )rg   r$  )rK   rS   rÈ   s      r8   rˆ   zLRUCache.__getitem__ý  s.   € Ø�z‰z˜#‰ˆØ×&Ñ&Ó(ˆˆQ‰�‰
Ø�A‰wˆr:   c                ó,   — t        | j                  «      S r<   )r-   rg   rJ   s    r8   rx   zLRUCache.__iter__  r¦   r:   c                ó,   — t        | j                  «      S r<   rq   rJ   s    r8   rs   zLRUCache.__len__  rt   r:   c           	     ó–   — t        j                  | j                  j                  «       D ��ci c]  \  }}||d   “Œ c}}«      S c c}}w r#  )Útypingr   rg   r©   )rK   r}   r  s      r8   rw   zLRUCache.values  s:   € Ü× Ñ °d·j±j×6FÑ6FÓ6H×!I©d¨a° ! Q q¡T¡'Ó!IÓJÐJùÓ!Is   ­A
c                óf   — ||| j                  «       gf| j                  |<   | j                  «        y r<   )r$  rg   Ú_manage_sizerR   s      r8   rQ   zLRUCache.__setitem__  s.   € Ø ¨×(9Ñ(9Ó(;Ð'<Ð=ˆ�
‰
�3‰Ø×ÑÕr:   c                ó   — | j                   |= y r<   rf   )rK   Ú_LRUCache__vs     r8   rŠ   zLRUCache.__delitem__  r‹   r:   c                óN   — | j                   | j                   | j                  z  z   S r<   )r  r  rJ   s    r8   Ú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        | j                  j                  «       t        j                  d«      d¬«      }|| j
                  d  D ]  }	 | j                  |d   = Œ t	        | «      | j
                  | j
                  | j                  z  z   kD  rŒ¦| j                   j                  «        y # t        $ r Y Œow xY w# | j                   j                  «        w xY w)NFr)  T)rS   Úreverser   )r  Úacquirer³   r  rr   r  r  rÀ   rg   rw   ÚoperatorÚ
itemgetterr“   Úrelease)rK   r  Ú
by_counterrÈ   s       r8   r0  z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Ó.Ø ô�
ð
 ' t§}¡} Ð7ò !�Dð!Ø ŸJ™J t¨A¡wÑ/ð!ô �d“)˜dŸm™m¨d¯m©m¸d¿n¹nÑ.LÑLÓLð  �K‰K×ÑÕ!øô	 $ò !á ð!ûð �K‰K×ÑÕ!ús0   žB'D5 ÃD&Ã4D5 Ä&	D2Ä/D5 Ä1D2Ä2D5 Ä5E)éd   g      à?N)r  r¯   r  r  r  zOptional[Callable[..., None]])rS   r$   rX   zOptional[_VT])rS   r$   r¢   úUnion[_VT, _T]rX   r=  r<   )rS   r$   r¢   úOptional[Union[_VT, _T]]rX   r>  )rS   r$   rX   r%   )rX   zIterator[_KT]r®   )rX   zValuesView[_VT]rZ   )r2  r$   rX   r[   )rX   r  r¶   )r]   r^   r_   r`   r·   r¸   ro   r$  r   rŸ   rˆ   rx   rs   rw   rQ   rŠ   Úpropertyr4  r0  ra   r:   r8   r  r  Å  sË   … ñð€Ið ƒMØÓØ>Ó>ð ØØ48ð	?àð?ð ð?ð 2ó	?òð Ú1ó Ø1àÚKó ØKð =AðØðØ!9ðà	!óóó
 óóKóóð ò>ó ð>ô"r:   r  c                  ó   — e Zd Zdd„Zy)Ú_CreateFuncTypec                 ó   — y r<   ra   rJ   s    r8   Ú__call__z_CreateFuncType.__call__/  ó   � r:   N)rX   r&   ©r]   r^   r_   rC  ra   r:   r8   rA  rA  .  s   „ Ü$r:   rA  c                  ó   — e Zd Zdd„Zy)Ú_ScopeFuncTypec                 ó   — y r<   ra   rJ   s    r8   rC  z_ScopeFuncType.__call__3  rD  r:   NrY   rE  ra   r:   r8   rG  rG  2  s   „ Ü"r:   rG  c                  ód   — e Zd ZU dZdZded<   ded<   ded<   	 	 	 	 dd	„Zdd
„Zdd„Zdd„Z	d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.
    ©Ú
createfuncÚ	scopefuncÚregistryz_CreateFuncType[_T]rL  rG  rM  r   rN  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).

        NrK  )rK   rL  rM  s      r8   ro   zScopedRegistry.__init__K  s   € ð %ˆŒØ"ˆŒØˆ�r:   c                ó´   — | j                  «       }	 | j                  |   S # t        $ r- | j                  j                  || j	                  «       «      cY S w xY wr<   )rM  rN  r“   Ú
setdefaultrL  r‡   s     r8   rC  zScopedRegistry.__call__\  sR   € Ø�n‰nÓˆð	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.)rM  rN  rJ   s    r8   ÚhaszScopedRegistry.hasc  s   € ð �~‰~Ó 4§=¡=Ð0Ð0r:   c                ó>   — || j                   | j                  «       <   y)z$Set the value for the current scope.N)rN  rM  ©rK   r„   s     r8   r+   zScopedRegistry.seth  s   € ð +.ˆ�‰�d—n‘nÓ&Ò'r:   c                óZ   — 	 | j                   | j                  «       = y# t        $ r Y yw xY w)z Clear the current scope, if any.N)rN  rM  r“   rJ   s    r8   r­   zScopedRegistry.clearm  s,   € ð	Ø—‘˜dŸn™nÓ.Ñ/øÜò 	Ùð	ús   ‚ ž	*©*N)rL  úCallable[[], _T]rM  zCallable[[], Any]©rX   r"   ©rX   r³   ©r„   r"   rX   r[   r¶   )r]   r^   r_   r`   r·   r¸   ro   rC  rS  r+   r­   ra   r:   r8   rJ  rJ  6  sI   … ñð 6€Ià#Ó#ØÓØƒMðØ*ðØ7Hóó"Dó1ó
.ô
r:   rJ  c                  ó8   — e Zd ZdZdd„Zd	d„Zd
d„Zdd„Zdd„Zy)ÚThreadLocalRegistryz\A :class:`.ScopedRegistry` that uses a ``threading.local()``
    variable for storage.

    c                óD   — || _         t        j                  «       | _        y r<   )rL  r   ÚlocalrN  )rK   rL  s     r8   ro   zThreadLocalRegistry.__init__|  s   € Ø$ˆŒÜ!Ÿ™Ó)ˆ�r:   c                ó”   — 	 | j                   j                  S # t        $ r& | j                  «       x}| j                   _        |cY S w xY wr<   )rN  rT   r”   rL  )rK   rß   s     r8   rC  zThreadLocalRegistry.__call__€  sC   € ð	Ø—=‘=×&Ñ&Ð&øÜò 	Ø(,¯©Ó(9Ð9ˆC�$—-‘-Ô%ØŠJð	ús   ‚ ˜,AÁAc                ó.   — t        | j                  d«      S )NrT   )ró   rN  rJ   s    r8   rS  zThreadLocalRegistry.has‡  s   € Ü�t—}‘} gÓ.Ð.r:   c                ó&   — || j                   _        y r<   )rN  rT   rU  s     r8   r+   zThreadLocalRegistry.setŠ  s   € Ø!ˆ�‰Õr:   c                ó<   — 	 | j                   `y # t        $ r Y y w xY wr<   )rN  rT   r”   rJ   s    r8   r­   zThreadLocalRegistry.clear�  s#   € ð	Ø—‘Ñ#øÜò 	Ùð	ús   ‚ �	šN)rL  rW  rX  rY  rZ  r¶   )	r]   r^   r_   r`   ro   rC  rS  r+   r­   ra   r:   r8   r\  r\  v  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   TFra   )ÚsequenceÚtargetÚcrÈ   s       r8   Ú	has_dupesrg  ”  s7   € ð 	
€AØò ˆØ�6Š>Ø�‰FˆAØ�1‹uÙð	ð
 r:   )r1   rú   r2   rú   rX   rú   )r?   zMapping[_KT, _VT]rX   zimmutabledict[_KT, _VT]r<   )rý   r   rX   rú   )r   r   r¢   zOptional[List[Any]]rX   rú   )r  zContainer[Any]r  zIterable[Any]rX   r³   )r   r   rX   zSet[Any])r?   úDict[Any, Any]r  zOptional[Dict[Any, Any]]r  r   rX   rh  )r   zIterable[_T]rX   r±   )Sr`   Ú
__future__r   r8  r   rû   r.  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rË   Ú_collections_cyr   r   r   Ú_immutabledict_cyr   r   r    r!   r"   r$   r%   r&   Ú	frozensetr(   r¸   r)   r9   r@   r=   rB   rb   rc   re   r»   rš   rÁ   rN   r½   Úsort_dictionaryrÃ   ÚOrderedIdentitySetrÙ   rä   r+   r  Úcolumn_dictÚordered_column_setrì   rþ   r  r	  r  r  r  r  ÚMutableMappingr  rA  rG  rJ  r\  rg  ra   r:   r8   ú<module>rr     s]  ðò &å "ã Û Û Û Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Û å 7Ý 5Ý 7Ý =Ý EÝ EÝ *áˆ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:   