o
    Šågtþ  ã                   @  sÀ  U d Z ddlmZ ddlZddl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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$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 ƒZ,e"d!d"d#�Z-e"d$ed%ef d&�Z.e"d'd(d&�Z/e"d)d*d&�Z0e"d+d,d&�Z1e"d-d.d&�Z2e'j3�r�dPd3d4„Z4n�dPd5d4„Z4�dQd8d9„Z5G d:d;„ d;ƒZ6�dRd?d@„Z7�dSdBdC„Z8	�dT�dUdGdH„Z9�dVdNdO„Z:�dWdSdT„Z;�dXdYdZ„Z<�dYd`da„Z=e"dbdLd&�Z>�dZdedf„Z?dgdh„ Z@�d[dndo„ZAe"dpƒZBe"dqƒZCG drds„ dsƒZDdtdu„ ZEedd%dvœ�d\d}d~„ƒZFedddvœ�d]d€d~„ƒZFdddvœ�d]d�d~„ZF�d^d„d…„ZG	�d_�d`d‰dŠ„ZH	"�da�dbdŽd�„ZI�dad�d‘„ZJ	’	’	’	’�dc�ddd›dœ„ZKd�dž„ ZLdŸd „ ZM	’		’�de�dfd¦d§„ZNG d¨d©„ d©ƒZOdªd«„ ZPd¬d­„ ZQ			®	�dgd¯d°„ZRd±d²„ ZS�dhd³d´„ZTe"dµd¶d&�ZUG d·d¸„ d¸ee- ƒZVG d¹dº„ dºeVe- ƒZWG d»d¼„ d¼eVe- ƒZXe!�r#eVZYeVZZe[Z\e[Z]neX ZYZ\eW ZZZ]�did½d¾„Z^G d¿dÀ„ dÀƒZ_e!�r>e[Z`ne_jaZ`G dÁdÂ„ dÂƒZb�djdÃdÄ„Zc�dkdÇdÈ„Zd�dldËdÌ„Ze	"	�dm�dndÔdÕ„Zf�dodÖd×„Zg�dpdÙdÚ„Zh�dqdÜdÝ„Zi	�dT�drdádâ„Zj�dsdçdè„Zkdédê„ ZlG dëdì„ dìe[ƒZmG dídî„ dîee, ƒZnG dïdð„ dðee, ƒZoG dñdò„ dòee, ƒZpG dódô„ dôeqƒZrG dõdö„ döesƒZtG d÷dø„ døetdù�Zue!�rÔddúlmvZv evZwneuZwe"dûejxd&�Zy	�dt�du�d �d„Zzda{�dv�d�d„Z|�dw�d�d„Z}�dx�d	�d
„Z~G �d�d„ �deƒZ€�dT�dy�d�d„Z��dz�d�d„Z‚i Zƒ�de„�d< �d{�d�d„Z…e
 †�d¡Z‡		�d|�d}�d�d „Zˆ�d~�d$�d%„Z‰e
 †�d&¡ZŠe
 †�d'¡Z‹e‹eŠf�d�d,�d-„ZŒesdƒZ��d.�d/„ ZŽe
 †�d0¡Z�G �d1�d2„ �d2ƒZ�G �d3�d4„ �d4ƒZ‘�d5�d6„ Z’�d7�d8„ Z“�d€�d:�d;„Z”�d��d<�d=„Z•�d‚�dA�dB„Z–e
 †�dC¡Z—�dƒ�dG�dH„Z˜�d„�dJ�dK„Z™�dt�dL�dM„ZšG �dN�dO„ �dOejxƒZ›e›jœZœe#e,e*e›jœ f Z�dS (…  z…Routines to help with the creation, loading and introspection of
modules, classes, hierarchies, attributes, functions, and methods.

é    )ÚannotationsN©Úupdate_wrapper)ÚCodeType)ÚAny)ÚCallable)Úcast)ÚDict)Ú	FrozenSet)ÚGeneric)ÚIterator)ÚList)ÚMapping)ÚNoReturn)ÚOptional)Úoverload)ÚSequence)ÚSet)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚTypeVar)ÚUnioné   )Ú_collections)Úcompat)ÚHAS_CYEXTENSION)ÚLiteralé   )ÚexcÚ_TÚ_T_coT)Ú	covariantÚ_F.)ÚboundÚ_MPzmemoized_property[Any]Ú_MAz#HasMemoized.memoized_attribute[Any]Ú_HPzhybridproperty[Any]Ú_HMzhybridmethod[Any]Úobjr   ÚreturnúMapping[str, Any]c                 C  s
   t  | ¡S ©N)ÚinspectÚget_annotations©r)   © r0   úW/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.pyr.   A   ó   
r.   c                 C  s>   t | tƒr| j dd ¡}nt| dd ƒ}|d u rtjS td|ƒS )NÚ__annotations__r+   )Ú
isinstanceÚtypeÚ__dict__ÚgetÚgetattrr   Ú
EMPTY_DICTr   )r)   Úannr0   r0   r1   r.   F   s   

ÚxÚstrc                 C  s*   |   d¡} t ¡ }| | ¡ tt| ¡ ƒS )Nzutf-8)Úencoder   Úmd5_not_for_securityÚupdater   r<   Ú	hexdigest)r;   Úmr0   r0   r1   Úmd5_hexW   s   

rB   c                   @  s2   e Zd ZU dZdZded< ddd„Zddd„ZdS )Úsafe_reraisea  Reraise an exception after invoking some
    handler code.

    Stores the existing exception info before
    invoking so that it is maintained across a potential
    coroutine context switch.

    e.g.::

        try:
            sess.commit()
        except:
            with safe_reraise():
                sess.rollback()

    TODO: we should at some point evaluate current behaviors in this regard
    based on current greenlet, gevent/eventlet implementations in Python 3, and
    also see the degree to which our own asyncio (based on greenlet also) is
    impacted by this. .rollback() will cause IO / context switch to occur in
    all these scenarios; what happens to the exception context from an
    "except:" block if we don't explicitly store it? Original issue was #2703.

    )Ú	_exc_infozdUnion[None, Tuple[Type[BaseException], BaseException, types.TracebackType], Tuple[None, None, None]]rD   r*   ÚNonec                 C  s   t  ¡ | _d S r,   )ÚsysÚexc_inforD   ©Úselfr0   r0   r1   Ú	__enter__ƒ   ó   zsafe_reraise.__enter__Útype_úOptional[Type[BaseException]]ÚvalueúOptional[BaseException]Ú	tracebackúOptional[types.TracebackType]r   c                 C  sZ   | j d usJ ‚|d u r| j \}}}|d usJ ‚d | _ | |¡‚d | _ |d us(J ‚| |¡‚r,   )rD   Úwith_traceback)rI   rL   rN   rP   Úexc_typeÚ	exc_valueÚexc_tbr0   r0   r1   Ú__exit__†   s   

zsafe_reraise.__exit__N©r*   rE   )rL   rM   rN   rO   rP   rQ   r*   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r3   rJ   rV   r0   r0   r0   r1   rC   ^   s   
 

rC   ÚclsúType[_T]úIterator[Type[_T]]c                 c  sN   � t ƒ }| g}|r%| ¡ } | |v rq| | ¡ | |  ¡ ¡ | V  |s	d S d S r,   )ÚsetÚpopÚaddÚextendÚ__subclasses__)r]   ÚseenÚstackr0   r0   r1   Úwalk_subclasses™   s   €
ùrg   Úelementc                 C  s4   t | tƒr| S zt| ƒW S  ty   d|   Y S w )Nzunprintable element %r)r4   r<   Ú	Exception)rh   r0   r0   r1   Ústring_or_unprintable§   s   

ÿrj   ú	Type[Any]Úuse_nameúOptional[str]c                 C  s&   |p| j }d dd„ t d|¡D ƒ¡S )Nú c                 s  s   � | ]}|  ¡ V  qd S r,   )Úlower)Ú.0Únr0   r0   r1   Ú	<genexpr>µ   ó   € z(clsname_as_plain_name.<locals>.<genexpr>z([A-Z][a-z]+|SQL))rX   ÚjoinÚreÚfindall)r]   rl   Únamer0   r0   r1   Úclsname_as_plain_name±   s   
rx   Úinstance_or_clsúUnion[Type[Any], object]Úagainst_methodúCallable[..., Any]Úboolc                 C  s.   t | tƒs	| j}n| }|j}t||ƒ}||kS )z1Return True if the two class methods don't match.)r4   r5   Ú	__class__rX   r8   )ry   r{   Úcurrent_clsÚmethod_nameÚcurrent_methodr0   r0   r1   Úmethod_is_overridden¸   s   

r‚   ÚslcÚsliceúTuple[Any, ...]c                 C  s>   g }| j | j| jfD ]}t|dƒr| ¡ }| |¡ q
t|ƒS )zrdecode a slice object as sent to __getitem__.

    takes into account the 2.5 __index__() method, basically.

    Ú	__index__)ÚstartÚstopÚstepÚhasattrr†   ÚappendÚtuple)rƒ   Úretr;   r0   r0   r1   Údecode_sliceÊ   s   
rŽ   ÚusedúSequence[str]ÚbasesúIterator[str]c                 '  sj   � t | ƒ}|D ]+‰ t ˆ ft‡ fdd„tdƒƒ¡}|D ]}||vr+| |¡ |V   nqtdˆ  ƒ‚qd S )Nc                   s   ˆ t | ƒ S r,   ©r<   )Úi©Úbaser0   r1   Ú<lambda>Ý   ó    z!_unique_symbols.<locals>.<lambda>iè  z&exhausted namespace for symbol base %s)r`   Ú	itertoolsÚchainÚmapÚrangerb   Ú	NameError)r�   r‘   Úused_setÚpoolÚsymr0   r•   r1   Ú_unique_symbolsØ   s    €þ
ýþ÷r¡   ÚfnúCallable[[int], Any]rq   ÚintúIterator[Any]c                 c  s2   � |r|| d @ }| |ƒV  ||N }|sdS dS )z6Call the given function given each nonzero bit from n.r   Nr0   )r¢   rq   Úbr0   r0   r1   Úmap_bitsè   s   €
ýr§   Ú_FnÚtargetúCallable[[_Fn], _Fn]c                   s   d‡ fdd„}t |ˆ ƒS )z'A signature-matching decorator factory.r¢   r¨   r*   c           
        sN  t  | ¡st  | ¡stdƒ‚t | ¡}i }t||ƒ}ttd|d ƒƒtd|dd… ƒ | j	f }t
|ddƒ\}}t||d�}| t|d	d
�¡ | j	|d< t  | ¡rZd|d< d|d< nd|d< d|d< dt|d ƒv rod| }nd| }tj| j }| t|ƒ¡ | |ˆ || d| ji¡ ttjt||| j	ƒƒ}	t| d| ƒj|	_| |	_t|	| ƒS )Nznot a decoratable functionzTuple[str, ...]r   r   é   r©   r¢   )r©   r¢   F©Úgroupedrw   zasync Úprefixzawait Útarget_prefixÚ Ú__zf%(prefix)sdef %(name)s%(grouped_args)s:
    return %(target_prefix)s%(target)s(%(fn)s, %(apply_pos)s)
ze%(prefix)sdef %(name)s%(grouped_args)s:
    return %(target_prefix)s%(target)s(%(fn)s, %(apply_kw)s)
rX   Ú__func__)r-   Ú
isfunctionÚismethodri   r   Úinspect_getfullargspecÚ!_update_argspec_defaults_into_envrŒ   r   rX   r¡   Údictr?   Úformat_argspec_plusÚiscoroutinefunctionÚreprrF   ÚmodulesrY   ÚvarsÚtypesÚFunctionTypeÚ_exec_code_in_envr8   Ú__defaults__Ú__wrapped__r   )
r¢   ÚspecÚenvÚnamesÚ	targ_nameÚfn_nameÚmetadataÚcodeÚmodÚ	decorated©r©   r0   r1   Údecorateù   sN   

ÿþÿ



üÿ	üÿþ
zdecorator.<locals>.decorateN)r¢   r¨   r*   r¨   r   )r©   rÌ   r0   rË   r1   Ú	decoratorö   s   
ArÍ   c                 C  sx   | j r:g }d}| j D ] }t|ƒjdvr%d| }|||< | |¡ |d7 }q
| |¡ q
t| ƒ}t|ƒ|d< tj|Ž S | S )zCgiven a FullArgSpec, convert defaults to be symbol names in an env.r   )ÚbuiltinsÚ__builtin__zx%dr   r«   )Údefaultsr5   rY   r‹   ÚlistrŒ   r   ÚFullArgSpec)rÂ   rÃ   Únew_defaultsr”   Úargrw   Úelemr0   r0   r1   r¶   =  s   



r¶   rÈ   úUnion[str, types.CodeType]rÃ   úDict[str, Any]rÆ   c                 C  s   t | |ƒ || S r,   )Úexec)rÈ   rÃ   rÆ   r0   r0   r1   r¿   R  s   
r¿   Ú_PFÚ_TEc                   @  s6   e Zd Z	dddd„Zdd	„ Zddd„Zddd„ZdS )ÚPluginLoaderNÚgroupr<   Úauto_fnúOptional[Callable[..., Any]]c                 C  s   || _ i | _|| _d S r,   )rÜ   ÚimplsrÝ   )rI   rÜ   rÝ   r0   r0   r1   Ú__init__^  s   
zPluginLoader.__init__c                 C  s   | j  ¡  d S r,   )rß   ÚclearrH   r0   r0   r1   rá   e  rK   zPluginLoader.clearrw   r*   r   c                 C  s‚   || j v r| j | ƒ S | jr|  |¡}|r|| j |< |ƒ S t | j¡D ]}|j|kr6|j| j |< | ¡   S q#t d| j|f ¡‚)NzCan't load plugin: %s:%s)	rß   rÝ   r   Úimportlib_metadata_getrÜ   rw   Úloadr   ÚNoSuchModuleError)rI   rw   ÚloaderÚimplr0   r0   r1   rã   h  s   



þÿzPluginLoader.loadÚ
modulepathÚobjnamerE   c                   s   ‡ ‡fdd„}|| j |< d S )Nc                    s4   t ˆ ƒ} ˆ  d¡dd … D ]}t| |ƒ} qt| ˆƒS )NÚ.r   )Ú
__import__Úsplitr8   )rÉ   Útoken©rç   rè   r0   r1   rã   |  s   
z#PluginLoader.register.<locals>.load)rß   )rI   rw   rç   rè   rã   r0   rí   r1   Úregister{  s   zPluginLoader.registerr,   )rÜ   r<   rÝ   rÞ   )rw   r<   r*   r   )rw   r<   rç   r<   rè   r<   r*   rE   )rX   rY   rZ   rà   rá   rã   rî   r0   r0   r0   r1   rÛ   ]  s    ÿ
rÛ   c                 C  sh   zt j}W n ty   t | ¡}|d t|d ƒf Y S w | j}|j}t|j	d |… ƒt|j
|@ ƒfS )Nr   r   )r-   ÚCO_VARKEYWORDSÚAttributeErrorr   rµ   r}   Ú__code__Úco_argcountrÑ   Úco_varnamesÚco_flags)r¢   Úco_varkeywordsrÂ   ÚcoÚnargsr0   r0   r1   Ú_inspect_func_args…  s   

ú	þrø   )Ú_setÚraiseerrr5   rù   úOptional[Set[str]]rú   úLiteral[True]úSet[str]c                C  ó   d S r,   r0   ©r]   rù   rú   r0   r0   r1   Úget_cls_kwargs™  s   r   Fc                C  rþ   r,   r0   rÿ   r0   r0   r1   r   ¢  s   c          	      C  sÀ   |du }|r	t ƒ }|dusJ ‚| j dd¡}|o$t|tjƒo$t|jtjƒ}|rCt|ƒ\}}| 	|¡ |sB|sB|r@t
d| › d�ƒ‚dS nd}|rI|rY| jD ]}t||d�du rX nqL| d¡ |S )ae  Return the full set of inherited kwargs for the given `cls`.

    Probes a class's __init__ method, collecting all named arguments.  If the
    __init__ defines a \**kwargs catch-all, then the constructor is presumed
    to pass along unrecognized keywords to its base classes, and the
    collection process is repeated recursively on each of the bases.

    Uses a subset of inspect.getfullargspec() to cut down on method overhead,
    as this is used within the Core typing system to create copies of type
    objects which is a performance-sensitive operation.

    No anonymous tuple arguments please !

    Nrà   Fz
given cls z  doesn't have an __init__ method)rù   rI   )r`   r6   r7   r4   r½   r¾   rñ   r   rø   r?   Ú	TypeErrorÚ	__bases__r   Údiscard)	r]   rù   rú   ÚtoplevelÚctrÚhas_initrÄ   Úhas_kwÚcr0   r0   r1   r   ¨  s8   
ÿý

ÿ€
ÿ
Úfuncú	List[str]c                 C  s   t  | ¡d S )zƒReturn the set of legal kwargs for the given `func`.

    Uses getargspec so is safe to call for methods, functions,
    etc.

    r   )r   rµ   )r	  r0   r0   r1   Úget_func_kwargsÝ  s   r  Úno_selfÚ_is_initúcompat.FullArgSpecc              	   C  s0  t  | ¡rtd|  ƒ‚t  | ¡r4|r/|r/t | ¡}t |jdd… |j|j	|j
|j|j|j¡S t | ¡S t  | ¡rb|r\|s@| jr\t | j¡}t |jdd… |j|j	|j
|j|j|j¡S t | j¡S t  | ¡rot| j|dd�S t| dƒrzt | j¡S t| dƒr’t  | j¡rŒt| j|d�S td	|  ƒ‚td	|  ƒ‚)
zþReturn the argument signature for any callable.

    All pure-Python callables are accepted, including
    functions, methods, classes, objects with __call__;
    builtins and other edge cases like functools.partial() objects
    raise a TypeError.

    zCan't inspect builtin: %sr   NT)r  r  r²   Ú__call__)r  zCan't inspect callable: %s)r-   Ú	isbuiltinr  r³   r   rµ   rÒ   ÚargsÚvarargsÚvarkwrÐ   Ú
kwonlyargsÚkwonlydefaultsr   r´   Ú__self__r²   ÚisclassÚget_callable_argspecrà   rŠ   r  )r¢   r  r  rÂ   r0   r0   r1   r  è  sN   


ù


ù

ÿ

r  ú-Union[Callable[..., Any], compat.FullArgSpec]r­   úDict[str, Optional[str]]c              	   C  s°  t | ƒr
t | ¡}n| }tj|Ž }t |d |d |d d|d ¡}|d rB|d d }t |d dd… |d |d d|d ¡}n|d rOd|d  }|}nd}|}d}|d rf|tttt |d ƒƒ7 }|d rr|t|d ƒ7 }|d |d  }|r…|d| d… }	nd}	tj||d |d |	d	d
„ d�}
|d r°tj|dd… |d |d |	dd
„ d�}n|
}|r¾t||||
||d�S t|||dd… |
dd… |dd… |dd… d�S )a  Returns a dictionary of formatted, introspected function arguments.

    A enhanced variant of inspect.formatargspec to support code generation.

    fn
       An inspectable callable or tuple of inspect getargspec() results.
    grouped
      Defaults to True; include (parens, around, argument) lists

    Returns:

    args
      Full inspect.formatargspec for fn
    self_arg
      The name of the first positional argument, varargs[0], or None
      if the function defines no positional arguments.
    apply_pos
      args, re-written in calling rather than receiving syntax.  Arguments are
      passed positionally.
    apply_kw
      Like apply_pos, except keyword-ish args are passed as keywords.
    apply_pos_proxied
      Like apply_pos but omits the self/cls argument

    Example::

      >>> format_argspec_plus(lambda self, a, b, c=3, **d: 123)
      {'grouped_args': '(self, a, b, c=3, **d)',
       'self_arg': 'self',
       'apply_kw': '(self, a, b, c=c, **d)',
       'apply_pos': '(self, a, b, c, **d)'}

    r   r   r   Né   z%s[0]r«   r0   c                 S  ó   dt | ƒ S ©Nú=r“   ©r;   r0   r0   r1   r—   s  r˜   z%format_argspec_plus.<locals>.<lambda>)Úformatvaluec                 S  r  r  r“   r  r0   r0   r1   r—   |  r˜   )Úgrouped_argsÚself_argÚ	apply_posÚapply_kwÚapply_pos_proxiedÚapply_kw_proxiedéÿÿÿÿ)	Úcallabler   rµ   Úinspect_formatargspecÚlenr   r   r   r·   )r¢   r­   rÂ   r  r#  r"  r%  Únum_defaultsÚ	name_argsÚdefaulted_valsr$  r&  r0   r0   r1   r¸      sv   $
ÿ"ÿû
ûú	



úr¸   c                 C  sz   | t ju rd}|rdnd}|rdnd}nzt| |d�W S  ty2   d}|r(|nd}|r.dnd	}Y nw td|||||d
�S )a$  format_argspec_plus with considerations for typical __init__ methods

    Wraps format_argspec_plus with error handling strategies for typical
    __init__ cases:

    .. sourcecode:: text

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    z(self)rI   z()r°   r¬   z(self, *args, **kwargs)zself, *args, **kwargsz(*args, **kwargs)z*args, **kwargs)r"  r!  r#  r$  r%  r&  )Úobjectrà   r¸   r  r·   )Úmethodr­   r!  r  Úproxiedr0   r0   r1   Úformat_argspec_init•  s&   
ýúr1  r0   Ú
target_clsÚtarget_cls_sphinx_nameÚproxy_cls_sphinx_nameÚclassmethodsÚmethodsÚ
attributesÚuse_intermediate_variableúCallable[[_T], _T]c                 C  s   dd„ }|S )aS  A class decorator indicating attributes should refer to a proxy
    class.

    This decorator is now a "marker" that does nothing at runtime.  Instead,
    it is consumed by the tools/generate_proxy_methods.py script to
    statically generate proxy methods and attributes that are fully
    recognized by typing tools such as mypy.

    c                 S  s   | S r,   r0   )r]   r0   r0   r1   rÌ   É  ó   z&create_proxy_methods.<locals>.decorater0   )r2  r3  r4  r5  r6  r7  r8  rÌ   r0   r0   r1   Úcreate_proxy_methods¶  s   r;  c                 C  sJ   zt  | ¡W S  ty$   | tju rdgdddf Y S dgdddf Y S w )a  inspect.getargspec with considerations for typical __init__ methods

    Wraps inspect.getargspec with error handling for typical __init__ cases:

    .. sourcecode:: text

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    rI   Nr  Úkwargs)r   rµ   r  r.  rà   )r/  r0   r0   r1   Úgetargspec_initÏ  s   
ür=  c                 C  s   t | tjƒr| js| jS | S )zSAdjust the incoming callable such that a 'self' argument is not
    required.

    )r4   r½   Ú
MethodTyper  r²   )Úfunc_or_clsr0   r0   r1   Úunbound_method_to_callableã  s   r@  Úadditional_kwúSequence[Tuple[str, Any]]Ú
to_inspectú%Optional[Union[object, List[object]]]Ú
omit_kwargc              	     s6  |du rˆg}nt  |¡}tƒ ‰ g }t  ¡ }d}t|ƒD ]p\}}zt |j¡}	W n	 ty1   Y qw |	j	r:t
|	j	ƒnd}
|dkr_|	jrF|	j}|
rT| |	jd|
 … ¡ n| |	jdd… ¡ n| ‡ fdd„|	jd|
 … D ƒ¡ |
rŒ|	j	sxJ ‚| dd„ t|	j|
 d… |	j	ƒD ƒ¡ qg }| ‡fdd„|D ƒ¡ |dur±tˆ|ƒr±| d	d„ tˆ|ƒD ƒ¡ | ¡ D ]+\}}||v r¾qµztˆ|ˆ ƒ}|ˆ urÖ||krÖ| d
||f ¡ W qµ tyà   Y qµw |�r|D ])\}}ztˆ|ˆ ƒ}|ˆ u�r||k�r| d
||f ¡ W qæ t�y   Y qæw dˆjjd |¡f S )z}Produce a __repr__() based on direct association of the __init__()
    specification vs. same-named attributes present.

    Nr   r   c                   s   g | ]}|ˆ f‘qS r0   r0   ©rp   rÔ   )Úmissingr0   r1   Ú
<listcomp>  ó    z generic_repr.<locals>.<listcomp>c                 S  s   g | ]\}}||f‘qS r0   r0   )rp   rÔ   Údefaultr0   r0   r1   rH    s    ÿÿc                 3  s    � | ]}t tˆ |d ƒƒV  qd S r,   )rº   r8   rF  r/   r0   r1   rr   "  s   € zgeneric_repr.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r0   ©rº   )rp   Úvalr0   r0   r1   rH  %  rI  z%s=%rz%s(%s)ú, )r   Úto_listr.  ÚOrderedDictÚ	enumerater   rµ   rà   r  rÐ   r*  r  rc   r  r?   ÚziprŠ   r8   Úitemsr‹   ri   r~   rX   rt   )r)   rA  rC  rE  Úpos_argsÚkw_argsÚvargsr”   ÚinsprÂ   Údefault_lenÚoutputrÔ   ÚdefvalrL  r0   )rG  r)   r1   Úgeneric_reprï  sv   

ÿÿ
ÿþÿ€€ÿ€ÿrZ  c                   @  s6   e Zd ZdZdZdd„ Zdd„ Zddd	„Zd
d„ ZdS )Úportable_instancemethodz_Turn an instancemethod into a (parent, name) pair
    to produce a serializable callable.

    )r©   rw   r<  Ú__weakref__c                 C  s   | j | j| jdœS )N©r©   rw   r<  r]  rH   r0   r0   r1   Ú__getstate__E  s   ýz$portable_instancemethod.__getstate__c                 C  s&   |d | _ |d | _| dd¡| _d S )Nr©   rw   r<  r0   )r©   rw   r7   r<  )rI   Ústater0   r0   r1   Ú__setstate__L  s   

z$portable_instancemethod.__setstate__r0   c                 C  s   |j | _|j| _|| _d S r,   )r  r©   rX   rw   r<  )rI   Úmethr<  r0   r0   r1   rà   Q  s   
z portable_instancemethod.__init__c                 O  s$   |  | j¡ t| j| jƒ|i |¤ŽS r,   )r?   r<  r8   r©   rw   )rI   rÔ   Úkwr0   r0   r1   r  V  s   z portable_instancemethod.__call__N)r0   )	rX   rY   rZ   r[   r\   r^  r`  rà   r  r0   r0   r0   r1   r[  =  s    
r[  c                   s´   | h‰ t | jƒ}|rV| ¡ }‡ fdd„|jD ƒ}|D ]}| |¡ ˆ  |¡ q|jdks1t|dƒs2q‡ fdd„t|t	ƒs@| 
¡ n| 
|¡D ƒD ]}| |¡ ˆ  |¡ qG|s
t ˆ ƒS )a'  Return an unordered sequence of all classes related to cls.

    Traverses diamond hierarchies.

    Fibs slightly: subclasses of builtin types are not returned.  Thus
    class_hierarchy(class A(object)) returns (A, object), not A plus every
    class systemwide that derives from object.

    c                 3  s   � | ]	}|ˆ vr|V  qd S r,   r0   ©rp   Ú_©Úhierr0   r1   rr   j  ó   € z"class_hierarchy.<locals>.<genexpr>rÎ   rd   c                   s   g | ]}|ˆ vr|‘qS r0   r0   rc  re  r0   r1   rH  s  s
    úz#class_hierarchy.<locals>.<listcomp>)rÑ   Ú__mro__ra   r  r‹   rb   rY   rŠ   Ú
issubclassr5   rd   )r]   Úprocessr  r‘   r¦   Úsr0   re  r1   Úclass_hierarchy[  s&   



ÿ
û
	ërl  c                 c  sB   � t | ƒ}|D ]}| jD ]}||jv r||j| fV   nqqdS )zÍiterate all the keys and attributes associated
    with a class, without using getattr().

    Does not use getattr() so that class-sensitive
    descriptors (i.e. property.__get__()) are not called.

    N)Údirrh  r6   )r]   ÚkeysÚkeyr  r0   r0   r1   Úiterate_attributes�  s   €

þ€þrp  ú
self.proxyc              	     s.  |r|}nˆdu rd‰‡ ‡fdd„t |ƒD ƒ}|D ]{}zt||ƒ}t|dƒs(W qt|d|ƒ}ttj|ƒ}	W n	 ty>   Y qw zt |	¡}
t 	|
d ¡}t 	|
d dd… ¡}W n t
ye   d	}d
}Y nw dtƒ  }|durs||ipti }t||ƒ z|	j|| _W n	 ty‹   Y nw tˆ ||| ƒ qdS )z9Automates delegation of __specials__ for a proxying type.N)r\   Ú__del__Ú__getattribute__Ú__metaclass__r^  r`  c                   s6   g | ]}|  d ¡r| d ¡rtˆ |ƒs|ˆvr|‘qS )r±   )Ú
startswithÚendswithrŠ   ©rp   rA   ©Úinto_clsÚskipr0   r1   rH  §  s    üûúúz0monkeypatch_proxied_specials.<locals>.<listcomp>r  r²   r   r   z(self, *args, **kw)z(*args, **kw)z?def %(method)s%(fn_args)s: return %(name)s.%(method)s%(d_args)s)rm  r8   rŠ   r   r½   r¾   rð   r   rµ   r)  r  ÚlocalsrØ   rÀ   Úsetattr)ry  Úfrom_clsrz  Úonlyrw   Úfrom_instanceÚdundersr/  Úmaybe_fnr¢   rÂ   Úfn_argsÚd_argsÚpyrÃ   r0   rx  r1   Úmonkeypatch_proxied_specials‘  sN   
þ

ÿ
þÿÿÿ
ÿár…  c                 C  s   t | d| ƒt |d|ƒu S )z;Return True if the two methods are the same implementation.r²   )r8   )Úmeth1Úmeth2r0   r0   r1   Úmethods_equivalentÔ  s   ÿrˆ  c                 C  sf  |s|st dƒ‚t|tƒrt| |ƒr| S t|pdd„ t|ƒD ƒƒ}tt| ƒƒ}tj}t|tƒr2|}n|s;tƒ }tj}nt|ƒ}|| |¡|ƒrI| S t| t	ƒsc|tju rUdpVd}t d| |d 
|¡f ƒ‚G dd	„ d	ƒ}|rrd
|j |_tƒ }	t| ƒD ]'\}
}|
|vr‡t d|
 ƒ‚t|ƒs“t d|
|f ƒ‚t||
t|ƒƒ |	 |
¡ qy||	|ƒr¨|S t dd 
||	 ¡ ƒ‚)aŽ  Ensure basic interface compliance for an instance or dict of callables.

    Checks that ``obj`` implements public methods of ``cls`` or has members
    listed in ``methods``. If ``required`` is not supplied, implementing at
    least one interface method is sufficient. Methods present on ``obj`` that
    are not in the interface are ignored.

    If ``obj`` is a dict and ``dict`` does not meet the interface
    requirements, the keys of the dictionary are inspected. Keys present in
    ``obj`` that are not in the interface will raise TypeErrors.

    Raises TypeError if ``obj`` does not meet the interface criteria.

    In all passing cases, an object with callable members is returned.  In the
    simple case, ``obj`` is returned as-is; if dict processing kicks in then
    an anonymous class is returned.

    obj
      A type, instance, or dictionary of callables.
    cls
      Optional, a type.  All public methods of cls are considered the
      interface.  An ``obj`` instance of cls will always pass, ignoring
      ``required``..
    methods
      Optional, a sequence of method names to consider as the interface.
    required
      Optional, a sequence of mandatory implementations. If omitted, an
      ``obj`` that provides at least one interface method is considered
      sufficient.  As a convenience, required may be a type, in which case
      all public methods of the type are required.

    z2a class or collection of method names are requiredc                 S  s   g | ]	}|  d ¡s|‘qS )rd  )ru  rw  r0   r0   r1   rH    s    z as_interface.<locals>.<listcomp>zany ofzall ofz%r does not implement %s: %srM  c                   @  ó   e Zd ZdZdS )z(as_interface.<locals>.AnonymousInterfacezA callable-holding shell.N©rX   rY   rZ   r[   r0   r0   r0   r1   ÚAnonymousInterface  ó    r‹  Ú	Anonymousz%r: unknown in this interfacez%r=%r is not callablez,dictionary does not contain required keys %s)r  r4   r5   r`   rm  ÚoperatorÚgeÚgtÚintersectionr·   rt   rX   Údictlike_iteritemsr(  r|  Ústaticmethodrb   )r)   r]   r6  ÚrequiredÚ	interfaceÚimplementedÚcompliesÚ	qualifierr‹  Úfoundr/  ræ   r0   r0   r1   Úas_interfaceÜ  sP   !

ÿÿ
ÿÿrš  Ú_GFDzgeneric_fn_descriptor[Any]c                   @  sŒ   e Zd ZU dZded< ded< ded< d%d&d
d„Zed'dd„ƒZed(dd„ƒZd)dd„Zer8d*dd„Z	d+dd„Z
d,d d!„Zed-d#d$„ƒZdS ).Úgeneric_fn_descriptorag  Descriptor which proxies a function when the attribute is not
    present in dict

    This superclass is organized in a particular way with "memoized" and
    "non-memoized" implementation classes that are hidden from type checkers,
    as Mypy seems to not be able to handle seeing multiple kinds of descriptor
    classes used for the same attribute.

    úCallable[..., _T_co]Úfgetrm   r[   r<   rX   NÚdocc                 C  ó   || _ |p|j| _|j| _d S r,   ©rž  r[   rX   ©rI   rž  rŸ  r0   r0   r1   rà   D  ó   zgeneric_fn_descriptor.__init__rI   r›  r)   rE   r]   r   r*   c                 C  rþ   r,   r0   ©rI   r)   r]   r0   r0   r1   Ú__get__I  r:  zgeneric_fn_descriptor.__get__r.  r!   c                 C  rþ   r,   r0   r¤  r0   r0   r1   r¥  L  r:  úUnion[_GFD, _T_co]c                 C  ó   t ƒ ‚r,   ©ÚNotImplementedErrorr¤  r0   r0   r1   r¥  O  ó   ÚinstancerN   c                 C  rþ   r,   r0   ©rI   r«  rN   r0   r0   r1   Ú__set__T  ó    zgeneric_fn_descriptor.__set__c                 C  rþ   r,   r0   )rI   r«  r0   r0   r1   Ú
__delete__V  r®  z generic_fn_descriptor.__delete__c                 C  r§  r,   r¨  ©rI   r)   r0   r0   r1   Ú_resetX  rª  zgeneric_fn_descriptor._resetrw   c                 C  r§  r,   r¨  ©r]   r)   rw   r0   r0   r1   Úreset[  s   zgeneric_fn_descriptor.resetr,   )rž  r�  rŸ  rm   )rI   r›  r)   rE   r]   r   r*   r›  )r)   r.  r]   r   r*   r!   )rI   r›  r)   r   r]   r   r*   r¦  ©r«  r   rN   r   r*   rE   ©r«  r   r*   rE   )r)   r   r*   rE   )r)   r   rw   r<   r*   rE   )rX   rY   rZ   r[   r3   rà   r   r¥  r   r­  r¯  r±  Úclassmethodr³  r0   r0   r0   r1   rœ  5  s"   
 




rœ  c                   @  s    e Zd ZdZesdd„ ZdS dS )Ú_non_memoized_propertyzÉa plain descriptor that proxies a function.

    primary rationale is to provide a plain attribute that's
    compatible with memoized_property which is also recognized as equivalent
    by mypy.

    c                 C  s   |d u r| S |   |¡S r,   ©rž  r¤  r0   r0   r1   r¥  k  s   
z_non_memoized_property.__get__N)rX   rY   rZ   r[   r   r¥  r0   r0   r0   r1   r·  `  s
    þr·  c                   @  s0   e Zd ZdZesdd„ Zdd„ Zedd„ ƒZdS )	Ú_memoized_propertyz2A read-only @property that is only evaluated once.c                 C  s&   |d u r| S |   |¡ |j| j< }|S r,   )rž  r6   rX   ©rI   r)   r]   Úresultr0   r0   r1   r¥  v  s   z_memoized_property.__get__c                 C  s   t  || j¡ d S r,   )r¹  r³  rX   r°  r0   r0   r1   r±  |  s   z_memoized_property._resetc                 C  s   |j  |d ¡ d S r,   )r6   ra   r²  r0   r0   r1   r³    s   z_memoized_property.resetN)	rX   rY   rZ   r[   r   r¥  r±  r¶  r³  r0   r0   r0   r1   r¹  q  s    r¹  c                   s   ‡ fdd„}t |ˆ ƒS )zàDecorate a method memoize its return value.

    Best applied to no-arg methods: memoization is not sensitive to
    argument values, and will always return the same value even when
    called with different arguments.

    c                   sB   ˆ| g|¢R i |¤Ž‰ ‡ fdd„}ˆj |_ ˆj|_|| jˆj < ˆ S )Nc                    ó   ˆ S r,   r0   ©Úarb  ©r»  r0   r1   Úmemo¬  r:  z6memoized_instancemethod.<locals>.oneshot.<locals>.memo)rX   r[   r6   ©rI   r  rb  rÀ  ©r¢   r¿  r1   Úoneshot©  s   z(memoized_instancemethod.<locals>.oneshotr   )r¢   rÃ  r0   rÂ  r1   Úmemoized_instancemethod   s   	
rÄ  c                   @  sh   e Zd ZU dZesdZeƒ Zded< ddd„Z	dd	d
„Z
ddd„ZG dd„ dee ƒZeddd„ƒZdS )ÚHasMemoizedzA mixin class that maintains the names of memoized elements in a
    collection for easy cache clearing, generative, etc.

    r0   zFrozenSet[str]Ú_memoized_keysr*   rE   c                 C  s   | j D ]	}| j |d ¡ qd S r,   )rÆ  r6   ra   ©rI   rÕ   r0   r0   r1   Ú_reset_memoizationsÄ  ó   
ÿzHasMemoized._reset_memoizationsc                 C  s   | j D ]	}|| jvsJ ‚qd S r,   )rÆ  r6   rÇ  r0   r0   r1   Ú_assert_no_memoizationsÈ  rÉ  z#HasMemoized._assert_no_memoizationsro  r<   rN   r   c                 C  s   || j |< |  j|hO  _d S r,   )r6   rÆ  )rI   ro  rN   r0   r0   r1   Ú_set_memoized_attributeÌ  s   
z#HasMemoized._set_memoized_attributec                   @  sZ   e Zd ZU dZded< ded< ded< ddd
d„Zeddd„ƒZeddd„ƒZdd„ ZdS )zHasMemoized.memoized_attributezTA read-only @property that is only evaluated once.

        :meta private:

        úCallable[..., _T]rž  rm   r[   r<   rX   NrŸ  c                 C  r   r,   r¡  r¢  r0   r0   r1   rà   Û  r£  z'HasMemoized.memoized_attribute.__init__rI   r&   r)   rE   r]   r   r*   c                 C  rþ   r,   r0   r¤  r0   r0   r1   r¥  à  r:  z&HasMemoized.memoized_attribute.__get__r    c                 C  rþ   r,   r0   r¤  r0   r0   r1   r¥  ã  r:  c                 C  s8   |d u r| S |   |¡ |j| j< }| j| jhO  _|S r,   )rž  r6   rX   rÆ  rº  r0   r0   r1   r¥  æ  s
   r,   )rž  rÌ  rŸ  rm   )rI   r&   r)   rE   r]   r   r*   r&   )r)   r   r]   r   r*   r    )rX   rY   rZ   r[   r3   rà   r   r¥  r0   r0   r0   r1   Úmemoized_attributeÐ  s   
 rÍ  r¢   r#   c                   s   d	‡ fdd„}t |ˆ ƒS )
zMDecorate a method memoize its return value.

        :meta private:

        rI   r   r  rb  r*   c                   sT   ˆ| g|¢R i |¤Ž‰ ‡ fdd„}ˆj |_ ˆj|_|| jˆj < |  jˆj hO  _ˆ S )Nc                    r¼  r,   r0   r½  r¿  r0   r1   rÀ  ø  r:  zBHasMemoized.memoized_instancemethod.<locals>.oneshot.<locals>.memo)rX   r[   r6   rÆ  rÁ  rÂ  r¿  r1   rÃ  õ  s   z4HasMemoized.memoized_instancemethod.<locals>.oneshotN)rI   r   r  r   rb  r   r*   r   r   )r]   r¢   rÃ  r0   rÂ  r1   rÄ  í  s   
z#HasMemoized.memoized_instancemethodNrW   )ro  r<   rN   r   r*   rE   ©r¢   r#   r*   r#   )rX   rY   rZ   r[   r   r\   Ú	frozensetrÆ  r3   rÈ  rÊ  rË  Úmemoized_propertyr    rÍ  r¶  rÄ  r0   r0   r0   r1   rÅ  ·  s   
 


rÅ  c                   @  s&   e Zd ZdZdZdd„ Zdd	d
„ZdS )ÚMemoizedSlotszÇApply memoized items to an object using a __getattr__ scheme.

    This allows the functionality of memoized_property and
    memoized_instancemethod to be available to a class using __slots__.

    r0   c                 C  s   t |ƒ‚r,   )rð   )rI   ro  r0   r0   r1   Ú_fallback_getattr  ó   zMemoizedSlots._fallback_getattrro  r<   r*   r   c                   s˜   ˆ  d¡s
ˆ  d¡rtˆƒ‚tˆjdˆ› �ƒr(tˆdˆ› �ƒƒ }tˆˆ|ƒ |S tˆjdˆ› �ƒrGtˆdˆ› �ƒ‰ ‡ ‡‡fdd„}ˆ j|_|S ˆ ˆ¡S )NÚ_memoized_attr_Ú_memoized_method_c                    s:   ˆ| i |¤Ž‰ ‡ fdd„}ˆj |_ ˆj|_tˆˆ|ƒ ˆ S )Nc                    r¼  r,   r0   r½  r¿  r0   r1   rÀ  )  r:  z8MemoizedSlots.__getattr__.<locals>.oneshot.<locals>.memo)rX   r[   r|  )r  rb  rÀ  ©r¢   ro  rI   r¿  r1   rÃ  &  s   z*MemoizedSlots.__getattr__.<locals>.oneshot)ru  rð   rŠ   r~   r8   r|  r[   rÒ  )rI   ro  rN   rÃ  r0   rÖ  r1   Ú__getattr__  s   ÿ
zMemoizedSlots.__getattr__N)ro  r<   r*   r   )rX   rY   rZ   r[   r\   rÒ  r×  r0   r0   r0   r1   rÑ  
  s
    rÑ  c                 C  sB   t | tƒr|  ¡  ¡ } | dv rdS | dv rdS td|  ƒ‚t| ƒS )N)ÚtrueÚyesÚonÚyÚtÚ1T)ÚfalseÚnoÚoffrq   ÚfÚ0FzString is not true/false: %r)r4   r<   Ústripro   Ú
ValueErrorr}   r/   r0   r0   r1   Úasbool8  s   
rå  Útextú!Callable[[str], Union[str, bool]]c                    s   d‡ fdd„}|S )	zqReturn a callable that will evaluate a string as
    boolean, or one of a set of "alternate" string values.

    r)   r<   r*   úUnion[str, bool]c                   s   | ˆ v r| S t | ƒS r,   )rå  r/   ©ræ  r0   r1   Úbool_or_valueJ  s   z"bool_or_str.<locals>.bool_or_valueN)r)   r<   r*   rè  r0   )ræ  rê  r0   ré  r1   Úbool_or_strD  s   rë  rN   úOptional[int]c                 C  s   | du r| S t | ƒS )zCoerce to integer.N)r¤   )rN   r0   r0   r1   ÚasintS  s   rí  rb  ro  rL   Ú
flexi_boolÚdestúOptional[Dict[str, Any]]rE   c                 C  sx   |du r| }|| v r6t |tƒrt | | |ƒs:| | dur8|tu r,|r,t| | ƒ||< dS || | ƒ||< dS dS dS dS )zµIf 'key' is present in dict 'kw', coerce its value to type 'type\_' if
    necessary.  If 'flexi_bool' is True, the string '0' is considered false
    when coercing to boolean.
    N)r4   r5   r}   rå  )rb  ro  rL   rî  rï  r0   r0   r1   Úcoerce_kw_type[  s   ÿÿùþrñ  c                   s$   t |ƒ}|ft‡ fdd„|D ƒƒ S )zbProduce a tuple structure that is cacheable using the __dict__ of
    obj to retrieve values

    c                 3  ó(   � | ]}|ˆ j v r|ˆ j | fV  qd S r,   ©r6   ©rp   Úkr/   r0   r1   rr   {  ó   € ÿz"constructor_key.<locals>.<genexpr>)r   rŒ   )r)   r]   rÄ   r0   r/   r1   Úconstructor_keyu  s   
ÿr÷  r  c                   s4   t |ƒ}| ‡ fdd„| |¡D ƒ¡ ||i |¤ŽS )z„Instantiate cls using the __dict__ of obj as constructor arguments.

    Uses inspect to match the named arguments of ``cls``.

    c                 3  rò  r,   ró  rô  r/   r0   r1   rr   ˆ  rö  z#constructor_copy.<locals>.<genexpr>)r   r?   Ú
difference)r)   r]   r  rb  rÄ   r0   r/   r1   Úconstructor_copy€  s
   ÿrù  úCallable[[], int]c                    s$   t  ¡ ‰t d¡‰ ‡ ‡fdd„} | S )z%Return a threadsafe counter function.r   c                     s0   ˆ� t ˆ ƒW  d   ƒ S 1 sw   Y  d S r,   )Únextr0   ©ÚcounterÚlockr0   r1   Ú_next•  s   $ÿzcounter.<locals>._next)Ú	threadingÚLockr™   Úcount)rÿ  r0   rü  r1   rý  Ž  s   
rý  ÚspecimenrJ  úOptional[Type[Any]]c                 C  s”   t | dƒr| jdurt| jtƒrtS | jS t| tƒrtnt}|| tƒr%tS || tƒr,tS || tƒr3tS t | dƒr:tS t | dƒrAtS t | dƒrHtS |S )zÄGiven an instance or class, guess if it is or is acting as one of
    the basic collection types: list, set and dict.  If the __emulates__
    property is present, return that preferentially.
    Ú__emulates__Nr‹   rb   r`   )rŠ   r  ri  r`   r4   r5   rÑ   r·   )r  rJ  Úisar0   r0   r1   Úduck_type_collectionœ  s(   
ÿ





r  rÔ   Úargtypeú'Union[Tuple[Type[Any], ...], Type[Any]]rw   c                 C  sX   t | |ƒr| S t |tƒr t d|d dd„ |D ƒ¡t| ƒf ¡‚t d||t| ƒf ¡‚)Nz8Argument '%s' is expected to be one of type %s, got '%s'z or c                 s  s   � | ]}d | V  qdS )z'%s'Nr0   )rp   r¾  r0   r0   r1   rr   È  rs   z"assert_arg_type.<locals>.<genexpr>z6Argument '%s' is expected to be of type '%s', got '%s')r4   rŒ   r   ÚArgumentErrorrt   r5   )rÔ   r  rw   r0   r0   r1   Úassert_arg_type¿  s   

ÿÿÿÿr  c                   sŒ   t ˆ dƒrtˆ  ¡ ƒS tˆ dtˆ ddƒƒ‰ˆdu rtdˆ  ƒ‚t ˆ dƒr.‡ ‡fdd„}|ƒ S t ˆ d	ƒr@t‡fd
d„ˆ  ¡ D ƒƒS tdˆ  ƒ‚)z?Return a (key, value) iterator for almost any dict-like object.rR  Ú__getitem__r7   NzObject '%r' is not dict-likeÚiterkeysc                  3  s.   � ˆ   ¡ D ]} ˆd usJ ‚| ˆ| ƒfV  qd S r,   )r  )ro  ©ÚdictlikeÚgetterr0   r1   ÚiteratorÝ  s
   €þz$dictlike_iteritems.<locals>.iteratorrn  c                 3  s   � | ]	}|ˆ |ƒfV  qd S r,   r0   )rp   ro  )r  r0   r1   rr   ä  rg  z%dictlike_iteritems.<locals>.<genexpr>)rŠ   rÑ   rR  r8   r  Úiterrn  )r  r  r0   r  r1   r’  Ñ  s   


r’  c                      s8   e Zd ZU dZded< d‡ fdd„Zdddd„Z‡  ZS )ÚclasspropertyaA  A decorator that behaves like @property except that operates
    on classes rather than instances.

    The decorator is currently special when using the declarative
    module, but note that the
    :class:`~.sqlalchemy.ext.declarative.declared_attr`
    decorator should be used for this purpose with declarative.

    úCallable[[Any], Any]rž  rÔ   r   rb  c                   s&   t ƒ j|g|¢R i |¤Ž |j| _d S r,   )Úsuperrà   r[   )rI   rž  rÔ   rb  ©r~   r0   r1   rà   ö  s   zclassproperty.__init__Nr)   r]   úOptional[type]r*   c                 C  s
   |   |¡S r,   r¸  r¤  r0   r0   r1   r¥  ú  r2   zclassproperty.__get__)rž  r  rÔ   r   rb  r   r,   )r)   r   r]   r  r*   r   )rX   rY   rZ   r[   r3   rà   r¥  Ú__classcell__r0   r0   r  r1   r  é  s
   
 
r  c                   @  s*   e Zd Zddd„Zdd
d„Zddd„ZdS )Úhybridpropertyr	  rÌ  c                 C  s   || _ || _d S r,   )r	  Úclslevel©rI   r	  r0   r0   r1   rà   ÿ  s   
zhybridproperty.__init__r«  r   Úownerr*   r    c                 C  ó    |d u r|   |¡}|S |  |¡S r,   ©r  r	  ©rI   r«  r  Úclsvalr0   r0   r1   r¥    ó   

zhybridproperty.__get__r|   úhybridproperty[_T]c                 C  ó
   || _ | S r,   ©r  r  r0   r0   r1   Ú
classlevel
  ó   zhybridproperty.classlevelN©r	  rÌ  ©r«  r   r  r   r*   r    )r	  r|   r*   r"  )rX   rY   rZ   rà   r¥  r%  r0   r0   r0   r1   r  þ  s    

r  c                   @  s>   e Zd Zddd„Zdd
d„Zddd„Zddd„Zddd„ZdS )Úrw_hybridpropertyr	  rÌ  c                 C  s   || _ || _d | _d S r,   )r	  r  Úsetfnr  r0   r0   r1   rà     s   
zrw_hybridproperty.__init__r«  r   r  r*   r    c                 C  r  r,   r  r  r0   r0   r1   r¥    r!  zrw_hybridproperty.__get__rN   rE   c                 C  s   | j d usJ ‚|   ||¡ d S r,   ©r*  r¬  r0   r0   r1   r­    s   zrw_hybridproperty.__set__r|   úrw_hybridproperty[_T]c                 C  r#  r,   r+  r  r0   r0   r1   Úsetter   r&  zrw_hybridproperty.setterc                 C  r#  r,   r$  r  r0   r0   r1   r%  $  r&  zrw_hybridproperty.classlevelNr'  r(  r´  )r	  r|   r*   r,  )rX   rY   rZ   rà   r¥  r­  r-  r%  r0   r0   r0   r1   r)    s    



r)  c                   @  s.   e Zd ZdZddd„Zdd
d„Zddd„ZdS )Úhybridmethodz/Decorate a function as cls- or instance- level.r	  rÌ  c                 C  s   | | _ | _|| _d S r,   )r	  r²   r  r  r0   r0   r1   rà   ,  s   
zhybridmethod.__init__r«  r   r  r*   c                 C  s&   |d u r| j  ||j¡S | j ||¡S r,   )r  r¥  r~   r	  )rI   r«  r  r0   r0   r1   r¥  0  s   zhybridmethod.__get__r|   úhybridmethod[_T]c                 C  r#  r,   r$  r  r0   r0   r1   r%  6  r&  zhybridmethod.classlevelNr'  )r«  r   r  r   r*   rÌ  )r	  r|   r*   r/  )rX   rY   rZ   r[   rà   r¥  r%  r0   r0   r0   r1   r.  )  s
    

r.  c                   @  sV   e Zd ZU dZded< i Zded< e ¡ Z		dddd„Z	dd„ Z
dd„ Zdd„ ZdS )ÚsymbolaI  A constant symbol.

    >>> symbol("foo") is symbol("foo")
    True
    >>> symbol("foo")
    <symbol 'foo>

    A slight refinement of the MAGICCOOKIE=object() pattern.  The primary
    advantage of symbol() is its repr().  They are also singletons.

    Repeated calls of symbol('name') will all return the same instance.

    r<   rw   zDict[str, symbol]ÚsymbolsNrŸ  rm   Ú	canonicalrì  r*   c                 C  s¨   | j �G | j |¡}|d u r1t|tƒsJ ‚|d u rt|ƒ}t t|¡}||_	|r+||_
|| j|< n|rA||krAtd|›d|› �ƒ‚|W  d   ƒ S 1 sMw   Y  d S )Nz#Can't replace canonical symbol for z with new int value )Ú_lockr1  r7   r4   r<   Úhashr¤   Ú__new__r0  rw   r[   r  )r]   rw   rŸ  r2  r    r0   r0   r1   r5  O  s&   ÿÿ$êzsymbol.__new__c                 C  s   t | jdt| ƒffS )Nr;   )r0  rw   r¤   rH   r0   r0   r1   Ú
__reduce__m  s   zsymbol.__reduce__c                 C  s   t | ƒS r,   rK  rH   r0   r0   r1   Ú__str__p  rÓ  zsymbol.__str__c                 C  s   d| j ›d�S )Nzsymbol(ú)©rw   rH   r0   r0   r1   Ú__repr__s  rK   zsymbol.__repr__)NN)rw   r<   rŸ  rm   r2  rì  r*   r0  )rX   rY   rZ   r[   r3   r1  r   r  r3  r5  r6  r7  r:  r0   r0   r0   r1   r0  ;  s   
 ür0  c                   @  s    e Zd Zddd„Zddd„ZdS )Ú_IntFlagMetaÚ	classnamer<   r‘   úTuple[Type[Any], ...]Údict_r×   rb  r   r*   rE   c           	      K  s†   g  | _ }| ¡ D ],\}}t d|¡rq	t|tƒr t||d�}n
| d¡s)tdƒ‚q	t	| ||ƒ | 
|¡ q	t dd„ |D ƒ¡| _d S )Nz^__.*__$)r2  rd  z#Expected integer values for IntFlagc                 S  s   i | ]}|j |“qS r0   r9  )rp   r    r0   r0   r1   Ú
<dictcomp>Ž  rI  z)_IntFlagMeta.__init__.<locals>.<dictcomp>)Ú_itemsrR  ru   Úmatchr4   r¤   r0  ru  r  r|  r‹   r   ÚimmutabledictÚ__members__)	r]   r<  r‘   r>  rb  rR  rõ  Úvr    r0   r0   r1   rà   x  s   



ÿz_IntFlagMeta.__init__úIterator[symbol]c                 C  s   t dƒ‚)Nz“iter not implemented to ensure compatibility with Python 3.11 IntFlag.  Please use __members__.  See https://github.com/python/cpython/issues/99304r¨  rH   r0   r0   r1   Ú__iter__‘  s   ÿz_IntFlagMeta.__iter__N)
r<  r<   r‘   r=  r>  r×   rb  r   r*   rE   )r*   rE  )rX   rY   rZ   rà   rF  r0   r0   r0   r1   r;  w  s    
r;  c                   @  r‰  )Ú_FastIntFlagzÆAn 'IntFlag' copycat that isn't slow when performing bitwise
    operations.

    the ``FastIntFlag`` class will return ``enum.IntFlag`` under TYPE_CHECKING
    and ``_FastIntFlag`` otherwise.

    NrŠ  r0   r0   r0   r1   rG  ™  rŒ  rG  )Ú	metaclass)ÚIntFlagÚ_EÚchoicesúDict[_E, List[Any]]Úresolve_symbol_namesúOptional[_E]c                 C  sj   |  ¡ D ]\}}| |u r|  S |r| |jkr|  S | |v r#|  S q| du r*dS t d|› d| ›�¡‚)aO  Given a user parameter, parse the parameter into a chosen value
    from a list of choice objects, typically Enum values.

    The user argument can be a string name that matches the name of a
    symbol, or the symbol object itself, or any number of alternate choices
    such as True/False/ None etc.

    :param arg: the user argument.
    :param choices: dictionary of enum values to lists of possible
        entries for each.
    :param name: name of the argument.   Used in an :class:`.ArgumentError`
        that is raised if the parameter doesn't match any available argument.

    NzInvalid value for 'z': )rR  rw   r   r
  )rÔ   rK  rw   rM  Ú
enum_valueÚchoicer0   r0   r1   Úparse_user_argument_for_enum®  s   ÿrQ  r«  c                 C  s   t | _ t d7 a dS )zÞAssign a '_creation_order' sequence to the given instance.

    This allows multiple instances to be sorted in order of creation
    (typically within a single thread; the counter is not particularly
    threadsafe).

    r   N)Ú_creation_order)r«  r0   r0   r1   Úset_creation_orderÓ  s   	rS  r<  c                 O  s>   z| |i |¤ŽW S  t y   tdt ¡ dd…  ƒ Y dS w )zXexecutes the given function, catches all exceptions and converts to
    a warning.

    z%s('%s') ignoredr   r   N)ri   ÚwarnrF   rG   )r	  r  r<  r0   r0   r1   Úwarn_exceptionà  s
   ÿrU  é   c                 C  s<   zt | ƒ|krd| d|…  W S | W S  ty   |  Y S w )Nz%s...r   )r*  r  )rN   Úlen_r0   r0   r1   Úellipses_stringë  s   ÿrX  c                      s@   e Zd ZU dZded< d‡ fd
d„Zddd„Zddd„Z‡  ZS )Ú_hash_limit_stringa/  A string subclass that can only be hashed on a maximum amount
    of unique values.

    This is used for warnings so that we can send out parameterized warnings
    without the __warningregistry__ of the module,  or the non-overridable
    "once" registry within warnings.py, overloading memory,


    r¤   Ú_hashrN   r<   Únumr  úSequence[Any]r*   c                   s<   || d|  }t ƒ  | |¡}td|t|ƒ| f ƒ|_|S )Nz6 (this warning may be suppressed after %d occurrences)z%s_%d)r  r5  r4  rZ  )r]   rN   r[  r  ÚinterpolatedrI   r  r0   r1   r5    s   ÿz_hash_limit_string.__new__c                 C  s   | j S r,   )rZ  rH   r0   r0   r1   Ú__hash__  rª  z_hash_limit_string.__hash__Úotherr   r}   c                 C  s   t | ƒt |ƒkS r,   )r4  )rI   r_  r0   r0   r1   Ú__eq__  s   z_hash_limit_string.__eq__)rN   r<   r[  r¤   r  r\  r*   rY  )r*   r¤   )r_  r   r*   r}   )	rX   rY   rZ   r[   r3   r5  r^  r`  r  r0   r0   r  r1   rY  õ  s   
 


rY  Úmsgc                 C  s*   |rt tj| |d�ƒ dS t | tjƒ dS )zdIssue a warning.

    If msg is a string, :class:`.exc.SAWarning` is used as
    the category.

    )rÈ   N)Ú_warnings_warnr   Ú	SAWarning)ra  rÈ   r0   r0   r1   rT    s   rT  r\  c                 C  s    |rt | d|ƒ} t| tjƒ dS )z\Issue a warning with a parameterized string, limiting the number
    of registrations.

    é
   N)rY  rb  r   rc  )ra  r  r0   r0   r1   Úwarn_limited   s   re  z)Dict[CodeType, Tuple[str, Type[Warning]]]Ú_warning_tagsÚmessageÚcategoryúType[Warning]úCallable[[_F], _F]c                   s   ‡ ‡fdd„}|S )Nc                   s   ˆˆ ft | j< | S r,   )rf  rñ   rÂ  ©rh  rg  r0   r1   Úgo0  s   z#tag_method_for_warnings.<locals>.gor0   )rg  rh  rl  r0   rk  r1   Útag_method_for_warnings-  s   rm  z&^(?:sqlalchemy\.(?!testing)|alembic\.)úUnion[str, Warning]úOptional[Type[Warning]]Ú
stacklevelc                 C  sð   zt  |¡}W n ty   d}Y nK   d}Y nDd }}|d ur]|s0t t|j dd¡¡s0d}|jt	v rJd}t	|j \}}|pA|}| › d|› d�} |j
}|sT|d7 }n|rY|rYn|d us!|d urmtj| ||d d	� d S tj| |d d	� d S )
Nr   FrX   r°   Tz (r8  r   )rp  )rF   Ú	_getframerä  ru   rA  Ú_not_sa_patternÚ	f_globalsr7   Úf_coderf  Úf_backÚwarningsrT  )rg  rh  rp  ÚframeÚstacklevel_foundÚwarning_tag_foundÚ_suffixÚ	_categoryr0   r0   r1   rb  :  s4   ÿ

çrb  rÌ  Úretry_on_exceptionúCallable[..., Optional[_T]]c                   s   ˆ g‰d	‡ ‡‡fdd„}|S )
zNDecorate the given function to be a no-op after it is called exactly
    once.rÔ   r   rb  r*   úOptional[_T]c                    s>   ˆ }ˆrˆ  ¡ }z|| i |¤ŽW S    ˆrˆ d|¡ ‚ d S )Nr   )ra   Úinsert)rÔ   rb  Ú	strong_fnÚonce_fn©r¢   Úoncer|  r0   r1   rl  u  s   zonly_once.<locals>.goN)rÔ   r   rb  r   r*   r~  r0   )r¢   r|  rl  r0   r‚  r1   Ú	only_oncem  s   r„  z%sqlalchemy/([a-z_]+/){0,2}[a-z_]+\.pyzunit(?:2|test2?/)ÚtbÚexclude_prefixúre.Pattern[str]Úexclude_suffixc                 C  sˆ   d}t | ƒd }||kr"| | | ¡r"|d7 }||kr"| | | ¡s||kr<| | | ¡r<|d8 }||kr<| | | ¡s-| ||d … S )at  Chop extraneous lines off beginning and end of a traceback.

    :param tb:
      a list of traceback lines as returned by ``traceback.format_stack()``

    :param exclude_prefix:
      a regular expression object matching lines to skip at beginning of
      ``tb``

    :param exclude_suffix:
      a regular expression object matching lines to skip at end of ``tb``
    r   r   )r*  Úsearch)r…  r†  rˆ  r‡   Úendr0   r0   r1   Úchop_traceback‹  s   ÿÿr‹  c                 C  s$   d|  }t ƒ  ¡ }t||ƒ |d S )Nz&def set(obj, value):    obj.%s = valuer`   )r{  ÚcopyrØ   )ÚattrnamerÈ   rÃ   r0   r0   r1   Ú
attrsetter¨  s   

rŽ  z^__.+__$c                      s&   e Zd ZdZdZd‡ fdd„Z‡  ZS )Ú
TypingOnlyz“A mixin class that marks a class as 'typing only', meaning it has
    absolutely no methods, attributes, or runtime functionality whatsoever.

    r0   r*   rE   c                   sB   t | jv rdd„ | jD ƒ}|rtd| › d|› d�ƒ‚tƒ  ¡  d S )Nc                 S  s   h | ]	}t  |¡s|’qS r0   )Ú_dundersrA  ©rp   rw   r0   r0   r1   Ú	<setcomp>¼  s
    
ÿÿz/TypingOnly.__init_subclass__.<locals>.<setcomp>zClass z< directly inherits TypingOnly but has additional attributes ré   )r�  r  r6   ÚAssertionErrorr  Ú__init_subclass__)r]   Ú	remainingr  r0   r1   r”  º  s   
ÿÿÿzTypingOnly.__init_subclass__rW   )rX   rY   rZ   r[   r\   r”  r  r0   r0   r  r1   r�  ²  s    r�  c                      s<   e Zd ZU dZded< 	 d‡ fdd„Zedd
d„ƒZ‡  ZS )ÚEnsureKWArga6  Apply translation of functions to accept \**kw arguments if they
    don't already.

    Used to ensure cross-compatibility with third party legacy code, for things
    like compiler visit methods that need to accept ``**kw`` arguments,
    but may have been copied from old code that didn't accept them.

    r<   Úensure_kwargr*   rE   c                   sf   | j }| j}|r,|D ]!}t ||¡}|r+|| }t |¡}|js+|  |¡}t| ||ƒ q
t	ƒ  
¡  d S r,   )r—  r6   ru   rA  r   rµ   r  Ú
_wrap_w_kwr|  r  r”  )r]   Úfn_regÚclsdictro  rA   r¢   rÂ   Úwrappedr  r0   r1   r”  Ú  s   

€zEnsureKWArg.__init_subclass__r¢   r|   c                   s   d‡ fdd„}t |ˆ ƒS )NrÔ   r   rb  r*   c                    s   ˆ | Ž S r,   r0   )rÔ   rb  rÂ  r0   r1   Úwrapê  rÓ  z$EnsureKWArg._wrap_w_kw.<locals>.wrap)rÔ   r   rb  r   r*   r   r   )r]   r¢   rœ  r0   rÂ  r1   r˜  è  s   
zEnsureKWArg._wrap_w_kwrW   )r¢   r|   r*   r|   )	rX   rY   rZ   r[   r3   r”  r¶  r˜  r  r0   r0   r  r1   r–  Ç  s   
 	r–  c                 C  sh   t |dƒr
t| |ƒS | }|jj|_t |dƒr|j|_t |jdƒr+|jjr+|jj|_|S |jr2|j|_|S )z‘Augment functools.update_wrapper() to work with objects with
    a ``__call__()`` method.

    :param fn:
      object with __call__ method

    rX   rY   r[   )rŠ   r   r~   rX   rY   r  r[   )Úwrapperr¢   Ú_fr0   r0   r1   Úwrap_callableð  s   




ýrŸ  c                 C  sÎ   d| vr	|   d¡S d}g g}d}t| ƒ}||k r`| | }|dkrC|dkr>||d k r>| |d  dkr>|d  d¡ |d7 }n|dN }n|dkrQ|dkrQ| g ¡ n|d  |¡ |d7 }||k sdd„ |D ƒS )aÄ  Parse a dotted identifier with accommodation for quoted names.

    Includes support for SQL-style double quotes as a literal character.

    E.g.::

        >>> quoted_token_parser("name")
        ["name"]
        >>> quoted_token_parser("schema.name")
        ["schema", "name"]
        >>> quoted_token_parser('"Schema"."Name"')
        ['Schema', 'Name']
        >>> quoted_token_parser('"Schema"."Name""Foo"')
        ['Schema', 'Name""Foo']

    ú"ré   r   r   r'  c                 S  s   g | ]}d   |¡‘qS )r°   )rt   )rp   rì   r0   r0   r1   rH  1  s    z'quoted_token_parser.<locals>.<listcomp>)rë   r*  r‹   )rN   r_  r»  ÚidxÚlvÚcharr0   r0   r1   Úquoted_token_parser  s&   
$

ôr¤  Úparamsc                   s   t  ˆ ¡‰ ‡ ‡fdd„}|S )Nc                   s:   | j d ur| j p	d}|rt|‡fdd„ˆ D ƒƒ}|| _ | S )Nr°   c                   s   i | ]}|ˆ “qS r0   r0   )rp   Úparamré  r0   r1   r?  :  s    z8add_parameter_text.<locals>.decorate.<locals>.<dictcomp>)r[   Úinject_param_text)r¢   rŸ  ©r¥  ræ  r0   r1   rÌ   7  s
   z$add_parameter_text.<locals>.decorate)r   rN  )r¥  ræ  rÌ   r0   r¨  r1   Úadd_parameter_text4  s   
r©  c                 C  sJ   |   dd¡}t|ƒdkr| S |\}}| d¡s |d t |¡ S t | ¡S )NÚ
r   rn   )rë   r*  ru  ÚtextwrapÚdedent)ræ  Ú
split_textÚ	firstliner•  r0   r0   r1   Ú_dedent_docstringA  s   

r¯  Úgiven_doctextÚ
injecttextÚposc                 C  sª   t | pdƒ}| d¡}t|ƒdkr| d¡ t |¡ d¡}|d r(| dd¡ dd„ t|ƒD ƒ}| dd¡ |t|t|ƒd ƒ }|d|… | ||d …  }d 	|¡S )Nr°   rª  r   r   c                 S  s   g | ]
\}}|  ¡ s|‘qS r0   )rã  )rp   r[  Úliner0   r0   r1   rH  X  s    z)inject_docstring_text.<locals>.<listcomp>)
r¯  rë   r*  r‹   r«  r¬  r  rP  Úminrt   )r°  r±  r²  ÚdoctextÚlinesÚinjectlinesÚblanksÚ
inject_posr0   r0   r1   Úinject_docstring_textM  s   


rº  z(\s+):param (.+?):rµ  Úinject_paramsúDict[str, str]c           
      C  s  t  |  ¡ ¡}g }d }|r�| ¡ }t |¡}|d u rO|rN| d¡ d¡}||v rNdt| d¡ƒ d }|rHt	 d|d ¡}	|	rHdt|	 d¡ƒ }|||  }n+|r\| 
d|dg¡ d }n| ¡ sk| 
||dg¡ d }n| d¡rz| 
|| ¡ g¡ q| |¡ |sd |¡S )	Nr   Ú*rn   r   z(\s+)\Sr   rª  z::)ÚcollectionsÚdequeÚ
splitlinesÚpopleftÚ
_param_regrA  rÜ   Úlstripr*  ru   rc   Úrstriprv  r‹   rt   )
rµ  r»  Údoclinesr¶  Ú	to_injectr³  rA   r¦  ÚindentÚm2r0   r0   r1   r§  d  s:   
€

á
!r§  rÄ   c                 C  s~   t | ƒdkrdS t | ƒdk}|r| dd… n| dd… | dd…  } dd„ | D ƒ}|r0d |¡S d	d |dd… ¡|d f S )
zŒTrims a list of strings from the middle and return a string of up to
    four elements. Strings greater than 11 characters will be truncatedr   Nr  r«   r'  c                 S  s,   g | ]}t |ƒd krd|dd …  n|‘qS )é   z%s..N)r*  r‘  r0   r0   r1   rH  –  s   , z$repr_tuple_names.<locals>.<listcomp>rM  z%s, ..., %s)r*  rt   )rÄ   ÚflagÚresr0   r0   r1   Úrepr_tuple_names�  s   (
rÌ  c                 C  s   t rdS | r
tdƒ‚dS )NTzDcython extensions were expected to be installed, but are not presentF)r   ÚImportError)Úraise_r0   r0   r1   Úhas_compiled_ext�  s   ÿrÏ  c                   @  s   e Zd Ze ¡ ZdS )Ú_MissingN)rX   rY   rZ   ÚenumÚautoÚMissingr0   r0   r0   r1   rÐ  ©  s    rÐ  )r)   r   r*   r+   )r;   r   r*   r<   )r]   r^   r*   r_   )rh   r   r*   r<   r,   )r]   rk   rl   rm   r*   r<   )ry   rz   r{   r|   r*   r}   )rƒ   r„   r*   r…   )r�   r�   r‘   r<   r*   r’   )r¢   r£   rq   r¤   r*   r¥   )r©   r|   r*   rª   )rÈ   rÖ   rÃ   r×   rÆ   r<   r*   r|   )r]   r5   rù   rû   rú   rü   r*   rý   )r]   r5   rù   rû   rú   r}   r*   rû   )r	  r|   r*   r
  )FF)r¢   r|   r  r}   r  r}   r*   r  )T)r¢   r  r­   r}   r*   r  )r0   r0   r0   r0   )r2  rk   r3  r<   r4  r<   r5  r�   r6  r�   r7  r�   r8  r�   r*   r9  )r0   Nr0   )
r)   r   rA  rB  rC  rD  rE  r�   r*   r<   )NNrq  N)NNNrÎ  )r)   r   r*   r}   )ræ  r<   r*   rç  )rN   r   r*   rì  )TN)rb  r×   ro  r<   rL   rk   rî  r}   rï  rð  r*   rE   )r)   r   r]   rk   r*   r…   )
r)   r    r]   r^   r  r   rb  r   r*   r    )r*   rú  )r  r   rJ  r  r*   r  )rÔ   r   r  r	  rw   r<   r*   r   )F)
rÔ   r   rK  rL  rw   r<   rM  r}   r*   rN  rµ  )r	  r|   r  r   r<  r   r*   r   )rV  )ra  r<   rÈ   rm   r*   rE   )ra  r<   r  r\  r*   rE   )rg  r<   rh  ri  r*   rj  )Nr   )rg  rn  rh  ro  rp  r¤   r*   rE   )r¢   rÌ  r|  r}   r*   r}  )r…  r
  r†  r‡  rˆ  r‡  r*   r
  )r¥  r   ræ  r<   r*   rj  )ræ  r<   r*   r<   )r°  rm   r±  r<   r²  r¤   r*   r<   )rµ  r<   r»  r¼  r*   r<   )rÄ   r
  r*   rm   )žr[   Ú
__future__r   r¾  rÑ  Ú	functoolsr   r-   r™   rŽ  ru   rF   r«  r   r½   r   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv  r°   r   r   Ú_has_cyr   r   r   r    r!   r#   r%   r&   r'   r(   Úpy310r.   rB   rC   rg   rj   rx   r‚   rŽ   r¡   r§   r¨   rÍ   r¶   r¿   rÙ   rÚ   rÛ   rø   r   r  r  r¸   r1  r;  r=  r@  rZ  r[  rl  rp  r…  rˆ  rš  r›  rœ  r·  r¹  rÐ  Únon_memoized_propertyÚpropertyÚro_memoized_propertyÚro_non_memoized_propertyrÄ  rÅ  Ú!HasMemoized_ro_memoized_attributerÍ  rÑ  rå  rë  rí  rñ  r÷  rù  rý  r  r  r’  r  r  r)  r.  r¤   r0  r5   r;  rG  rI  ÚFastIntFlagÚEnumrJ  rQ  rR  rS  rU  rX  r<   rY  rT  re  rf  r3   rm  Úcompilerr  rb  r„  Ú_SQLA_REÚ_UNITTEST_REr‹  ÚNoneTyperŽ  r�  r�  r–  rŸ  r¤  r©  r¯  rº  rÂ  r§  rÌ  rÏ  rÐ  rÓ  Ú	MissingOrr0   r0   r0   r1   Ú<module>   sn  ;ÿ	G(üÿÿ5ÿ9ÿu%ùüN&úCV+M.ûÿ#<"
ü"


ý3ý),+