
    X-Ph%                    V   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ej1        2                    e0d          Z3ej1        2                    e0d          Z4 G d de          Z5dId Z6ej7        dJd%            Z8dKd'Z9	 dLdMd-Z:	 dLdNd/Z;dOd1Z<	 	 dPdQd7Z=dRd8Z>dSd:Z?dTd<Z@dUd>ZAdVdAZBdWdEZCdXdFZDdYdHZEdS )ZzHelpers for writing tests    )annotationsN)Iterator)Callable)build)CompileError)
ExpressionMypyFile)Options)test_temp_dir)DataDrivenTestCase	DataSuite)assert_string_arrays_equal)Type)assert_func_ir_valid)IS_32_BIT_PLATFORMPLATFORM_SIZE)Errors)FuncIR)ModuleIR)build_ir)Mapper)CompilerOptions)test_data_prefixzfixtures/ir.pyzfixtures/testutil.pyc                  "    e Zd ZU g Zded<   eZdS )MypycDataSuite	list[str]filesN)__name__
__module____qualname__r   __annotations__r   data_prefix     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/test/testutil.pyr   r   %   s&         E"KKKr$   r   func$Callable[[DataDrivenTestCase], None]pathstrreturnc                      fdS )zDecorate a function that implements a data-driven test case to copy an
    alternative builtins module implementation in place before performing the
    test case. Clean up after executing the test case.
    c                &    t          |           S N)perform_test)testcaser&   r(   s    r%   <lambda>z"builtins_wrapper.<locals>.<lambda>2   s    LtX>> r$   r#   )r&   r(   s   ``r%   builtins_wrapperr1   +   s     ?>>>>>r$   builtins_pathr/   r   Iterator[None]c              #    K   |j         D ],\  }}t          j                            |          dk    rd} nZ-t          j                            t          j                            t          d                    }t          j        | |           d}	 d V  |rt          j	        |           d S d S # |rt          j	        |           w w xY w)Nzbuiltins.pyiFT)
r   osr(   basenameabspathjoinr   shutilcopyfileremove)r2   r/   r(   _default_builtinsbuiltinss         r%   use_custom_builtinsr?   5   s      >    a7D!!^33$E 4
 7??27<<~#N#NOOx000 


 	 Ih	  	  	 Ih	 s   B/ /CNonec                ,   |j         D ],\  }}t          j                            |          dk    rd} n=-t          j                            t
          d          }t          j        ||           d} | |           |rt          j        |           d S d S )Nzbuiltins.pyFT)	r   r5   r(   r6   r8   r   r9   r:   r;   )r&   r2   r/   r(   r<   r=   r>   s          r%   r.   r.   J   s     >    a7D!!]22$E 3
 7<<}==x000 	DNNN 
	( r$   input_linesr   compiler_optionsCompilerOptions | Nonelist[FuncIR]c                8    t          | |          d         j        S )Nr   )build_ir_for_single_file2	functions)rB   rC   s     r%   build_ir_for_single_filerI   _   s     %[2BCCAFPPr$   9tuple[ModuleIR, MypyFile, dict[Expression, Type], Mapper]c                N   d                     |           }|pt          d          }t                      }d|_        d|_        d|_        d|_        |j        pd|_        d|_        d|_	        d|_
        ddi|j        d<   t          j        dd|          }t          j        |g|t          	          }|j        rt!          |j                  t#          |          }t%          dd i          }t'          |j        d         g|j        |j        |||          }|j        r!t!          |                                          t3          |                                          d
         }	|	j        D ]}
t9          |
           |j        |	j                 j        }|J |	||j        |fS )N
   	   )capi_versionT)rN      mypyc__main__main)sourcesoptionsalt_lib_pathr   )r8   r   r
   show_tracebackhide_error_codesuse_builtins_fixturesstrict_optionalpython_versionexport_typespreserve_astsallow_empty_bodiesper_module_optionsr   BuildSourcer   errorsr   r   r   r   r   graphtypes
num_errorsnew_messageslistvaluesrH   r   fullnametree)rB   rC   program_textrV   sourceresultrb   mappermodulesmodulefnrj   s               r%   rG   rG   e   s    99[))L (O?+O+O+OiiG!G#G$(G!"G-<FGG G!%G.5t_Gz*vz<@@F [&7WWWF} *6=)))G__FZ&''F	j	!"FL&,HXZ` G  26..00111'..""##A&F ! !R    <(-D4v--r$   outputc                ^   | j         
J d            t          j                            | j         | j                  }t          |          5 }|                                                                }d d d            n# 1 swxY w Y   d| j         d}|	                    |          dk    rd S |
                    |          }|dz   }|t          |          k     rN||                             d          s3|dz  }|t          |          k     r||                             d          3|||         }|
                    d          }	|||	dz   d <   |dgz   |||<   d                    |          }
t          |d	          5 }t          |
|
           d d d            d S # 1 swxY w Y   d S )Nztest was not properly set upz[case ]      z[out] rL   w)file)old_cwdr5   r(   r8   ry   openread
splitlinesnamecountindexlen
startswithprint)r/   rr   testcase_pathf
data_lines	test_slug	start_idxstop_idxtest	out_startdatas              r%   update_testcase_outputr      s6   '')G'''GLL!18=AAM	m		 +VVXX((**
+ + + + + + + + + + + + + + + *)))I	""a''  ++I2~H
S__
$
$Z-A-L-LX-V-V
$A S__
$
$Z-A-L-LX-V-V
$ i()D

7##I"DQ%)RD[Jy!"99Z  D	mS	!	! Qd                 s$   'A>>BBF""F&)F&actualmessageexpectedlist[str] | None	formattedc           
         d}||n| j         }||k    r+| j                            dd          rt          | |           t	          ||| d| j         d| j         d           d S )NTz--update-dataFz (z, line ))rr   config	getoptionr   r   ry   line)r/   r   r   r   r   __tracebackhide__expected_outputs          r%   assert_test_outputr      s     "*"6hhHOO&  X_%>%>PU%V%V x000G!U!Ux}!U!UX]!U!U!U    r$   c                    g }| D ]A}t          j        d|          }|r(|                    |                    d                     B|S )Nzdef ([_a-zA-Z0-9.*$]+)\(ru   )rematchappendgroup)r   ressms       r%   get_func_namesr      sR    
C # #H0!44 	#JJqwwqzz"""Jr$   ac                    g }| D ]f}|                                                     d          r(|                                                     d          sQ|                    |           g|S )zrReturn a copy of array with comments removed.

    Lines starting with '--' (but not with '---') are removed.
    z--z---)stripr   r   )r   rr   s      r%   remove_comment_linesr      sl    
 	A  7799%% 	aggii.B.B5.I.I 	HHQKKKKHr$   r   c                    |                                  }t          |          D ]\  }}t          d|dz   |fz             d S )Nz%-4d %sru   )r}   	enumerater   )r   linesir   s       r%   print_with_line_numbersr      sR    LLNNEU## ) )4i1q5$-'(((() )r$   textc                6    t          d| z   dz   dz              d S )Nz====================  z====================)r   )r   s    r%   headingr      s%    	.4
#
%
011111r$   cfileslist[list[tuple[str, str]]]c                    t          d           | D ],}|D ]'\  }}t          d| d           t          |           (-t          d           d S )NzGenerated Cz== z ==zEnd C)r   r   r   )r   r   cfilectexts       r%   show_cr      sx    M + +! 	+ 	+LE5""""####E****	+ Gr$   dirdeltaintc                    t          j        |           D ]_\  }}}|D ]V}t           j                            ||          }t          j        |          j        |z   }t          j        |||f           W`d S )N)times)r5   walkr(   r8   statst_mtimeutime)r   r   dirpathr<   	filenamesr~   r(   	new_mtimes           r%   fudge_dir_mtimesr      s    !# 9 9I 	9 	9D7<<..D.6IHT)Y!788888	99 9r$   c                h   g }| D ]}|                     d          }|dk    rz||d                                         d         }t          |dd                   }t          t          |z            }|                    |                    ||                     |                    |           |S )z2Replace WORDSIZE with platform specific word sizes	WORD_SIZENr   
   )findsplitr   r)   r   r   replace)r   rm   r   r   word_size_tokennreplace_strs          r%   replace_word_sizer      s    F 	  	 		+&&B;;"566l002215OOBCC())Ama/00KMM$,,DDEEEEMM$Mr$   r~   c                d   d| v r	t           rdS d| v r	t           sdS t          d| v d          }t          j        d|           }|rVt	          |                    d                    t	          |                    d	                    f|_        |j        |_        nd
| v sd| v rJ d|              |S )a  Look for magic substrings in test case name to set compiler options.

    Return None if the test case should be skipped (always pass).

    Supported naming conventions:

      *_64bit*:
          Run test case only on 64-bit platforms
      *_32bit*:
          Run test caseonly on 32-bit platforms
      *_python3_8* (or for any Python version):
          Use Python 3.8+ C API features (default: lowest supported version)
      *StripAssert*:
          Don't generate code for assert statements
    _64bitN_32bitStripAssertrM   )strip_assertsrP   z_python([3-9]+)_([0-9]+)(_|\b)ru      _py_PythonFz,Invalid _py* suffix (should be _pythonX_Y): )r   r   r   searchr   r   rP   r\   )r~   rV   r   s      r%   %infer_ir_build_options_from_test_namer      s    " 4.t4 2tMT,APVWWWG
	3T::A L #AGGAJJQWWQZZA!(!5	$)t++KKTKKKKKNr$   )r&   r'   r(   r)   r*   r'   )r2   r)   r/   r   r*   r3   )r&   r'   r2   r)   r/   r   r*   r@   r-   )rB   r   rC   rD   r*   rE   )rB   r   rC   rD   r*   rJ   )r/   r   rr   r   r*   r@   )NN)r/   r   r   r   r   r)   r   r   r   r   r*   r@   )r   r   r*   r   )r   r   r*   r   )r   r)   r*   r@   )r   r)   r*   r@   )r   r   r*   r@   )r   r)   r   r   r*   r@   )r   r   r*   r   )r~   r)   r*   rD   )F__doc__
__future__r   
contextlibr5   os.pathr   r9   collections.abcr   typingr   mypyr   mypy.errorsr   
mypy.nodesr   r	   mypy.optionsr
   mypy.test.configr   mypy.test.datar   r   mypy.test.helpersr   
mypy.typesr   mypyc.analysis.ircheckr   mypyc.commonr   r   mypyc.errorsr   mypyc.ir.func_irr   mypyc.ir.module_irr   mypyc.irbuild.mainr   mypyc.irbuild.mapperr   mypyc.optionsr   mypyc.test.configr   r(   r8   ICODE_GEN_BUILTINSTESTUTIL_PATHr   r1   contextmanagerr?   r.   rI   rG   r   r   r   r   r   r   r   r   r   r   r#   r$   r%   <module>r      s     " " " " " "     				  				  $ $ $ $ $ $             $ $ $ $ $ $ + + + + + + + +             * * * * * * 8 8 8 8 8 8 8 8 8 8 8 8 8 8       7 7 7 7 7 7 : : : : : : : :       # # # # # # ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ) ) ) ) ) ) . . . . . . W\\"24DEE -/EFF# # # # #Y # # #? ? ? ?        (   , HLQ Q Q Q Q HL'. '. '. '. '.T   @ "&"&    $      ) ) ) )2 2 2 2   9 9 9 9         r$   