
    6 f$                    2   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	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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)m*Z* ej+        ,                    e*d          Z-ej+        ,                    e*d          Z. G d de          Z/dFdZ0ej1        dGd"            Z2dHd$Z3	 dIdJd*Z4	 dIdKd,Z5dLd.Z6	 	 dMdNd4Z7dOd5Z8dPd7Z9dQd9Z:dRd;Z;dSd>Z<dTdBZ=dUdCZ>dVdEZ?dS )WzHelpers for writing tests    )annotationsN)CallableIterator)build)CompileError)Options)test_temp_dir)DataDrivenTestCase	DataSuite)assert_string_arrays_equal)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     I/var/www/equiseq/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>/   s    LtX>> r!   r    )r#   r%   s   ``r"   builtins_wrapperr.   (   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)r/   r,   r%   _default_builtinsbuiltinss         r"   use_custom_builtinsr<   2   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   r2   r%   r3   r5   r	   r6   r7   r8   )r#   r/   r,   r%   r9   r:   r;   s          r"   r+   r+   G   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                ,    t          | |          j        S r*   )build_ir_for_single_file2	functions)r?   r@   s     r"   build_ir_for_single_filerF   \   s     %[2BCCMMr!   r   c           	        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%          |j        d         g|j        |j        t-          dd i          ||          }|j        r!t!          |                                          t3          |                                          d
         }|j        D ]}	t9          |	           |S )N
      )capi_versionT)rJ      mypyc__main__main)sourcesoptionsalt_lib_pathr   )r5   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   graphtypesr   
num_errorsnew_messageslistvaluesrE   r   )
r?   r@   program_textrR   sourceresultr^   modulesmodulefns
             r"   rD   rD   b   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	j	!"
D!"" G  26..00111'..""##A&F ! !R    Mr!   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] rH   w)file)old_cwdr2   r%   r5   rr   openread
splitlinesnamecountindexlen
startswithprint)r,   rk   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 ))rk   config	getoptionr   r   rr   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.*$]+)\(rn   )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 %srn   )rv   	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)r2   walkr%   r5   statst_mtimeutime)r   r   dirpathr9   	filenamesrw   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   rg   r   ry   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!   rw   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StripAssertrI   )strip_assertsrL   z_python([3-9]+)_([0-9]+)(_|\b)rn      _py_PythonFz,Invalid _py* suffix (should be _pythonX_Y): )r   r   r   searchr   r   rL   rX   )rw   rR   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KuNr!   )r#   r$   r%   r&   r'   r$   )r/   r&   r,   r
   r'   r0   )r#   r$   r/   r&   r,   r
   r'   r=   r*   )r?   r   r@   rA   r'   rB   )r?   r   r@   rA   r'   r   )r,   r
   rk   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   )rw   r&   r'   rA   )@__doc__
__future__r   
contextlibr2   os.pathr   r6   typingr   r   mypyr   mypy.errorsr   mypy.optionsr   mypy.test.configr	   mypy.test.datar
   r   mypy.test.helpersr   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%   r5   ICODE_GEN_BUILTINSTESTUTIL_PATHr   r.   contextmanagerr<   r+   rF   rD   r   r   r   r   r   r   r   r   r   r   r    r!   r"   <module>r      sL     " " " " " "     				  				  % % % % % % % %       $ $ $ $ $ $             * * * * * * 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N N N N N HL) ) ) ) )X   @ "&"&    $      ) ) ) )2 2 2 2   9 9 9 9         r!   