Ë
    ýÿæi  ã                  ó`   — d dl mZ d dlZd dlmZ d dlmZ ddlmZ d„ Z	d„ Z
dd	„Zdd
„Zdd„Zy)é    )ÚannotationsN)ÚUnion)Úinspect_getfullargspecé   )Úsqla_2c            
     óP  ‡— ddl m} t        «       }| D ]  Š|j                  ‰«       Œ t	        |«      } |j
                  | D �‡cg c]2  Šdj                  ˆfd„|D «       «      ft        ˆfd„|D «       «      z   ‘Œ4 c}ddt        |«      z  z   dj                  |«      d	œŽS c c}w )
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   ©ÚconfigÚ_c              3  óH   •K  — | ]  }‰j                  |d «      sŒ|–— Œ y­w©FN©Úget©Ú.0ÚkÚds     €úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/alembic/testing/util.pyÚ	<genexpr>z$flag_combinations.<locals>.<genexpr>9   s   øè ø€ Ð9¡˜A¨¯©¨q°%­”a¡ùs   ƒ"›"c              3  óB   •K  — | ]  }‰j                  |d «      –— Œ y­wr   r   r   s     €r   r   z$flag_combinations.<locals>.<genexpr>:   s   øè ø€ Ð2©T¨�A—E‘E˜!˜U—O©Tùs   ƒÚiÚaÚ,)Úid_Úargnames)	Úsqlalchemy.testingr
   ÚsetÚupdateÚsortedÚcombinationsÚjoinÚtupleÚlen)r    r
   Úkeysr   s      `r   Úflag_combinationsr%      sª   ø€ õ: *ä‹5€DãˆØ�‰�A�ð ô �$‹<€Dàˆ6×Ññ "ô

ñ "�ð �X‰XÓ9¡Ó9Ó9Ð;ÜÓ2©TÓ2Ó2ó3à!ñ

ð
 �3œ˜T›‘?Ñ#Ø—‘˜$“òð ùò

s   Á7B#c                ó  — t        | «      d   }|D �ci c]  }||j                  |«      “Œ }}t        | j                  «      }|j	                  |«       t        j                  | j                  |«      } |di |¤ŽS c c}w )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   © )r   ÚpopÚdictÚ__globals__r   ÚtypesÚFunctionTypeÚ__code__)Ú__fnÚkwÚpos_argsÚargÚpass_pos_argsÚglbÚnew_fns          r   Úresolve_lambdar5   B   sx   € ô & dÓ+¨AÑ.€HÙ19Ó:±¨#�S˜"Ÿ&™& ›+Ñ%°€MÐ:Ü
ˆt×ÑÓ
 €CØ‡J�Jˆr„NÜ×Ñ §¡¨sÓ3€FÙÑ"�MÑ"Ð"ùò	 ;s   “A<c                ó2   ‡ ‡‡— ddl mŠ ddlmŠ ˆˆ ˆfd„}|S )z&Provide MetaData for a pytest fixture.r   r	   é   )Úfixture_functionsc                óB   •‡ — ˆˆ fd„} ‰j                  ‰¬«      |«      S )Nc              3  ó  •K  — ddl m} |j                  «       x}| _        	  ‰| |«      }|j	                  ‰j
                  «       |–— |j                  ‰j
                  «       y # |j                  ‰j
                  «       w xY w­w)Nr   )Úschema)Ú
sqlalchemyr;   ÚMetaDataÚmetadataÚ
create_allÚdbÚdrop_all)Úselfr;   r>   Úresultr
   Úfns       €€r   Úrun_ddlz3metadata_fixture.<locals>.decorate.<locals>.run_ddlZ   sk   øè ø€ Ý)à'-§¡Ó'8Ð8ˆH�t”}ð-Ù˜D (Ó+�Ø×#Ñ# F§I¡IÔ.ð ’à×!Ñ! &§)¡)Õ,ø�×!Ñ! &§)¡)Õ,üs   ƒB¢(A& Á
BÁ&BÂB)Úscope)Úfixture)rD   rE   r
   Úddlr8   s   ` €€€r   Údecoratez"metadata_fixture.<locals>.decorateY   s&   ù€ õ	-ð 4Ð ×(Ñ(¨sÐ(Ó3°GÓ<Ð<ó    )r   r
   Ú r8   )rH   rI   r
   r8   s   ` @@r   Úmetadata_fixturerL   S   s   ú€ õ *Ý#ö=ð  €OrJ   c                ó,   — 	 t        | «      S #  | cY S xY w)N)Úint)Úvalues    r   Ú	_safe_intrP   l   s   € ðÜ�5‹zÐøðØŠús   ‚
 �c                ó–   — ddl m} ddlm} |s!t	        |j
                  j                  dd«      }t        s	|rd|ini }ni } || |fi |¤ŽS )Nr   r	   )Útesting_engineÚfuture_engineFÚfuture)r   r
   Úsqlalchemy.testing.enginesrR   ÚgetattrÚ_currentÚoptionsr   )ÚurlrX   rT   r
   rR   r/   s         r   rR   rR   s   sK   € Ý)Ý9áÜ˜Ÿ™×0Ñ0°/À5ÓIˆåÙ#)ˆh˜Ñ¨r‰àˆÙ˜#˜wÑ-¨"Ñ-Ð-rJ   )Úfunction)rO   ÚstrÚreturnzUnion[int, str])NNF)Ú
__future__r   r+   Útypingr   Úsqlalchemy.utilr   Úutilr   r%   r5   rL   rP   rR   r'   rJ   r   Ú<module>ra      s0   ðõ #ã Ý å 2å ò.òb#ó"ó2ô.rJ   