§
    äóÉj»  ã                  óR   — d dl mZ d dlZd dlmZ d dlmZ eZd„ Zd„ Z	dd„Z
dd„ZdS )é    )ÚannotationsN)Útesting_engine)Úinspect_getfullargspecc                 óþ   ‡— ddl m} t          ¦   «         Š| D ]}‰                     |¦  «         Œt	          ‰¦  «        Š |j        ˆfd„| D ¦   «         ddt          ‰¦  «        z  z   d                     ‰¦  «        dœŽS )a  A facade around @testing.combinations() oriented towards boolean
    keyword-based arguments.

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

    E.g.::

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


    would result in::

        @testing.combinations(
            ('', False, False, False),
            ('lazy', True, False, False),
            ('lazy_passive', True, True, False),
            ('lazy_passive', True, True, True),
            id_='iaaa',
            argnames='lazy,passive,raiseload'
        )

    r   ©Úconfigc                óŽ   •‡— g | ]@Šd                       ˆfd„‰D ¦   «         ¦  «        ft          ˆfd„‰D ¦   «         ¦  «        z   ‘ŒAS )Ú_c              3  óH   •K  — | ]}‰                      |d ¦  «        ¯|V — ŒdS ©FN©Úget©Ú.0ÚkÚds     €úw/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/alembic/testing/util.pyú	<genexpr>z/flag_combinations.<locals>.<listcomp>.<genexpr>9   s4   øè è € Ð9Ð9˜A¨¯ª¨q°%©¬Ð9�aÐ9Ð9Ð9Ð9Ð9Ð9ó    c              3  óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS r   r   r   s     €r   r   z/flag_combinations.<locals>.<listcomp>.<genexpr>:   s/   øè è € Ð2Ð2¨�A—E’E˜!˜U‘O”OÐ2Ð2Ð2Ð2Ð2Ð2r   )ÚjoinÚtuple)r   r   Úkeyss    @€r   ú
<listcomp>z%flag_combinations.<locals>.<listcomp>8   su   øø€ ð 

ð 

ð 

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

ð 

ð 

r   ÚiÚaú,)Úid_Úargnames)Úsqlalchemy.testingr   ÚsetÚupdateÚsortedÚcombinationsÚlenr   )r$   r   r   r   s      @r   Úflag_combinationsr&      s°   ø€ ð: *Ð)Ð)Ð)Ð)Ð)å‰5Œ5€Dàð ð ˆØ�Š�A‰Œˆˆå�$‰<Œ<€Dàˆ6Ôð

ð 

ð 

ð 

ð "ð

ñ 

ô 

ð
 �3�˜T™œ‘?Ñ#Ø—’˜$‘”ðð ð ð r   c                óà   ‡— t          | ¦  «        d         }ˆfd„|D ¦   «         }t          | j        ¦  «        }|                     ‰¦  «         t	          j        | j        |¦  «        } |di |¤ŽS )zÝGiven a no-arg lambda and a namespace, return a new lambda that
    has all the values filled in.

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

    r   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS © )Úpop)r   ÚargÚkws     €r   ú
<dictcomp>z"resolve_lambda.<locals>.<dictcomp>L   s%   ø€ Ð:Ð:Ð:¨#�S˜"Ÿ&š& ™+œ+Ð:Ð:Ð:r   r)   )r   ÚdictÚ__globals__r"   ÚtypesÚFunctionTypeÚ__code__)Ú__fnr,   Úpos_argsÚpass_pos_argsÚglbÚnew_fns    `    r   Úresolve_lambdar8   B   sy   ø€ õ & dÑ+Ô+¨AÔ.€HØ:Ð:Ð:Ð:°Ð:Ñ:Ô:€MÝ
ˆtÔÑ
 Ô
 €CØ‡J‚Jˆr�N„N€NÝÔ ¤¨sÑ3Ô3€FØˆ6Ð"Ð"�MÐ"Ð"Ð"r   Úfunctionc                ó2   ‡ ‡‡— ddl mŠ ddlmŠ ˆˆ ˆfd„}|S )z&Provide MetaData for a pytest fixture.r   r   é   )Úfixture_functionsc                óP   •‡ — ˆˆ fd„} ‰                      ‰¬¦  «        |¦  «        S )Nc              3  ó  •K  — ddl m} |                     ¦   «         x}| _        	  ‰| |¦  «        }|                     ‰j        ¦  «         |V — |                     ‰j        ¦  «         d S # |                     ‰j        ¦  «         w xY w)Nr   )Úschema)Ú
sqlalchemyr?   ÚMetaDataÚmetadataÚ
create_allÚdbÚdrop_all)Úselfr?   rB   Úresultr   Úfns       €€r   Úrun_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddlZ   sž   øè è € Ø)Ð)Ð)Ð)Ð)Ð)à'-§¢Ñ'8Ô'8Ð8ˆH�t”}ð-Ø˜˜D (Ñ+Ô+�Ø×#Ò# F¤IÑ.Ô.Ð.ð ���à×!Ò! &¤)Ñ,Ô,Ð,Ð,Ð,ø�×!Ò! &¤)Ñ,Ô,Ð,Ð,øøøs   ¦*A, Á,B)Úscope)Úfixture)rH   rI   r   Úddlr<   s   ` €€€r   Údecoratez"metadata_fixture.<locals>.decorateY   sF   øø€ ð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 4Ð ×(Ò(¨sÐ(Ñ3Ô3°GÑ<Ô<Ð<r   )r    r   Ú r<   )rL   rM   r   r<   s   ` @@r   Úmetadata_fixturerO   S   sU   øøø€ ð *Ð)Ð)Ð)Ð)Ð)Ø#Ð#Ð#Ð#Ð#Ð#ð=ð =ð =ð =ð =ð =ð =ð  €Or   ÚvalueÚstrÚreturnú	int | strc                ó4   — 	 t          | ¦  «        S #  | cY S xY w)N)Úint)rP   s    r   Ú	_safe_intrV   l   s%   € ðÝ�5‰zŒzÐøðØˆˆˆøøøs   ‚ ‘)r9   )rP   rQ   rR   rS   )Ú
__future__r   r0   Úsqlalchemy.testing.enginesr   Ú_testing_engineÚsqlalchemy.utilr   r&   r8   rO   rV   r)   r   r   ú<module>r[      sœ   ðð #Ð "Ð "Ð "Ð "Ð "à €€€à HÐ HÐ HÐ HÐ HÐ HØ 2Ð 2Ð 2Ð 2Ð 2Ð 2à €ð.ð .ð .ðb#ð #ð #ð"ð ð ð ð2ð ð ð ð ð r   