§
    WøÁiÏ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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„ Z ej!        d„ ¦   «         Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'da(da)da*	 	 	 dId „Z+ej!        	 	 	 	 	 dJd!„¦   «         Z,d"„ Z-d#„ Z.d$„ Z/dKd%„Z0dKd&„Z1dKd'„Z2dKd(„Z3dKd)„Z4dKd*„Z5dKd+„Z6dKd,„Z7dKd-„Z8dKd.„Z9dKd/„Z:e:Z;dKd0„Z<dKd1„Z=e=Z>dKd2„Z?dKd3„Z@d4„ ZAd5„ ZBd6„ ZCd7„ ZDd8„ ZEd9„ ZFd:„ ZG	 dLd;„ZH G d<„ d=¦  «        ZIej!        dLd>„¦   «         ZJdMd?„ZKdMd@„ZL G dA„ dB¦  «        ZM G dC„ dD¦  «        ZN G dE„ dF¦  «        ZO G dG„ dH¦  «        ZPdS )Né    )Úannotations)ÚdefaultdictN)Úcopy)Úfilterfalseé   )Ú	assertsql)Úconfig)Úengines)Úmock)Údb_spec)Úfailé   )Úexc)Úschema)Úsql)Útypes)Úutil)Údefault)Úurl)ÚLABEL_STYLE_TABLENAME_PLUS_COL©Ú	decoratorc                 ó2   — t          t          j        | fi |¤ŽS )aÉ  Context manager which expects one or more warnings.

    With no arguments, squelches all SAWarning emitted via
    sqlalchemy.util.warn and sqlalchemy.util.warn_limited.   Otherwise
    pass string expressions that will match selected warnings via regex;
    all non-matching warnings are sent through.

    The expect version **asserts** that the warnings were in fact seen.

    Note that the test suite sets SAWarning warnings to raise exceptions.

    )Ú_expect_warnings_sqla_onlyÚsa_excÚ	SAWarning©ÚmessagesÚkws     úg/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/sqlalchemy/testing/assertions.pyÚexpect_warningsr!   %   s   € õ &¥fÔ&6¸ÐGÐGÀBÐGÐGÐGó    c              /  óÚ   K  — t          | ¦  «        }t          | t          ¦  «        r |t          j        ¦  «        sdV — dS t          |i |¤Ž5  dV — ddd¦  «         dS # 1 swxY w Y   dS )z›Context manager which expects one or more warnings on specific
    dialects.

    The expect version **asserts** that the warnings were in fact seen.

    N)r   Ú
isinstanceÚstrr	   Ú_currentr!   )Údbr   r   Úspecs       r    Úexpect_warnings_onr)   5   sÅ   è è € õ �2‰;Œ;€Då�"•cÑÔð  4 4­¬Ñ#8Ô#8ð Øˆˆˆˆˆå˜hÐ-¨"Ð-Ð-ð 	ð 	ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁA Á A$Á'A$c                 ó,   ‡ — t           ˆ fd„¦   «         }|S )z„Decorator form of expect_warnings().

    Note that emits_warning does **not** assert that the warnings
    were in fact seen.

    c                ó`   •— t          ‰ddiŽ5   | |i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S ©NÚassert_F)r!   ©ÚfnÚargsr   r   s      €r    Údecoratezemits_warning.<locals>.decorateN   s‰   ø€ å¨XÐ6 UÐ6Ð6ð 	#ð 	#Ø�2�t�?˜r�?�?ð	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ó   Ž#£'ª'r   ©r   r1   s   ` r    Úemits_warningr4   F   s/   ø€ õ ð#ð #ð #ð #ñ „Yð#ð €Or"   c                 ó2   — t          t          j        | fi |¤ŽS ©N)r   r   ÚSADeprecationWarningr   s     r    Úexpect_deprecatedr8   V   s)   € Ý%ÝÔ# Xðð Ø13ðð ð r"   c                 ó2   — t          t          j        | fi |¤ŽS r6   )r   r   ÚBase20DeprecationWarningr   s     r    Úexpect_deprecated_20r;   \   s)   € Ý%ÝÔ'¨ðð Ø57ðð ð r"   c                ó0   ‡ ‡— t           ˆ ˆfd„¦   «         }|S )aV  Mark a test as emitting a warning on a specific dialect.

    With no arguments, squelches all SAWarning failures.  Or pass one or more
    strings; these will be matched to the root of the warning description by
    warnings.filterwarnings().

    Note that emits_warning_on does **not** assert that the warnings
    were in fact seen.

    c                óh   •— t          ‰g‰¢R ddiŽ5   | |i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r,   )r)   )r/   r0   r   r'   r   s      €€r    r1   z"emits_warning_on.<locals>.decoraten   s”   ø€ å Ð=°HÐ=Ð=Ð=¨EÐ=Ð=ð 	#ð 	#Ø�2�t�?˜r�?�?ð	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ó   ’'§+®+r   )r'   r   r1   s   `` r    Úemits_warning_onr?   b   s5   øø€ õ ð#ð #ð #ð #ð #ñ „Yð#ð €Or"   c                 ó,   ‡ — t           ˆ fd„¦   «         }|S )a+  Mark a test as immune from fatal deprecation warnings.

    With no arguments, squelches all SADeprecationWarning failures.
    Or pass one or more strings; these will be matched to the root
    of the warning description by warnings.filterwarnings().

    As a special case, you may pass a function name prefixed with //
    and it will be re-written as needed to match the standard warning
    verbiage emitted by the sqlalchemy.util.deprecated decorator.

    Note that uses_deprecated does **not** assert that the warnings
    were in fact seen.

    c                ó`   •— t          ‰ddiŽ5   | |i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S r,   )r8   r.   s      €r    r1   z!uses_deprecated.<locals>.decorate†   s‰   ø€ å Ð8°%Ð8Ð8ð 	#ð 	#Ø�2�t�?˜r�?�?ð	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r2   r   r3   s   ` r    Úuses_deprecatedrB   v   s/   ø€ õ  ð#ð #ð #ð #ñ „Yð#ð €Or"   TFc                ó,   — t          | ||||d¬¦  «        S )zžSQLAlchemy internal use only _expect_warnings().

    Alembic is using _expect_warnings() directly, and should be updated
    to use this new interface.

    T)ÚregexÚ
search_msgr-   Úraise_on_any_unexpected)Ú_expect_warnings)Úexc_clsr   rD   rE   r-   s        r    r   r   “   s-   € õ ØØØØØØ $ðñ ô ð r"   c           	   #  óÄ  ‡‡‡‡‡‡	‡
K  — ‰s‰rd„ |D ¦   «         Šnt          |¦  «        Št          �Wt          €J ‚t          €J ‚t                               ‰¦  «         t                               ‰¦  «         t          | fz  ad V — d S t          ‰¦  «        xŠ
a‰a| fa‰rd„ Š	nt          j        Š	ˆˆˆ	ˆˆˆ
ˆfd„}t          j
        d|¦  «        5  	 d V — d xaxaa|r.‰
r,J dd                     ˆfd„‰
D ¦   «         ¦  «        z  ¦   «         ‚n;# d xaxaa|r.‰
r,J dd                     ˆfd„‰
D ¦   «         ¦  «        z  ¦   «         ‚w xY wd d d ¦  «         d S # 1 swxY w Y   d S )Nc                óf   — g | ].}t          j        |t           j        t           j        z  ¦  «        ‘Œ/S © )ÚreÚcompileÚIÚS)Ú.0Úmsgs     r    ú
<listcomp>z$_expect_warnings.<locals>.<listcomp>·   s,   € ÐDÐDÐD°C•2”:˜c¥2¤4­"¬$¡;Ñ/Ô/ÐDÐDÐDr"   c                ó&   — t          d| z  ¦  «        ‚)NzGot unexpected warning: %r)ÚAssertionError)rQ   Úargr   s      r    Ú	real_warnz#_expect_warnings.<locals>.real_warnË   s   € Ý$Ð%AÀCÑ%GÑHÔHÐHr"   c                óª  •— t          | t          ¦  «        rt          | ¦  «        }t          | ¦  «        } n|r	|d         }nd }|rt	          |t          ¦  «        s‰s ‰| g|¢R i |¤ŽS d S ‰s‰sd S ‰D ]P}‰	r|                     | ¦  «        s‰r|                     | ¦  «        s‰s|| k    r‰
                     |¦  «          d S ŒQ‰s ‰| g|¢R i |¤Ž d S d S )Nr   )r$   Ú_EXC_CLSÚtyper%   Ú
issubclassÚsearchÚmatchÚdiscard)rQ   rU   r   Ú	exceptionÚfilter_ÚfiltersrF   rV   rD   rE   ÚseenÚsquelch_other_warningss        €€€€€€€r    Úour_warnz"_expect_warnings.<locals>.our_warnÑ   sN  ø€ Ý˜#�xÑ(Ô(ð !Ý  ™IœI�	Ý˜#‘h”h��Øð !Ø œF�	�	à �	àð ¥J¨y½(Ñ$CÔ$Cð Ø-ð Ø$˜9 SÐ5¨3Ð5Ð5Ð5°"Ð5Ð5Ð5à�Fàð Ð#:ð Ø�à"ð 
/ð 
/�àðØ$+§N¢N°3Ñ$7Ô$7ðàðà")§-¢-°Ñ"4Ô"4ðð "ðð '.°¢n nà—L’L Ñ)Ô)Ð)Ø�E�Eøà-ð /Ø�I˜cÐ. CÐ.Ð.Ð.¨2Ð.Ð.Ð.Ð.Ð.ð/ð /r"   zwarnings.warnzWarnings were not seen: %sz, c              3  ó4   •K  — | ]}d ‰r|j         n|z  V — ŒdS )z%rN)Úpattern)rP   ÚsrD   s     €r    ú	<genexpr>z#_expect_warnings.<locals>.<genexpr>ö   sL   øè è € ð Nð NØ?@˜¨UÐ 9 ¤	 	¸Ñ:ðNð Nð Nð Nð Nð Nr"   )ÚlistÚ_FILTERSÚ_SEENrX   ÚextendÚupdateÚsetÚwarningsÚwarnr   ÚpatchÚjoin)rH   r   rD   rE   r-   rF   rb   rc   r`   rV   ra   s     `` `` @@@r    rG   rG   ª   s—  øøøøøøøè è € ð ð !�
ð !ØDÐD¸8ÐDÑDÔDˆˆå�x‘.”.ˆåÐõ Ð Ð Ð ÝÐ#Ð#Ð#Ý�Š˜Ñ Ô Ð Ý�Š�WÑÔÐÝ�W�JÑˆØˆˆˆˆˆå˜7‘|”|Ð#ˆˆuØˆØ�:ˆà"ð 	&ðIð Ið Ið Iõ !œˆIð	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/õ< ŒZ˜¨Ñ2Ô2ð 		ð 		ðØ���à.2Ð2�Ð2˜ 8àð Ø#ð ð Ð%AÀDÇIÂIð Nð Nð Nð NØDHðNñ Nô Nñ Eô Eñ &ñ ô ˜8øøð /3Ð2�Ð2˜ 8àð Ø#ð ð Ð%AÀDÇIÂIð Nð Nð Nð NØDHðNñ Nô Nñ Eô Eñ &ñ ô ˜8˜8˜8˜8˜8ð		ð 		ð 		ñ 		ô 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		øøøð 		ð 		ð 		ð 		ð 		ð 		s*   ÃEÃDÃ7EÄ8EÅEÅEÅEc                 ó"   — t          ¦   «          dS )zÛCheck things that have to be finalized at the end of a test suite.

    Hardcoded at the moment, a modular system can be built here
    to support things like PG prepared transactions, tables all
    dropped, etc.

    N)Ú!_assert_no_stray_pool_connectionsrK   r"   r    Úglobal_cleanup_assertionsrt   û   s   € õ &Ñ'Ô'Ð'Ð'Ð'r"   c                 óB   — t           j                             ¦   «          d S r6   )r
   Útesting_reaperÚassert_all_closedrK   r"   r    rs   rs     s   € ÝÔ×,Ò,Ñ.Ô.Ð.Ð.Ð.r"   c                ó|   — t          | |z  ¦  «        }t          || z
  ¦  «        |k     sJ d||dz  | fz  ¦   «         ‚d S )Nz:Given int value %s is not within %d%% of expected value %séd   )ÚintÚabs)ÚexpectedÚreceivedÚvarianceÚdeviances       r    Úint_within_variancer€   
  s[   € Ý�8˜hÑ&Ñ'Ô'€HåˆH�xÑÑ Ô  8Ò+Ð+Ð+ØCØØ�3‰ØðGñ ñ 	,Ô+Ð+Ð+Ð+r"   c                óR   — t          j        || ¦  «        sJ |p| ›d|›�¦   «         ‚d S )Nú !~ )rL   r\   ©ÚaÚbrQ   s      r    Úeq_regexr†     s5   € ÝŒ8�A�q‰>Œ>Ð5Ð5˜3Ð5°°°°1°1Ð"5Ñ5Ô5ˆ>Ð5Ð5r"   c                ó4   — | |k    sJ |p| ›d|›�¦   «         ‚dS )z.Assert a == b, with repr messaging on failure.ú != NrK   rƒ   s      r    Úeq_r‰     ó)   € à�Š6ˆ6ˆ6�3Ð-¨¨¨¨1¨1Ð-‰6Œ6ˆ6ˆ6ˆ6r"   c                ó4   — | |k    sJ |p| ›d|›�¦   «         ‚dS )z.Assert a != b, with repr messaging on failure.z == NrK   rƒ   s      r    Úne_rŒ     rŠ   r"   c                ó4   — | |k    sJ |p| ›d|›�¦   «         ‚dS )z.Assert a <= b, with repr messaging on failure.rˆ   NrK   rƒ   s      r    Úle_rŽ   #  rŠ   r"   c                óH   — t          | |¦  «        sJ |p| ›d|›�¦   «         ‚d S )Nz is not an instance of ©r$   rƒ   s      r    Úis_instance_ofr‘   (  s6   € Ý�a˜ÑÔÐJÐJ˜SÐJÀQÀQÀQÈÈÐ$JÑJÔJÐÐJÐJr"   c                ó*   — t          | d |¬¦  «         d S ©N©rQ   )Úis_©r„   rQ   s     r    Úis_noner—   ,  s   € Ýˆˆ4�SÐÑÔÐÐÐr"   c                ó*   — t          | d |¬¦  «         d S r“   )Úis_notr–   s     r    Úis_not_nonerš   0  s   € Ý
ˆ1ˆd˜ÐÑÔÐÐÐr"   c                óD   — t          t          | ¦  «        d|¬¦  «         d S )NTr”   ©r•   Úboolr–   s     r    Úis_truerž   4  s#   € Ý�ˆQ‰Œ�˜3ÐÑÔÐÐÐr"   c                óD   — t          t          | ¦  «        d|¬¦  «         d S )NFr”   rœ   r–   s     r    Úis_falser    8  s#   € Ý�ˆQ‰Œ�˜CÐ Ñ Ô Ð Ð Ð r"   c                ó0   — | |u sJ |p| ›d|›�¦   «         ‚dS )z.Assert a is b, with repr messaging on failure.z is not NrK   rƒ   s      r    r•   r•   <  ó)   € à�ˆ6ˆ6ˆ6�3Ð1¨A¨A¨A¨q¨qÐ1‰6Œ6ˆ6ˆ6ˆ6r"   c                ó0   — | |usJ |p| ›d|›�¦   «         ‚dS )z2Assert a is not b, with repr messaging on failure.z is NrK   rƒ   s      r    r™   r™   A  s)   € à�Aˆ:ˆ:ˆ:�sÐ1¨A¨A¨A¨q¨qÐ1‰:Œ:ˆ:ˆ:ˆ:r"   c                ó0   — | |v sJ |p| ›d|›�¦   «         ‚dS )z.Assert a in b, with repr messaging on failure.z not in NrK   rƒ   s      r    Úin_r¥   J  r¢   r"   c                ó0   — | |vsJ |p| ›d|›�¦   «         ‚dS )z2Assert a in not b, with repr messaging on failure.z is in NrK   rƒ   s      r    Únot_inr§   O  s)   € à�Aˆ:ˆ:ˆ:�sÐ4¨q¨q¨q°!°!Ð4‰:Œ:ˆ:ˆ:ˆ:r"   c                óR   — |                       |¦  «        sJ |p| ›d|›�¦   «         ‚dS )z>Assert a.startswith(fragment), with repr messaging on failure.z does not start with N)Ú
startswith)r„   ÚfragmentrQ   s      r    Ústartswith_r«   X  sJ   € à�<Š<˜Ñ!Ô!ð ð  3ð $Ø	ˆˆØˆð+ñ ô Ð!ð ð r"   c                ó<  — t          j        dd| ¦  «        } t          j        dd| ¦  «        } t          j        dd| ¦  «        } t          j        dd|¦  «        }t          j        dd|¦  «        }t          j        dd|¦  «        }| |k    sJ |p| ›d|›�¦   «         ‚d S )Nz^\s+?|\nÚ z {2,}ú z\trˆ   )rL   Úsubrƒ   s      r    Úeq_ignore_whitespacer°   `  s›   € Ý
Œˆ{˜B Ñ"Ô"€AÝ
Œˆx˜˜aÑ Ô €AÝ
Œˆu�b˜!ÑÔ€AÝ
Œˆ{˜B Ñ"Ô"€AÝ
Œˆx˜˜aÑ Ô €AÝ
Œˆu�b˜!ÑÔ€Aà�Š6ˆ6ˆ6�3Ð-¨¨¨¨1¨1Ð-‰6Œ6ˆ6ˆ6ˆ6r"   c                ó`   — | j         | j        ur| j        sJ d| ›d| j         ›d�¦   «         ‚dS dS )aH  assert that any exception we're catching does not have a __context__
    without a __cause__, and that __suppress_context__ is never set.

    Python 3 will report nested as exceptions as "during the handling of
    error X, error Y occurred". That's not what we want to do.  we want
    these exceptions in a cause chain.

    Fz
Exception z> was correctly raised but did not set a cause, within context z as its cause.N)Ú__context__Ú	__cause__Ú__suppress_context__)r^   s    r    Ú _assert_proper_exception_contextrµ   k  s]   € ð 	Ô YÔ%8Ð8Ð8ØÔ.ð 	9ð	
ð 	
ð ˆyˆy˜)Ô/Ð/Ð/ð1ñ	
ô 	
ˆuð 	9Ð8Ð8Ð8r"   c                ó*   — t          | |||d¬¦  «        S )NT©Úcheck_context©Ú_assert_raises©Ú
except_clsÚ	callable_r0   r   s       r    Úassert_raisesr¾   €  s   € Ý˜* i°°rÈÐNÑNÔNÐNr"   c                ó&   — t          | |||¦  «        S r6   r¹   r»   s       r    Úassert_raises_context_okrÀ   „  s   € Ý˜* i°°rÑ:Ô:Ð:r"   c                ó,   — t          | ||||d¬¦  «        S )NT©rQ   r¸   r¹   ©r¼   rQ   r½   r0   Úkwargss        r    Úassert_raises_messagerÅ   ˆ  s&   € ÝØ�I˜t V°ÀDðñ ô ð r"   c                óh   — t          | dg¦  «        5   ||i |¤Žcddd¦  «         S # 1 swxY w Y   dS )a  legacy adapter function for functions that were previously using
    assert_raises with SAWarning or similar.

    has some workarounds to accommodate the fact that the callable completes
    with this approach rather than stopping at the exception raise.


    z.*N©r   )r¼   r½   r0   rÄ   s       r    Úassert_warnsrÈ   Ž  sŒ   € õ 
$ J°°Ñ	7Ô	7ð *ð *Øˆy˜$Ð) &Ð)Ð)ð*ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *r>   c                ón   — t          | |gdd¬¦  «        5   ||i |¤Žcddd¦  «         S # 1 swxY w Y   dS )aq  legacy adapter function for functions that were previously using
    assert_raises with SAWarning or similar.

    has some workarounds to accommodate the fact that the callable completes
    with this approach rather than stopping at the exception raise.

    Also uses regex.search() to match the given message to the error string
    rather than regex.match().

    TF)rE   rD   NrÇ   rÃ   s        r    Úassert_warns_messagerÊ   ›  sŸ   € õ 
$ØØ	ˆØØð	
ñ 
ô 
ð *ð *ð ˆy˜$Ð) &Ð)Ð)ð*ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *s   •*ª.±.c                ó*   — t          | ||||¬¦  «        S r“   r¹   rÃ   s        r    Ú assert_raises_message_context_okrÌ   ¯  s   € õ ˜* i°°vÀ3ÐGÑGÔGÐGr"   c                ór   — t          | ||¦  «        5 } ||i |¤Ž d d d ¦  «         n# 1 swxY w Y   |j        S r6   )Ú_expect_raisesÚerror)r¼   r½   r0   rÄ   rQ   r¸   Úecs          r    rº   rº   µ  s„   € õ 
˜
 C¨Ñ	7Ô	7ð #¸2Øˆ	�4Ð"˜6Ð"Ð"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #àŒ8€Os   ’	'§+®+c                  ó   — e Zd ZdZdS )Ú_ErrorContainerN)Ú__name__Ú
__module__Ú__qualname__rÏ   rK   r"   r    rÒ   rÒ   ½  s   € € € € € Ø€E€E€Er"   rÒ   c              #  ó\  K  — t          | t          ¦  «        rt          | t          ¦  «        st          | t          ¦  «        rt	          d¦  «        ‚t          ¦   «         }|rt          j        ¦   «         d         }	 |V — d}n�# | $ r•}||_        d}|�>t          |¦  «        }t          j        ||t          j        ¦  «        sJ |›d|›�¦   «         ‚|r|st          |¦  «         t          t          |¦  «                             d¦  «        ¦  «         Y d }~nd }~ww xY w~|s
J d¦   «         ‚d S )NzCUse expect_warnings for warnings, not expect_raises / assert_raisesr   FTr‚   úutf-8z#Callable did not raise an exception)r$   rY   rZ   ÚWarningÚ	TypeErrorrÒ   ÚsysÚexc_inforÏ   r%   rL   r[   ÚUNICODErµ   ÚprintÚencode)r¼   rQ   r¸   rÐ   Úare_we_already_in_a_tracebackÚsuccessÚerrÚerror_as_strings           r    rÎ   rÎ   Á  s}  è è € õ 	�:�tÑ$Ô$ð
å�z¥7Ñ+Ô+ð
õ �j¥'Ñ*Ô*ð
õ
 ð,ñ
ô 
ð 	
õ 
Ñ	Ô	€BØð :Ý(+¬©¬°qÔ(9Ð%ð(ØˆˆˆØˆˆøØð (ð (ð (ØˆŒØˆØˆ?õ " #™hœhˆOÝ”9˜S /µ2´:Ñ>Ô>ð ð Ø��Ø�ðAñ ô Ð>ð ð 	2Ð!>ð 	2Ý,¨SÑ1Ô1Ð1Ý�c�#‰hŒh�oŠo˜gÑ&Ô&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøð( 	ð Ð9Ð9Ð9Ñ9Ô9ˆ7Ð9Ð9s   Á;B ÂDÂBDÄDc                ó$   — t          | |¬¦  «        S )Nr·   ©rÎ   )r¼   r¸   s     r    Úexpect_raisesrå   ì  s   € Ý˜*°MÐBÑBÔBÐBr"   c                ó&   — t          | ||¬¦  «        S )NrÂ   rä   )r¼   rQ   r¸   s      r    Úexpect_raises_messagerç   ð  s   € Ý˜*¨#¸]ÐKÑKÔKÐKr"   c                  ó>   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„ZdS )ÚAssertsCompiledSQLNFTc           	     óh  ‡‡/‡0‡1‡2‡3‡4— |r"t          j        ¦   «         Š|‰_        |‰_        nÜ|rd Šn×‰€t	          | dd ¦  «        Š‰€t
          j        j        Šn°‰dk    s‰dk    r=‰dk    rt          j        ¦   «         Šnt          j        d¦  «        Š|‰_        |‰_        ng‰dk    rt          j        ¦   «         ŠnMt          ‰t          ¦  «        r8t          j                             ‰¦  «                             ¦   «         ¦   «         Š|r|‰_        i }i }|r||d<   |�t!          |¦  «        |d<   |rd|d	<   |rd|d
<   |rd|d<   |rd|d<   |rd|d<   |st	          | dd¦  «        rt"          j        |d<   ddlm} t          ||j        ¦  «        r"|                     ¦   «         }t.          |_        |}|r||d<    G d„ d¦  «        Š/ G ˆ/fd„d¦  «        }  ||¦  «        j        d6d‰i|¤ŽŠ0t          |t4          j        ¦  «        r|j        }|rt;          |¦  «         n+|                     ¦   «         }|rt;          |d         ¦  «         t?          t	          ‰0di ¦  «        ¦  «        }|                      d¦  «         !                    dd¦  «        }tE          dt          ‰0¦  «        z   |z                         d¦  «        ¦  «         tG          j$        ddt          ‰0¦  «        ¦  «        }tK          |||›d |›d!‰›�¦  «         |�R|r-‰0 &                    |d¬"¦  «        Š1tK          ‰1j'        |¦  «         n#tK          ‰0 (                    |¦  «        |¦  «         |	��|rF‰0 &                    |d¬"¦  «        Š1tK          tS          ˆ1fd#„‰1j*        D ¦   «         ¦  «        |	¦  «         nE‰0 (                    |d¬"¦  «        Š3tK          tS          ˆ3fd$„‰0j*        D ¦   «         ¦  «        |	¦  «         |
�tK          ‰0j+        |
¦  «         |�!tK          ˆ0fd%„‰0j,        D ¦   «         |¦  «         |�!tK          ˆ0fd&„‰0j-        D ¦   «         |¦  «         |�rêt	          ‰0dd ¦  «        �rÚˆfd'„} |d(d¦  «        }  |j        d6d| i|¤Ž}!tG          j$        ddt          |!¦  «        ¦  «        } |dd¦  «        }" |j        d6d|"i|¤Ž}#t!          |#j*        ¦  «        }$|#j.        }%|#j-        |#j,        z  D ]!}&|#j/        |&         Š2‰2|$v rˆ2fd)„|$D ¦   «         }$Œ"g Š4ta          t           ¦  «        }'|$D ]›}(	 |(|'v r|'|(         d*         })nd})|% 1                    |(|(¦  «        }*| 2                    d+|*›d,�|)¦  «        d-z   }+‰4 3                    |+¦  «         |'|(          3                    |+¦  «         Œ|# th          $ r d.|(›d/|›�},J |,¦   «         ‚w xY wtk          ˆ4fd0„tm          d1to          ‰4¦  «        ¦  «        D ¦   «         ¦  «        }-d2„ tq          ts          ‰4|$¦  «        ¦  «        D ¦   «         }.d3|$›d4|.›d5|›�},tu          |-|,¦  «         d S d S d S )7NÚ__dialect__r   Údefault_qmarkÚqmarkÚdefault_enhancedÚschema_translate_mapÚcolumn_keysTÚliteral_bindsÚrender_postcompileÚ"use_literal_execute_for_simple_intÚfor_executemanyÚrender_schema_translateÚassert_from_lintingFÚlintingr   )ÚormÚcompile_kwargsc                  ó   — e Zd Zd„ ZdS )ú5AssertsCompiledSQL.assert_compile.<locals>.DontAccessc                ó    — t          d¦  «        ‚)Nz=compiler accessed .statement; use compiler.current_executable)ÚNotImplementedError)ÚselfÚkeys     r    Ú__getattribute__zFAssertsCompiledSQL.assert_compile.<locals>.DontAccess.__getattribute__O  s   € Ý)ð2ñô ð r"   N)rÓ   rÔ   rÕ   r   rK   r"   r    Ú
DontAccessrû   N  s#   € € € € € ðð ð ð ð r"   r  c                  óH   •— e Zd Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zˆ fd„Z	dS )ú>AssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccessc                ó$  — || _         i | _        t          |dd¦  «        | _        | j        rb|j        | _        t          |d¦  «        r|j        | _        t          |d¦  «        r|j        | _        t          |d¦  «        r|j        | _        d S d S d S )NÚsupports_executionFÚ
_returningÚ_inlineÚ_return_defaults)	Útest_statementÚ_annotationsÚgetattrr  Ú_execution_optionsÚhasattrr  r  r  )rþ   r	  s     r    Ú__init__zGAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess.__init__V  s»   € Ø&4�Ô#Ø$&�Ô!Ý*1Ø"Ð$8¸%ñ+ô +�Ô'ð Ô*ð PØ.<Ô.O�DÔ+å˜~¨|Ñ<Ô<ð DØ*8Ô*C˜œÝ˜~¨yÑ9Ô9ð >Ø'5Ô'=˜œÝ˜~Ð/AÑBÔBð PØ0>Ô0O˜Ô-Ð-Ð-ðPð PðPð Pr"   c                ó   — | j         j        S r6   )r	  Ú_variant_mapping©rþ   s    r    r  zOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._variant_mappingg  s   € àÔ*Ô;Ð;r"   c                ó4   — | j                              ¦   «         S r6   )r	  Ú_default_dialectr  s    r    r  zOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._default_dialectk  s   € ØÔ*×;Ò;Ñ=Ô=Ð=r"   c                ó6   —  | j         j        j        | fd|i|¤ŽS )NÚdialect)r	  rM   Ú__func__©rþ   r  r   s      r    rM   zFAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess.compilen  s7   € Ø;�tÔ*Ô2Ô;Øðð Ø")ðØ-/ðð ð r"   c                ó4   —  | j         j        j        | |fi |¤ŽS r6   )r	  Ú	_compilerr  r  s      r    r  zHAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compilers  s1   € Ø=�tÔ*Ô4Ô=Ø˜'ðð Ø%'ðð ð r"   c                óö   •— t          |d¦  «        rVt          j                             |d ‰¦   «         ¦  «        5   | j        j        |fi |¤Žcd d d ¦  «         S # 1 swxY w Y   d S  | j        j        |fi |¤ŽS )NÚ	statement)r  r   rp   Úobjectr	  Ú_compiler_dispatch)rþ   ÚcompilerrÄ   r  s      €r    r  zQAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compiler_dispatchx  só   ø€ Ý˜8 [Ñ1Ô1ð 
Ýœ×*Ò*Ø  +¨z¨z©|¬|ñô ð ð ð  F˜tÔ2ÔEØ$ð ð  Ø(.ð ð  ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð B˜4Ô.ÔAØ ðð Ø$*ðð ð s   »AÁAÁ"AN)
rÓ   rÔ   rÕ   r  Úpropertyr  r  rM   r  r  )r  s   €r    ÚCheckCompilerAccessr  U  sˆ   ø€ € € € € ðPð Pð Pð" ð<ð <ñ ŒXð<ð>ð >ð >ðð ð ð
ð ð ð
ð ð ð ð ð ð r"   r   r  Úparamsr×   ÚasciiÚignorez
SQL String:
z[\n\t]r­   rˆ   z on dialect )Úescape_namesc                ó*   •— g | ]}‰j         |         ‘ŒS rK   )Ú
parameters)rP   ÚxÚexpanded_states     €r    rR   z5AssertsCompiledSQL.assert_compile.<locals>.<listcomp>ª  s1   ø€ ð ð ð à !ð +Ô5°aÔ8ðð ð r"   c                ó    •— g | ]
}‰|         ‘ŒS rK   rK   )rP   r'  Úps     €r    rR   z5AssertsCompiledSQL.assert_compile.<locals>.<listcomp>³  s   ø€ Ð7Ð7Ð7 A˜1˜Qœ4Ð7Ð7Ð7r"   c                ó6   •— i | ]}‰j         |         |j        “ŒS rK   ©Ú
bind_namesÚeffective_value©rP   r…   Úcs     €r    ú
<dictcomp>z5AssertsCompiledSQL.assert_compile.<locals>.<dictcomp>¸  ó4   ø€ ð ð ð àð ”L ”O QÔ%6ðð ð r"   c                ó6   •— i | ]}‰j         |         |j        “ŒS rK   r,  r/  s     €r    r1  z5AssertsCompiledSQL.assert_compile.<locals>.<dictcomp>À  r2  r"   c                óB   •— t          ‰¦  «        }| |_        ||_        |S r6   )r   Ú
paramstyleÚ
positional)r5  r6  Úcpr  s      €r    Úget_dialectz6AssertsCompiledSQL.assert_compile.<locals>.get_dialectÈ  s!   ø€ Ý˜'‘]”]�Ø *�”Ø *�”Ø�	r"   Úpyformatc                ó    •— g | ]
}|‰k    ¯|‘ŒS rK   rK   )rP   ÚvÚnames     €r    rR   z5AssertsCompiledSQL.assert_compile.<locals>.<listcomp>Ü  s   ø€ Ð=Ð=Ð= A°1¸²9°9˜a°9°9°9r"   éÿÿÿÿz%(z)sr   zExpected to find bindparam z in c              3  óB   •K  — | ]}‰|d z
           ‰|         k     V — ŒdS )r   NrK   )rP   ÚiÚ	positionss     €r    rg   z4AssertsCompiledSQL.assert_compile.<locals>.<genexpr>í  sI   øè è € ð ð àð ˜!˜a™%Ô  9¨Q¤<Ò/ðð ð ð ð ð r"   r   c                ó   — g | ]\  }}|‘ŒS rK   rK   )rP   Ú_r;  s      r    rR   z5AssertsCompiledSQL.assert_compile.<locals>.<listcomp>ò  s   € ÐEÐEÐE™d˜a ˜ÐEÐEÐEr"   zOrder of parameters z+ does not match the order in the statement z. Statement rK   );r   ÚDefaultDialectÚsupports_default_valuesÚsupports_default_metavaluer  r	   r'   r  ÚStrCompileDialectr$   r%   r   ÚURLÚcreater8  Údefault_schema_namerh   r   ÚFROM_LINTINGÚ
sqlalchemyrø   ÚQueryÚ_statement_20r   Ú_label_stylerM   ÚsqltypesÚ
TypeEngineÚ_static_cache_keyÚhashÚ_generate_cache_keyÚreprrÞ   ÚdecoderÝ   rL   r¯   r‰   Úconstruct_expanded_stater&  Úconstruct_paramsÚtupleÚpositiontupÚprefetchÚliteral_execute_paramsÚpost_compile_paramsÚescaped_bind_namesr-  r   ÚgetÚindexÚappendÚ
ValueErrorÚallÚrangeÚlenÚsortedÚziprž   )5rþ   ÚclauseÚresultr!  Úcheckparamsrô   Úcheck_literal_executeÚcheck_post_paramr  ÚcheckpositionalÚcheck_prefetchÚuse_default_dialectÚallow_dialect_selectrD  rE  rñ   rò   rï   rõ   rI  Úfrom_lintingÚcheck_param_orderró   r   rù   rø   Ústmtr   Úcache_key_no_warningsÚ	param_strÚccr8  Úpyformat_dialectÚ
pyformat_cÚqmark_dialectÚqmark_cÚvaluesÚescapedÚ
post_paramÚpos_by_valuer;  ÚstartÚescÚposrQ   Úorderedr|   r  r0  r(  r<  r*  r@  s5           `                                      @@@@@@r    Úassert_compilez!AssertsCompiledSQL.assert_compileõ  sL  øøøøøøø€ ð2 ð 	BÝÔ,Ñ.Ô.ˆGØ.EˆGÔ+Ø1KˆGÔ.Ð.Ø!ð 	BØˆGˆGàˆÝ! $¨°tÑ<Ô<�àˆÝ œ)Ô+��Ø˜IÒ%Ð%¨°OÒ)CÐ)CØ˜iÒ'Ð'Ý%Ô4Ñ6Ô6�G�Gå%Ô4°WÑ=Ô=�GØ2I�Ô/Ø5O�Ô2Ð2ØÐ.Ò.Ð.Ý!Ô3Ñ5Ô5��Ý˜G¥SÑ)Ô)ð BÝœ'Ÿ.š.¨Ñ1Ô1×=Ò=Ñ?Ô?ÑAÔA�àð 	>Ø*=ˆGÔ'àˆØˆàð 	>Ø)=ˆBÐ%Ñ&àÐÝ $ V¡¤ˆBˆ}Ñàð 	3Ø.2ˆN˜?Ñ+àð 	8Ø37ˆNÐ/Ñ0à-ð 	HØCGˆNÐ?Ñ@àð 	)Ø$(ˆBÐ Ñ!à"ð 	1Ø,0ˆBÐ(Ñ)àð 	-�7 4Ð)>ÀÑFÔFð 	-ÝÔ,ˆBˆy‰Mà"Ð"Ð"Ð"Ð"Ð"å�f˜cœiÑ(Ô(ð 	Ø×'Ò'Ñ)Ô)ˆDÝ >ˆDÔØˆFàð 	2Ø#1ˆBÐÑ ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð.	ð .	ð .	ð .	ð .	ð .	ð .	ñ .	ô .	ð .	ðf 0ÐÐ Ñ'Ô'Ô/ÐFÐF¸ÐFÀ2ÐFÐFˆå�f�hÔ1Ñ2Ô2ð 	/Ø$*Ô$<Ð!Ø$ð ,ÝÐ*Ñ+Ô+Ð+øà$*×$>Ò$>Ñ$@Ô$@Ð!Ø$ð /ÝÐ*¨1Ô-Ñ.Ô.Ð.å�  H¨bÑ1Ô1Ñ2Ô2ˆ	Ø×$Ò$ WÑ-Ô-×4Ò4°W¸hÑGÔGˆ	ÝÐ ¥3 q¡6¤6Ñ)¨IÑ5×=Ò=¸gÑFÔFÑGÔGÐGåŒV�I˜r¥3 q¡6¤6Ñ*Ô*ˆåˆB�°B°B°B¸¸¸ÀÀÐHÑIÔIÐIàÐ"Ø!ð =Ø!"×!;Ò!;Ø¨ð "<ñ "ô "�õ �NÔ-¨{Ñ;Ô;Ð;Ð;å�A×&Ò& vÑ.Ô.°Ñ<Ô<Ð<ØÐ&Ø!ð KØ!"×!;Ò!;Ø¨ð "<ñ "ô "�õ Ýðð ð ð à%3Ô%?ðñ ô ñô ð $ñô ð ð ð ×&Ò& v¸EÐ&ÑBÔB�Ý•EÐ7Ð7Ð7Ð7¨¬Ð7Ñ7Ô7Ñ8Ô8¸/ÑJÔJÐJØÐ%Ý�”
˜NÑ+Ô+Ð+Ø Ð,Ýðð ð ð àÔ5ðñ ô ð &ñô ð ð Ð'Ýðð ð ð àÔ2ðñ ô ð !ñô ð ð ñ 3	"¥¨¨H°dÑ!;Ô!;ñ 3	"ðð ð ð ð ð  +˜{¨:°uÑ=Ô=ÐØ'˜œÐGÐGÐ0@ÐGÀBÐGÐGˆJÝ”6˜) R­¨Z©¬Ñ9Ô9ˆDà'˜K¨°Ñ6Ô6ˆMØ$�f”nÐAÐA¨]ÐA¸bÐAÐAˆGÝ˜'Ô-Ñ.Ô.ˆFØÔ0ˆGð Ô+¨gÔ.LÑLð>ð >�
ð Ô)¨*Ô5�Ø˜6�>�>Ø=Ð=Ð=Ð=¨Ð=Ñ=Ô=�FøØˆIÝ&¥tÑ,Ô,ˆLØð &ð &�ð&Ø˜LÐ(Ð(Ø ,¨Q¤°Ô 3˜˜à !˜Ø!Ÿ+š+ a¨Ñ+Ô+�CØŸ*š*˜*°#°#°#Ð%7¸Ñ?Ô?À!ÑC�CØ×$Ò$ SÑ)Ô)Ð)Ø  ”O×*Ò*¨3Ñ/Ô/Ð/Ð/øÝ!ð &ð &ð &ð &ØCDÀ1À1ÀdÀdÐK�CØ% #Ñ%Ô%˜5ð&øøøõ ð ð ð ð å˜q¥# i¡.¤.Ñ1Ô1ðñ ô ñ ô ˆGð
 FÐE¥f­S°¸FÑ-CÔ-CÑ&DÔ&DÐEÑEÔEˆHˆHð 8>°v°v¸x¸x¸xÈÈðOð õ
 �G˜SÑ!Ô!Ð!Ð!Ð!ðg3	"ð 3	"ð 3	"ð 3	"s   ÔA8VÖV3)NNFNNNNNFFTTFFNFNFTF)rÓ   rÔ   rÕ   r‚  rK   r"   r    ré   ré   ô  sl   € € € € € ð
 ØØØ"ØØØØØ!Ø"Ø $Ø#'ØØ Ø!Ø %Ø ØØØ+0ð/D"ð D"ð D"ð D"ð D"ð D"r"   ré   c                  ó    — e Zd Z	 	 dd„Zd„ ZdS )ÚComparesTablesFTc                ó   — t          |j        ¦  «        t          |j        ¦  «        k    sJ ‚t          |j        |j        ¦  «        D �]b\  }}t          |j        |j        ¦  «         ||j        |j                 u sJ ‚|r4t          |j        |j        ¦  «         t          |j        |j        ¦  «         |rCd}t          |j        t          |j        ¦  «        ¦  «        sJ ||j        |j        fz  ¦   «         ‚n|  	                    ||¦  «         t          |j        t          j        ¦  «        r$t          |j        j        |j        j        ¦  «         |r.t          d„ |j        D ¦   «         d„ |j        D ¦   «         ¦  «         |j        r!t          |j        t          j        ¦  «        sJ ‚�Œd|rOt          |j        ¦  «        t          |j        ¦  «        k    sJ ‚|j        D ]}|j        j        |j                 €J ‚Œd S d S )Nz)Type '%s' doesn't correspond to type '%s'c                ó&   — h | ]}|j         j        ’ŒS rK   ©Úcolumnr<  ©rP   Úfs     r    ú	<setcomp>z5ComparesTables.assert_tables_equal.<locals>.<setcomp>  s   € Ð;Ð;Ð; q�Q”X”]Ð;Ð;Ð;r"   c                ó&   — h | ]}|j         j        ’ŒS rK   r‡  r‰  s     r    r‹  z5ComparesTables.assert_tables_equal.<locals>.<setcomp>  s   € ÐEÐEÐE q�Q”X”]ÐEÐEÐEr"   )rd  r0  rf  r‰   r<  Úprimary_keyÚnullabler$   rY   Úassert_types_baserO  ÚStringÚlengthÚforeign_keysÚserver_defaultr   ÚFetchedValueÚcolumns)rþ   ÚtableÚreflected_tableÚstrict_typesÚstrict_constraintsr0  Úreflected_crQ   s           r    Úassert_tables_equalz"ComparesTables.assert_tables_equalý  s>  € õ �5”7‰|Œ|�s ?Ô#4Ñ5Ô5Ò5Ð5Ð5Ð5Ý! %¤'¨?Ô+<Ñ=Ô=ð 	ñ 	‰NˆAˆ{Ý�”˜Ô(Ñ)Ô)Ð)Ø /Ô"3°A´FÔ";Ð;Ð;Ð;Ð;à!ð 6Ý�A”M ;Ô#:Ñ;Ô;Ð;Ý�A”J Ô 4Ñ5Ô5Ð5àð 7ØA�Ý! +Ô"2µD¸¼±L´LÑAÔAð ð À3ØÔ$Ø”FðJñ Dñ ô ÐAð ð
 ×&Ò& {°AÑ6Ô6Ð6å˜!œ&¥(¤/Ñ2Ô2ð <Ý�A”F”M ;Ô#3Ô#:Ñ;Ô;Ð;à!ð ÝØ;Ð;¨A¬NÐ;Ñ;Ô;ØEÐE¨KÔ,DÐEÑEÔEñô ð ð Ôð Ý!ØÔ.µÔ0Cñô ð ð ð ùð ð 	OÝ�uÔ(Ñ)Ô)­S°Ô1LÑ-MÔ-MÒMÐMÐMÐMØÔ&ð Oð O�Ø&Ô2Ô:¸1¼6ÔBÐNÐNÐNÐNð	Oð 	OðOð Or"   c                óŠ   — |j                              |j         ¦  «        s#J d|j        ›d|j         ›d|j         ›d�¦   «         ‚d S )Nz
On column z, type 'z' doesn't correspond to type 'ú')rY   Ú_compare_type_affinityr<  )rþ   Úc1Úc2s      r    r�  z ComparesTables.assert_types_base(  sf   € ØŒw×-Ò-ØŒGñ
ô 
ð 	
ð 	
ð 	
ð ŒGˆGˆGØŒGˆGˆGØŒGˆGˆGð
ñ	
ô 	
ð 
ð 	
ð 	
r"   N)FT)rÓ   rÔ   rÕ   r›  r�  rK   r"   r    r„  r„  ü  sD   € € € € € ð
 Øð)Oð )Oð )Oð )OðV
ð 
ð 
ð 
ð 
r"   r„  c                  ó†   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
ej        d
„ ¦   «         Zd„ Zej        d„ ¦   «         ZdS )ÚAssertsExecutionResultsc                óŠ   — t          |¦  «        }t          t          |¦  «        ¦  «         |                      |||¦  «         d S r6   )rh   rÝ   rT  Úassert_list)rþ   rh  Úclass_Úobjectss       r    Úassert_resultz%AssertsExecutionResults.assert_result3  s?   € Ý�f‘”ˆÝ�d�6‰lŒlÑÔÐØ×Ò˜ ¨Ñ1Ô1Ð1Ð1Ð1r"   c                ó  — |                       t          |¦  «        t          |¦  «        k    d|j        z   ¦  «         t          dt          |¦  «        ¦  «        D ]%}|                      |||         ||         ¦  «         Œ&d S )Nz9result list is not the same size as test list, for class r   )r-   rd  rÓ   rc  Ú
assert_row)rþ   rh  r¥  Úlist_r?  s        r    r¤  z#AssertsExecutionResults.assert_list8  s‡   € Ø�ŠÝ�‰KŒK�3˜u™:œ:Ò%ðàŒoññ	
ô 	
ð 	
õ �q�#˜e™*œ*Ñ%Ô%ð 	9ð 	9ˆAØ�OŠO˜F F¨1¤I¨u°Q¬xÑ8Ô8Ð8Ð8ð	9ð 	9r"   c                ó:  — |                       |j        |u dt          |¦  «        z   ¦  «         |                     ¦   «         D ]Ø\  }}t	          |t
          ¦  «        rt	          |d         t          ¦  «        r2|                      t          ||¦  «        |d         |d         ¦  «         Œg|  	                    |d         t          ||¦  «        |d         ¦  «         Œ™|                       t          ||¦  «        |k    d|›dt          ||¦  «        ›d|›�¦  «         ŒÙd S )Nzitem class is not r   r   z
attribute z value z does not match )
r-   Ú	__class__rT  Úitemsr$   rX  rh   r¤  r  r©  )rþ   r¥  ÚrowobjÚdescrÿ   Úvalues         r    r©  z"AssertsExecutionResults.assert_rowB  s+  € Ø�ŠØÔ Ð&Ð(<½tÀF¹|¼|Ñ(Kñ	
ô 	
ð 	
ð Ÿ*š*™,œ,ð 	ð 	‰JˆC�Ý˜%¥Ñ'Ô'ð 
Ý˜e Aœh­Ñ-Ô-ð NØ×$Ò$¥W¨V°SÑ%9Ô%9¸5À¼8ÀUÈ1ÄXÑNÔNÐNÐNà—O’O E¨!¤H­g°f¸cÑ.BÔ.BÀEÈ!ÄHÑMÔMÐMÐMà—’Ý˜F CÑ(Ô(¨EÒ1Ð1à�s�s�G F¨CÑ0Ô0Ð0Ð0°%°%ð9ñô ð ð ð	ð 	r"   c           	     óp  ‡ ‡‡	‡
—  G d„ dt           ¦  «        Š
t          j        |¦  «        }ˆ
fd„|D ¦   «         }t          ˆfd„|¦  «        D ]/}t	          dt          |¦  «        j        ›d‰j        ›d�¦  «         Œ0t          |¦  «        t          |¦  «        k    r0t	          dt          |¦  «        ›dt          |¦  «        ›d�¦  «         t          ¦   «         Š	ˆ	ˆ fd	„}|D ]R}|D ]%} |||¦  «        r| 	                    |¦  «          n)Œ&t	          d
‰j        ›dt          |¦  «        ›d�¦  «         ŒSdS )zÉAs assert_result, but the order of objects is not considered.

        The algorithm is very expensive but not a big deal for the small
        numbers of rows that the test suite manipulates.
        c                  ó   — e Zd Zd„ ZdS )úFAssertsExecutionResults.assert_unordered_result.<locals>.immutabledictc                ó    — t          | ¦  «        S r6   )Úidr  s    r    Ú__hash__zOAssertsExecutionResults.assert_unordered_result.<locals>.immutabledict.__hash__[  s   € Ý˜$‘x”x�r"   N)rÓ   rÔ   rÕ   r¶  rK   r"   r    Úimmutabledictr³  Z  s#   € € € € € ð ð  ð  ð  ð  r"   r·  c                ó&   •— h | ]} ‰|¦  «        ’ŒS rK   rK   )rP   Úer·  s     €r    r‹  zBAssertsExecutionResults.assert_unordered_result.<locals>.<setcomp>_  s#   ø€ Ð7Ð7Ð7¨�M�M !Ñ$Ô$Ð7Ð7Ð7r"   c                ó$   •— t          | ‰¦  «        S r6   r�   )ÚoÚclss    €r    ú<lambda>zAAssertsExecutionResults.assert_unordered_result.<locals>.<lambda>a  s   ø€ ­:°a¸Ñ+=Ô+=€ r"   zUnexpected type "z", expected "ú"zUnexpected object count "c                ó  •— |                      ¦   «         D ]o\  }}t          |t          ¦  «        r=	  ‰j        t	          | |¦  «        |d         g|d         ¢R Ž  ŒE# t
          $ r Y  dS w xY wt	          | |‰¦  «        |k    r dS ŒpdS )Nr   r   FT)r­  r$   rX  Úassert_unordered_resultr  rT   )Úobjr(   rÿ   r°  ÚNOVALUErþ   s       €€r    Ú_compare_itemzFAssertsExecutionResults.assert_unordered_result.<locals>._compare_itemo  sÅ   ø€ Ø"Ÿjšj™lœlð 
%ð 
%‘
��UÝ˜e¥UÑ+Ô+ð 	%ð%Ø4˜Ô4Ý# C¨Ñ-Ô-¨u°Q¬xðØ:?À¼(ðð ð ð ð øõ *ð %ð %ð %Ø$˜u˜u˜uð%øøøõ ˜s C¨Ñ1Ô1°UÒ:Ð:Ø$˜u˜uð ;à�4s   ±)AÁ
A*Á)A*z	Expected z instance with attributes z not found.T)Údictr   ÚIdentitySetr   r   rY   rÓ   rd  r  ÚremoverT  )rþ   rh  r¼  r|   ÚfoundÚwrongrÃ  Úexpected_itemÚ
found_itemrÂ  r·  s   ` `      @@r    rÀ  z/AssertsExecutionResults.assert_unordered_resultS  s¶  øøøø€ ð	 ð 	 ð 	 ð 	 ð 	 �Dñ 	 ô 	 ð 	 õ Ô  Ñ(Ô(ˆØ7Ð7Ð7Ð7¨hÐ7Ñ7Ô7ˆå Ð!=Ð!=Ð!=Ð!=¸uÑEÔEð 	ð 	ˆEÝˆDå˜‘;”;Ô'Ð'Ð'¨¬¨¨ð7ñô ð ð õ
 ˆu‰:Œ:�˜X™œÒ&Ð&ÝˆDå�u‘:”:�:�:�s 8™}œ}˜}˜}ð.ñô ð õ
 ‘(”(ˆð	ð 	ð 	ð 	ð 	ð 	ð &ð 		ð 		ˆMØ#ð ð �
Ø �= ¨]Ñ;Ô;ð Ø—L’L Ñ,Ô,Ð,Ø�Eðõ �à”|�|�|¥T¨-Ñ%8Ô%8Ð%8Ð%8ð:ñô ð øð ˆtr"   Nc                ó:   — |€ddl m} t          j        |¦  «        S )Nr   )r'   )r­   r'   r   Úassert_engine)rþ   r'   s     r    Úsql_execution_asserterz.AssertsExecutionResults.sql_execution_asserter‰  s*   € Øˆ:Ø"Ð"Ð"Ð"Ð"Ð"åÔ& rÑ*Ô*Ð*r"   c                óˆ   — |                       |¦  «        5 } |¦   «         }d d d ¦  «         n# 1 swxY w Y    |j        |Ž  |S r6   ©rÍ  r-   )rþ   r'   r½   ÚrulesÚasserterrh  s         r    Úassert_sql_executionz,AssertsExecutionResults.assert_sql_execution�  sˆ   € Ø×(Ò(¨Ñ,Ô,ð 	!°Ø�Y‘[”[ˆFð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!àˆÔ˜%Ð Ð Øˆs   –-­1´1c                óô   — g }|D ]e}t          |t          ¦  «        r+t          j        d„ |                     ¦   «         D ¦   «         Ž }nt          j        |Ž }|                     |¦  «         Œf | j        ||g|¢R Ž S )Nc                ó>   — g | ]\  }}t          j        ||¦  «        ‘ŒS rK   )r   ÚCompiledSQL)rP   Úkr;  s      r    rR   z6AssertsExecutionResults.assert_sql.<locals>.<listcomp>š  s)   € ÐKÐKÐK±d°a¸•iÔ+¨A¨qÑ1Ô1ÐKÐKÐKr"   )r$   rÄ  r   ÚAllOfr­  rÕ  r`  rÒ  )rþ   r'   r½   rÐ  ÚnewrulesÚruleÚnewrules          r    Ú
assert_sqlz"AssertsExecutionResults.assert_sql•  s�   € ØˆØð 	%ð 	%ˆDÝ˜$¥Ñ%Ô%ð 7Ý#œ/ØKÐK¸d¿jºj¹l¼lÐKÑKÔKð��õ $Ô/°Ð6�Ø�OŠO˜GÑ$Ô$Ð$Ð$à(ˆtÔ(¨¨YÐB¸ÐBÐBÐBÐBr"   c                óT   — |                       ||t          j        |¦  «        ¦  «        S r6   )rÒ  r   ÚCountStatements)rþ   r'   r½   Úcounts       r    Úassert_sql_countz(AssertsExecutionResults.assert_sql_count¢  s,   € Ø×(Ò(Ø�	�9Ô4°UÑ;Ô;ñ
ô 
ð 	
r"   c              '  ó€   K  — |                       |¦  «        5 }d V — d d d ¦  «         n# 1 swxY w Y    |j        |Ž  d S r6   rÏ  )rþ   r'   rÐ  rÑ  s       r    Úassert_executionz(AssertsExecutionResults.assert_execution§  s‹   è è € à×(Ò(¨Ñ,Ô,ð 	°ØˆEˆEˆEð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	àˆÔ˜%Ð Ð Ð Ð s   ˜)©-°-c                óR   — |                       |t          j        |¦  «        ¦  «        S r6   )rá  r   rÝ  )rþ   r'   rÞ  s      r    Úassert_statement_countz.AssertsExecutionResults.assert_statement_count­  s#   € Ø×$Ò$ R­Ô)BÀ5Ñ)IÔ)IÑJÔJÐJr"   c              #  ó  ‡ K  — ˆ fd„t          ||¦  «        D ¦   «         }g }|D ]-\  }}}|                     |                     ¦   «         ¦  «         Œ.	 d V — t          ||¦  «        D ]G\  }\  }}}|                     d d d ¦  «         |                     t          j        |¦  «        ¦  «         ŒHd S # t          ||¦  «        D ]G\  }\  }}}|                     d d d ¦  «         |                     t          j        |¦  «        ¦  «         ŒHw xY w)Nc                óF   •— g | ]\  }}‰                      |¦  «        ||f‘ŒS rK   )rÍ  )rP   r'   rÞ  rþ   s      €r    rR   zKAssertsExecutionResults.assert_statement_count_multi_db.<locals>.<listcomp>²  sB   ø€ ð 
ð 
ð 
á��Uð ×(Ò(¨Ñ,Ô,¨b°%Ð8ð
ð 
ð 
r"   )rf  r`  Ú	__enter__Ú__exit__r-   r   rÝ  )	rþ   ÚdbsÚcountsÚrecsÚ	assertersÚctxr'   rÞ  rÑ  s	   `        r    Úassert_statement_count_multi_dbz7AssertsExecutionResults.assert_statement_count_multi_db°  sV  øè è € ð
ð 
ð 
ð 
å" 3¨Ñ/Ô/ð
ñ 
ô 
ˆð ˆ	Ø"ð 	.ð 	.‰NˆC��UØ×Ò˜SŸ]š]™_œ_Ñ-Ô-Ð-Ð-ð	CØˆEˆEˆEå.1°)¸TÑ.BÔ.Bð Cð CÑ*�Ñ*˜3  EØ—’˜T 4¨Ñ.Ô.Ð.Ø× Ò ¥Ô!:¸5Ñ!AÔ!AÑBÔBÐBÐBðCð Cø­c°)¸TÑ.BÔ.Bð Cð CÑ*�Ñ*˜3  EØ—’˜T 4¨Ñ.Ô.Ð.Ø× Ò ¥Ô!:¸5Ñ!AÔ!AÑBÔBÐBÐBðCøøøs   ÁB1 Â1ADr6   )rÓ   rÔ   rÕ   r§  r¤  r©  rÀ  rÍ  rÒ  rÛ  rß  Ú
contextlibÚcontextmanagerrá  rã  rí  rK   r"   r    r¢  r¢  2  sê   € € € € € ð2ð 2ð 2ð
9ð 9ð 9ðð ð ð"4ð 4ð 4ðl+ð +ð +ð +ðð ð ðCð Cð Cð
ð 
ð 
ð
 Ôð!ð !ñ Ôð!ð
Kð Kð Kð ÔðCð Cñ ÔðCð Cð Cr"   r¢  c                  ó   — e Zd Zd	d„ZdS )
ÚComparesIndexesr–  úschema.Tabler|   rh   Údialect_namer%   c                óB  — t          t          |j        ¦  «        t          |¦  «        ¦  «         d„ |j        D ¦   «         }|D �]Z}||d                  }t          |j        |d         ¦  «         d„ |d         D ¦   «         }t          t          |j        ¦  «        t          |¦  «        ¦  «         |D ]}t          ||j        v ¦  «         Œ|                     d¦  «        }	|	rit          t          |j        ¦  «        t          |	¦  «        ¦  «         t          |j        |	|d         ¦  «        D ]\  }
}}|€t          |
j	        |¦  «         Œ|                     d¦  «        r=|› d�|d         v r0t          |j
        |         d	         |d         |› d�         ¦  «         �Œ\d S )
Nc                ó   — i | ]
}|j         |“ŒS rK   )r<  )rP   Úidxs     r    r1  zEComparesIndexes.compare_table_index_with_expected.<locals>.<dictcomp>Æ  s   € Ð;Ð;Ð; c�C”H˜cÐ;Ð;Ð;r"   r<  Úuniquec                ó   — g | ]}|®|‘ŒS r6   rK   )rP   r0  s     r    rR   zEComparesIndexes.compare_table_index_with_expected.<locals>.<listcomp>Ê  s   € ÐDÐDÐD˜!°a°m�A°m°m°mr"   Úcolumn_namesÚexpressionsÚdialect_optionsÚ_includeÚinclude)r‰   rd  Úindexesr÷  r•  rž   r^  rú  rf  Útextrû  )rþ   r–  r|   ró  Úidx_dictÚexprö  Úcolsr0  ÚexprsÚidx_expÚexprÚcols                r    Ú!compare_table_index_with_expectedz1ComparesIndexes.compare_table_index_with_expectedÂ  s¿  € õ 	�C�”ÑÔ¥ H¡¤Ñ.Ô.Ð.Ø;Ð;¨U¬]Ð;Ñ;Ô;ˆØð 	ñ 	ˆCØ˜3˜vœ;Ô'ˆCÝ�”
˜C œMÑ*Ô*Ð*ØDÐD˜s >Ô2ÐDÑDÔDˆDÝ•�C”KÑ Ô ¥# d¡)¤)Ñ,Ô,Ð,Øð *ð *�Ý˜˜Sœ[Ð(Ñ)Ô)Ð)Ð)Ø—G’G˜MÑ*Ô*ˆEØð 0Ý•C˜œÑ(Ô(­#¨e©*¬*Ñ5Ô5Ð5Ý*-Ø”O U¨C°Ô,?ñ+ô +ð 0ð 0Ñ&�G˜T 3ð �{Ý˜GœL¨$Ñ/Ô/Ð/øà—’Ð)Ñ*Ô*ðà#Ð-Ð-Ð-°Ð5FÔ1GÐGÐGåØÔ'¨Ô5°iÔ@ØÐ)Ô*¨lÐ+DÐ+DÐ+DÔEñô ð ùð'	ð 	r"   N)r–  rò  r|   rh   ró  r%   )rÓ   rÔ   rÕ   r  rK   r"   r    rñ  rñ  Á  s(   € € € € € ðð ð ð ð ð r"   rñ  )TFT)TFTFFr6   )NF)T)QÚ
__future__r   Úcollectionsr   rî  r   Ú	itertoolsr   rL   rÚ   rn   r­   r   r	   r
   r   Ú
exclusionsr   r   r   r   r   r   r   r   rO  Úenginer   r   Úsql.selectabler   r   r!   rï  r)   r4   r8   r;   r?   rB   ri   rj   rX   r   rG   rt   rs   r€   r†   r‰   rŒ   rŽ   r‘   r—   rš   rž   r    r•   r™   Úis_not_r¥   r§   Únot_in_r«   r°   rµ   r¾   rÀ   rÅ   rÈ   rÊ   rÌ   rº   rÒ   rÎ   rå   rç   ré   r„  r¢  rñ  rK   r"   r    ú<module>r     s¡  ðð #Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 	€	€	€	Ø 
€
€
€
Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð ðHð Hð Hð  Ôðð ñ Ôðð ð ð ð ð ð ðð ð ðð ð ð(ð ð ð0 €Ø€Ø€ð ØØðð ð ð ð. Ôð ØØØ!Ø ðMð Mð Mñ ÔðMð`(ð (ð (ð/ð /ð /ðð ð ð6ð 6ð 6ð 6ð.ð .ð .ð .ð
.ð .ð .ð .ð
.ð .ð .ð .ð
Kð Kð Kð Kðð ð ð ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð2ð 2ð 2ð 2ð
2ð 2ð 2ð 2ð €ð2ð 2ð 2ð 2ð
5ð 5ð 5ð 5ð €ðð ð ð ð.ð .ð .ð .ð
ð 
ð 
ð*Oð Oð Oð;ð ;ð ;ðð ð ð
*ð 
*ð 
*ð*ð *ð *ð(Hð Hð Hð BGðð ð ð ðð ð ð ð ñ ô ð ð Ôð':ð ':ð ':ñ Ôð':ðTCð Cð Cð CðLð Lð Lð LðE"ð E"ð E"ð E"ð E"ñ E"ô E"ð E"ðP3
ð 3
ð 3
ð 3
ð 3
ñ 3
ô 3
ð 3
ðlLCð LCð LCð LCð LCñ LCô LCð LCð^ð ð ð ð ñ ô ð ð ð r"   