
    daf                         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      ,/root/Python-3.12.4/Lib/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>$       r   r   r   assertEqualr   globalsr	   r   s     r   test_globals_shadow_builtinsz0RebindBuiltinsTests.test_globals_shadow_builtins   s\    	"C "wy%5 	'SUA&	' 	' 	's   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!   r   builtinsr#   s     r   test_modify_builtinsz(RebindBuiltinsTests.test_modify_builtins'   sZ    	"C "x4 	'SUA&	' 	' 	's   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   sg    	 	C Ea!$x4 	)T!Wa(	) 	) 	)s   	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   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   r   r   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>   sY     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   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   r   r   c                      yrF   r   r   s    r   r   zVRebindBuiltinsTests.test_cannot_change_globals_or_builtins_with_exec.<locals>.<lambda>h   r   r   rH   )r   execr!   )r	   r   rL   rK   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   rI   r   c                      yr   r   r   s    r   r   zTRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_active.<locals>.<lambda>v   r   r   )r   r!   r2   r   r"   r3   s      r   .test_cannot_replace_builtins_dict_while_activezBRebindBuiltinsTests.test_cannot_replace_builtins_dict_while_activem   sn    	 	C Ea!$wy.5+2FG 	)T!Wa(	) 	) 	)s   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   rI   r   c                      yr   r   r   s    r   r   zURebindBuiltinsTests.test_cannot_replace_builtins_dict_between_calls.<locals>.<lambda>   r   r   r    r#   s     r   /test_cannot_replace_builtins_dict_between_callszCRebindBuiltinsTests.test_cannot_replace_builtins_dict_between_callsy   sa    	"C "wy.5+2FG 	'SUA&	' 	' 	's   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   )rJ   r   r!   )r	   rL   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__rg   r   r   r   	MyGlobalsra      s    9r   rk   i  zlambda: +c              3   &   K   | ]	  }d |   yw)rc   Nr   ).0is     r   	<genexpr>zZRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg.<locals>.<genexpr>   s     $Nxs^$Ns      )dictjoinr.   rJ   sumr!   )r	   rk   	variablescodesum_funcexpected_s          r   3test_load_global_specialization_failure_keeps_opargzGRebindBuiltinsTests.test_load_global_specialization_failure_keeps_oparg   su    	9 	9
 	CHH$NU9=M$NNNik*uY'(r 	3AXZ2	3r   N)rh   ri   rj   __doc__r   r$   r)   r5   rA   rM   rS   rW   r[   r^   rz   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 r@   )
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 r@   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 r@   r   )r	   r   s     r   __init__z9TestTracing.test_after_specialization.<locals>.C.__init__   s	    r   c                 6    rt        j                         y y r@   )r   r   )r	   r   turn_on_traces    r   __del__z8TestTracing.test_after_specialization.<locals>.C.__del__   s     LL' !r   N)rh   ri   rj   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)subTestrh   r.   r   r   )	r	   r   r4   r   r
   ry   r   r   r   s	         @@@r   test_after_specializationz%TestTracing.test_after_specialization   s    	 	( 	(			 1I 	&Ddmm, &r AF $T" %& &	&& &s   
8BB	N)rh   ri   rj   r   r   r   r   r   r}   r}      s    !&r   r}   __main__)r(   r   unittesttest.supportr   r   TestCaser   r}   rh   mainr   r   r   <module>r      sU     
  -L3(++ L3^'&(## '&T zHMMO r   