Ë
    ­ŒjJT  ã                  ó¤  — U d dl mZ d dlZd dlmZ d dlZd dlad dl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Zt        j"                  d«      ZdadadadadadadadZdadadadada e«       Z  e«       Z!da"d	e#d
<   d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2g Z3g Z4d„ Z5d„ Z6e5d„ «       Z7e5d„ «       Z8e6d„ «       Z9e6d„ «       Z:e5d „ «       Z;e6d!„ «       Z<e6d"„ «       Z=d#„ Z>e6d$„ «       Z?e6d%„ «       Z@e6d&„ «       ZAd'„ ZBd(„ ZCd)„ ZDd*„ ZEd+„ ZFd,„ ZGd-„ ZHd.„ ZId/„ ZJd0„ ZKd1„ ZLd2„ ZMd9d3„ZNd4„ ZOd5„ ZP G d6„ d7ej¢                  «      ZRdaSd8„ ZTy):é    )ÚannotationsN)Ú	Namespace)ÚPath)ÚAny)ÚasyncioFzsqlalchemy.testing.plugin_baser   Úoptionsc                óX  —  | ddt         t        d¬«        | ddt         t        d¬«        | ddt         d	d
¬«        | ddt        d¬«        | ddt         dd¬«        | ddt         dd¬«        | dddd¬«        | ddd¬«        | ddt        d«      d¬«        | d dt	        d!«      d"¬«        | d#dt	        d$«      d%¬«        | d&dt	        d'«      d(¬«        | d)t         d*d+d,¬-«        | d.t         d/d0¬1«        | d2dd3d4¬«        | d5t         d6d7¬1«        | d8dt         t
        d9¬«        | d:dt        t         d;¬<«        | d=dt        t         d>¬<«        | d?dd@dAdB¬C«        | dDddEdAdF¬C«        | dGt         dHdI¬1«        | dJt         dg dKdL¬M«        | dNt         dO¬P«        | dQddR¬«       y )SNz
--log-infoÚcallbackz,turn on info logging for <LOG> (multiple OK))ÚactionÚtyper
   Úhelpz--log-debugz-turn on debug logging for <LOG> (multiple OK)z--dbÚappendÚdbzBUse prefab database uri. Multiple OK, first one is run by default.)r   r   Údestr   z--dbszList available prefab dbs)r   Úzeroarg_callbackr   z--dburiÚdburiz8Database uri.  Multiple OK, first one is run by default.z
--dbdriverÚdbdriverz|Additional database drivers to include in tests.  These are linked to the existing database URLs by the provisioning system.z--dropfirstÚ
store_trueÚ	dropfirstz,Drop all tables in the target database first)r   r   r   z--disable-asyncioz8disable test / fixtures / provisoning running in asyncio)r   r   z--backend-onlyÚbackendz}Run only tests marked with __backend__ or __sparse_backend__; this is now equivalent to the pytest -m backend mark expressionz
--nomemoryÚmemory_intensivezpDon't run memory profiling tests; this is now equivalent to the pytest -m 'not memory_intensive' mark expressionz--notimingintensiveÚtiming_intensivezpDon't run timing intensive tests; this is now equivalent to the pytest -m 'not timing_intensive' mark expressionz--nomypyÚmypyz_Don't run mypy typing tests; this is now equivalent to the pytest -m 'not mypy' mark expressionz--profile-sortÚ
cumulativeÚprofilesortz*Type of sort for profiling standard output)r   Údefaultr   r   z--profile-dumpÚprofiledumpz2Filename where a single profile run will be dumped)r   r   r   z--low-connectionsÚlow_connectionsz>Use a low number of distinct connections - i.e. for Oracle TNSz--write-identsÚwrite_identszCwrite out generated follower idents to <file>, when -n<num> is usedz--requirementsz3requirements class for testing, overrides setup.cfgz--include-tagzAInclude tests with tag <tag>; legacy, use pytest -m 'tag' instead)r   r
   r   r   z--exclude-tagzEExclude tests with tag <tag>; legacy, use pytest -m 'not tag' insteadz--write-profilesÚwrite_profilesFz$Write/update failing profiling data.)r   r   r   r   z--force-write-profilesÚforce_write_profilesz,Unconditionally write/update profiling data.z--dump-pyannotateÚdump_pyannotatez/Run pyannotate and dump json info to given filez--mypy-extra-test-pathÚmypy_extra_test_pathszlAdditional test directories to add to the mypy tests. This is used only when running mypy tests. Multiple OK)r   r   r   r   r   z--postgresql-templatedbz^name of template database to use for PostgreSQL CREATE DATABASE (defaults to current database))r   r   z--oracledb-thick-modez:enables the 'thick mode' when testing with oracle+oracledb)ÚstrÚ_logÚ	_list_dbsÚ_set_tag_includeÚ_set_tag_excludeÚ_requirements_optÚ_include_tagÚ_exclude_tag)Úmake_options    úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/sqlalchemy/testing/plugin/plugin_base.pyÚsetup_optionsr.   ;   su  € ÙØØÜÜØ;õñ ØØÜÜØ<õñ ØØÜØð'õñ ØØÜ"Ø(õ	ñ ØØÜØØGõñ ØØÜØðõñ ØØØØ;õ	ñ ØØØGõñ
 ØØÜ)¨)Ó4ðNõñ ØØÜ)Ð*<Ó=ðõ	ñ ØØÜ)Ð*<Ó=ðõ	ñ ØØÜ)¨&Ó1ðMõ	ñ ØÜØØØ9õñ ØÜØØAõ	ñ ØØØðõ	ñ ØÜØðõ	ñ ØØÜÜ"ØBõñ ØØÜÜð.õñ ØØÜÜð2õñ ØØØØØ3õñ Ø ØØ#ØØ;õñ ØÜØØ>õ	ñ Ø ÜØØØ$ðAõñ Ø!Üð9õñ ØØØIöó    c                ó   — ddl m} | |_        y)z„Configure required state for a follower.

    This invokes in the parent process and typically includes
    database creation.

    r   ©Ú	provisionN)Úsqlalchemy.testingr2   ÚFOLLOWER_IDENT)Úfollower_identr2   s     r-   Úconfigure_followerr6   ð   s   € õ -à-€IÕr/   c                 ó   — y)z¯Store important configuration we will need to send to a follower.

    This invokes in the parent process after normal config is set up.

    Hook is currently not used.

    N© ©Údict_s    r-   Ú!memoize_important_follower_configr;   ü   ó   � r/   c                 ó   — y)z‡Restore important configuration needed by a follower.

    This invokes in the follower process.

    Hook is currently not used.

    Nr8   r9   s    r-   Ú!restore_important_follower_configr>     r<   r/   c                óŠ   — t        j                  «       at        j                  t	        | dz  «      t	        | dz  «      g«       y )Nz	setup.cfgztest.cfg)ÚconfigparserÚConfigParserÚfile_configÚreadr$   )Ú	root_paths    r-   Úread_configrE     s:   € ä×+Ñ+Ó-€KÜ×ÑÜ	ˆY˜Ñ$Ó	%¤s¨9°zÑ+AÓ'BÐCõr/   c                ó@   — | a t        D ]  } |t         t        «       Œ y)z7things to set up early, before coverage might be setup.N)r   Úpre_configurerB   )ÚoptÚfns     r-   Ú	pre_beginrJ     s   € ð €GßˆÙ
Œ7”KÕ ñ r/   c                ó   — | t         _        y ©N)r   Úhas_coverage)Úvalues    r-   Úset_coverage_flagrO      s
   € Ø „GÕr/   c                 ó´   — t         D ]  }  | t        t        «       Œ ddlma ddlmamama ddlm	a	m
a
ma ddlmama ddlma t        j                  «        y)z9things to set up later, once we know coverage is running.r   ©Útesting)ÚfixturesÚenginesÚ
exclusions)Ú
assertionsÚwarningsÚ	profiling)Úconfigr2   )ÚutilN)Úpost_configurer   rB   Ú
sqlalchemyrR   r3   rS   rT   rU   rV   rW   rX   rY   r2   rZ   Úsetup_filters©rI   s    r-   Ú
post_beginr_   $  s;   € ÷ ˆÙ
Œ7”KÕ ð õ #ß@Ñ@ßBÑBß4Ýä×ÑÕr/   c                óP  — t         sdd l a t        j                  «        | j                  d«      r3t        j                  |«      j	                  t         j
                  «       y | j                  d«      r3t        j                  |«      j	                  t         j                  «       y y )Nr   z-infoz-debug)ÚloggingÚbasicConfigÚendswithÚ	getLoggerÚsetLevelÚINFOÚDEBUG©Úopt_strrN   Úparsers      r-   r%   r%   6  so   € åÛä×ÑÔà×Ñ˜Ô Ü×Ñ˜%Ó ×)Ñ)¬'¯,©,Õ7Ø	×	Ñ	˜(Ô	#Ü×Ñ˜%Ó ×)Ñ)¬'¯-©-Õ8ð 
$r/   c            	     ó  — t         €t        t        j                  «       «       t	        d«       t        t         j                  d«      «      D ]'  }t	        |d›dt         j                  d|«      ›�«       Œ) t        j                  d«       y )Nz0Available --db options (use --dburi to override)r   z>20Ú	r   )
rB   rE   r   ÚcwdÚprintÚsortedr   ÚgetÚsysÚexit)ÚargsÚmacros     r-   r&   r&   C  s^   € ÜÐô 	”D—H‘H“JÔÜ	Ð
<Ô=Üœ×+Ñ+¨DÓ1Ö2ˆÜ›E¤;§?¡?°4¸Ô#?Ð@ÕAð 3ä‡H�HˆQ…Kr/   c                ó   — t        |«       y rL   )Ú_setup_requirementsrh   s      r-   r)   r)   N  s
   € Ü˜Õr/   c                ó   ‡ — ˆ fd„}|S )Nc                ó    •— t        | ‰|«       y rL   )r*   ©ri   rN   rj   Útags      €r-   Ú_do_include_tagz)_set_tag_include.<locals>._do_include_tagS  ó   ø€ Ü�W˜c 6Õ*r/   r8   )rz   r{   s   ` r-   r'   r'   R  ó   ø€ ô+ð Ðr/   c                ó   ‡ — ˆ fd„}|S )Nc                ó    •— t        | ‰|«       y rL   )r+   ry   s      €r-   Ú_do_exclude_tagz)_set_tag_exclude.<locals>._do_exclude_tagZ  r|   r/   r8   )rz   r€   s   ` r-   r(   r(   Y  r}   r/   c                óN   — t         j                  |j                  dd«      «       y ©NÚ-Ú_)Úexclude_tagsÚaddÚreplacerh   s      r-   r+   r+   `  ó   € Ü×Ñ�U—]‘] 3¨Ó,Õ-r/   c                óN   — t         j                  |j                  dd«      «       y r‚   )Úinclude_tagsr†   r‡   rh   s      r-   r*   r*   d  rˆ   r/   c                ó0   — t         j                  | «       | S rL   )rG   r   r^   s    r-   ÚprerŒ   l  s   € Ü×Ñ˜ÔØ€Ir/   c                ó0   — t         j                  | «       | S rL   )r[   r   r^   s    r-   ÚpostrŽ   q  s   € Ü×Ñ˜"ÔØ€Ir/   c                ó   — | a y rL   ©r   ©rH   rB   s     r-   Ú_setup_optionsr’   v  s	   € ð �Gr/   c                ó\   — ddl m} |j                  ddd«       |j                  ddd«       y )Nr   )Úregistryzsqlite.pysqlite_numericz#sqlalchemy.dialects.sqlite.pysqliteÚ_SQLiteDialect_pysqlite_numericzsqlite.pysqlite_dollarÚ_SQLiteDialect_pysqlite_dollar)Úsqlalchemy.dialectsr”   Úregister)rH   rB   r”   s      r-   Ú _register_sqlite_numeric_dialectr™   |  s5   € å,à×ÑØ!Ø-Ø)ôð
 ×ÑØ Ø-Ø(õr/   c                ó¦   — t         j                  j                  dd«      dk(  rddlm} 	  |d¬«       y y # t
        $ r}t        d«      |‚d }~ww xY w)	NÚREQUIRE_SQLALCHEMY_CEXTÚ0Ú1r   )Úhas_compiled_extT)Úraise_zEREQUIRE_SQLALCHEMY_CEXT is set but can't import the cython extensions)ÚosÚenvironrp   Úsqlalchemy.utilrž   ÚImportErrorÚAssertionError)rH   rB   rž   Úerrs       r-   Ú__ensure_cextr¦   Œ  sX   € ä	‡z�z‡~�~Ð/°Ó5¸Ò<Ý4ð	Ù DÖ)ð	 =øô
 ò 	Ü ð$óð ðûð	ús   «	6 ¶	A¿AÁAc                ó.   — ddl m} t        «       |_        y ©Nr   ©rY   )r3   rY   Ú_fixture_fn_classÚ_fixture_functions)r   rB   rY   s      r-   Ú_init_symbolsr¬   š  s   € å)ä 1Ó 3€FÕr/   c                ó4   — | j                   rdt        _        y y ©NF)Údisable_asyncior   ÚENABLE_ASYNCIOr‘   s     r-   Ú_set_disable_asyncior±   ¡  s   € à
×ÒØ!&ŒÕð r/   c           	     ó  — ddl m} ddlm} ddlm} ddlm} | j                  rt        | j                  «      }ng }| j                  xs g }| j                  rn| j                  D ]_  }t        j                  d|«      D ]D  }	|	|j                  d«      vrt        d|	z  «      ‚|j                  |j!                  d|	«      «       ŒF Œa |s!|j                  |j!                  dd	«      «       d |_        | j$                  r€|j&                  rt|D �
cg c]  }
|j)                  |
«      ‘Œ c}
D ]R  }
t+        | j$                  d
«      5 }|j-                  |j&                  › d|
j/                  d¬«      › d�«       d d d «       ŒT t        |j1                  ||«      «      }|D ]U  }
t2        j5                  d|
«       |j7                  |
| ||j&                  «      }|j"                  rŒD|j9                  ||«       ŒW y c c}
w # 1 sw Y   ŒÙxY w)Nr   rQ   r©   r1   )Úurlz[,\s]+r   z:Unknown URI specifier '%s'.  Specify --dbs for known uris.r   ÚaÚ F)Úhide_passwordÚ
zAdding database URL: %s)r\   rR   r3   rY   r2   Úsqlalchemy.enginer³   r   Úlistr   r   ÚreÚsplitr   ÚRuntimeErrorr   rp   Ú_currentr   r4   Úmake_urlÚopenÚwriteÚrender_as_stringÚgenerate_db_urlsÚlogÚinfoÚsetup_configÚset_as_current)r   rB   rR   rY   r2   Úsa_urlÚdb_urlsÚextra_driversÚdb_tokenr   Údb_urlÚfile_Úexpanded_urlsÚcfgs                 r-   Ú_engine_urirÏ   §  sÆ  € å"Ý)Ý,Ý/à‡}‚}Ü�w—}‘}Ó%‰àˆà×$Ñ$Ò*¨€Mà‡z‚zØŸ
œ
ˆHÜ—h‘h˜y¨(Ö3�Ø˜[×0Ñ0°Ó6Ñ6Ü&ð8Ø:<ñ=óð ð
 —N‘N ;§?¡?°4¸Ó#<Õ=ñ 4ð #ñ Ø�‰�{—‘ t¨YÓ7Ô8à€F„Oà×Ò 	× 8Ò 8Ù=DÓE¹W°6�v—‘ vÕ.¸WÔEˆFÜ�g×*Ñ*¨CÔ0°EØ—‘Ø ×/Ñ/Ð0°Ø×.Ñ.¸UÐ.ÓCÐDÀBðHô÷ 1Ð0ð Fô ˜×3Ñ3°G¸]ÓKÓL€MãˆÜ�‰Ð*¨FÔ3à×$Ñ$Ø�G˜[¨)×*BÑ*Bó
ˆð �‹Ø×Ñ˜s GÕ,ñ  ùò Fß0Ð0ús   ÄG3Å2G8Ç8H	c                ó>   — |j                  dd«      }t        |«       y )NÚsqla_testingÚrequirement_cls)rp   rv   )r   rB   rÒ   s      r-   Ú_requirementsrÓ   Ù  s   € à!—o‘o nÐ6GÓH€OÜ˜Õ(r/   c                óø   — ddl m} ddlm} | j	                  d«      \  }}t        |«      }|j	                  d«      dd  D ]  }t        ||«      }Œ t        ||«      } |«       x|_        |_        t        |_	        y )Nr   r©   rQ   Ú:Ú.é   )
r3   rY   r\   rR   r»   Ú
__import__ÚgetattrÚrequirementsÚrequiresÚbootstrapped_as_sqlalchemy)ÚargumentrY   rR   ÚmodnameÚclsnameÚmodÚ	componentÚreq_clss           r-   rv   rv   ß  ss   € Ý)Ý"à—~‘~ cÓ*Ñ€GˆWô �WÓ
€CØ—]‘] 3Ó'¨¨Ó+ˆ	Ü�c˜9Ó%‰ð ,ä�c˜7Ó#€Gá-4«YÐ6€FÔ˜'Ô*ä(B€FÕ%r/   c                ó¬   — ddl m} | j                  rBddl m} |j                  j                  «       D ]  }|j                  ||j                  «       Œ  y y )Nr   r©   r1   )r3   rY   r   r2   ÚConfigÚall_configsÚdrop_all_schema_objectsr   )r   rB   rY   r2   rÎ   s        r-   Ú_prep_testing_databaserç   ñ  sA   € å)à×ÒÝ0à—=‘=×,Ñ,Ö.ˆCØ×-Ñ-¨c°3·6±6Õ:ñ /ð r/   c                ó4   — ddl m} t        |_        ||_        y r¨   )r3   rY   r   rB   )rH   rB   rY   s      r-   Ú_post_setup_optionsré   ü  s   € å)ä€F„NØ$€FÕr/   c                óŠ   — ddl m} |j                  |j                  dd«      | j                  | j
                  ¬«      |_        y )Nr   )rX   rÑ   Úprofile_file)ÚsortÚdump)r3   rX   ÚProfileStatsFilerp   r   r   Ú_profile_stats)r   rB   rX   s      r-   Ú_setup_profilingrð     s=   € å,à(×9Ñ9Ø�‰˜¨Ó7Ø× Ñ Ø× Ñ ð  :ó  €IÕr/   c                ó^   — t        |t        j                  «      sy| j                  d«      ryy)NFr„   T)Ú
issubclassrS   ÚTestBaseÚ
startswith)ÚnameÚclss     r-   Ú
want_classr÷     s'   € Ü�cœ8×,Ñ,Ô-ØØ	�‰˜Ô	Øàr/   c                óV   — |j                   j                  d«      sy|j                  €yy)NÚtest_FT)Ú__name__rô   Ú
__module__)rö   rI   s     r-   Úwant_methodrü     s'   € Ø�;‰;×!Ñ! 'Ô*ØØ	�‰Ð	Øàr/   c              #  ó@  K  — d|v sd|v rŽd|v }t        | |¬«      D ]y  }| j                  }t        j                  dd|j                  «      }t        j                  dd|«      }| j                  ›d|›�}t        || f||dœ«      }t        |||«       |–— Œ{ y | –— y ­w)	Nr   Úsparse_backend)Úsparsez
[_\[\]\.]+r„   z_+$Ú )Ú_sa_orig_cls_nameÚ__only_on_config__)Ú_possible_configs_for_clsrú   rº   Úsubrõ   r   Úsetattr)	rö   ÚmoduleÚmarkersrÿ   rÎ   Ú	orig_nameÚ
alpha_namerõ   Úsubclss	            r-   Úgenerate_sub_testsr  !  s§   è ø€ Ø�GÑÐ/°7Ñ:Ø! WÐ,ˆÜ,¨S¸×@ˆCØŸ™ˆIô Ÿ™ ¨s°C·H±HÓ=ˆJÜŸ™ ¨¨JÓ7ˆJØ!Ÿl›l©JÐ7ˆDÜØØ�Ø&/ÀsÑKóˆFô
 �F˜D &Ô)Ø‹Lñ! Að$ ‹	ùs   ‚BBc                ó0   — t        | «       t        | «       y rL   )Ú	_do_skipsÚ_setup_engine©rö   s    r-   Ú!start_test_class_outside_fixturesr  9  s   € Üˆc„NÜ�#Õr/   c                ój   — t         j                  | «       t        j                  j                  «        y rL   )rS   Ústop_test_class_inside_fixturesrT   Útesting_reaperr  s    r-   Ústop_test_classr  >  s$   € ä×,Ñ,¨SÔ1ô ×Ñ×:Ñ:Õ<r/   c                ó  — t         j                  j                  «        t        j                  t        t        j
                  | «       	 t        j                  st        j                  «        t        «        y # t        «        w xY wrL   )rT   r  Ú stop_test_class_outside_fixturesr2   rY   r   r   r   rV   Úglobal_cleanup_assertionsÚ_restore_enginer  s    r-   r  r  G  sQ   € Ü×Ñ×;Ñ;Ô=Ü×.Ñ.¬v´v·y±yÀ#ÔFðÜ×&Ò&Ü×0Ñ0Ô2äÕøŒÕús   Á	$A8 Á8Bc                 ól   — t         j                  r$t         j                  j                  t        «       y y rL   )rY   r½   ÚresetrR   r8   r/   r-   r  r  Q  s    € Ü‡‚Ü�‰×ÑœgÕ&ð r/   c                 ó|   — t         j                  j                  «        t        j	                  «        t        «        y rL   )rT   r  Úfinal_cleanuprV   r  r  r8   r/   r-   Úfinal_process_cleanupr  V  s&   € Ü×Ñ×(Ñ(Ô*Ü×(Ñ(Ô*ÜÕr/   c                óÈ   — t        | dd «      rUt        | j                  «      }d|d<   t        j	                  |¬«      }t
        j                  j                  |t        «       y y )NÚ__engine_options__ÚclassÚscoper�   )	rÙ   Údictr  rT   Útesting_enginerY   r½   Úpush_enginerR   )rö   ÚoptsÚengs      r-   r  r  \  sT   € ÜˆsÐ(¨$Ô/Ü�C×*Ñ*Ó+ˆØˆˆW‰Ü×$Ñ$¨TÐ$Ó2ˆÜ�‰×#Ñ# C¬Õ1ð	 0r/   c                óp   — t        |d|j                  «      }|›d|›d|›�}t        j                  |«       y )Nr  rÖ   )rÙ   rú   rX   Ú_start_current_test)ÚtestÚtest_module_nameÚ
test_classÚ	test_namerõ   Úid_s         r-   Úbefore_testr.  d  s3   € ô �:Ð2°J×4GÑ4GÓH€Dâ(ª$±	Ð
:€Cä×!Ñ! #Õ&r/   c                óh   — t         j                  «        t        j                  j                  «        y rL   )rS   Ú
after_testrT   r  ©r)  s    r-   r0  r0  o  s    € Ü×ÑÔÜ×Ñ×%Ñ%Õ'r/   c                óB   — t         j                  j                  | «       y rL   )rT   r  Úafter_test_outside_fixturesr1  s    r-   Úafter_test_fixturesr4  t  s   € Ü×Ñ×6Ñ6°tÕ<r/   c                óê  — t        t        j                  j                  «       «      }| j                  rFt        j                  | j                  Ž }t        |«      D ]  } ||«      sŒ|j                  |«       Œ t        | dd «      rYt        j                  t        j                  | j                  «      Ž }t        |«      D ]  } ||«      rŒ|j                  |«       Œ t        | dd «      r|j                  | j                  g«       t        | d«      rvt        j                   }t        |«      D ]X  }| j"                  D ]G  }t        ||«      }|j%                  |«      }	|	sŒ#|j                  |«       |�|j'                  |	«        ŒX ŒZ t        | d«      rŒt        «       }
t        j                   }t        |«      D ]B  }| j(                  D ]1  }t        ||«      }|j+                  |«      rŒ!|
j-                  |«       Œ3 ŒD |j/                  |
«      r|j1                  |
«       |rNi }t3        t5        |d„ ¬«      «      D ]"  }|j6                  j8                  }||vsŒ|||<   Œ$ |j;                  «       S |S )NÚ__only_on__r  Ú__requires__Ú__prefer_requires__c                ó˜   — | j                   j                  | j                   j                  | j                   j                  j                  fS rL   )r   rõ   ÚdriverÚdialectÚserver_version_info)rÎ   s    r-   Ú<lambda>z+_possible_configs_for_cls.<locals>.<lambda>«  s.   € Ø—F‘F—K‘KØ—F‘F—M‘MØ—F‘F—N‘N×6Ñ6ñ!r/   )Úkey)ÚsetrY   rä   rå   Ú__unsupported_on__rU   Údb_specr¹   ÚremoverÙ   rZ   Úto_listr6  Úintersection_updater  ÚhasattrrÚ   r7  Úmatching_config_reasonsÚextendr8  Úenabled_for_configr†   Ú
differenceÚdifference_updateÚreversedro   r   rõ   Úvalues)rö   Úreasonsrÿ   rå   ÚspecÚ
config_objrÚ   ÚrequirementÚcheckÚskip_reasonsÚnon_preferredÚper_dialectrÎ   r   s                 r-   r  r  x  s-  € Ü”f—m‘m×/Ñ/Ó1Ó2€Kà
×ÒÜ×!Ñ! 3×#9Ñ#9Ð:ˆÜ˜{Ö+ˆJÙ�JÕØ×"Ñ" :Õ.ð ,ô ˆs�M 4Ô(Ü×!Ñ!¤4§<¡<°·±Ó#@ÐAˆÜ˜{Ö+ˆJÙ˜
Õ#Ø×"Ñ" :Õ.ð ,ô ˆsÐ(¨$Ô/Ø×'Ñ'¨×)?Ñ)?Ð(@ÔAäˆs�NÔ#Ü×*Ñ*ˆÜ˜{Ö+ˆJØ"×/Ô/�Ü ¨kÓ:�à$×<Ñ<¸ZÓH�ÚØ×&Ñ& zÔ2ØÐ*ØŸ™ |Ô4Ùñ  0ð ,ô ˆsÐ)Ô*Ü›ˆÜ×*Ñ*ˆÜ˜{Ö+ˆJØ"×6Ô6�Ü ¨kÓ:�à×/Ñ/°
Õ;Ø!×%Ñ% jÕ1ñ	  7ð ,ð ×!Ñ! -Ô0Ø×)Ñ)¨-Ô8áð ˆÜÜØñôö	
ˆCð —‘—‘ˆBØ˜Ò$Ø"%�˜B’ð	
ð ×!Ñ!Ó#Ð#àÐr/   c           
     ó(  — g }t        | |«      }t        | dd«      rHt        | d«      D ]9  } |«       sŒt        j                  d| j                  ›d|j                  ›�«       Œ; |sxd| j
                  ›d| j                  ›ddj                  d„ t        j                  j                  «       D «       «      ›dj                  |«      ›�}t        j                  |«       nˆt        | d	«      r|t        «       }t        j                  t        j                  | j                  «      Ž }|D ]  } ||«      rŒ|j!                  |«       Œ |j#                  |«      r|j%                  |«       t        j&                  |vrt)        |j+                  «       | «       y y )
NÚ__skip_if__FÚ'z' skipped by rÖ   z'' unsupported on any DB implementation z, c           
   3  óê   K  — | ]k  }d |j                   j                  ›ddj                  d„ t        j	                  |j                   «      D «       «      ›d|j                   j
                  ›d �–— Œm y­w)rW  Ú(rÖ   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrL   )r$   )Ú.0Údigs     r-   Ú	<genexpr>z&_do_skips.<locals>.<genexpr>.<genexpr>Í  s   è ø€ ð á#L˜Cô ˜CŸÙ#Lùs   ‚z)+N)r   rõ   ÚjoinrU   Ú_server_versionr:  )r[  rO  s     r-   r]  z_do_skips.<locals>.<genexpr>É  sb   è ø€ ð ñ #>‘Jð —M‘M×&Ó&Ø—H‘Hñ ä#-×#=Ñ#=¸j¿m¹mÔ#Lóõ ð —M‘M×(Ó(ôñ #>ùs   ‚A1A3Ú__prefer_backends__)r  rÙ   rY   Ú	skip_testrú   rû   r^  rä   rå   rE  r?  rU   rA  rZ   rC  r`  r†   rI  rJ  r½   Ú_setup_configÚpop)rö   rM  rå   ÚcÚmsgrS  rN  rO  s           r-   r  r  º  sD  € Ø€GÜ+¨C°Ó9€Käˆs�M 5Ô)Ü˜˜mÖ,ˆAÙ�sÜ× Ò Ø,/¯L«L¸!¿*º*ÐEõð -ò à�N‹NØ�L‹LØ�I‰Iñ ô #)§-¡-×";Ñ";Ô"=óô ð �I‰I�gÔð
ˆô" 	×Ñ˜ÕÜ	�Ð+Ô	,Ü›ˆÜ×!Ñ!¤4§<¡<°×0GÑ0GÓ#HÐIˆÛ%ˆJÙ˜
Õ#Ø×!Ñ! *Õ-ð &ð ×!Ñ! -Ô0Ø×)Ñ)¨-Ô8ä‡�˜kÑ)Ü�k—o‘oÓ'¨Õ-ð *r/   c                óL   — t         j                  j                  | t        «       y rL   )rY   r½   ÚpushrR   )rO  Úctxs     r-   rb  rb  å  s   € Ü
‡O�O×Ñ˜¤WÕ-r/   c                  óì   — e Zd Zej                  d„ «       Zej                  d„ «       Zej                  d„ «       Zej                  d„ «       Zd„ Z	ej                  d	d„«       Z
ej                  d„ «       Zy)
ÚFixtureFunctionsc                ó   — t        «       ‚rL   ©ÚNotImplementedError©ÚselfÚargÚkws      r-   Úskip_test_exceptionz$FixtureFunctions.skip_test_exceptionê  ó   € ä!Ó#Ð#r/   c                ó   — t        «       ‚rL   rl  ©ro  rs   rq  s      r-   ÚcombinationszFixtureFunctions.combinationsî  rs  r/   c                ó   — t        «       ‚rL   rl  ru  s      r-   Úparam_identzFixtureFunctions.param_identò  rs  r/   c                ó   — t        «       ‚rL   rl  rn  s      r-   ÚfixturezFixtureFunctions.fixtureö  rs  r/   c                ó   — t        «       ‚rL   rl  ©ro  s    r-   Úget_current_test_namez&FixtureFunctions.get_current_test_nameú  s   € Ü!Ó#Ð#r/   c                ó   — t        «       ‚rL   rl  r|  s    r-   Úmark_base_test_classz%FixtureFunctions.mark_base_test_classý  rs  r/   c                ó   — t        «       ‚rL   rl  r|  s    r-   Úadd_to_markerzFixtureFunctions.add_to_marker  rs  r/   N)Úreturnr   )rú   rû   Ú__qualname__ÚabcÚabstractmethodrr  rv  rx  rz  r}  r  Úabstractpropertyr�  r8   r/   r-   rj  rj  é  s¡   „ Ø×Ññ$ó ð$ð 	×Ññ$ó ð$ð 	×Ññ$ó ð$ð 	×Ññ$ó ð$ò$ð 	×Ñò$ó ð$ð 	×Ññ$ó ñ$r/   rj  c                ó   — | a y rL   )rª   )Úfixture_fn_classs    r-   Úset_fixture_functionsr‰  	  s   € à(Ñr/   r®   )UÚ
__future__r   r„  Úargparser   r@   ra   r    Úpathlibr   rº   rq   Útypingr   r3   r   rÜ   rd   rÃ   rS   rT   rU   rW   rX   r2   rV   rÚ   rY   rR   rZ   rB   r?  rŠ   r…   r   Ú__annotations__r.   r6   r;   r>   rE   rJ   rO   r_   r%   r&   r)   r'   r(   r+   r*   rG   r[   rŒ   rŽ   r’   r™   r¦   r¬   r±   rÏ   rÓ   rv   rç   ré   rð   r÷   rü   r  r  r  r  r  r  r  r.  r0  r4  r  r  rb  ÚABCrj  rª   r‰  r8   r/   r-   Ú<module>r�     s=  ðö #ã 
Ý Û Û Û 	Ý Û 	Û 
Ý å &ðð #Ð ä×ÑÐ8Ó9€ð €Ø
€Ø€
Ø€Ø€	Ø€	Ø€
Ø€Ø	€Ø
€Ø€Ø€à
€Ù‹u€Ù‹u€Ø€ˆÓ òròj	.òòòò!ò!òò$
9òòòòò.ò.ð €Ø€òò
ð
 ñó ðð
 ñó ðð ñ
ó ð
ð ñ4ó ð4ð ñ'ó ð'ð
 ñ.-ó ð.-ðb ñ)ó ð)ò
Cð$ ñ;ó ð;ð ñ%ó ð%ð ñó ðòòòò0ò
=òò'ò
ò2ò'ò(ò
=ó?òD(.òV.ô$�s—w‘wô $ð: Ð ó)r/   