Ë
    ðmxiØ{  ã                  óú  — 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jB                  d„ «       Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'da(da)da*	 	 	 dGd„Z+ejB                  	 	 	 	 	 dHd„«       Z,d „ Z-d!„ Z.d"„ Z/dId#„Z0dJd$„Z1dJd%„Z2dJd&„Z3dJd'„Z4dJd(„Z5dJd)„Z6dJd*„Z7dJd+„Z8dJd,„Z9dJd-„Z:e:Z;dJd.„Z<dJd/„Z=e=Z>dJd0„Z?dJd1„Z@d2„ ZAd3„ ZBd4„ ZCd5„ ZDd6„ ZEd7„ ZFd8„ ZG	 dKd9„ZH G d:„ d;«      ZIejB                  dKd<„«       ZJdLd=„ZKdLd>„ZL G d?„ d@«      ZM G dA„ dB«      ZN G dC„ dD«      ZO G dE„ dF«      ZPy)Mé    )Úannotations)ÚdefaultdictN)Úcopy)Úfilterfalseé   )Ú	assertsql)Úconfig)Úengines)Úmock)Údb_spec)Úfailé   )Úexc)Úschema)Úsql)Útypes)Úutil)Údefault)Úurl)ÚLABEL_STYLE_TABLENAME_PLUS_COL©Ú	decoratorc                 ó8   — 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     úT/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/testing/assertions.pyÚexpect_warningsr!   %   s   € ô &¤f×&6Ñ&6¸ÑGÀBÑGÐGó    c              /  óÀ   K  — t        | «      }t        | t        «      r |t        j                  «      sd–— yt        |i |¤Ž5  d–— ddd«       y# 1 sw Y   yxY w­w)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   sM   è ø€ ô �2‹;€Dä�"”cÔ¡4¬¯©Ô#8Üä˜hÐ-¨"Ñ-ñ 	Û÷	÷ 	ñ 	üs   ‚AAÁAÁ		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                óV   •— t        ‰ddiŽ5   | |i |¤Žcd d d «       S # 1 sw Y   y xY w©NÚassert_F)r!   ©ÚfnÚargsr   r   s      €r    Údecoratezemits_warning.<locals>.decorateN   s0   ø€ ä¨XÐ6 UÑ6ñ 	#Ù�t�?˜r‘?÷	#÷ 	#ò 	#úó   �Ÿ(r   ©r   r1   s   ` r    Úemits_warningr4   F   s   ø€ ô ó#ó ð#ð €Or"   c                 ó8   — t        t        j                  | fi |¤ŽS ©N)r   r   ÚSADeprecationWarningr   s     r    Úexpect_deprecatedr8   V   s"   € Ü%Ü×#Ñ# XñØ13ñð r"   c                 ó8   — t        t        j                  | fi |¤ŽS r6   )r   r   ÚBase20DeprecationWarningr   s     r    Úexpect_deprecated_20r;   \   s"   € Ü%Ü×'Ñ'¨ñØ57ñð r"   c                ó(   ‡ ‡— 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                ó^   •— t        ‰g‰¢­ddiŽ5   | |i |¤Žcd d d «       S # 1 sw Y   y xY wr,   )r)   )r/   r0   r   r'   r   s      €€r    r1   z"emits_warning_on.<locals>.decoraten   s5   ø€ ä Ð=°HÒ=¨EÑ=ñ 	#Ù�t�?˜r‘?÷	#÷ 	#ò 	#úó   ‘#£,r   )r'   r   r1   s   `` r    Úemits_warning_onr?   b   s   ù€ ô ô#ó ð#ð €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                óV   •— t        ‰ddiŽ5   | |i |¤Žcd d d «       S # 1 sw Y   y xY wr,   )r8   r.   s      €r    r1   z!uses_deprecated.<locals>.decorate†   s0   ø€ ä Ð8°%Ñ8ñ 	#Ù�t�?˜r‘?÷	#÷ 	#ò 	#úr2   r   r3   s   ` r    Úuses_deprecatedrB   v   s   ø€ ô  ó#ó ð#ð €Or"   c                ó$   — 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‰rD|D �cg c]7  }t        j                  |t         j                  t         j                  z  «      ‘Œ9 c}Š	nt	        |«      Š	t
        �It        €J ‚t        €J ‚t
        j                  ‰	«       t        j                  ‰	«       t        | fz  ad –— y t        ‰	«      xŠa‰	a| fa‰rd„ Š
nt        j                  Š
ˆ	ˆˆ
ˆˆˆˆfd„}t        j                  d|«      5  	 d –— d xaxaa|r$‰r"J ddj                  ˆfd„‰D «       «      z  «       ‚d d d «       y c c}w # d xaxaa|r%‰r"J ddj                  ˆfd„‰D «       «      z  «       ‚w w xY w# 1 sw Y   y xY w­w)Nc                ó†   — t        | t        j                  «      rt        j                  | g|¢­i |¤Ž y t        d| z  «      ‚)NzGot unexpected warning: %r)r$   r   ÚSATestSuiteWarningÚwarningsÚwarnÚAssertionError)ÚmsgÚargr   s      r    Ú	real_warnz#_expect_warnings.<locals>.real_warnË   s9   € Ü˜c¤6×#<Ñ#<Ô=Ü—M‘M #Ð2¨Ò2¨rÓ2ä(Ð)EÈÑ)KÓLÐLr"   c                ób  •— t        | t        «      rt        | «      }t        | «      } n
|r|d   }nd }|rt	        |t        «      s‰s ‰| g|¢­i |¤ŽS y ‰s‰sy ‰D ]C  }‰	r|j                  | «      s‰r|j                  | «      s	‰rŒ,|| k(  sŒ2‰
j                  |«        y  ‰s ‰| g|¢­i |¤Ž y y ©Nr   )r$   Ú_EXC_CLSÚtyper%   Ú
issubclassÚsearchÚmatchÚdiscard)rO   rP   r   Ú	exceptionÚfilter_ÚfiltersrF   rQ   rD   rE   ÚseenÚsquelch_other_warningss        €€€€€€€r    Úour_warnz"_expect_warnings.<locals>.our_warnÔ   s¿   ø€ Ü˜#œxÔ(Ü  ›I�	Ü˜#“h‘ÙØ ™F‘	à �	á¤J¨y¼(Ô$CÙ-Ù$ SÐ5¨3Ò5°"Ñ5Ð5àáÑ#:Øà"ò 
/�á G§N¡N°3Ô$7Ù '§-¡-°Ô"4Ú! g°£nà—L‘L Ô)Ùð
/ñ .Ù˜cÐ. CÒ.¨2Ó.ð .r"   zwarnings.warnzWarnings were not seen: %sz, c              3  óD   •K  — | ]  }d ‰r|j                   n|z  –— Œ y­w)z%rN)Úpattern)Ú.0ÚsrD   s     €r    ú	<genexpr>z#_expect_warnings.<locals>.<genexpr>ù   s%   øè ø€ ò NØ?@˜©U §	¢	¸Õ:ñNùs   ƒ )ÚreÚcompileÚIÚSÚlistÚ_FILTERSÚ_SEENrT   ÚextendÚupdateÚsetrL   rM   r   ÚpatchÚjoin)rH   r   rD   rE   r-   rF   r^   rO   r_   r\   rQ   r]   s     `` ``  @@@r    rG   rG   ª   s‰  þè ø€ ñ ‘
Ø;CÖD°C”2—:‘:˜c¤2§4¡4¬"¯$©$¡;Õ/ÒD‰ä�x“.ˆäÐô Ð Ð Ð ÜÐ#Ð#Ð#Ü�‰˜Ô Ü�‰�WÔÜ�W�JÑˆÜä˜7“|Ð#ˆˆuØˆØ�:ˆá"óMô !Ÿ™ˆI÷	/ò 	/ô< �Z‰Z˜¨Ó2ñ 		ðÛà.2Ð2�Ð2˜ 8áÙ#ð Ð%AÀDÇIÁIó NØDHôNó Eñ &ó ˜8÷		ð 		ùòw Eøð~ /3Ð2�Ð2˜ 8áÙ#ð Ð%AÀDÇIÁIó NØDHôNó Eñ &ó ˜8˜tð ú÷		ð 		üsA   ‰	E3’<D0ÁB'E3Ã5E'Ã7D5Ã;,E'Ä'E3Ä5/E$Å$E'Å'E0Å,E3c                 ó   — t        «        y)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_connections© r"   r    Úglobal_cleanup_assertionsrt   þ   s
   € ô &Õ'r"   c                 ó@   — t         j                  j                  «        y r6   )r
   Útesting_reaperÚassert_all_closedrs   r"   r    rr   rr   	  s   € Ü×Ñ×,Ñ,Õ.r"   c                ób   — t        | |z  «      }t        || z
  «      |k  sJ d||dz  | fz  «       ‚y )Nz:Given int value %s is not within %d%% of expected value %séd   )ÚintÚabs)ÚexpectedÚreceivedÚvarianceÚdeviances       r    Úint_within_variancer€     sK   € Ü�8˜hÑ&Ó'€HäˆH�xÑÓ  8Ò+ðàCØØ�3‰ØðGñ óÙ+r"   c                óR   — t        j                  || |«      sJ |xs | ›d|›�«       ‚y )Nú !~ )re   rX   )ÚaÚbrO   Úflagss       r    Úeq_regexr†     s'   € Ü�8‰8�A�q˜%Ô Ð< #Ò"<²q¹!Ð)<Ó<Ñ r"   c                ó.   — | |k(  sJ |xs | ›d|›�«       ‚y)z.Assert a == b, with repr messaging on failure.ú != Nrs   ©rƒ   r„   rO   s      r    Úeq_rŠ     ó   € à�Š6Ð-�3Ò-ª©1Ð-Ó-‰6r"   c                ó.   — | |k7  sJ |xs | ›d|›�«       ‚y)z.Assert a != b, with repr messaging on failure.z == Nrs   r‰   s      r    Úne_r�   !  r‹   r"   c                ó.   — | |k  sJ |xs | ›d|›�«       ‚y)z.Assert a <= b, with repr messaging on failure.rˆ   Nrs   r‰   s      r    Úle_r�   &  r‹   r"   c                ó<   — t        | |«      sJ |xs | ›d|›�«       ‚y )Nz is not an instance of ©r$   r‰   s      r    Úis_instance_ofr’   +  s!   € Ü�a˜ÔÐJ˜SÒJÂQÉÐ$JÓJÑr"   c                ó    — t        | d |¬«       y ©N©rO   )Úis_©rƒ   rO   s     r    Úis_noner˜   /  s   € Üˆˆ4�SÖr"   c                ó    — t        | d |¬«       y r”   )Úis_notr—   s     r    Úis_not_noner›   3  s   € Ü
ˆ1ˆd˜Ör"   c                ó2   — t        t        | «      d|¬«       y )NTr•   ©r–   Úboolr—   s     r    Úis_truerŸ   7  s   € ÜŒˆQ‹�˜3Ör"   c                ó2   — t        t        | «      d|¬«       y )NFr•   r�   r—   s     r    Úis_falser¡   ;  s   € ÜŒˆQ‹�˜CÖ r"   c                ó,   — | |u sJ |xs | ›d|›�«       ‚y)z.Assert a is b, with repr messaging on failure.z is not Nrs   r‰   s      r    r–   r–   ?  ó   € à�‰6Ð1�3Ò1ªA©qÐ1Ó1‰6r"   c                ó,   — | |usJ |xs | ›d|›�«       ‚y)z2Assert a is not b, with repr messaging on failure.z is Nrs   r‰   s      r    rš   rš   D  s   € à�A‰:Ð1�sÒ1ªA©qÐ1Ó1‰:r"   c                ó,   — | |v sJ |xs | ›d|›�«       ‚y)z.Assert a in b, with repr messaging on failure.z not in Nrs   r‰   s      r    Úin_r¦   M  r£   r"   c                ó,   — | |vsJ |xs | ›d|›�«       ‚y)z2Assert a in not b, with repr messaging on failure.z is in Nrs   r‰   s      r    Únot_inr¨   R  s   € à�A‰:Ð4�sÒ4ªq±!Ð4Ó4‰:r"   c                óF   — | j                  |«      sJ |xs | ›d|›�«       ‚y)z>Assert a.startswith(fragment), with repr messaging on failure.z does not start with N)Ú
startswith)rƒ   ÚfragmentrO   s      r    Ústartswith_r¬   [  s-   € à�<‰<˜Ô!ð  3ò $Ú	Ùð+ó Ñ!r"   c                óB  — 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 |xs | ›d|›�«       ‚y )Nz^\s+?|\nÚ z {2,}ú z\trˆ   )re   Úsubr‰   s      r    Úeq_ignore_whitespacer±   c  s‰   € Ü
�‰ˆ{˜B Ó"€AÜ
�‰ˆx˜˜aÓ €AÜ
�‰ˆu�b˜!Ó€AÜ
�‰ˆ{˜B Ó"€AÜ
�‰ˆx˜˜aÓ €AÜ
�‰ˆu�b˜!Ó€Aà�Š6Ð-�3Ò-ª©1Ð-Ó-‰6r"   c                ó~   — | j                   | j                  ur%| j                  sJ d| ›d| j                   ›d�«       ‚yy)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.

    z
Exception z> was correctly raised but did not set a cause, within context z as its cause.N)Ú__context__Ú	__cause__Ú__suppress_context__)rZ   s    r    Ú _assert_proper_exception_contextr¶   n  sI   € ð 	×Ñ Y×%8Ñ%8Ñ8Ø×.Ò.ñ	
ò ˜)×/Ó/ð1ó	
ˆuð /ð 	9r"   c                ó"   — t        | |||d¬«      S )NT©Úcheck_context©Ú_assert_raises©Ú
except_clsÚ	callable_r0   r   s       r    Úassert_raisesr¿   ƒ  s   € Ü˜* i°°rÈÔNÐNr"   c                ó   — t        | |||«      S r6   rº   r¼   s       r    Úassert_raises_context_okrÁ   ‡  s   € Ü˜* i°°rÓ:Ð:r"   c                ó$   — t        | ||||d¬«      S )NT©rO   r¹   rº   ©r½   rO   r¾   r0   Úkwargss        r    Úassert_raises_messagerÆ   ‹  s   € ÜØ�I˜t V°ÀDôð r"   c                óX   — t        | dg«      5   ||i |¤Žcddd«       S # 1 sw Y   yxY w)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É   ‘  s2   € ô 
$ J°°Ó	7ñ *Ù˜$Ð) &Ñ)÷*÷ *ò *ús   Ž  )c                ó^   — t        | |gdd¬«      5   ||i |¤Žcddd«       S # 1 sw Y   yxY w)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>   € ô 
$ØØ	ˆØØô	
ñ *ñ ˜$Ð) &Ñ)÷*÷ *ò *úr>   c                ó"   — t        | ||||¬«      S r”   rº   rÄ   s        r    Ú assert_raises_message_context_okrÍ   ²  s   € ô ˜* i°°vÀ3ÔGÐGr"   c                ó„   — t        | ||«      5 } ||i |¤Ž d d d «       |j                  S # 1 sw Y   j                  S xY wr6   )Ú_expect_raisesÚerror)r½   r¾   r0   rÅ   rO   r¹   Úecs          r    r»   r»   ¸  sA   € ô 
˜
 C¨Ó	7ð #¸2Ù�4Ð"˜6Ò"÷#à�8‰8€O÷#à�8‰8€Oús   Ž	+«?c                  ó   — e Zd ZdZy)Ú_ErrorContainerN)Ú__name__Ú
__module__Ú__qualname__rÐ   rs   r"   r    rÓ   rÓ   À  s   „ Ø�Er"   rÓ   c              #  ó   K  — t        | t        «      rt        | t        «      st        | t        «      rt	        d«      ‚t        «       }|rt        j                  «       d   }	 |–— d}~|sJ d«       ‚y # | $ rƒ}||_        d}|�<t        |«      }t        j                  ||t        j                  «      sJ |›d|›�«       ‚|rst        |«       t        t        |«      j                  d«      «       Y d }~ŒŽd }~ww xY w­w)NzCUse expect_warnings for warnings, not expect_raises / assert_raisesr   FTr‚   úutf-8z#Callable did not raise an exception)r$   rU   rV   ÚWarningÚ	TypeErrorrÓ   ÚsysÚexc_inforÐ   r%   re   rW   ÚUNICODEr¶   ÚprintÚencode)r½   rO   r¹   rÑ   Úare_we_already_in_a_tracebackÚsuccessÚerrÚerror_as_strings           r    rÏ   rÏ   Ä  sü   è ø€ ô 	�:œtÔ$Ü�z¤7Ô+Ü�j¤'Ô*äð,ó
ð 	
ô 
Ó	€BÙÜ(+¯©«°qÑ(9Ð%ð(ØŠØˆð* 	ñ Ð9Ð9Ó9‰7øð/ ò (ØˆŒØˆØˆ?ô " #›hˆOÜ—9‘9˜S /´2·:±:Ô>ð ÚÙðAó Ð>ñ Ñ!>Ü,¨SÔ1ÜŒc�#‹h�o‰o˜gÓ&×'Ñ'ûð(üs1   ‚AC>Á"A3 Á(C>Á3C;Á8A9C6Ã1C>Ã6C;Ã;C>c                ó   — t        | |¬«      S )Nr¸   ©rÏ   )r½   r¹   s     r    Úexpect_raisesræ   ï  s   € Ü˜*°MÔBÐBr"   c                ó   — t        | ||¬«      S )NrÃ   rå   )r½   rO   r¹   s      r    Úexpect_raises_messagerè   ó  s   € Ü˜*¨#¸]ÔKÐKr"   c                  ó>   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚAssertsCompiledSQLNc           	     óV  ‡‡7‡8— |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«      Š|‰_        |‰_        n[‰dk(  rt        j                  «       ŠnAt        ‰t        «      r1t        j                  j                  ‰«      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|j/                  «       }t0        |_        |}|r||d<    G d„ d«      Š7 G ˆ7fd„d«      }  ||«      j4                  d0d‰i|¤Ž}t        |t6        j8                  «      r|j:                  }|r,t=        |«       n |j?                  «       }|rt=        |d   «       tA        t        |di «      «      }|jC                  d«      jE                  dd«      }tG        dt        |«      z   |z   jC                  d«      «       tI        jJ                  ddt        |«      «      } tM        | || ›d |›d!‰›�«       |�G|r*|jO                  |d¬"«      }!tM        |!jP                  |«       ntM        |jS                  |«      |«       |	�“|rN|jO                  |d¬"«      }!tM        tU        |!jV                  D �"cg c]  }"|!jP                  |"   ‘Œ c}"«      |	«       nC|jS                  |d¬"«      }#tM        tU        |jV                  D �"cg c]  }"|#|"   ‘Œ	 c}"«      |	«       |
�tM        |jX                  |
«       |�<tM        |jZ                  D �$ci c]  }$|j\                  |$   |$j^                  “Œ c}$|«       |�<tM        |j`                  D �$ci c]  }$|j\                  |$   |$j^                  “Œ c}$|«       |�r´t        |dd «      �r¥ˆfd#„}% |%d$d«      }& |j4                  d0d|&i|¤Ž}'tI        jJ                  ddt        |'«      «      } |%dd«      }( |j4                  d0d|(i|¤Ž})t#        |)jV                  «      }*|)jb                  }+|)j`                  |)jZ                  z  D ]+  },|)j\                  |,   }-|-|*v sŒ|*D �.cg c]
  }.|.|-k7  sŒ	|.‘Œ }*}.Œ- g Š8te        t"        «      }/|*D ]b  }.	 |.|/v r	|/|.   d%   }0nd}0|+jg                  |.|.«      }1|ji                  d&|1›d'�|0«      d(z   }2‰8jk                  |2«       |/|.   jk                  |2«       Œd to        ˆ8fd+„tq        d,ts        ‰8«      «      D «       «      }4tu        tw        ‰8|*«      «      D �5�.cg c]  \  }5}.|.‘Œ	 }6}5}.d-|*›d.|6›d/|›�}3ty        |4|3«       y y y c c}"w c c}"w c c}$w c c}$w c c}.w # tl        $ r d)|.›d*|›�}3J |3«       ‚w xY wc c}.}5w )1NÚ__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y)ú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__T  s   € Ü)ð2óð r"   N)rÔ   rÕ   rÖ   r  rs   r"   r    Ú
DontAccessrü   S  s   „ ór"   r  c                  ó@   •— e Zd Zd„ Zed„ «       Zd„ Zd„ Zd„ Zˆ fd„Z	y)ú>AssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccessc                ó0  — || _         i | _        t        |dd«      | _        | j                  rj|j                  | _        t        |d«      r|j                  | _        t        |d«      r|j                  | _        t        |d«      r|j                  | _        y y y )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__[  s’   € Ø&4�Ô#Ø$&�Ô!Ü*1Ø"Ð$8¸%ó+�Ô'ð ×*Ò*Ø.<×.OÑ.O�DÔ+ä˜~¨|Ô<Ø*8×*CÑ*C˜œÜ˜~¨yÔ9Ø'5×'=Ñ'=˜œÜ˜~Ð/AÔBØ0>×0OÑ0O˜Õ-ð Cð +r"   c                ó.   — | j                   j                  S r6   )r
  Ú_variant_mapping©rÿ   s    r    r  zOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._variant_mappingl  s   € à×*Ñ*×;Ñ;Ð;r"   c                ó6   — | j                   j                  «       S r6   )r
  Ú_default_dialectr  s    r    r  zOAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._default_dialectp  s   € Ø×*Ñ*×;Ñ;Ó=Ð=r"   c                óT   —  | j                   j                  j                  | fd|i|¤ŽS )NÚdialect)r
  rf   Ú__func__©rÿ   r  r   s      r    rf   zFAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess.compiles  s6   € Ø;�t×*Ñ*×2Ñ2×;Ñ;ØñØ")ðØ-/ñð r"   c                óR   —  | j                   j                  j                  | |fi |¤ŽS r6   )r
  Ú	_compilerr  r  s      r    r  zHAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compilerx  s0   € Ø=�t×*Ñ*×4Ñ4×=Ñ=Ø˜'ñØ%'ñð r"   c                ó  •— t        |d«      rMt        j                  j                  |d ‰«       «      5   | j                  j
                  |fi |¤Žcd d d «       S  | j                  j
                  |fi |¤ŽS # 1 sw Y   y xY w)NÚ	statement)r  r   ro   Úobjectr
  Ú_compiler_dispatch)rÿ   ÚcompilerrÅ   r  s      €r    r  zQAssertsCompiledSQL.assert_compile.<locals>.CheckCompilerAccess._compiler_dispatch}  s�   ø€ Ü˜8 [Ô1ÜŸ™×*Ñ*Ø  +©z«|óñ ð  F˜t×2Ñ2×EÑEØ$ñ Ø(.ñ ÷ñ ð B˜4×.Ñ.×AÑAØ ñØ$*ñð ÷ð ús   ´A8Á8BN)
rÔ   rÕ   rÖ   r  Úpropertyr  r  rf   r  r  )r  s   €r    ÚCheckCompilerAccessr  Z  s1   ø„ òPð" ñ<ó ð<ò>òò
õ
r"   r!  r  ÚparamsrØ   ÚasciiÚignorez
SQL String:
z[\n\t]r®   rˆ   z on dialect )Úescape_namesc                ó:   •— t        ‰«      }| |_        ||_        |S r6   )r   Ú
paramstyleÚ
positional)r'  r(  Úcpr  s      €r    Úget_dialectz6AssertsCompiledSQL.assert_compile.<locals>.get_dialectÍ  s   ø€ Ü˜'“]�Ø *�”Ø *�”Ø�	r"   Úpyformatéÿÿÿÿz%(z)sr   zExpected to find bindparam z in c              3  ó:   •K  — | ]  }‰|d z
     ‰|   k  –— Œ y­w)r   Nrs   )rb   ÚiÚ	positionss     €r    rd   z4AssertsCompiledSQL.assert_compile.<locals>.<genexpr>ò  s+   øè ø€ ò àð ˜!˜a™%Ñ  9¨Q¡<Õ/ñùs   ƒr   zOrder of parameters z+ does not match the order in the statement z. Statement rs   )=r   ÚDefaultDialectÚsupports_default_valuesÚsupports_default_metavalueÚsupports_native_booleanr  r	   r'   r  ÚStrCompileDialectr$   r%   r   ÚURLÚcreater*  Údefault_schema_nameri   r   ÚFROM_LINTINGÚ
sqlalchemyrù   ÚQueryÚ_statement_20r   Ú_label_stylerf   ÚsqltypesÚ
TypeEngineÚ_static_cache_keyÚhashÚ_generate_cache_keyÚreprrß   ÚdecoderÞ   re   r°   rŠ   Úconstruct_expanded_stateÚ
parametersÚconstruct_paramsÚtupleÚpositiontupÚprefetchÚliteral_execute_paramsÚ
bind_namesÚeffective_valueÚpost_compile_paramsÚescaped_bind_namesr   ÚgetÚindexÚappendÚ
ValueErrorÚallÚrangeÚlenÚsortedÚziprŸ   )9rÿ   ÚclauseÚresultr"  Úcheckparamsrõ   Úcheck_literal_executeÚcheck_post_paramr  ÚcheckpositionalÚcheck_prefetchÚuse_default_dialectÚallow_dialect_selectr1  r3  r2  rò   ró   rð   rö   r7  Úfrom_lintingÚcheck_param_orderrô   r   rú   rù   Ústmtr!  ÚcÚcache_key_no_warningsÚ	param_strÚccÚexpanded_stateÚxÚpr„   r*  Úpyformat_dialectÚ
pyformat_cÚqmark_dialectÚqmark_cÚvaluesÚescapedÚ
post_paramÚnameÚvÚpos_by_valueÚstartÚescÚposrO   ÚorderedÚ_r|   r  r/  s9           `                                              @@r    Úassert_compilez!AssertsCompiledSQL.assert_compileø  sV  ú€ ñ4 Ü×,Ñ,Ó.ˆGØ.EˆGÔ+Ø1KˆGÔ.Ø.EˆGÕ+Ù!Ø‰GàˆÜ! $¨°tÓ<�àˆÜ Ÿ)™)×+Ñ+‘Ø˜IÒ%¨°OÒ)CØ˜iÒ'Ü%×4Ñ4Ó6‘Gä%×4Ñ4°WÓ=�GØ2I�Ô/Ø5O�Õ2ØÐ.Ò.Ü!×3Ñ3Ó5‘Ü˜G¤SÔ)ÜŸ'™'Ÿ.™.¨Ó1×=Ñ=Ó?ÓA�áØ*=ˆGÔ'àˆØˆáØ)=ˆBÐ%Ñ&àÐÜ $ V£ˆBˆ}ÑáØ.2ˆN˜?Ñ+áØ37ˆNÐ/Ñ0á-ØCGˆNÐ?Ñ@áØ$(ˆBÐ Ñ!á"Ø,0ˆBÐ(Ñ)áœ7 4Ð)>ÀÔFÜ×,Ñ,ˆBˆy‰Må"ä�f˜cŸi™iÔ(Ø×'Ñ'Ó)ˆDÜ >ˆDÔØˆFáØ#1ˆBÐÑ ÷	ñ 	÷.	ó .	ðf 0Ñ Ó'×/Ñ/ÑF¸ÐFÀ2ÑFˆä�fœh×1Ñ1Ô2Ø$*×$<Ñ$<Ð!Ù$ÜÐ*Õ+à$*×$>Ñ$>Ó$@Ð!Ù$ÜÐ*¨1Ñ-Ô.äœ  H¨bÓ1Ó2ˆ	Ø×$Ñ$ WÓ-×4Ñ4°W¸hÓGˆ	ÜÐ ¤3 q£6Ñ)¨IÑ5×=Ñ=¸gÓFÔGä�V‰V�I˜r¤3 q£6Ó*ˆäˆB�²BºÁÐHÔIàÐ"Ù!Ø!"×!;Ñ!;Ø¨ð "<ó "�ô �N×-Ñ-¨{Õ;ä�A×&Ñ& vÓ.°Ô<ØÐ&Ù!Ø!"×!;Ñ!;Ø¨ð "<ó "�ô Üð &4×%?Ñ%?öà !ð +×5Ñ5°aÓ8òóð $õð ×&Ñ& v¸EÐ&ÓB�Ü”E¨¯©Ö7 A˜1˜Q›4Ò7Ó8¸/ÔJØÐ%Ü�—
‘
˜NÔ+Ø Ð,Üð ×5Ñ5öàð —L‘L ‘O Q×%6Ñ%6Ñ6òð &ôð Ð'Üð ×2Ñ2öàð —L‘L ‘O Q×%6Ñ%6Ñ6òð !ôò ¤¨¨H°dÕ!;ôñ  +¨:°uÓ=ÐØ'˜Ÿ™ÑGÐ0@ÐGÀBÑGˆJÜ—6‘6˜) R¬¨Z«Ó9ˆDá'¨°Ó6ˆMØ$�f—n‘nÑA¨]ÐA¸bÑAˆGÜ˜'×-Ñ-Ó.ˆFØ×0Ñ0ˆGð ×+Ñ+¨g×.LÑ.LÑLò>�
ð ×)Ñ)¨*Ñ5�Ø˜6’>Ø)/Ö= A°1¸³9šaÐ=�FÑ=ð>ð ˆIÜ&¤tÓ,ˆLØò &�ð&Ø˜LÑ(Ø ,¨Q¡°Ñ 3™à !˜Ø!Ÿ+™+ a¨Ó+�CØŸ*š*²#Ð%7¸Ó?À!ÑC�CØ×$Ñ$ SÔ)Ø  ‘O×*Ñ*¨3Õ/ð&ô ó ä˜q¤# i£.Ó1ôó ˆGô
 '-¬S°¸FÓ-CÓ&D×E™d˜a šÐEˆHÒEò 8>ºxÉðOð ô
 �G˜SÕ!ðg "<Ðùò9ùò 8ùò
ùòùò8 >øô "ó &ÚCDÁdÐK�CØ% #Ó%˜5ð&üó Fs7   Ì>W0ÎW5Ï!W:Ð!W?Ó=
XÔXÔ'AX	×X%Ø	X")NNFNNNNNFFTFTFFNFNFTF)rÔ   rÕ   rÖ   rz  rs   r"   r    rê   rê   ÷  sI   „ ð
 ØØØ"ØØØØØ!Ø"Ø $Ø %Ø#'ØØ Ø!Ø %Ø ØØØ+0ô1F"r"   rê   c                  ó   — e Zd Z	 	 dd„Zd„ Zy)ÚComparesTablesc                ó2  — t        |j                  «      t        |j                  «      k(  sJ ‚t        |j                  |j                  «      D �]Ö  \  }}t        |j                  |j                  «       ||j                  |j                     u sJ ‚|r@t        |j
                  |j
                  «       t        |j                  |j                  «       |rKd}t        |j                  t        |j                  «      «      s2J ||j                  |j                  fz  «       ‚| j                  ||«       t        |j                  t        j                  «      r4t        |j                  j                  |j                  j                  «       |rdt        |j                  D �ch c]  }|j                  j                  ’Œ c}|j                  D �ch c]  }|j                  j                  ’Œ c}«       |j                  s�Œ±t        |j                  t         j"                  «      r�Œ×J ‚ |rdt        |j
                  «      t        |j
                  «      k(  sJ ‚|j
                  D ]'  }|j
                  j$                  |j                     �Œ'J ‚ y y c c}w c c}w )Nz)Type '%s' doesn't correspond to type '%s')rU  rd  rW  rŠ   rr  Úprimary_keyÚnullabler$   rU   Úassert_types_baser=  ÚStringÚlengthÚforeign_keysÚcolumnÚserver_defaultr   ÚFetchedValueÚcolumns)	rÿ   ÚtableÚreflected_tableÚstrict_typesÚstrict_constraintsrd  Úreflected_crO   Úfs	            r    Úassert_tables_equalz"ComparesTables.assert_tables_equal  s  € ô �5—7‘7‹|œs ?×#4Ñ#4Ó5Ò5Ð5Ð5Ü! %§'¡'¨?×+<Ñ+<Ó=ó 	‰NˆAˆ{Ü�—‘˜×(Ñ(Ô)Ø /×"3Ñ"3°A·F±FÑ";Ñ;Ð;Ð;á!Ü�A—M‘M ;×#:Ñ#:Ô;Ü�A—J‘J × 4Ñ 4Ô5áØA�Ü! +×"2Ñ"2´D¸¿¹³LÔAð À3Ø×$Ñ$Ø—F‘FðJñ Dó ÐAð
 ×&Ñ& {°AÔ6ä˜!Ÿ&™&¤(§/¡/Ô2Ü�A—F‘F—M‘M ;×#3Ñ#3×#:Ñ#:Ô;á!ÜØ,-¯N©NÖ; q�Q—X‘X—]“]Ò;Ø,7×,DÑ,DÖE q�Q—X‘X—]“]ÒEôð ×ÔÜ!Ø×.Ñ.´×0CÑ0Cöð ð ð5	ñ< Ü�u×(Ñ(Ó)¬S°×1LÑ1LÓ-MÒMÐMÐMØ×&Ñ&ò O�Ø&×2Ñ2×:Ñ:¸1¿6¹6ÑBÑNÐNÐNñOð ùò <ùÚEs   Æ J
ÇJc                ó¬   — |j                   j                  |j                   «      s/J d|j                  ›d|j                   ›d|j                   ›d�«       ‚y )Nz
On column z, type 'z' doesn't correspond to type 'ú')rU   Ú_compare_type_affinityrr  )rÿ   Úc1Úc2s      r    r€  z ComparesTables.assert_types_base-  sF   € Ø�w‰w×-Ñ-Ø�G‰Gô
ñ 	
ð �G‹GØ�G‹GØ�G‹Gð
ó	
ñ 
r"   N)FT)rÔ   rÕ   rÖ   rŽ  r€  rs   r"   r    r|  r|    s   „ ð
 Øó)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y)ÚAssertsExecutionResultsc                óh   — t        |«      }t        t        |«      «       | j                  |||«       y r6   )ri   rÞ   rB  Úassert_list)rÿ   rY  Úclass_Úobjectss       r    Úassert_resultz%AssertsExecutionResults.assert_result8  s)   € Ü�f“ˆÜŒd�6‹lÔØ×Ñ˜ ¨Õ1r"   c                óÒ   — | j                  t        |«      t        |«      k(  d|j                  z   «       t        dt        |«      «      D ]  }| j	                  |||   ||   «       Œ y )Nz9result list is not the same size as test list, for class r   )r-   rU  rÔ   rT  Ú
assert_row)rÿ   rY  r˜  Úlist_r.  s        r    r—  z#AssertsExecutionResults.assert_list=  sc   € Ø�‰Ü�‹Kœ3˜u›:Ñ%ðà�o‰oñô	
ô �qœ#˜e›*Ó%ò 	9ˆAØ�O‰O˜F F¨1¡I¨u°Q©xÕ8ñ	9r"   c                óÂ  — | j                  |j                  |u dt        |«      z   «       |j                  «       D ]¢  \  }}t	        |t
        «      r[t	        |d   t        «      r$| j                  t        ||«      |d   |d   «       ŒM| j                  |d   t        ||«      |d   «       Œq| j                  t        ||«      |k(  d|›dt        ||«      ›d|›�«       Œ¤ y )Nzitem class is not r   r   z
attribute z value z does not match )
r-   Ú	__class__rB  Úitemsr$   rG  ri   r—  r  rœ  )rÿ   r˜  ÚrowobjÚdescr   Úvalues         r    rœ  z"AssertsExecutionResults.assert_rowG  sÉ   € Ø�‰Ø×Ñ Ð&Ð(<¼tÀF»|Ñ(Kô	
ð Ÿ*™*›,ò 	‰JˆC�Ü˜%¤Ô'Ü˜e A™h¬Ô-Ø×$Ñ$¤W¨V°SÓ%9¸5À¹8ÀUÈ1ÁXÕNà—O‘O E¨!¡H¬g°f¸cÓ.BÀEÈ!ÁHÕMà—‘Ü˜F CÓ(¨EÒ1âœG F¨CÕ0±%ð9õñ	r"   c           	     ó@  ‡ ‡‡—  G d„ dt         «      }t        j                  |«      }|D �ch c]
  } ||«      ’Œ }}t        ˆfd„|«      D ]1  }t	        dt        |«      j                  ›d‰j                  ›d�«       Œ3 t        |«      t        |«      k7  r$t	        dt        |«      ›dt        |«      ›d�«       t        «       Šˆˆ fd„}|D ]J  }	|D ]  }
 ||
|	«      sŒ|j                  |
«        Œ% t	        d	‰j                  ›d
t        |	«      ›d�«       ŒL yc c}w )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y)úFAssertsExecutionResults.assert_unordered_result.<locals>.immutabledictc                ó   — t        | «      S r6   )Úidr  s    r    Ú__hash__zOAssertsExecutionResults.assert_unordered_result.<locals>.immutabledict.__hash__`  s   € Ü˜$“x�r"   N)rÔ   rÕ   rÖ   r©  rs   r"   r    Úimmutabledictr¦  _  s   „ ó r"   rª  c                ó   •— t        | ‰«      S r6   r‘   )ÚoÚclss    €r    ú<lambda>zAAssertsExecutionResults.assert_unordered_result.<locals>.<lambda>f  s   ø€ ¬:°a¸Ó+=€ r"   zUnexpected type "z", expected "ú"zUnexpected object count "c                óæ   •— |j                  «       D ]M  \  }}t        |t        «      r&	  ‰j                  t	        | |«      |d   g|d   ¢­Ž  Œ<t	        | |‰«      |k7  sŒM y y# t
        $ r Y  yw xY w)Nr   r   FT)r   r$   rG  Úassert_unordered_resultr  rN   )Úobjr(   r   r£  ÚNOVALUErÿ   s       €€r    Ú_compare_itemzFAssertsExecutionResults.assert_unordered_result.<locals>._compare_itemt  s†   ø€ Ø"Ÿj™j›lò 
%‘
��UÜ˜e¤UÔ+ð%Ø4˜×4Ñ4Ü# C¨Ó-¨u°Q©xðØ:?À¹(ôô ˜s C¨Ó1°UÓ:Ù$ð
%ð øô *ò %Ú$ð%ús   ©$A#Á#	A0Á/A0z	Expected z instance with attributes z not found.T)Údictr   ÚIdentitySetr   r   rU   rÔ   rU  r  ÚremoverB  )rÿ   rY  r­  r|   rª  ÚfoundÚeÚwrongr´  Úexpected_itemÚ
found_itemr³  s   ` `        @r    r±  z/AssertsExecutionResults.assert_unordered_resultX  s  ú€ ô	 œDô 	 ô × Ñ  Ó(ˆØ.6Ö7¨‘M !Õ$Ð7ˆÐ7ä Ó!=¸uÓEò 	ˆEÝä˜“;×'Ó'¨¯«ð7õð	ô ˆu‹:œ˜X›Ò&Ýä�u•:œs 8�}ð.ôô
 “(ˆõ	ð &ò 		ˆMØ#ò �
Ù  ¨]Õ;Ø—L‘L Ô,Ùðõ
 à—|“|¤T¨-Õ%8ð:õð		ð ùòQ 8s   ¬D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                ó~   — | j                  |«      5 } |«       }d d d «        j                  |Ž  S # 1 sw Y   ŒxY wr6   ©r¿  r-   )rÿ   r'   r¾   ÚrulesÚasserterrY  s         r    Úassert_sql_executionz,AssertsExecutionResults.assert_sql_execution”  sC   € Ø×(Ñ(¨Ó,ð 	!°Ù“[ˆF÷	!àˆ×Ñ˜%Ñ Øˆ÷	!ð 	!ús   ’3³<c                ó>  — g }|D ]}  }t        |t        «      rHt        j                  |j	                  «       D ��cg c]  \  }}t        j
                  ||«      ‘Œ c}}Ž }nt        j
                  |Ž }|j                  |«       Œ  | j                  ||g|¢­Ž S c c}}w r6   )r$   rµ  r   ÚAllOfr   ÚCompiledSQLrQ  rÄ  )	rÿ   r'   r¾   rÂ  ÚnewrulesÚruleÚkrs  Únewrules	            r    Ú
assert_sqlz"AssertsExecutionResults.assert_sqlš  s“   € ØˆØò 	%ˆDÜ˜$¤Ô%Ü#Ÿ/™/Ø>B¿j¹j»l×K±d°a¸”i×+Ñ+¨A¨qÕ1ÓKð‘ô $×/Ñ/°Ð6�Ø�O‰O˜GÕ$ð	%ð )ˆt×(Ñ(¨¨YÐB¸ÒBÐBùó Ls   º Bc                óN   — | j                  ||t        j                  |«      «      S r6   )rÄ  r   ÚCountStatements)rÿ   r'   r¾   Úcounts       r    Úassert_sql_countz(AssertsExecutionResults.assert_sql_count§  s'   € Ø×(Ñ(Ø�	œ9×4Ñ4°UÓ;ó
ð 	
r"   c              '  ó~   K  — | j                  |«      5 }d –— d d d «        j                  |Ž  y # 1 sw Y   ŒxY w­wr6   rÁ  )rÿ   r'   rÂ  rÃ  s       r    Úassert_executionz(AssertsExecutionResults.assert_execution¬  s=   è ø€ à×(Ñ(¨Ó,ð 	°Û÷	àˆ×Ñ˜%Ò ÷	ð 	üs   ‚=”1™=±:¶=c                óL   — | j                  |t        j                  |«      «      S r6   )rÒ  r   rÎ  )rÿ   r'   rÏ  s      r    Úassert_statement_countz.AssertsExecutionResults.assert_statement_count²  s    € Ø×$Ñ$ R¬×)BÑ)BÀ5Ó)IÓJÐJr"   c              #  ó   K  — t        ||«      D ��cg c]  \  }}| j                  |«      ||f‘Œ }}}g }|D ]%  \  }}}|j                  |j                  «       «       Œ' 	 d –— t        ||«      D ]@  \  }\  }}}|j	                  d d d «       |j                  t        j                  |«      «       ŒB y c c}}w # t        ||«      D ]@  \  }\  }}}|j	                  d d d «       |j                  t        j                  |«      «       ŒB w xY w­wr6   )rW  r¿  rQ  Ú	__enter__Ú__exit__r-   r   rÎ  )	rÿ   ÚdbsÚcountsr'   rÏ  ÚrecsÚ	assertersÚctxrÃ  s	            r    Úassert_statement_count_multi_dbz7AssertsExecutionResults.assert_statement_count_multi_dbµ  s  è ø€ ô  # 3¨Ó/÷
á��Uð ×(Ñ(¨Ó,¨b°%Ò8ð
ˆñ 
ð ˆ	Ø"ò 	.‰NˆC��UØ×Ñ˜SŸ]™]›_Õ-ð	.ð	CÛä.1°)¸TÓ.Bò CÑ*�Ñ*˜3  EØ—‘˜T 4¨Ô.Ø× Ñ ¤×!:Ñ!:¸5Ó!AÕBñCùó
øô /2°)¸TÓ.Bò CÑ*�Ñ*˜3  EØ—‘˜T 4¨Ô.Ø× Ñ ¤×!:Ñ!:¸5Ó!AÕBñCüs)   ‚D’B4°/DÁ B: Á$ADÂ:ADÄDr6   )rÔ   rÕ   rÖ   rš  r—  rœ  r±  r¿  rÄ  rÌ  rÐ  Ú
contextlibÚcontextmanagerrÒ  rÔ  rÝ  rs   r"   r    r•  r•  7  sh   „ ò2ò
9òò"4ól+òòCò
ð
 ×Ññ!ó ð!ò
Kð ×ÑñCó ñCr"   r•  c                  ó    — e Zd Z	 	 	 	 	 	 dd„Zy)ÚComparesIndexesc                ó0  — t        t        |j                  «      t        |«      «       |j                  D �ci c]  }|j                  |“Œ }}|D �]:  }||d      }t        |j                  |d   «       |d   D �cg c]  }|€Œ|‘Œ	 }}t        t        |j
                  «      t        |«      «       |D ]  }t        ||j
                  v «       Œ |j                  d«      }	|	rdt        t        |j                  «      t        |	«      «       t        |j                  |	|d   «      D ]  \  }
}}|�Œ
t        |
j                  |«       Œ! |j                  d«      s�Œ
|› d�|d   v s�Œt        |j                  |   d   |d   |› d�   «       �Œ= y c c}w c c}w )Nrr  ÚuniqueÚcolumn_namesÚexpressionsÚdialect_optionsÚ_includeÚinclude)rŠ   rU  Úindexesrr  rã  r‡  rŸ   rO  rå  rW  Útextræ  )rÿ   rˆ  r|   Údialect_nameÚidxÚidx_dictÚexprd  ÚcolsÚexprsÚidx_expÚexprÚcols                r    Ú!compare_table_index_with_expectedz1ComparesIndexes.compare_table_index_with_expectedÇ  sƒ  € ô 	ŒC�—‘Ó¤ H£Ô.Ø-2¯]©]Ö; c�C—H‘H˜c‘MÐ;ˆÐ;Øó 	ˆCØ˜3˜v™;Ñ'ˆCÜ�—
‘
˜C ™MÔ*Ø" >Ñ2ÖD˜!°a±m’AÐDˆDÐDÜ”�C—K‘KÓ ¤# d£)Ô,Øò *�Ü˜˜SŸ[™[Ð(Õ)ð*à—G‘G˜MÓ*ˆEÙÜ”C˜Ÿ™Ó(¬#¨e«*Ô5Ü*-Ø—O‘O U¨C°Ñ,?ó+ò 0Ñ&�G˜T 3ð ‘{Ü˜GŸL™L¨$Õ/ð	0ð —‘Ð)Ö*Ø#�n HÐ-°Ð5FÑ1GÓGäØ×'Ñ'¨Ñ5°iÑ@ØÐ)Ñ*¨l¨^¸8Ð+DÑEöñ'	ùò <ùò Es   ·FÁ;FÂFN)rˆ  zschema.Tabler|   ri   rë  r%   )rÔ   rÕ   rÖ   rô  rs   r"   r    rá  rá  Æ  s   „ ðØ!ðØ-1ðØADôr"   rá  )TFT)TFTFFrS   r6   )NF)T)QÚ
__future__r   Úcollectionsr   rÞ  r   Ú	itertoolsr   re   rÛ   rL   r®   r   r	   r
   r   Ú
exclusionsr   r   r   r   r   r   r   r   r=  Úenginer   r   Úsql.selectabler   r   r!   rß  r)   r4   r8   r;   r?   rB   rj   rk   rT   r   rG   rt   rr   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á  rs   r"   r    ú<module>rý     sÐ  ðõ #å #Û Ý Ý !Û 	Û 
Û å Ý Ý Ý Ý Ý Ý Ý Ý Ý  Ý Ý Ý Ý ;Ý òHð  ×Ññó ðò ò òòò(ð0 €Ø€Ø€ð ØØóð. ×Ñð ØØØ!Ø òPó ðPòf(ò/òó=ó.ó
.ó
.ó
Kóóó ó!ó2ó
2ð €ó2ó
5ð €óó.ò
ò*Oò;òò
*ò*ò(Hð BGó÷ñ ð ×Ñò':ó ð':óTCóL÷G"ñ G"÷T3
ñ 3
÷lLCñ LC÷^ò r"   