
    -h6                     ,   S SK Jr  S SKrS SKrS SKJr  S SKrS SKrS SKJr  S SK	r	SSK
Jr  SSK
Jr  SS	K
Jr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  \(       d  S r \ =r!r"O\RF                  r!S r"S r$\(       a  S3S jr%OS3S jr%S r& " S S\'5      r(S  r)S! r*S" r+S# r,S$ r-S% r.\S& 5       r/S' r0S( r1S) r2S4S* jr3S+ r4 " S, S-\55      r6S. r7S5S/ jr8S0 r9S1 r:S2 r;g)6    )dequeN)chain)	getsizeof   )config)mock   )inspect)
Connection)Column)DropConstraint)	DropTable)ForeignKeyConstraint)MetaData)Tableschema)Integer	decorator)defaultdict)has_refcount_gc)inspect_getfullargspec)py2kc                  X    [         R                  " 5         [         R                  " 5         g N)gccollect)argss    lC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/testing/util.pynon_refcount_gc_collectr!   &   s    





    c                      g r    r$   r"   r    lazy_gcr%   /   s    r"   c               #   &  ^^#    [        5       n [        (       a   SS KnU R                  U5        SS KnU R                  U5        U  H5  m[        SUR                  5       H  mTR                  UU4S j4v   M     M7     g ! [         a     N]f = f7f)Nr   c                 (   > TR                  U T5      $ r   )dumps)dpickle_protocols    r    <lambda>picklers.<locals>.<lambda>D   s    7==H+Er"   )	setr   cPickleaddImportErrorpicklerangeHIGHEST_PROTOCOLloads)picklersr0   r3   r+   r,   s      @@r    r7   r7   3   s}     uHt	LL! LL b&"9"9:H--!EEE ;   		s(   BB AB
BBBBc                 N    [        U 5      n[        R                  " U5        USU $ Nr   )listrandomshuffle)
populationkpops      r    random_choicesr@   I   s#    :s1Qxr"   c                 *    [         R                  " XS9$ )N)r>   )r;   choices)r=   r>   s     r    r@   r@   R   s    ~~j..r"   c                     [        U [        5      (       a  [        X5      $ U [        R                  " SSU-  -   5      -  R                  [        R                  5      [        SU5      -  $ )N10
   )
isinstancefloatrounddecimalDecimalto_integralROUND_FLOORpow)valueprecs     r    round_decimalrQ   V   s]    %U!! GOOC#*$455BBB r"   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
	RandomSet`   c                     [        [        R                  U 5      5      n[        R                  " U5        [        U5      $ r   )r:   r/   __iter__r;   r<   iter)selfls     r    rV   RandomSet.__iter__a   s*    d#$qAwr"   c                     [         R                  " S[        U 5      S-
  5      n[        [        R                  U 5      5      U   nU R                  U5        U$ )Nr   r   )r;   randintlenr:   r/   rV   remove)rX   indexitems      r    r?   RandomSet.popf   sC    q#d)a-0CLL&'.Dr"   c                 >    [        [        R                  X5      5      $ r   )rS   r/   unionrX   others     r    rc   RandomSet.unionl   s    4/00r"   c                 >    [        [        R                  X5      5      $ r   )rS   r/   
differencerd   s     r    rh   RandomSet.differenceo   s    455r"   c                 >    [        [        R                  X5      5      $ r   )rS   r/   intersectionrd   s     r    rk   RandomSet.intersectionr   s    ))$677r"   c                     [        U 5      $ r   )rS   )rX   s    r    copyRandomSet.copyu   s    r"   r$   N)__name__
__module____qualname____firstlineno__rV   r?   rc   rh   rk   rn   __static_attributes__r$   r"   r    rS   rS   `   s     
168r"   rS   c                     [        [        5      nU  H  u  p4X#   R                  U5        M     [        U5       H  u  pVXS  H  nXbU   ;   d  M      g   M     g)zATrue if the given sorting conforms to the given partial ordering.NFT)r   r/   r1   	enumerate)tuplessorted_elementsdepsparentchildinodens           r    conforms_partial_orderingr   y   s[     sD  _- $AAw % .
 r"   c                    ^^ [        [        5      mU  H  u  p#TU   R                  U5        M     UU4S jm[        T" U5      5      $ )Nc              3      >#    [        U 5      S:X  a  [        U 5      v   g U  HP  n[        U 5      R                  U/5      nUR	                  TU   5      (       a  M9  T" U5       H  nU/U-   v   M     MR     g 7f)Nr   )r]   r:   r/   rh   rk   )elementselemsubsetsub_ordering_all_orderingsedgess       r    r   -all_partial_orderings.<locals>._all_orderings   sm     x=Ax.  X114&9**5;77(6v(>#f|33 )? !s   AA8A8)r   r/   r1   rW   )rw   r   rz   r{   r   r   s       @@r    all_partial_orderingsr      sB    Ee   	4 x())r"   c                      Xl         U $ ! [         aE    [        R                  " U R                  U R
                  XR                  U R                  5      n  U $ f = f)aK  Return a function with a given __name__.

Will assign to __name__ and return the original function if possible on
the Python implementation, otherwise a new function will be constructed.

This function should be phased out as much as possible
in favor of @decorator.   Tests that "generate" many named tests
should be modernized.

)rp   	TypeErrortypesFunctionType__code____globals____defaults____closure__)fnnames     r    function_namedr      sT    

 I	  
KK
 I	
s   
 AAAc                     U R                  5       n U" U/UQ70 UD6nU R                  SSS5        U$ !   [        R                  " 5       nU R                  " U6 nU(       d  e Us $ = f)zRun the given function under the given contextmanager,
simulating the behavior of 'with' to support older
Python versions.

This is not necessary anymore as we have placed 2.6
as minimum Python version, however some tests are still using
this structure.

N)	__enter____exit__sysexc_info)ctxr   argkwobjresultr   raise_s           r    run_as_contextmanagerr      sh     --/C
C$#$$T4&<<>x(Ms	    3 0A%c                 D    U  Vs1 s H  n[        U5      iM     sn$ s  snf )zConverts the results of sql execution into a plain set of column tuples.

Useful for asserting the results of an unordered query.
tuple)resultsrows     r    rowsetr      s      #**'3E#J'***s   c                      U 5       er   r$   )msgs    r    failr      s    #5r"   c                    SSK Jn  [        R                  " 5       nUS   n[	        USS5      nXEl         U " U0 UD6UR                  5         UR                  (       aD  [        XCR                  5        UR                  R                  5       R                  5         Xel        $ [        U[        R                  5        Xel        $ ! UR                  5         UR                  (       aD  [        XCR                  5        UR                  R                  5       R                  5         Xel        f [        U[        R                  5        Xel        f = f)zlProvide bound MetaData for a single test, dropping afterwards.

Legacy; use the "metadata" pytest fixture.

r   )fixturesr   metadataN) r   r   r   getattrr   _close_all_sessions_connection_fixture_connectiondrop_all_tables_from_metadataget_transactioncommitr   db)r   r   r   r   r   rX   	prev_metas          r    provide_metadatar      s     H7Dj$/IM"42 	$$& 22 *AA 33CCELLN " *(FII>!% 	$$& 22 *AA 33CCELLN " *(FII>!s   C BE	c            
      Z  ^ [        5       nU  H  mUR                  T5        M     [        U5      n[        R                  " U  V^s/ s H5  mSR                  U4S jU 5       5      4[        U4S jU 5       5      -   PM7     snSS[        U5      -  -   SR                  U5      S.6$ s  snf )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'
    )

_c              3   Z   >#    U  H   nTR                  US 5      (       d  M  Uv   M"     g7fFNget.0r>   r*   s     r    	<genexpr>$flag_combinations.<locals>.<genexpr>(  s     9Aq%aas   +	+c              3   H   >#    U  H  nTR                  US 5      v   M     g7fr   r   r   s     r    r   r   )  s     2TAEE!UOOTs   "r|   a,)id_argnames)r/   updatesortedr   combinationsjoinr   r]   )r   keysr*   s     `r    flag_combinationsr     s    < 5DA  $<D "

 " XX999;2T223!


 3T?#$ 

s   <B(c                   ^  [        T 5      nT " US    Vs/ s H  n[        R                  " 5       PM     sn6 nU 4S jn[        R                  " [        [        U5      5       Vs/ s H  oe" U5      4PM     sn0 UD6$ s  snf s  snf )Nr   c                 ,   >^  UU 4S jnST -  Ul         U$ )Nc                     > T" S0 U D6T   $ )Nr$   r$   )r   lambda_arg_setsposs    r    fixture<lambda_combinations.<locals>.create_fixture.<locals>.fixture7  s    "(R(--r"   zfixture_%3.3d)rp   )r   r   r   s   ` r    create_fixture+lambda_combinations.<locals>.create_fixture6  s    	. +S0r"   )r   r   Mockr   r   r4   r]   )r   r   r   r   arg_setsr   r|   s   `      r    lambda_combinationsr   1  s    !/2DQ @ @AH (-c(m(<	=(<1>!
(<	=AC  !A 
>s   A>%Bc                    [        U 5      S   nU Vs0 s H  o3UR                  U5      _M     nn[        U R                  5      nUR	                  U5        [
        R                  " U R                  U5      nU" S0 UD6$ s  snf )zGiven 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$   )r   r?   dictr   r   r   r   r   )__fnr   pos_argsr   pass_pos_argsglbnew_fns          r    resolve_lambdar   B  sv     &d+A.H19:#"&&+%M:
t
 CJJrNs3F"M""	 ;s   A?c                    ^  U 4S jnU$ )z&Provide MetaData for a pytest fixture.c                 F   >^  U 4S jn[         R                  " TS9" U5      $ )Nc              3   "  >#    [         R                  " 5       =ol         T" X5      nUR                  [        R
                  5        Uv   UR                  [        R
                  5        g ! UR                  [        R
                  5        f = f7fr   )r   r   r   
create_allr   r   drop_all)rX   r   r   r   s      r    run_ddl3metadata_fixture.<locals>.decorate.<locals>.run_ddlW  sc     '-'88H}-D+##FII. !!&)),!!&)),s   B+A+  B+!BB)scope)r   r   )r   r   ddls   ` r    decorate"metadata_fixture.<locals>.decorateV  s    
	- ~~C(11r"   r$   )r   r   s   ` r    metadata_fixturer   S  s    2 Or"   c                  &   ^  [         U 4S j5       nU$ )zaForce the given table names to be dropped after test complete,
isolating for foreign key cycles

c                    >  U " U0 UD6[        [        R                  [        [        R                  5      TS9  $ ! [        [        R                  [        [        R                  5      TS9  f = f)N)include_names)drop_all_tablesr   r   r
   )r   r   r   namess      r    goforce_drop_names.<locals>.gon  sG    	Pt?r?FIIwvyy'9OOFIIwvyy'9Os	   ; 2A-r   )r   r   s   ` r    force_drop_namesr   h  s      P P Ir"   c                   (    \ rS rSrSrS rS r\rSrg)adictiy  z,Dict keys available as attributes.  Shadows.c                 V     X   $ ! [          a    [        R                  X5      s $ f = fr   )KeyErrorr   __getattribute__)rX   keys     r    r   adict.__getattribute__|  s/    	49 	4((33	4s    ((c                 H    [        U Vs/ s H  o U   PM	     sn5      $ s  snf r   r   )rX   r   r   s      r    __call__adict.__call__  s!    404C3i40110s   r$   N)	rp   rq   rr   rs   __doc__r   r   get_allrt   r$   r"   r    r   r   y  s    642 Gr"   r   c                    ^ ^ SSK Jm  UU 4S jn[        U[        5      (       d"  UR	                  5        nU" U5        S S S 5        g U" U5        g ! , (       d  f       g = f)Nr   )enginesc                   > TR                   R                  U 5        U R                  R                  (       d1  SSKJn  UR                  SSS9   TR                  U 5        S S S 5        g TR                  U 5        g ! , (       d  f       g = f)Nr   )
assertionszCan't sort tablesF)assert_)testing_reaperprepare_for_drop_tablesdialectsupports_alterr   r  expect_warningsr   )
connectionr  r  r   s     r    r   )drop_all_tables_from_metadata.<locals>.go  sv    66zB!!00$++#U ,  !!*- 
 j) s   A;;
B	)r   r  rG   r   begin)r   engine_or_connectionr   r
  r  s   `   @r    r   r     sL    * *J77!'')ZzN *) 	  *)s   	A
Ac                    Ub  [        U5      nU R                  5        n[        UR                  US95       H  u  pVU(       a7  Ub  XS;  a  M  UR	                  [        [        U[        5       US95      5        MC  U(       d  ML  U R                  R                  (       d  Mi  U H  u  pWUb  XS;  a  M  [        U[        5       [        S[        5      [        S[        5      US9nUR	                  [        [        UR                  R                  /UR                  R                   /US95      5        M     M     S S S 5        g ! , (       d  f       g = f)Nr   xy)r   )r/   r  reversedget_sorted_table_and_fkc_namesexecuter   r   r   r  r  r   r   r   r   cr  r  )	engine	inspectorr   r   conntnamefkcsfkctbs	            r    r   r     s    M*	4#44F4C
KE  ,1KeE8:fEF ~~44"&JE%1!6  
sG,sG,%B LL&0"$$&&BDDFF8#N #'
 
s   A!EB4E
Ec                 &   ^  [         U 4S j5       nU$ )Nc                 `   >  U " U0 UD6TR                  5         $ ! TR                  5         f = fr   )_clear)r   r   r   	event_clss      r    r   !teardown_events.<locals>.decorate  s,    	s>b>Is    -r   )r  r   s   ` r    teardown_eventsr!    s      Or"   c                    ^^^^ S n[         [        [        [        [        [        [        U[
        [        [        [        0m[        5       m[        S5      mUUUU4S jmT" U 5      $ )zReturns the approximate memory footprint an object and all of its
contents.

source: https://code.activestate.com/recipes/577504/


c                 J    [         R                  " U R                  5       5      $ r   )r   from_iterableitems)r*   s    r    dict_handler total_size.<locals>.dict_handler  s    ""1779--r"   r   c           
        > [        U 5      T;   a  gTR                  [        U 5      5        [        U T5      nTR                  5        H6  u  p#[	        X5      (       d  M  U[        [        TU" U 5      5      5      -  n  U$    U$ r9   )idr1   r   r%  rG   summap)ostyphandlerall_handlersdefault_sizeseensizeofs       r    r3  total_size.<locals>.sizeof  su    a5D=Aa&(..0LC!!!SVWQZ011	 1 r"   )r   rW   r:   r   r   r/   	frozensetr   )r,  r&  r0  r1  r2  r3  s     @@@@r    
total_sizer6    sW    . 	tdtlT4L 5DQ<L
 
 !9r"   c                     U /n[        5       nSnU(       aR  UR                  S5      nXBL a  US-  nO.[        U[        5      (       a  U(       a  [	        U5      U/-   U-   nU(       a  MR  U$ )zgiven a cache key tuple, counts how many instances of actual
tuples are found.

used to alert large jumps in cache key complexity.

r   r   )objectr?   rG   r   r:   )tupstacksentinelnum_elementsr   s        r    count_cache_key_tuplesr=    sk     EExHL
yy|ALe$$T
hZ/%7 % r"   )r   )function)NN)<collectionsr   rJ   r   	itertoolsr   r;   r   r   r   r   r   r   r
   r  r   r   r   r   r   r   r   r   sqlsql.sqltypesr   utilr   r   r   r   r   r!   
gc_collectr%   r   r7   r@   rQ   r/   rS   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!  r6  r=  r$   r"   r    <module>rE     s     	   
        #  )    "   " )   32J JF( / 2*&(2+ )" )"X-`"#"*"D !.#L#Lr"   