o
    ?ÊÆhÔý  ã                   @  sz  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�dLd3d4„Z4n�dLd5d4„Z4�dMd8d9„Z5G d:d;„ d;ƒZ6�dNd?d@„Z7�dOdBdC„Z8�dPdEdF„Z9�dQdLdM„Z:�dRdQdR„Z;�dSdWdX„Z<�dTd^d_„Z=e"d`dJd&�Z>�dUdcdd„Z?dedf„ Z@�dVdldm„ZAe"dnƒZBe"doƒZCG dpdq„ dqƒZDdrds„ ZEedd%dtœ�dWd{d|„ƒZFedd}dtœ�dXd~d|„ƒZFdd}dtœ�dXdd|„ZF�dYd‚dƒ„ZG	}�dZ�d[d‡dˆ„ZH	"�d\�d]dŒd�„ZI�d\dŽd�„ZJ	�	�	�	��d^�d_d™dš„ZKd›dœ„ ZLd�dž„ ZM	�		��d`�dad¤d¥„ZNG d¦d§„ d§ƒZOd¨d©„ ZPdªd«„ ZQ			¬	�dbd­d®„ZRd¯d°„ ZS�dcd±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]�ddd»d¼„Z^G d½d¾„ d¾ƒZ_e!�r;e[Z`ne_jaZ`G d¿dÀ„ dÀƒZb�dedÁdÂ„Zc�dfdÅdÆ„Zd�dgdÉdÊ„Ze	"	�dh�didÒdÓ„Zf�djdÔdÕ„Zg�dkd×dØ„Zh�dldÚdÛ„Zi	�dm�dndßdà„Zj�dodå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	}�dp�dqdþdÿ„Zzda{�dr�d�d„Z|�ds�d�d„Z}�dt�d�d„Z~G �d	�d
„ �d
eƒZ€�dm�du�d�d„Z��dv�d�d„Z‚i Zƒ�de„�d< �dw�d�d„Z…e
 †�d¡Z‡		�dx�dy�d�d„Zˆ�dz�d#�d$„Z‰e
 †�d%¡ZŠe
 †�d&¡Z‹e‹eŠf�d{�d+�d,„ZŒesdƒZ��d-�d.„ ZŽG �d/�d0„ �d0ƒZ�G �d1�d2„ �d2ƒZ��d3�d4„ Z‘�d5�d6„ Z’�d|�d8�d9„Z“�d}�d:�d;„Z”�d~�d?�d@„Z•e
 †�dA¡Z–�d�dE�dF„Z—�d€�dH�dI„Z˜�dp�dJ�dK„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   úh/var/www/html/HyperOracle/crypto_trader/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]c                 C  s   d  dd„ t d| j¡D ƒ¡S )Nú c                 s  s   � | ]}|  ¡ V  qd S r,   )Úlower)Ú.0Únr0   r0   r1   Ú	<genexpr>²   s   € 
ÿz(clsname_as_plain_name.<locals>.<genexpr>z([A-Z][a-z]+|SQL))ÚjoinÚreÚfindallrX   ©r]   r0   r0   r1   Úclsname_as_plain_name±   s   
ÿru   Ú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   )rv   rx   Ú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]ro   Ú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Ÿ   ro   Ú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           
        sT  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tt|	| ƒƒS )Nznot a decoratable functionzTuple[str, ...]r   r   é   r¦   rŸ   )r¦   rŸ   F©ÚgroupedÚnamez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   )
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‘   Úargr«   Ú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½   Q  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ß   d  rK   zPluginLoader.clearr«   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Ú   r«   Úloadr   ÚNoSuchModuleError)rI   r«   ÚloaderÚimplr0   r0   r1   rá   g  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   r«   rå   ræ   rá   r0   rë   r1   Úregisterz  s   zPluginLoader.registerr,   )rÚ   r<   rÛ   rÜ   )r«   r<   r*   r   )r«   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³   rz   Ú__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”   t  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::

      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&   

ýúr/  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   rt   r0   r0   r1   rÊ   È  ó   z&create_proxy_methods.<locals>.decorater0   )r0  r1  r2  r3  r4  r5  r6  rÊ   r0   r0   r1   Úcreate_proxy_methodsµ  s   r9  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 )zúinspect.getargspec with considerations for typical __init__ methods

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

      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   ©rn   rÒ   )Úmissingr0   r1   Ú
<listcomp>  ó    z generic_repr.<locals>.<listcomp>c                 S  s   g | ]\}}||f‘qS r0   r0   )rn   rÒ   Údefaultr0   r0   r1   rF    s    ÿÿc                 3  s    � | ]}t tˆ |d ƒƒV  qd S r,   )r¸   r8   rD  r/   r0   r1   rp     s   € zgeneric_repr.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r0   ©r¸   )rn   Úvalr0   r0   r1   rF  "  rG  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   rq   )r)   r?  rA  rC  Úpos_argsÚkw_argsÚvargsr‘   ÚinsprÀ   Údefault_lenÚoutputrÒ   ÚdefvalrJ  r0   )rE  r)   r1   Úgeneric_reprì  sv   

ÿÿ
ÿþÿ€€ÿ€ÿrX  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¦   r«   r:  Ú__weakref__c                 C  s   | j | j| jdœS )N©r¦   r«   r:  r[  rH   r0   r0   r1   Ú__getstate__B  s   ýz$portable_instancemethod.__getstate__c                 C  s&   |d | _ |d | _| dd¡| _d S )Nr¦   r«   r:  r0   )r¦   r«   r7   r:  )rI   Ústater0   r0   r1   Ú__setstate__I  s   

z$portable_instancemethod.__setstate__r0   c                 C  s   |j | _|j| _|| _d S r,   )r  r¦   rX   r«   r:  )rI   Úmethr:  r0   r0   r1   rÞ   N  s   
z portable_instancemethod.__init__c                 O  s$   |  | j¡ t| j| jƒ|i |¤ŽS r,   )r?   r:  r8   r¦   r«   )rI   rÒ   Úkwr0   r0   r1   r  S  s   z portable_instancemethod.__call__N)r0   )	rX   rY   rZ   r[   r\   r\  r^  rÞ   r  r0   r0   r0   r1   rY  :  s    
rY  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   ©rn   Ú_©Úhierr0   r1   rp   g  ó   € z"class_hierarchy.<locals>.<genexpr>rÌ   rd   c                   s   g | ]}|ˆ vr|‘qS r0   r0   ra  rc  r0   r1   rF  p  s
    úz#class_hierarchy.<locals>.<listcomp>)rÏ   Ú__mro__ra   r   rˆ   rb   rY   r‡   Ú
issubclassr5   rd   )r]   Úprocessr  rŽ   r£   Úsr0   rc  r1   Úclass_hierarchyX  s&   



ÿ
û
	ërj  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)Údirrf  r6   )r]   ÚkeysÚkeyr  r0   r0   r1   Úiterate_attributes~  s   €

þ€þrn  ú
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‡   ©rn   rA   ©Úinto_clsÚskipr0   r1   rF  ¤  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)rk  r8   r‡   r   r»   r¼   rî   r   r³   r'  rÿ   ÚlocalsrÖ   r¾   Úsetattr)rw  Úfrom_clsrx  Úonlyr«   Úfrom_instanceÚdundersr-  Úmaybe_fnrŸ   rÀ   Úfn_argsÚd_argsÚpyrÁ   r0   rv  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 )rb  )rs  ru  r0   r0   r1   rF     s    z as_interface.<locals>.<listcomp>zany ofzall ofz%r does not implement %s: %srK  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`   rk  ÚoperatorÚgeÚgtÚintersectionrµ   rq   rX   Údictlike_iteritemsr&  rz  Ústaticmethodrb   )r)   r]   r4  Ú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]ÚfgetúOptional[str]r[   r<   rX   NÚdocc                 C  ó   || _ |p|j| _|j| _d S r,   ©rœ  r[   rX   ©rI   rœ  rž  r0   r0   r1   rÞ   A  ó   zgeneric_fn_descriptor.__init__rI   r™  r)   rE   r]   r   r*   c                 C  rü   r,   r0   ©rI   r)   r]   r0   r0   r1   Ú__get__F  ó   zgeneric_fn_descriptor.__get__r,  r!   c                 C  rü   r,   r0   r£  r0   r0   r1   r¤  J  r¥  úUnion[_GFD, _T_co]c                 C  ó   t ƒ ‚r,   ©ÚNotImplementedErrorr£  r0   r0   r1   r¤  N  ó   ÚinstancerN   c                 C  rü   r,   r0   ©rI   r«  rN   r0   r0   r1   Ú__set__S  r8  zgeneric_fn_descriptor.__set__c                 C  rü   r,   r0   )rI   r«  r0   r0   r1   Ú
__delete__V  r8  z generic_fn_descriptor.__delete__c                 C  r§  r,   r¨  ©rI   r)   r0   r0   r1   Ú_resetY  rª  zgeneric_fn_descriptor._resetr«   c                 C  r§  r,   r¨  ©r]   r)   r«   r0   r0   r1   Úreset\  s   zgeneric_fn_descriptor.resetr,   )rœ  r›  rž  r�  )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   r«   r<   r*   rE   )rX   rY   rZ   r[   r3   rÞ   r   r¤  r   r­  r®  r°  Úclassmethodr²  r0   r0   r0   r1   rš  2  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¤  l  s   
z_non_memoized_property.__get__N)rX   rY   rZ   r[   r   r¤  r0   r0   r0   r1   r¶  a  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¤  w  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¸  r  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   ©Úar`  ©rº  r0   r1   Úmemo­  r8  z6memoized_instancemethod.<locals>.oneshot.<locals>.memo)rX   r[   r6   ©rI   r  r`  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_memoizationsrm  r<   rN   r   c                 C  s   || j |< |  j|hO  _d S r,   )r6   rÅ  )rI   rm  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œ  r�  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ž  r�  )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  r`  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¿  û  r8  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   r`  r   r*   r   r   )r]   rŸ   rÂ  r0   rÁ  r1   rÃ  ð  s   
z#HasMemoized.memoized_instancemethodNrW   )rm  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   rm  r0   r0   r1   Ú_fallback_getattr  ó   zMemoizedSlots._fallback_getattrrm  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¿  ,  r8  z8MemoizedSlots.__getattr__.<locals>.oneshot.<locals>.memo)rX   r[   rz  )r  r`  r¿  ©rŸ   rm  rI   r¾  r1   rÂ  )  s   z*MemoizedSlots.__getattr__.<locals>.oneshot)rs  rî   r‡   r{   r8   rz  r[   rÑ  )rI   rm  rN   rÂ  r0   rÕ  r1   Ú__getattr__  s   ÿ
zMemoizedSlots.__getattr__N)rm  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Úoffro   ÚfÚ0FzString is not true/false: %r)r4   r<   Ústriprm   Ú
ValueErrorrz   r/   r0   r0   r1   Úasbool;  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_valueM  s   z"bool_or_str.<locals>.bool_or_valueN)r)   r<   r*   rç  r0   )rå  ré  r0   rè  r1   Úbool_or_strG  s   rê  rN   úOptional[int]c                 C  s   | du r| S t | ƒS )zCoerce to integer.N)r¡   )rN   r0   r0   r1   ÚasintV  s   rì  r`  rm  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   rz   rä  )r`  rm  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   ©rn   Úkr/   r0   r1   rp   ~  ó   € ÿz"constructor_key.<locals>.<genexpr>)rþ   r‰   )r)   r]   rÂ   r0   r/   r1   Úconstructor_keyx  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   rp   ‹  rõ  z#constructor_copy.<locals>.<genexpr>)rþ   r?   Ú
difference)r)   r]   r  r`  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ü  ÚspecimenrH  ú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  rg  r`   r4   r5   rÏ   rµ   )r  rH  Úisar0   r0   r1   Úduck_type_collectionŸ  s(   
ÿ





r  rÒ   Úargtypeú'Union[Tuple[Type[Any], ...], Type[Any]]r«   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   )rn   r½  r0   r0   r1   rp   Ë  s   € z"assert_arg_type.<locals>.<genexpr>z6Argument '%s' is expected to be of type '%s', got '%s')r4   r‰   r   ÚArgumentErrorrq   r5   )rÒ   r  r«   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.rP  Ú__getitem__r7   NzObject '%r' is not dict-likeÚiterkeysc                  3  s.   � ˆ   ¡ D ]} ˆd usJ ‚| ˆ| ƒfV  qd S r,   )r  )rm  ©ÚdictlikeÚgetterr0   r1   Úiteratorà  s
   €þz$dictlike_iteritems.<locals>.iteratorrl  c                 3  s   � | ]	}|ˆ |ƒfV  qd S r,   r0   )rn   rm  )r  r0   r1   rp   ç  re  z%dictlike_iteritems.<locals>.<genexpr>)r‡   rÏ   rP  r8   rÿ   Úiterrl  )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   r`  c                   s&   t ƒ j|g|¢R i |¤Ž |j| _d S r,   )ÚsuperrÞ   r[   )rI   rœ  rÒ   r`  ©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   r`  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__ry   úhybridproperty[_T]c                 C  ó
   || _ | S r,   ©r  r  r0   r0   r1   Ú
classlevel  ó   zhybridproperty.classlevelN©r  rË  ©r«  r   r  r   r*   r    )r  ry   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__ry   ú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  ry   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¤  3  s   zhybridmethod.__get__ry   úhybridmethod[_T]c                 C  r"  r,   r#  r  r0   r0   r1   r$  9  r%  zhybridmethod.classlevelNr&  )r«  r   r  r   r*   rË  )r  ry   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<   r«   zDict[str, symbol]ÚsymbolsNrž  r�  Ú	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 )Ú_lockr0  r7   r4   r<   Úhashr¡   Ú__new__r/  r«   r[   rÿ   )r]   r«   rž  r1  r�   r0   r0   r1   r4  R  s&   ÿÿ$êzsymbol.__new__c                 C  s   t | jdt| ƒffS )Nr;   )r/  r«   r¡   rH   r0   r0   r1   Ú
__reduce__p  s   zsymbol.__reduce__c                 C  s   t | ƒS r,   rI  rH   r0   r0   r1   Ú__str__s  rÒ  zsymbol.__str__c                 C  s   d| j ›d�S )Nzsymbol(ú)©r«   rH   r0   r0   r1   Ú__repr__v  rK   zsymbol.__repr__)NN)r«   r<   rž  r�  r1  rë  r*   r/  )rX   rY   rZ   r[   r3   r0  rÿ  r   r2  r4  r5  r6  r9  r0   r0   r0   r1   r/  >  s   
 ür/  c                   @  s    e Zd Zddd„Zddd„ZdS )Ú_IntFlagMetaÚ	classnamer<   rŽ   úTuple[Type[Any], ...]Údict_rÕ   r`  r   r*   rE   c           	      K  sx   g  | _ }| ¡ D ]%\}}t|tƒrt||d�}n
| d¡s"tdƒ‚q	t| ||ƒ | |¡ q	t	 
dd„ |D ƒ¡| _d S )N)r1  rb  z#Expected integer values for IntFlagc                 S  s   i | ]}|j |“qS r0   r8  )rn   r�   r0   r0   r1   Ú
<dictcomp>�  rG  z)_IntFlagMeta.__init__.<locals>.<dictcomp>)Ú_itemsrP  r4   r¡   r/  rs  rÿ   rz  rˆ   r   ÚimmutabledictÚ__members__)	r]   r;  rŽ   r=  r`  rP  rô  Úvr�   r0   r0   r1   rÞ   {  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Õ   r`  r   r*   rE   )r*   rC  )rX   rY   rZ   rÞ   rD  r0   r0   r0   r1   r:  z  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   rE  š  rŠ  rE  )Ú	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': )rP  r«   r   r	  )rÒ   rI  r«   rK  Ú
enum_valueÚchoicer0   r0   r1   Úparse_user_argument_for_enum¯  s   ÿrO  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   	rQ  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
   ÿrS  é   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   ÿrV  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  r4  r3  rX  )r]   rN   rY  r  ÚinterpolatedrI   r  r0   r1   r4    s   ÿz_hash_limit_string.__new__c                 C  s   | j S r,   )rX  rH   r0   r0   r1   Ú__hash__  rª  z_hash_limit_string.__hash__Úotherr   rz   c                 C  s   t | ƒt |ƒkS r,   )r3  )rI   r]  r0   r0   r1   Ú__eq__  s   z_hash_limit_string.__eq__)rN   r<   rY  r¡   r  rZ  r*   rW  )r*   r¡   )r]  r   r*   rz   )	rX   rY   rZ   r[   r3   r4  r\  r^  r  r0   r0   r  r1   rW  ö  s   
 


rW  Úmsgr�  c                 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)r_  rÆ   r0   r0   r1   rR    s   rR  rZ  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)rW  r`  r   ra  )r_  r  r0   r0   r1   Úwarn_limited!  s   rc  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,   )rd  rï   rÁ  ©rf  re  r0   r1   Úgo1  s   z#tag_method_for_warnings.<locals>.gor0   )re  rf  rj  r0   ri  r1   Útag_method_for_warnings.  s   rk  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 (r7  r   )rn  )rF   Ú	_getframerã  rr   ÚmatchÚ_not_sa_patternÚ	f_globalsr7   Úf_coderd  Úf_backÚwarningsrR  )re  rf  rn  ÚframeÚstacklevel_foundÚwarning_tag_foundÚ_suffixÚ	_categoryr0   r0   r1   r`  ;  s4   ÿ

çr`  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   r`  r*   úOptional[_T]c                    s>   ˆ }ˆrˆ  ¡ }z|| i |¤ŽW S    ˆrˆ d|¡ ‚ d S )Nr   )ra   Úinsert)rÒ   r`  Ú	strong_fnÚonce_fn©rŸ   Úoncer{  r0   r1   rj  v  s   zonly_once.<locals>.goN)rÒ   r   r`  r   r*   r}  r0   )rŸ   r{  rj  r0   r�  r1   Ú	only_oncen  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`   )ry  ÚcopyrÖ   )ÚattrnamerÆ   rÁ   r0   r0   r1   Ú
attrsetter©  s   

r�  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                   sF   t | jv rt| jƒ h d£¡}|rtd| › d|› d�ƒ‚tƒ  ¡  d S )N>   r[   r\   rY   Ú__orig_bases__r3   zClass z< directly inherits TypingOnly but has additional attributes rç   )rŽ  r   r`   r6   r÷  Ú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   rr   rp  r   r³   r  Ú
_wrap_w_kwrz  r  r‘  )r]   Úfn_regÚclsdictrm  rA   rŸ   rÀ   Úwrappedr  r0   r1   r‘  Þ  s   

€zEnsureKWArg.__init_subclass__rŸ   ry   c                   s   d‡ fdd„}t |ˆ ƒS )NrÒ   r   r`  r*   c                    s   ˆ | Ž S r,   r0   )rÒ   r`  rÁ  r0   r1   Úwrapî  rÒ  z$EnsureKWArg._wrap_w_kw.<locals>.wrap)rÒ   r   r`  r   r*   r   r   )r]   rŸ   r™  r0   rÁ  r1   r•  ì  s   
zEnsureKWArg._wrap_w_kwrW   )rŸ   ry   r*   ry   )	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®   )rq   )rn   rê   r0   r0   r1   rF  5  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   )rn   Úparamrè  r0   r1   r>  >  s    z8add_parameter_text.<locals>.decorate.<locals>.<dictcomp>)r[   Úinject_param_text)rŸ   rž  ©r¢  rå  r0   r1   rÊ   ;  s
   z$add_parameter_text.<locals>.decorate)r   rL  )r¢  rå  rÊ   r0   r¥  r1   Úadd_parameter_text8  s   
r¦  c                 C  sJ   |   dd¡}t|ƒdkr| S |\}}| d¡s |d t |¡ S t | ¡S )NÚ
r   rl   )ré   r(  rs  ÚtextwrapÚdedent)rå  Ú
split_textÚ	firstliner’  r0   r0   r1   Ú_dedent_docstringE  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â  )rn   rY  Úliner0   r0   r1   rF  \  s    z)inject_docstring_text.<locals>.<listcomp>)
r¬  ré   r(  rˆ   r¨  r©  r~  rN  Úminrq   )r­  r®  r¯  ÚdoctextÚlinesÚinjectlinesÚblanksÚ
inject_posr0   r0   r1   Úinject_docstring_textQ  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   Ú*rl   r   z(\s+)\Sr   r§  z::)ÚcollectionsÚdequeÚ
splitlinesÚpopleftÚ
_param_regrp  rÚ   Úlstripr(  rr   rc   Úrstriprt  rˆ   rq   )
r²  r¸  Údoclinesr³  Ú	to_injectr°  rA   r£  ÚindentÚm2r0   r0   r1   r¤  h  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(  )rn   r«   r0   r0   r1   rF  š  s   , z$repr_tuple_names.<locals>.<listcomp>rK  z%s, ..., %s)r(  rq   )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Ì  )r)   r   r*   r+   )r;   r   r*   r<   )r]   r^   r*   r_   )rh   r   r*   r<   )r]   rk   r*   r<   )rv   rw   rx   ry   r*   rz   )r€   r�   r*   r‚   )rŒ   r�   rŽ   r<   r*   r�   )rŸ   r    ro   r¡   r*   r¢   )r¦   ry   r*   r§   )rÆ   rÔ   rÁ   rÕ   rÄ   r<   r*   ry   )r]   r5   r÷   rù   rø   rú   r*   rû   )r]   r5   r÷   rù   rø   rz   r*   rù   )r  ry   r*   r  )FF)rŸ   ry   r
  rz   r  rz   r*   r  )T)rŸ   r  rª   rz   r*   r  )r0   r0   r0   r0   )r0  rk   r1  r<   r2  r<   r3  r�   r4  r�   r5  r�   r6  r�   r*   r7  )r0   Nr0   )
r)   r   r?  r@  rA  rB  rC  r�   r*   r<   )NNro  N)NNNrÍ  )r)   r   r*   rz   )rå  r<   r*   ræ  )rN   r   r*   rë  )TN)r`  rÕ   rm  r<   rL   rk   rí  rz   rî  rï  r*   rE   )r)   r   r]   rk   r*   r‚   )
r)   r    r]   r^   r  r   r`  r   r*   r    )r*   rù  r,   )r  r   rH  r  r*   r  )rÒ   r   r  r  r«   r<   r*   r   )F)
rÒ   r   rI  rJ  r«   r<   rK  rz   r*   rL  r´  )r  ry   r  r   r:  r   r*   r   )rT  )r_  r<   rÆ   r�  r*   rE   )r_  r<   r  rZ  r*   rE   )re  r<   rf  rg  r*   rh  )Nr   )re  rl  rf  rm  rn  r¡   r*   rE   )rŸ   rË  r{  rz   r*   r|  )r„  r  r…  r†  r‡  r†  r*   r  )r¢  r   rå  r<   r*   rh  )rå  r<   r*   r<   )r­  r�  r®  r<   r¯  r¡   r*   r<   )r²  r<   r¸  r¹  r*   r<   )rÂ   r  r*   r�  )šr[   Ú
__future__r   r»  ÚenumÚ	functoolsr   r-   r–   rŒ  rr   rF   r¨  rÿ  r»   r   Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru  r®   r   r   Ú_has_cyr   r   r   r    r!   r#   r%   r&   r'   r(   Úpy310r.   rB   rC   rg   rj   ru   r   r‹   rž   r¤   r¥   rË   r´   r½   r×   rØ   rÙ   rö   rþ   r	  r  r¶   r/  r9  r;  r>  rX  rY  rj  rn  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¡   r/  r5   r:  rE  rG  ÚFastIntFlagÚEnumrH  rO  rP  rQ  rS  rV  r<   rW  rR  rc  rd  r3   rk  Úcompilerq  r`  rƒ  Ú_SQLA_REÚ_UNITTEST_RErŠ  ÚNoneTyper�  rŽ  r“  rœ  r¡  r¦  r¬  r·  r¿  r¤  rÉ  rÌ  r0   r0   r0   r1   Ú<module>   sd  ;
	G(ü	ÿÿ5ÿ9ÿu#ùüN&úCV/O.ûÿ#< 
ü"


ý3ý),+