
    6bh                         d dl Z d dlZd dlZd dlmZmZ  G d dej                        Z G d dej                        Ze	dk(  r ej                          yy)    N)	swap_item	swap_attrc                   R    e Z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 Zy)RebindBuiltinsTestsz=Test all the ways that we can change/shadow globals/builtins.c                      y)a  Perform TestCase-specific configuration on a function before testing.

        By default, this does nothing. Example usage: spinning a function so
        that a JIT will optimize it. Subclasses should override this as needed.

        Args:
            func: function to configure.
            *args: any arguments that should be passed to func, if calling it.

        Returns:
            Nothing. Work will be performed on func in-place.
        N )selffuncargss      ;/opt/python-3.12.12/usr/lib/python3.12/test/test_dynamic.pyconfigure_funcz"RebindBuiltinsTests.configure_func   s     	    c                     d }| j                  |       | j                   |       d       t        t               dd       5  | j                   |       d       d d d        y # 1 sw Y   y xY w)Nc                      t        g d      S N)         lenr   r   r   fooz=RebindBuiltinsTests.test_globals_shadow_builtins.<locals>.foo       y>!r   r   r   c                      yN   r   xs    r   <lambda>zBRebindBuiltinsTests.test_globals_shadow_builtins.<locals>.<lambda>$   s    1r   r   r   assertEqualr   globalsr	   r   s     r   test_globals_shadow_builtinsz0RebindBuiltinsTests.test_globals_shadow_builtins   sS    	"C "wy%5SUA& 655s   A##A,c                     d }| j                  |       | j                   |       d       t        t        dd       5  | j                   |       d       d d d        y # 1 sw Y   y xY w)Nc                      t        g d      S r   r   r   r   r   r   z5RebindBuiltinsTests.test_modify_builtins.<locals>.foo)   r   r   r   r   c                      yr   r   r   s    r   r   z:RebindBuiltinsTests.test_modify_builtins.<locals>.<lambda>.       !r   r   )r   r    r   builtinsr"   s     r   test_modify_builtinsz(RebindBuiltinsTests.test_modify_builtins'   sQ    	"C "x4SUA& 544s   AA(c                     d }| j                  |        |       }| j                  t        |      d       t        t        dd       5  | j                  t        |      d       d d d        y # 1 sw Y   y xY w)Nc               3   V   K   t        d      } t        |        t        |        y wNr   ranger   r   s    r   r   zLRebindBuiltinsTests.test_modify_builtins_while_generator_active.<locals>.foo3   !     aAa&La&L   ')r   r   c                      yr   r   r   s    r   r   zQRebindBuiltinsTests.test_modify_builtins_while_generator_active.<locals>.<lambda>;   r'   r   r   )r   r    nextr   r(   r	   r   gs      r   +test_modify_builtins_while_generator_activez?RebindBuiltinsTests.test_modify_builtins_while_generator_active1   s^    	 	C Ea!$x4T!Wa( 544s   	A..A7c                     t        t        dt              5  d }d }| j                  |d        | j	                   ||      ddg       d d d        y # 1 sw Y   y xY w)Nr   c                      d t         _        y )Nc                      y)N   r   r   s    r   r   zZRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.bar.<locals>.<lambda>C       r   )r(   r   r   r   r   barzHRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.barB   s	    *r   c                     g }|j                  t        t        d                    |         |j                  t        t        d                   |S r   )appendr   r.   )modifierls     r   r   zHRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.fooE   s9    U1X'
U1X'r   c                       y Nr   r   r   r   r   zMRebindBuiltinsTests.test_modify_builtins_from_leaf_function.<locals>.<lambda>K   s    Tr   r   r9   )r   r(   r   r   r    )r	   r;   r   s      r   'test_modify_builtins_from_leaf_functionz;RebindBuiltinsTests.test_modify_builtins_from_leaf_function>   sP     x,+ \2SX1v. -,,s   4AAc                     d }| j                  |       dd i}||d d}| j                  t        d|      d       | j                  t        dd|i      d       y )	Nc                      t        g d      S r   r   r   r   r   r   zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.fooP   r   r   r   c                      yr   r   r   s    r   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.<lambda>U       !r   c                      yN   r   r   s    r   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_eval.<locals>.<lambda>W   r:   r   r   __builtins__r   zfoo()r   r   )r   r    eval)r	   r   builtins_dictglobals_dicts       r   0test_cannot_change_globals_or_builtins_with_evalzDRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_evalO   sb    	"C  ,"M*,g|4a8gs|4a8r   c                     d }| j                  |       d|i}t        d|       | j                  |d   d       dd i}||d d	}t        d|       | j                  |d   d       y )
Nc                      t        g d      S r   r   r   r   r   r   zQRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.foo]   r   r   r   z	x = foo()r   r   r   c                      yr   r   r   s    r   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.<lambda>f   rF   r   c                      yrH   r   r   s    r   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.<lambda>h   r:   r   rJ   )r   execr    )r	   r   rN   rM   s       r   0test_cannot_change_globals_or_builtins_with_execzDRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec\   sy    	"C s|[,'c*A. ,"M*, 	[,'c*A.r   c                     d }| j                  |        |       }| j                  t        |      d       t        t	               ddd i      5  | j                  t        |      d       d d d        y # 1 sw Y   y xY w)Nc               3   V   K   t        d      } t        |        t        |        y wr,   r-   r   s    r   r   zORebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.foon   r/   r0   r   rK   r   c                      yr   r   r   s    r   r   zTRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.<lambda>v       Ar   )r   r    r2   r   r!   r3   s      r   .test_cannot_replace_builtins_dict_while_activezBRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_activem   sf    	 	C Ea!$wy.5+2FGT!Wa( HGGs   A44A=c                     d }| j                  |       | j                   |       d       t        t               ddd i      5  | j                   |       d       d d d        y # 1 sw Y   y xY w)Nc                      t        g d      S r   r   r   r   r   r   zPRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.fooz   r   r   r   rK   r   c                      yr   r   r   s    r   r   zURebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.<lambda>   rY   r   r   r"   s     r   /test_cannot_replace_builtins_dict_between_callszCRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_callsy   sY    	"C "wy.5+2FGSUA& HGGs   A%%A.c                 v    dd i}t        d|      }| j                  |       | j                   |       d       y )Nr   c                      yr   r   r   s    r   r   zKRebindBuiltinsTests.test_eval_gives_lambda_custom_globals.<locals>.<lambda>   r:   r   zlambda: len([])r   )rL   r   r    )r	   rN   r   s      r   %test_eval_gives_lambda_custom_globalsz9RebindBuiltinsTests.test_eval_gives_lambda_custom_globals   s9    {+$l3C "r   c                     G d dt               }d}ddj                  d t        |      D              z   }t        | |             }t	        t        |            }t        d      D ]  }| j                   |       |        y )Nc                       e Zd Zd Zy)ZRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg.<locals>.MyGlobalsc                 6    t        |j                  d            S )N_number_)intremoveprefix)r	   keys     r   __missing__zfRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg.<locals>.MyGlobals.__missing__   s    3++J788r   N)__name__
__module____qualname__rj   r   r   r   	MyGlobalsrd      s    9r   rn   i  zlambda: +c              3   &   K   | ]	  }d |   yw)rf   Nr   ).0is     r   	<genexpr>zZRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg.<locals>.<genexpr>   s     $N=Mxs^=Ms      )dictjoinr.   rL   sumr    )r	   rn   	variablescodesum_funcexpected_s          r   3test_load_global_specialization_failure_keeps_opargzGRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg   sp    	9 	9
 	CHH$NU9=M$NNNik*uY'(rAXZ2 r   N)rk   rl   rm   __doc__r   r#   r)   r5   rB   rO   rU   rZ   r^   ra   r}   r   r   r   r   r   
   s<    G'')/"9/"
)'#3r   r   c                       e Zd Zd Zd Zy)TestTracingc                     | j                  t        j                  t        j                                t        j                  d        y rA   )
addCleanupsyssettracegettrace)r	   s    r   setUpzTestTracing.setUp   s&    clln5Tr   c                 2   fdd G fdd      fd}fd}fd}|||fD ]]  }| j                  |j                        5  t        d      D ]	  } |         d	 |        t        j                  d        dd d d        _ y # 1 sw Y   jxY w)
Nc                     S rA   r   )frameeventargtraces      r   r   z4TestTracing.test_after_specialization.<locals>.trace   s    Lr   Fc                        e Zd Zd Z fdZy)0TestTracing.test_after_specialization.<locals>.Cc                     || _         y rA   r   )r	   r   s     r   __init__z9TestTracing.test_after_specialization.<locals>.C.__init__   s	    r   c                 6    rt        j                         y y rA   )r   r   )r	   r   turn_on_traces    r   __del__z8TestTracing.test_after_specialization.<locals>.C.__del__   s     LL' !r   N)rk   rl   rm   r   r   )r   r   s   r   Cr      s    (r   r   c                  6      d      j                   t        f y Nr   )r   r   r   s   r   fz0TestTracing.test_after_specialization.<locals>.f   s    aDFFCKr   c                  2    dg  d      j                       y r   r   r   s   r   r4   z0TestTracing.test_after_specialization.<locals>.g   s    C!Kr   c                  0    d  d      j                   z    y r   r   r   s   r   hz0TestTracing.test_after_specialization.<locals>.h   s    !Jr   :   T)subTestrk   r.   r   r   )	r	   r   r4   r   r
   r|   r   r   r   s	         @@@r   test_after_specializationz%TestTracing.test_after_specialization   s    	 	( 	(			 1IDdmm,rAF # $T" % -, ,,s   
8BB	N)rk   rl   rm   r   r   r   r   r   r   r      s    !&r   r   __main__)r(   r   unittesttest.supportr   r   TestCaser   r   rk   mainr   r   r   <module>r      sU     
  -L3(++ L3^'&(## '&T zHMMO r   