§
    ÕóÉjÁ=  ã                  óˆ  — d dl mZ d dlmZ d dlmZ d dl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mZ d dlm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* e)sd„ Z+e+xZ,Z-n
ej.        Z,d„ Z-d„ Z/d„ Z0d=d„Z1d „ Z2 G d!„ d"e3¦  «        Z4d#„ Z5d$„ Z6d%„ Z7d&„ Z8d'„ Z9d(„ Z:e'd)„ ¦   «         Z;d*„ Z<d+„ Z=d,„ Z>d>d.„Z?d/„ Z@ G d0„ d1eA¦  «        ZBd2„ ZC	 	 	 d?d4„ZDd5„ ZEd6„ ZFd7„ ZGejH        d3d@d<„¦   «         ZIdS )Aé    )Úannotations)Údeque)Ú
namedtupleN)Úchain)Ú	getsizeof)Úmkstemp)ÚAnyé   )Úconfig)Úmocké   )Úinspect)Ú
Connection)ÚColumn)ÚDropConstraint)Ú	DropTable)ÚForeignKeyConstraint)ÚMetaData)ÚTable©Úschema)ÚInteger©Ú	decorator)Údefaultdict)Úhas_refcount_gc)Úinspect_getfullargspecc                 óR   — t          j        ¦   «          t          j        ¦   «          d S ©N)ÚgcÚcollect)Úargss    ú|/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib64/python3.11/site-packages/sqlalchemy/testing/util.pyÚnon_refcount_gc_collectr$   0   s   € Ý
Œ
‰ŒˆÝ
Œ
‰Œˆˆˆó    c                 ó   — d S r   © r'   r%   r#   Úlazy_gcr(   9   s   € Øˆr%   c               #  ó¦   ‡K  — t          dddg¦  «        } t          dt          j        dz   ¦  «        D ]Š | t          j        ˆfd„¦  «        V — Œd S )NÚpicklersÚloadsÚdumpséþÿÿÿr
   c                ó.   •— t          j        | ‰¦  «        S r   )Úpickler,   )ÚdÚprotocols    €r#   ú<lambda>zpicklers.<locals>.<lambda>A   s   ø€ ­¬°a¸Ñ)BÔ)B€ r%   )r   Úranger/   ÚHIGHEST_PROTOCOLr+   )Úntr1   s    @r#   r*   r*   =   sq   øè è € Ý	�J ¨'Ð 2Ñ	3Ô	3€Bå˜"�fÔ5¸Ñ9Ñ:Ô:ð Dð DˆØˆb•”ÐBÐBÐBÐBÑCÔCÐCÐCÐCÐCðDð Dr%   c           
     ój  — t          d¦  «        \  }}	 t          j        |d¦  «        5 }t          j        | |¦  «         ddd¦  «         n# 1 swxY w Y   t          t          j        ¦  «        }t          j         	                    d¦  «        r%| 
                    t          j        d         ¦  «         t          j        t          j        d||                     t          j        d¦  «        gt          j        t          j        i t          j        ¥dt          j                             |¦  «        i¥¬¦  «        }t          j        |¦  «         n# t          j        |¦  «         w xY w|j        dk    r+t+          d	|j                             d
¬¦  «        z  ¦  «        ‚|j                             ¦   «         S )aÅ  pickle ``obj`` to a file, then unpickle it in a new interpreter.

    ``code`` is Python source run by that interpreter, which receives the
    name of the pickle file as ``sys.argv[1]``.  The new interpreter has
    the current ``sys.path``, so that the SQLAlchemy under test, as well
    as the ``test`` package, are importable.

    Returns the stripped stdout of the subprocess; a non-zero exit status
    fails the test, reporting its stderr.

    ÚpklÚwbNÚ
PYTHONPATHz-cú/)ÚstdoutÚstderrÚenvr   zsubprocess failed: %sÚreplace)Úerrors)r   ÚosÚfdopenr/   ÚdumpÚlistÚsysÚpathÚenvironÚgetÚappendÚ
subprocessÚrunÚ
executabler>   ÚsepÚPIPEÚpathsepÚjoinÚunlinkÚ
returncodeÚAssertionErrorr<   Údecoder;   Ústrip)ÚobjÚcodeÚfdÚfilenameÚfile_ÚpartsÚprocs          r#   Úunpickle_in_subprocessr\   D   s©  € õ ˜5‘>”>�L€BˆðÝŒY�r˜4Ñ Ô ð 	$ EÝŒK˜˜UÑ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$õ •S”X‘”ˆÝŒ:�>Š>˜,Ñ'Ô'ð 	3Ø�LŠL�œ LÔ1Ñ2Ô2Ð2åŒ~ÝŒ^˜T 4¨×)9Ò)9½"¼&À#Ñ)FÔ)FÐGÝ”?Ý”?ØD•2”:ÐD˜|­R¬Z¯_ª_¸UÑ-CÔ-CÐDÐDð	
ñ 
ô 
ˆõ 	Œ	�(ÑÔÐÐø�Œ	�(ÑÔÐÐøøøà„˜!ÒÐÝØ# d¤k×&8Ò&8À	Ð&8Ñ&JÔ&JÑJñ
ô 
ð 	
ð Œ;×ÒÑÔÐs.   ”E ©A¿E ÁAÁE ÁAÁC%E ÅE#c                ó.   — t          j        | |¬¦  «        S )N)Úk)ÚrandomÚchoices)Ú
populationr^   s     r#   Úrandom_choicesrb   j   s   € ÝŒ>˜*¨Ð*Ñ*Ô*Ð*r%   c                óâ   — t          | t          ¦  «        rt          | |¦  «        S | t          j        dd|z  z   ¦  «        z                       t          j        ¦  «        t          d|¦  «        z  S )NÚ1Ú0é
   )Ú
isinstanceÚfloatÚroundÚdecimalÚDecimalÚto_integralÚROUND_FLOORÚpow)ÚvalueÚprecs     r#   Úround_decimalrq   n   sl   € Ý�%�ÑÔð "Ý�U˜DÑ!Ô!Ð!ð •G”O C¨#°©*Ñ$4Ñ5Ô5Ñ5×BÒBÝÔñô åˆB�‰Œñð r%   c                  ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú	RandomSetc                ó–   — t          t                               | ¦  «        ¦  «        }t          j        |¦  «         t          |¦  «        S r   )rC   ÚsetÚ__iter__r_   ÚshuffleÚiter)ÚselfÚls     r#   rv   zRandomSet.__iter__y   s6   € Ý•—’˜dÑ#Ô#Ñ$Ô$ˆÝŒ�qÑÔÐÝ�A‰wŒwˆr%   c                óÔ   — t          j        dt          | ¦  «        dz
  ¦  «        }t          t                               | ¦  «        ¦  «        |         }|                      |¦  «         |S )Nr   r
   )r_   ÚrandintÚlenrC   ru   rv   Úremove)ry   ÚindexÚitems      r#   ÚpopzRandomSet.pop~   sR   € Ý”˜q¥# d¡)¤)¨a¡-Ñ0Ô0ˆÝ•C—L’L Ñ&Ô&Ñ'Ô'¨Ô.ˆØ�Š�DÑÔÐØˆr%   c                óR   — t          t                               | |¦  «        ¦  «        S r   )rs   ru   Úunion©ry   Úothers     r#   rƒ   zRandomSet.union„   s   € Ý�Ÿš 4¨Ñ/Ô/Ñ0Ô0Ð0r%   c                óR   — t          t                               | |¦  «        ¦  «        S r   )rs   ru   Ú
differencer„   s     r#   r‡   zRandomSet.difference‡   s   € Ý�Ÿš¨¨eÑ4Ô4Ñ5Ô5Ð5r%   c                óR   — t          t                               | |¦  «        ¦  «        S r   )rs   ru   Úintersectionr„   s     r#   r‰   zRandomSet.intersectionŠ   s    € Ý�×)Ò)¨$°Ñ6Ô6Ñ7Ô7Ð7r%   c                ó    — t          | ¦  «        S r   )rs   )ry   s    r#   ÚcopyzRandomSet.copy�   s   € Ý˜‰ŒÐr%   N)	Ú__name__Ú
__module__Ú__qualname__rv   r�   rƒ   r‡   r‰   r‹   r'   r%   r#   rs   rs   x   sn   € € € € € ðð ð ð
ð ð ð1ð 1ð 1ð6ð 6ð 6ð8ð 8ð 8ðð ð ð ð r%   rs   c                óÔ   — t          t          ¦  «        }| D ] \  }}||                              |¦  «         Œ!t          |¦  «        D ] \  }}||d…         D ]}|||         v r  dS ŒŒ!dS )zATrue if the given sorting conforms to the given partial ordering.NFT)r   ru   ÚaddÚ	enumerate)ÚtuplesÚsorted_elementsÚdepsÚparentÚchildÚiÚnodeÚns           r#   Úconforms_partial_orderingrš   ‘   s™   € õ •sÑÔ€DØð  ð  ‰ˆ�ØˆVŒ×Ò˜ÑÔÐÐÝ˜_Ñ-Ô-ð ð ‰ˆˆ4Ø    Ô$ð 	ð 	ˆAØ�t˜A”wˆˆØ�u�u�uð ð	ð ˆtr%   c                ó°   ‡‡— t          t          ¦  «        Š| D ] \  }}‰|                              |¦  «         Œ!ˆˆfd„Št           ‰|¦  «        ¦  «        S )Nc              3  ó
  •K  — t          | ¦  «        dk    rt          | ¦  «        V — d S | D ]V}t          | ¦  «                             |g¦  «        }|                     ‰|         ¦  «        s ‰|¦  «        D ]
}|g|z   V — ŒŒWd S )Nr
   )r}   rC   ru   r‡   r‰   )ÚelementsÚelemÚsubsetÚsub_orderingÚ_all_orderingsÚedgess       €€r#   r¡   z-all_partial_orderings.<locals>._all_orderings¤   s®   øè è € Ýˆx‰=Œ=˜AÒÐÝ�x‘.”.Ð Ð Ð Ð Ð à ð 4ð 4�Ý˜X™œ×1Ò1°4°&Ñ9Ô9�Ø×*Ò*¨5°¬;Ñ7Ô7ð 4Ø(6¨°vÑ(>Ô(>ð 4ð 4˜Ø#˜f |Ñ3Ð3Ð3Ð3Ð3øð	4ð 4r%   )r   ru   r�   rx   )r’   r�   r•   r–   r¡   r¢   s       @@r#   Úall_partial_orderingsr£   Ÿ   sw   øø€ Ý�ÑÔ€EØð !ð !‰ˆ�ØˆeŒ×Ò˜Ñ Ô Ð Ð ð4ð 4ð 4ð 4ð 4ð 4õ ��˜xÑ(Ô(Ñ)Ô)Ð)r%   c                ó�   — 	 || _         n<# t          $ r/ t          j        | j        | j        || j        | j        ¦  «        } Y nw xY w| S )ac  Return a function with a given __name__.

    Will assign to __name__ and return the original function if possible on
    the Python implementation, otherwise a new function will be constructed.

    This function should be phased out as much as possible
    in favor of @decorator.   Tests that "generate" many named tests
    should be modernized.

    )rŒ   Ú	TypeErrorÚtypesÚFunctionTypeÚ__code__Ú__globals__Ú__defaults__Ú__closure__)ÚfnÚnames     r#   Úfunction_namedr®   ±   s[   € ð
ØˆŒˆøÝð 
ð 
ð 
ÝÔØŒK˜œ¨¨r¬ÀÄñ
ô 
ˆˆˆð
øøøð €Is   ‚
 Š6AÁAc                óÈ   — |                       ¦   «         }	  ||g|¢R i |¤Ž}|                      ddd¦  «         |S #  t          j        ¦   «         } | j        |Ž }|s‚ |cY S xY w)a  Run the given function under the given contextmanager,
    simulating the behavior of 'with' to support older
    Python versions.

    This is not necessary anymore as we have placed 2.6
    as minimum Python version, however some tests are still using
    this structure.

    N)Ú	__enter__Ú__exit__rD   Úexc_info)Úctxr¬   ÚargÚkwrU   Úresultr²   Úraise_s           r#   Úrun_as_contextmanagerr¸   Å   s†   € ð �-Š-‰/Œ/€Cð
Ø��CÐ$˜#Ð$Ð$Ð$ Ð$Ð$ˆØ�Š�T˜4 Ñ&Ô&Ð&ØˆøðÝ”<‘>”>ˆØ�”˜xÐ(ˆØð 	ØàˆMˆMˆMøøøs	   –$; »$A!c                ó   — d„ | D ¦   «         S )zŠConverts the results of sql execution into a plain set of column tuples.

    Useful for asserting the results of an unordered query.
    c                ó,   — h | ]}t          |¦  «        ’ŒS r'   ©Útuple)Ú.0Úrows     r#   ú	<setcomp>zrowset.<locals>.<setcomp>ä   s   € Ð*Ð*Ð*˜3�E�#‰JŒJÐ*Ð*Ð*r%   r'   )Úresultss    r#   ÚrowsetrÁ   Þ   s   € ð +Ð* 'Ð*Ñ*Ô*Ð*r%   c                ó   — J | ¦   «         ‚r   r'   )Úmsgs    r#   ÚfailrÄ   ç   s   € Ø�#ÑÔÐr%   c                óx  — ddl m} t          j        ¦   «         }|d         }t	          |dd¦  «        }||_        	  | |i |¤Ž|                     ¦   «          |j        j        }|r7t          ||¦  «         | 
                    ¦   «                              ¦   «          nt          |t          j        ¦  «         ||_        S # |                     ¦   «          |j        j        }|r7t          ||¦  «         | 
                    ¦   «                              ¦   «          nt          |t          j        ¦  «         ||_        w xY w)ztProvide bound MetaData for a single test, dropping afterwards.

    Legacy; use the "metadata" pytest fixture.

    r
   )Úfixturesr   ÚmetadataN)Ú rÆ   r   r   ÚgetattrrÇ   Úclose_all_sessionsÚbaseÚ_connection_fixture_connectionÚdrop_all_tables_from_metadataÚget_transactionÚcommitr   Údb)r¬   r"   rµ   rÆ   rÇ   ry   Ú	prev_metaÚcfcs           r#   Úprovide_metadatarÓ   ë   sS  € ð ÐÐÐÐÐåŒÑ Ô €HØ�Œ7€DÝ˜˜j¨$Ñ/Ô/€IØ€D„Mð"Øˆr�4ˆ˜2ˆˆð 	×#Ò#Ñ%Ô%Ð%ð ŒmÔ:ˆØð 	?õ *¨(°CÑ8Ô8Ð8ð
 ×ÒÑ!Ô!×(Ò(Ñ*Ô*Ð*Ð*å)¨(µF´IÑ>Ô>Ð>Ø!ˆŒˆøð# 	×#Ò#Ñ%Ô%Ð%ð ŒmÔ:ˆØð 	?õ *¨(°CÑ8Ô8Ð8ð
 ×ÒÑ!Ô!×(Ò(Ñ*Ô*Ð*Ð*å)¨(µF´IÑ>Ô>Ð>Ø!ˆŒÐ!Ð!Ð!Ð!s   »B= Â=A<D9c                 óú   ‡— t          ¦   «         Š| D ]}‰                     |¦  «         Œt          ‰¦  «        Št          j        ˆfd„| D ¦   «         ddt          ‰¦  «        z  z   d                     ‰¦  «        dœŽS )aq  A facade around @testing.combinations() oriented towards boolean
    keyword-based arguments.

    Basically generates a nice looking identifier based on the keywords
    and also sets up the argument names.

    E.g.::

        @testing.flag_combinations(
            dict(lazy=False, passive=False),
            dict(lazy=True, passive=False),
            dict(lazy=False, passive=True),
            dict(lazy=False, passive=True, raiseload=True),
        )
        def test_fn(lazy, passive, raiseload): ...

    would result in::

        @testing.combinations(
            ("", False, False, False),
            ("lazy", True, False, False),
            ("lazy_passive", True, True, False),
            ("lazy_passive", True, True, True),
            id_="iaaa",
            argnames="lazy,passive,raiseload",
        )
        def test_fn(lazy, passive, raiseload): ...

    c                óŽ   •‡— g | ]@Šd                       ˆfd„‰D ¦   «         ¦  «        ft          ˆfd„‰D ¦   «         ¦  «        z   ‘ŒAS )Ú_c              3  óH   •K  — | ]}‰                      |d ¦  «        ¯|V — ŒdS ©FN©rG   ©r½   r^   r0   s     €r#   ú	<genexpr>z/flag_combinations.<locals>.<listcomp>.<genexpr>?  s4   øè è € Ð9Ð9˜A¨¯ª¨q°%©¬Ð9�aÐ9Ð9Ð9Ð9Ð9Ð9r%   c              3  óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS rØ   rÙ   rÚ   s     €r#   rÛ   z/flag_combinations.<locals>.<listcomp>.<genexpr>@  s/   øè è € Ð2Ð2¨�A—E’E˜!˜U‘O”OÐ2Ð2Ð2Ð2Ð2Ð2r%   )rO   r¼   )r½   r0   Úkeyss    @€r#   ú
<listcomp>z%flag_combinations.<locals>.<listcomp>>  su   øø€ ð 

ð 

ð 

ð ð �XŠXÐ9Ð9Ð9Ð9 Ð9Ñ9Ô9Ñ9Ô9Ð;ÝÐ2Ð2Ð2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2ñ3ð

ð 

ð 

r%   r—   Úaú,)Úid_Úargnames)ru   ÚupdateÚsortedr   Úcombinationsr}   rO   )rå   r0   rÝ   s     @r#   Úflag_combinationsræ     sœ   ø€ õ> ‰5Œ5€Dàð ð ˆØ�Š�A‰Œˆˆå�$‰<Œ<€DåÔð

ð 

ð 

ð 

ð "ð

ñ 

ô 

ð
 �3�˜T™œ‘?Ñ#Ø—’˜$‘”ðð ð ð r%   c                óÆ   ‡ ‡— t          ‰ ¦  «        } ‰ d„ |d         D ¦   «         Ž }ˆ fd„Št          j        ˆfd„t          t	          |¦  «        ¦  «        D ¦   «         i |¤ŽS )Nc                ó4   — g | ]}t          j        ¦   «         ‘ŒS r'   )r   ÚMock)r½   r´   s     r#   rÞ   z'lambda_combinations.<locals>.<listcomp>K  s   € Ð @Ð @Ð @°¥¤¡¤Ð @Ð @Ð @r%   r   c                ó*   •‡ — ˆˆ fd„}d‰ z  |_         |S )Nc                 ó    •—  ‰di | ¤Ž‰         S )Nr'   r'   )rµ   Úlambda_arg_setsÚposs    €€r#   Úfixturez<lambda_combinations.<locals>.create_fixture.<locals>.fixtureN  s   ø€ Ø"�?Ð(Ð( RÐ(Ð(¨Ô-Ð-r%   zfixture_%3.3d)rŒ   )rí   rî   rì   s   ` €r#   Úcreate_fixturez+lambda_combinations.<locals>.create_fixtureM  s6   øø€ ð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð +¨SÑ0ˆÔØˆr%   c                ó(   •— g | ]} ‰|¦  «        f‘ŒS r'   r'   )r½   r—   rï   s     €r#   rÞ   z'lambda_combinations.<locals>.<listcomp>U  s&   ø€ Ð	=Ð	=Ð	= 1ˆ>ˆ>˜!ÑÔÐ
Ð	=Ð	=Ð	=r%   )r   r   rå   r3   r}   )rì   rµ   r"   Úarg_setsrï   s   `   @r#   Úlambda_combinationsrò   H  s�   øø€ Ý! /Ñ2Ô2€DàˆÐ @Ð @¸¸Q¼Ð @Ñ @Ô @ÐA€Hðð ð ð ð õ ÔØ	=Ð	=Ð	=Ð	=­­c°(©m¬mÑ(<Ô(<Ð	=Ñ	=Ô	=ðØACðð ð r%   c                óà   ‡— t          | ¦  «        d         }ˆfd„|D ¦   «         }t          | j        ¦  «        }|                     ‰¦  «         t	          j        | j        |¦  «        } |di |¤ŽS )zÝGiven a no-arg lambda and a namespace, return a new lambda that
    has all the values filled in.

    This is used so that we can have module-level fixtures that
    refer to instance-level variables using lambdas.

    r   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS r'   )r�   )r½   r´   rµ   s     €r#   ú
<dictcomp>z"resolve_lambda.<locals>.<dictcomp>c  s%   ø€ Ð:Ð:Ð:¨#�S˜"Ÿ&š& ™+œ+Ð:Ð:Ð:r%   r'   )r   Údictr©   rã   r¦   r§   r¨   )Ú__fnrµ   Úpos_argsÚpass_pos_argsÚglbÚnew_fns    `    r#   Úresolve_lambdarü   Y  sy   ø€ õ & dÑ+Ô+¨AÔ.€HØ:Ð:Ð:Ð:°Ð:Ñ:Ô:€MÝ
ˆtÔÑ
 Ô
 €CØ‡J‚Jˆr�N„N€NÝÔ ¤¨sÑ3Ô3€FØˆ6Ð"Ð"�MÐ"Ð"Ð"r%   Úfunctionc                ó   ‡ — ˆ fd„}|S )z&Provide MetaData for a pytest fixture.c                óL   •‡ — ˆ fd„} t          j        ‰¬¦  «        |¦  «        S )Nc              3  ó&  •K  — t          j        ¦   «         x}| _        	  ‰| |¦  «        }|                     t          j        ¦  «         |V — |                     t          j        ¦  «         d S # |                     t          j        ¦  «         w xY wr   )r   r   rÇ   Ú
create_allr   rÐ   Údrop_all)ry   rÇ   r¶   r¬   s      €r#   Úrun_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddln  sŠ   øè è € Ý'-¤Ñ'8Ô'8Ð8ˆH�t”}ð-Ø˜˜D (Ñ+Ô+�Ø×#Ò#¥F¤IÑ.Ô.Ð.ð ���à×!Ò!¥&¤)Ñ,Ô,Ð,Ð,Ð,ø�×!Ò!¥&¤)Ñ,Ô,Ð,Ð,øøøs   Ÿ/A/ Á/!B)Úscope)r   rî   )r¬   r  Úddls   ` €r#   Údecoratez"metadata_fixture.<locals>.decoratem  s<   øø€ ð		-ð 		-ð 		-ð 		-ð 		-ð )�vŒ~ CÐ(Ñ(Ô(¨Ñ1Ô1Ð1r%   r'   )r  r  s   ` r#   Úmetadata_fixturer  j  s#   ø€ ð2ð 2ð 2ð 2ð 2ð €Or%   c                 ó,   ‡ — t           ˆ fd„¦   «         }|S )ziForce the given table names to be dropped after test complete,
    isolating for foreign key cycles

    c                óì   •— 	  | |i |¤Žt          t          j        t          t          j        ¦  «        ‰¬¦  «         S # t          t          j        t          t          j        ¦  «        ‰¬¦  «         w xY w)N)Úinclude_names)Údrop_all_tablesr   rÐ   r   )r¬   r"   rµ   Únamess      €r#   Úgozforce_drop_names.<locals>.go„  sc   ø€ ð	PØ�2�t�?˜r�?�?å�FœI¥w­v¬yÑ'9Ô'9ÈÐOÑOÔOÐOÐOø�O�FœI¥w­v¬yÑ'9Ô'9ÈÐOÑOÔOÐOÐOøøøs	   ƒ> ¾5A3r   )r  r  s   ` r#   Úforce_drop_namesr  ~  s4   ø€ õ ðPð Pð Pð Pñ „YðPð €Ir%   c                  ó"   — e Zd ZdZd„ Zd„ ZeZdS )Úadictz,Dict keys available as attributes.  Shadows.c                ój   — 	 | |         S # t           $ r t                               | |¦  «        cY S w xY wr   )ÚKeyErrorrö   Ú__getattribute__)ry   Úkeys     r#   r  zadict.__getattribute__‘  sH   € ð	4Ø˜”9ÐøÝð 	4ð 	4ð 	4Ý×(Ò(¨¨sÑ3Ô3Ð3Ð3Ð3ð	4øøøs   ‚
 Š%2±2c                ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc                ó    •— g | ]
}‰|         ‘ŒS r'   r'   )r½   r  ry   s     €r#   rÞ   z"adict.__call__.<locals>.<listcomp>˜  s   ø€ Ð0Ð0Ð0 C�d˜3”iÐ0Ð0Ð0r%   r»   )ry   rÝ   s   ` r#   Ú__call__zadict.__call__—  s&   ø€ ÝÐ0Ð0Ð0Ð0¨4Ð0Ñ0Ô0Ñ1Ô1Ð1r%   N)rŒ   r�   rŽ   Ú__doc__r  r  Úget_allr'   r%   r#   r  r  Ž  s9   € € € € € Ø6Ð6ð4ð 4ð 4ð2ð 2ð 2ð €G€G€Gr%   r  c                óÖ   ‡ ‡— ddl mŠ ˆˆ fd„}t          |t          ¦  «        s:|                     ¦   «         5 } ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S  ||¦  «         d S )Nr
   )Úenginesc                ó  •— ‰j                              | ¦  «         | j        j        sMddlm} |                     dd¬¦  «        5  ‰                     | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ‰                     | ¦  «         d S )Nr
   )Ú
assertionszCan't sort tablesF)Úassert_)Útesting_reaperÚprepare_for_drop_tablesÚdialectÚsupports_alterrÈ   r  Úexpect_warningsr  )Ú
connectionr  r  rÇ   s     €€r#   r  z)drop_all_tables_from_metadata.<locals>.go   sð   ø€ ØÔ×6Ò6°zÑBÔBÐBàÔ!Ô0ð 	*Ø$Ð$Ð$Ð$Ð$Ð$à×+Ò+Ø#¨Uð ,ñ ô ð .ð .ð ×!Ò! *Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .ð
 ×Ò˜jÑ)Ô)Ð)Ð)Ð)s   ÁA(Á(A,Á/A,)rÈ   r  rg   r   Úbegin)rÇ   Úengine_or_connectionr  r$  r  s   `   @r#   rÍ   rÍ   �  sâ   øø€ ØÐÐÐÐÐð*ð *ð *ð *ð *ð *õ Ð*­JÑ7Ô7ð !Ø!×'Ò'Ñ)Ô)ð 	¨ZØˆBˆz‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ˆÐÑ Ô Ð Ð Ð s   ¸AÁAÁAr   c                ó4  — |�t          |¦  «        }|�|dk    s
J d¦   «         ‚|f}|                      ¦   «         5 }t          |                     |¬¦  «        ¦  «        D �]\  }}|rX|�|d         |vrŒ|                     t          t          |d         t          ¦   «         |d         ¬¦  «        ¦  «        ¦  «         Œ`|r¼| j        j	        sŒo|D ]¬\  }}	|�|d         |vrŒt          |d         t          ¦   «         t          dt          ¦  «        t          dt          ¦  «        |d         ¬¦  «        }
|                     t          t          |
j        j        g|
j        j        g|	¬	¦  «        ¦  «        ¦  «         Œ­�Œ 	 d d d ¦  «         d S # 1 swxY w Y   d S )
Nr   z2consider_schemas and schema are mutually exclusive)Úconsider_schemasr
   r   r   ÚxÚy)r­   )ru   r%  ÚreversedÚ%sort_tables_on_foreign_key_dependencyÚexecuter   r   r   r!  r"  r   r   r   r   Úcr)  r*  )ÚengineÚ	inspectorr   r(  r
  ÚconnÚ	table_keyÚfkcsÚt_keyÚfkcÚtbs              r#   r  r  ´  s6  € ð Ð Ý˜MÑ*Ô*ˆàÐØð $
ò 
ð 
ð 
à?ñ
ô 
ð 
ð #˜9Ðà	�Š‰Œð %˜4Ý'Ø×;Ò;Ø!1ð <ñ ô ñ 
ô  
ð $	ñ $	‰OˆI�tð
 ð à!Ð-Ø! !œ¨MÐ9Ð9àØ—’ÝÝ˜i¨œl­H©J¬J¸yÈ¼|ÐLÑLÔLñô ñô ð ð ð
 ð Ø”~Ô4ð ØØ"&ð ð ‘J�E˜3à%Ð1Ø! !œH¨MÐ9Ð9à ÝØ˜aœÝ ™
œ
Ý˜s¥GÑ,Ô,Ý˜s¥GÑ,Ô,Ø$ Qœxðñ ô �Bð —L’LÝ&Ý0°"´$´&°¸B¼D¼F¸8È#ÐNÑNÔNñô ñô ð ð ùðA$	ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %s   »EFÆFÆFc                ó,   ‡ — t           ˆ fd„¦   «         }|S )Nc                óp   •— 	  | |i |¤Ž‰                      ¦   «          S # ‰                      ¦   «          w xY wr   )Ú_clear)r¬   r´   rµ   Ú	event_clss      €r#   r  z!teardown_events.<locals>.decorateí  sD   ø€ ð	Ø�2�s�>˜b�>�>à×ÒÑÔÐÐøˆI×ÒÑÔÐÐøøøs   ƒ Ÿ5r   )r:  r  s   ` r#   Úteardown_eventsr;  ì  s-   ø€ Ýðð ð ð ñ „Yðð €Or%   c                óú   ‡‡‡‡— d„ }t           t          t          t          t          t          t          |t
          t          t          t          iŠt          ¦   «         Št          d¦  «        Šˆˆˆˆfd„Š ‰| ¦  «        S )z�Returns the approximate memory footprint an object and all of its
    contents.

    source: https://code.activestate.com/recipes/577504/


    c                óN   — t          j        |                      ¦   «         ¦  «        S r   )r   Úfrom_iterableÚitems)r0   s    r#   Údict_handlerz total_size.<locals>.dict_handler   s   € ÝÔ" 1§7¢7¡9¤9Ñ-Ô-Ð-r%   r   c           
     ó<  •— t          | ¦  «        ‰v rdS ‰                     t          | ¦  «        ¦  «         t          | ‰¦  «        }‰                     ¦   «         D ]@\  }}t	          | |¦  «        r+|t          t          ‰ || ¦  «        ¦  «        ¦  «        z  } nŒA|S )Nr   )Úidr�   r   r?  rg   ÚsumÚmap)ÚoÚsÚtypÚhandlerÚall_handlersÚdefault_sizeÚseenÚsizeofs       €€€€r#   rL  ztotal_size.<locals>.sizeof  s¡   ø€ Ýˆa‰5Œ5�Dˆ=ˆ=Ø�1Ø�Š•�A‘”‰ŒˆÝ�a˜Ñ&Ô&ˆà(×.Ò.Ñ0Ô0ð 	ð 	‰LˆC�Ý˜!˜SÑ!Ô!ð Ø•S�˜V W W¨Q¡Z¤ZÑ0Ô0Ñ1Ô1Ñ1�Ø�ðð ˆr%   )r¼   rx   rC   r   rö   ru   Ú	frozensetr   )rE  r@  rI  rJ  rK  rL  s     @@@@r#   Ú
total_sizerN  ÷  sŠ   øøøø€ ð.ð .ð .õ 	�tÝ�dÝ�tÝˆlÝ�TÝ•4ð€Lõ ‰5Œ5€DÝ˜Q‘<”<€Lð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ˆ6�!‰9Œ9Ðr%   c                óÌ   — | g}t          ¦   «         }d}|rN|                     d¦  «        }||u r|dz  }n-t          |t          ¦  «        r|rt	          |¦  «        |gz   |z   }|°N|S )z�given a cache key tuple, counts how many instances of actual
    tuples are found.

    used to alert large jumps in cache key complexity.

    r   r
   )Úobjectr�   rg   r¼   rC   )ÚtupÚstackÚsentinelÚnum_elementsrž   s        r#   Úcount_cache_key_tuplesrU    sŠ   € ð ˆE€Eå‰xŒx€HØ€Là
ð 8Ø�yŠy˜‰|Œ|ˆØ�8ÐÐØ˜AÑˆLˆLÝ˜�eÑ$Ô$ð 	8Øð 8Ý˜T™
œ
 h ZÑ/°%Ñ7�ð ð 8ð Ðr%   Úsecondsrh   Úcleanupr	   c           	   #  ó  K  — t          j         ¦   «         }d V — t          j         ¦   «         |z
  }|| k    rJ	  |¦   «          t          j        d|d›d| › d�¦  «         d S # t          j        d|d›d| › d�¦  «         w xY wd S )Nztest took too long (z.4fz seconds > ú))Útimer   Ú	skip_test)rV  rW  ÚnowÚsecs       r#   Úskip_if_timeoutr^  3  sº   è è € õ Œ)‰+Œ+€CØ	€E€E€EÝ
Œ)‰+Œ+˜Ñ
€CØ
ˆW‚}€}ð	ØˆG‰IŒIˆIåÔØE sÐEÐEÐE¸7ÐEÐEÐEñô ð ð ð ø�FÔØE sÐEÐEÐE¸7ÐEÐEÐEñô ð ð øøøð	 €}s   ·
A ÁA=)r
   )rý   )Nr   N)rV  rh   rW  r	   )JÚ
__future__r   Úcollectionsr   r   Ú
contextlibrj   r    Ú	itertoolsr   r@   r/   r_   rI   rD   r   Útempfiler   rZ  r¦   Útypingr	   rÈ   r   r   r   r/  r   r   r   r   r   r   r   r   ÚsqlÚsql.sqltypesr   Úutilr   r   r   r   r$   Ú
gc_collectr(   r!   r*   r\   rb   rq   ru   rs   rš   r£   r®   r¸   rÁ   rÄ   rÓ   ræ   rò   rü   r  r  rö   r  rÍ   r  r;  rN  rU  Úcontextmanagerr^  r'   r%   r#   ú<module>rj     s2  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø )Ð )Ð )Ð )Ð )Ð )àð ðð ð ð 3Ð2€J��ð ”€Jðð ð ðDð Dð Dð#ð #ð #ðL+ð +ð +ð +ðð ð ðð ð ð ð �ñ ô ð ð2ð ð ð*ð *ð *ð$ð ð ð(ð ð ð2+ð +ð +ðð ð ð ð("ð ("ñ „ð("ðV.ð .ð .ðbð ð ð"#ð #ð #ð"ð ð ð ð(ð ð ð ð ð ð ð ˆDñ ô ð ð!ð !ð !ð4 ØØð5ð 5ð 5ð 5ðpð ð ð#ð #ð #ðLð ð ð, Ôðð ð ð ñ Ôðð ð r%   