
    6 fm?                       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Zd dlZd dl	Z	d dl
mZmZmZmZmZmZ d dlmZ eZd dlZd dlm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m Z  d d	l!m"Z"m#Z#m$Z$m%Z% ej&        j'        Z'd
Z(d`dZ)dadZ*dej+        dddbdZ,dcd$Z-ddd'Z.ded(Z/dfd+Z0dgd-Z1ej2        dhd/            Z3did2Z4djd4Z5dkdld:Z6dmd=Z7dndodAZ8dpdDZ9dqdGZ:drdMZ;dsdPZ<dtdRZ=dudUZ>	 dvdwdYZ?dxd[Z@dydzd_ZAdS ){    )annotationsN)IOAnyCallableIterableIteratorPattern)TestCase)defaults)process_options)Options)test_data_prefixtest_temp_dir)DataDrivenTestCase
DeleteFile
UpdateFilefix_cobertura_filename   args	list[str]returnNonec                    d}t          j        | ddgz             \  }}}|dk    rVt          j                            |           t          j                            |           t          j        dd           d S d S )NTz--show-tracebackz--no-silence-site-packagesr   zSample check failedF)msgpytrace)apirunsysstdoutwritestderrpytestfail)r   __tracebackhide__outvalerrvalstatuss        G/var/www/equiseq/venv/lib/python3.11/site-packages/mypy/test/helpers.pyrun_mypyr)   $   s     !WT-?A],^%^__FFF{{
   
   -u====== {    leftright3tuple[list[tuple[int, int]], list[tuple[int, int]]]c                   t          j        d | |          }|                                }d}d}g }g }|D ]}|                    ||j        f           |                    ||j        f           |j        |j        z   }|j        |j        z   }|                    |j        |f           |                    |j        |f           ||fS )Nr   )difflibSequenceMatcherget_matching_blocksappendabsize)	r+   r,   seqblocksijleft_rangesright_rangesblocks	            r(   diff_rangesr=   /   s     
!$e
4
4C$$&&F	A	AKL 
* 
*Auw<(((QL)))Gej Gej  	EGQ<(((UWaL))))$$r*      )colouroutputindentrangeslist[tuple[int, int]]contentr?   
str | Noner@   IO[str]rA   intc                  t          |           D ]\  }}|dz  dk    }||d         |d                  }t          |          D ]\  }	}
|r>|	dk    r8|	t          |          dz
  k     r"|	dk    r|                    d|z  dz              E|s|r|                    |           |                    d|z  |
z              |s,|r|                    d           |                    d           |                    d	           d S )
Nr>      r       z...
z[0mz (diff)
)	enumeratelenr    )rB   rD   r?   r@   rA   r8   
line_rangeis_matchinglinesr9   lines              r(   render_diff_rangerS   H   sA    #6**  :!eqj
1
156 '' 	 	GAt FFE

Q&&66LLv!7888 %6 %V$$$LLv,--- ( ,LL+++Y'''LL+	 r*   expectedactualr   strc           	        t          |          }| |k    rt          | |          \  }}t          j                            d           t          j        dk    rdnd}t          || |           t          j                            d           t          j        dk    rdnd}t          |||           t          j                            d           t          d	 t          t          | |                    D             t          t          |           t          |                              }d
|cxk    rt          |          k     r[n nXt          | |                   t          k    st          ||                   t          k    rt          | |         ||                    t          j                            d           t          j        |d           dS dS )zdAssert that two string arrays are equal.

    Display any differences in a human-readable form.
    z
Expected:
win32z[31mN)r?   zActual:
z[32mrL   c              3  2   K   | ]\  }\  }}||k    |V  d S N ).0r8   r3   r4   s       r(   	<genexpr>z-assert_string_arrays_equal.<locals>.<genexpr>|   s.      KK91fq!AFFQFFFFKKr*   r   zxUpdate the test output using --update-data -n0 (you can additionally use the -k selector to update only specific tests)
F)r   )clean_upr=   r   r!   r    platformrS   nextrM   zipmaxrN   MIN_LINE_LENGTH_FOR_ALIGNMENTshow_align_messager"   r#   )rT   rU   r   expected_rangesactual_rangesredgreen
first_diffs           r(   assert_string_arrays_equalrj   k   s   
 fF6)4Xv)F)F&
'''LG33jj/8C@@@@
%%%!lg55

4->>>>
KK	#h*?*? @ @KKKHs6{{++
 

 
((((S[[((((($%%)FFF6*%&&*GGG x
3VJ5GHHH
Y	
 	
 	
 	C''''''5 r*   nameIterable[str]c           
        t          |          }t          t          |                              dh                    }t          ||d                    d                    |          d                    |          |                      d S )N__main__zEActual modules ({}) do not match expected modules ({}) for "[{} ...]", )sortedset
differencerj   formatjoin)rk   rT   rU   expected_normalizedactual_normalizeds        r(   assert_module_equivalencerw      s     **s6{{55zlCCDD	S[[II'(($))4G*H*H$	
 	
    r*   c           
         t          ||d                    d                    |          d                    |          |                      dS )z6Compare actual and expected targets (order sensitive).zEActual targets ({}) do not match expected targets ({}) for "[{} ...]"ro   N)rj   rs   rt   )rk   rT   rU   s      r(   assert_target_equivalencery      sV    	S[[IIftyy22D	
 	
    r*   s1s2c                   t          |           dk     rdS d}t          j                            d           d}| dd         |dd         k    r,| dd         } |dd         }d}| dd         |dd         k    ,|r
d	| z   } d	|z   }t	          t          |           t          |                    }d
}||k    rd	}t          j                            d| d|          | d           t          j                            d|d|          | d           t          j                            d           t          t          |t	          t          |           t          |                                        D ]^}| ||dz            |||dz            k    r!t          j                            d            n t          j                            d           _t          j                            d           dS )aQ  Align s1 and s2 so that the their first difference is highlighted.

    For example, if s1 is 'foobar' and s2 is 'fobar', display the
    following lines:

      E: foobar
      A: fobar
           ^

    If s1 and s2 are long, only display a fragment of the strings around the
    first difference. If s1 is very short, do nothing.
       NH   z$Alignment of first line difference:
F   
   Tz... z  E: rL   z  A: z     rI   ^rK   )rN   r   r!   r    rb   rangemin)rz   r{   maxwtruncmax_lenextrar9   s          r(   rd   rd      s     2ww{{DJ<===E
SbS'RW

WW SbS'RW


  RZRZ#b''3r77##GE~~ J1RY1111222J1RY1111222JW3tSR#b''223344 " "a!a%i=Bq1q5yM))JS!!!EJS!!!!JTr*   r3   c                   g }t          j                    }|dz   }| D ]}t           j        }|}||                    t           j        d          fD ]0}|dk    r(|dk    r"|dk    r|dk    r|                    |d          }1t	          j        dd|          }|                    |d          }|                    t	          j        d	d|                     |S )
zRemove common directory prefix from all strings in a.

    This uses a naive string replace; it seems to work well enough. Also
    remove trailing carriage returns.
    z
/driver.py/z//\z\\r   z +$z	driver.pyz\r$)osgetcwdsepreplaceresubr2   )r3   respwddriversprefixssps           r(   r^   r^      s     C
)++C<F 
+ 
+444 	' 	'ACxxAII!t))VZZ2&&VE2r""ZZ,,

26&"b))****Jr*   Iterator[None]c               #    K   t           j                                        } dt           j        v s.dt           j        v s t           j                            dd           	 dV  | t           _        dS # | t           _        w xY w)zTemporary insert current directory into sys.path.

    This can be used by test cases that do runtime imports, for example
    by the stubgen tests.
    r   .r   N)r   pathcopyinsert)old_sys_paths    r(   local_sys_path_setr      sn       8==??L#(NNcSXoo2 <s   A0 0A>r   tuple[int, int]c                    |                      d          rdS |                      d          rdS |                      d          rdS |                      d          rdS |                      d	          rd
S t          j        S )Nzpython312.test)rJ      zpython311.test)rJ      zpython310.test)rJ   r   zpython39.test)rJ   	   zpython38.test)rJ      )endswithr   PYTHON3_VERSIONr   s    r(   testfile_pyversionr      s    }}%&& (u	'	(	( 	(u	'	(	( (u		'	' (t		'	' (t''r*   messagesc                z    g }| D ]5}|                     |                    t          j        d                     6|S )z@Translate an array of error messages to use / as path separator.r   )r2   r   r   r   )r   r3   ms      r(   normalize_error_messagesr     sB     	A ) )	263''((((Hr*         ?funcCallable[[], Any]max_waitfloatc                    t          j                     }d}	 	  |              dS # t          $ rH t          |dz  ||z   t          j                     z
            }|dk    r t          j        |           Y nw xY wc)a   Retry callback with exponential backoff when it raises OSError.

    If the function still generates an error after max_wait seconds, propagate
    the exception.

    This can be effective against random file system operation failures on
    Windows.
    g{Gz?TNr>   )timeOSErrorr   sleep)r   r   t0	wait_times       r(   retry_on_errorr     s     
BI	"	"DFFFF 	" 	" 	"IM2=49;;+FGGID  Jy!!!!!	"		"s   
$ AA65A6objobjectc                V   t          | t                    r|                     d          dk    rmdg}|                     d          D ]/}|                    t          d|z             dd                    0|dxx         dz  cc<   d                    |          S t          |           S )NrL   rI   z'''\"r>   z''')
isinstancerV   countsplitr2   reprrt   )r   bitsrR   s      r(   	good_reprr   /  s    #s #99T??Q9D		$ 4 4Dt,,QrT23333HHHHHH99T??"99r*   {} != {}r4   fmtc                    d}| |k    r=t          |                    t          |           t          |                              d S )NT)AssertionErrorrs   r   )r3   r4   r   r$   s       r(   assert_equalr   ;  s@    AvvSZZ	!illCCDDD vr*   ttypec                    dt          |           v r;t          |                               d          d                             d          S t          |           dd         S )Nr   r   z'>r   )rV   r   rstrip)r   s    r(   typenamer   A  sP    
c!ff}}1vv||C  $++D1111vvad|r*   typvaluec                    d}t          |          | k    r<t          dt          t          |                     dt          |                      d S )NTzInvalid type z, expected )r   r   r   )r   r   r$   s      r(   assert_typer   H  sU    E{{c^Xd5kk-B-B^^xX[}}^^___ r*   program_texttestcaser   incremental_stepr   c                   t                      }t          j        d| t          j                  }|dk    r)t          j        d| d| t          j                  }|r|}|rm|                    d                                          }|                    d           t          |d          \  }}|rt          d	          d
|vrd|_	        n,g }t                      }d|_
        d|_	        d|_        d|_        t          d |D                       rt          |j                  |_        |j                            d          r|j                            d          |_        |S )z4Parse comments like '# flags: --foo' in a test case.z# flags: (.*)$)flagsrI   z# flagsz: (.*)$z--no-site-packagesF)require_targetsz9Specifying targets via the flags pragma is not supported.z--show-error-codesTc              3  T   K   | ]#}|                     d           d         dk    V  $dS )=r   z--python-versionN)r   )r\   flags     r(   r]   z parse_options.<locals>.<genexpr>k  s7      
J
J4::c??1!33
J
J
J
J
J
Jr*   z--mypy-verbose)r   r   search	MULTILINEgroupr   r2   r   RuntimeErrorhide_error_codeserror_summaryforce_uppercase_builtinsforce_union_syntaxallr   filepython_versionconfig	getoption	verbosity)r   r   r   optionsr   flags2	flag_listtargetss           r(   parse_optionsr   N  sz    iiGI&BLIIIE!>%5>>>TVT`aaa 	E *KKNN((**	-...*9eLLL 	\Z[[[y00'+G$	)) %#' +/(%)" 
J
J	
J
J
JJJ C!3HM!B!B  !122 H$O556FGGNr*   streamsbytesc                     d | D             S )zDReturns a single list of string lines from the byte streams in args.c                f    g | ].}|                     d                                           D ]}|/S )utf8)decode
splitlines)r\   streamr   s      r(   
<listcomp>zsplit_lines.<locals>.<listcomp>v  s=    PPP&V]]6-B-B-M-M-O-OPPAPPPPr*   r[   )r   s    r(   split_linesr   t  s    PPGPPPPr*   target_pathc                   d }t           j                            |          rt          j        |          j        dz   }t           j                            |          }t          j        |d           t          |dd          5 }|                    |            d d d            n# 1 swxY w Y   |rt          j	        |||f           d S d S )NrI   T)exist_okwzutf-8encoding)times)
r   r   isfilestatst_mtimedirnamemakedirsopenr    utime)rD   r   new_timedirtargets        r(   write_and_fudge_mtimer  y  s    H	w~~k"" 57;''014
'//+
&
&CKd####	k3	1	1	1 VW                :
Xx$8999999: :s   B''B+.B+
operationslist[UpdateFile | DeleteFile]c                X   | D ]}t          |t                    rt          |j        |j                   2t
          j                            |j                  r6|j                            d          sJ t          j
        |j                   |j        t          fd           d S )Ntmpc                 ,    t          j                   S rZ   )r   remover   s   r(   <lambda>z)perform_file_operations.<locals>.<lambda>  s    ry r*   )r   r   r  rD   r   r   r   isdir
startswithshutilrmtreer   )r  opr   s     @r(   perform_file_operationsr    s     8 8b*%% 	8!"*bn==== w}}RW%% 8w))%00000bg&&&& w666677778 8r*   r   stepstrip_prefixc           
        | j         D ]\  }}|                    |          r|t          |          d          }t          j                            |          s/t          d                    || j        rd|z  nd                    t          |d          5 }|
                                }d d d            n# 1 swxY w Y   t          |t                    r9|                    |          t          d                    ||                    t          |                                t          j                            t"                              }| j        r<| j        j        r!t          j        j        dk    rd |D             }t-          |          }t/          |                                |d	                    || j        rd|z  nd                     d S )
Nz0Expected file {} was not produced by test case{}z on step %dr   r   r   zCOutput file {} did not match its expected output pattern
---
{}
---r   c                ,    g | ]}t          |          S r[   )r   )r\   rR   s     r(   r   z+check_test_output_files.<locals>.<listcomp>  s!    $`$`$`d%;D%A%A$`$`$`r*   z2Output file {} did not match its expected output{})output_filesr  rN   r   r   existsr   rs   output2r  readr   r	   	fullmatchnormalize_file_outputr   abspathr   normalize_outputsuite
native_sepr   r   rj   )r   r  r  r   expected_contentoutput_fileactual_output_contentnormalized_outputs           r(   check_test_output_filesr,    sG    #+"7 $
 $
??<(( 	-L))++,Dw~~d## 	 BII(2BJ-$..   
 $((( 	7K$/$4$4$6$6!	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 &00 	))*?@@L X__/    2!,,..0N0N
 

 $ 	L~( aRW[D-@-@$`$`N_$`$`$`! 89J K K"''))@GGh.>Fmd**B 	
 	
 	
 	
=$
 $
s   B::B>	B>	current_abs_pathc                    t          j        d          fd| D             }t          j        j        fd|D             }t          t          j        d          fd|D             }fd|D             }|S )z%Normalize file output for comparison.z\d{10}c                <    g | ]}|                     d           S )z$PWD)r   )r\   xr-  s     r(   r   z)normalize_file_output.<locals>.<listcomp>  s(    CCCaaii(&11CCCr*   c                l    g | ]0}t          j        d t          j                  z   d z   d|          1S z\bz$VERSIONr   r   escape)r\   r0  versions     r(   r   z)normalize_file_output.<locals>.<listcomp>  s;    XXXAbfURYw///%7QGGXXXr*   base_versionc                l    g | ]0}t          j        d t          j                  z   d z   d|          1S r2  r3  )r\   r0  r6  s     r(   r   z)normalize_file_output.<locals>.<listcomp>  s<    ]]]QRbfURY|444u<j!LL]]]r*   c                <    g | ]}                     d |          S )z
$TIMESTAMP)r   )r\   r0  timestamp_regexs     r(   r   z)normalize_file_output.<locals>.<listcomp>  s)    CCCqo!!,22CCCr*   )r   compilemypyr5  __version__getattr)rD   r-  resultr6  r9  r5  s    ` @@@r(   r#  r#    s    j++OCCCC7CCCFl&GXXXXQWXXXF 4<AAL]]]]V\]]]FCCCCFCCCFMr*   patternexcludelist[str] | Nonec                t    fdt          j        t                                        |           D             S )Nc                4    g | ]}|j         pg v|j         S r[   )rk   )r\   r   r@  s     r(   r   z#find_test_files.<locals>.<listcomp>  s6       9W]++ 		+++r*   )pathlibPathr   rglob)r?  r@  s    `r(   find_test_filesrG    sG       \"23399'BB   r*   )r   r   r   r   )r+   r   r,   r   r   r-   )rB   rC   rD   r   r?   rE   r@   rF   rA   rG   r   r   )rT   r   rU   r   r   rV   r   r   )rk   rV   rT   rl   rU   rl   r   r   )rk   rV   rT   r   rU   r   r   r   )rz   rV   r{   rV   r   r   )r3   r   r   r   )r   r   )r   rV   r   r   )r   r   r   r   )r   )r   r   r   r   r   r   )r   r   r   rV   )r   )r3   r   r4   r   r   rV   r   r   )r   r   r   rV   )r   r   r   r   r   r   )r   rV   r   r   r   rG   r   r   )r   r   r   r   )rD   rV   r   rV   r   r   )r  r  r   r   )r   )r   r   r  rG   r  rV   r   r   )rD   r   r-  rV   r   r   rZ   )r?  rV   r@  rA  r   r   )B
__future__r   
contextlibr/   r   rD  r   r  r   r   typingr   r   r   r   r   r	   unittestr
   Suiter"   mypy.apir   mypy.versionr;  r   	mypy.mainr   mypy.optionsr   mypy.test.configr   r   mypy.test.datar   r   r   r   markskiprc   r)   r=   r!   rS   rj   rw   ry   rd   r^   contextmanagerr   r   r   r   r   r   r   r   r   r   r  r  r,  r#  rG  r[   r*   r(   <module>rV     s   " " " " " "      				  				  



  A A A A A A A A A A A A A A A A                        % % % % % %             < < < < < < < < ] ] ] ] ] ] ] ] ] ] ] ]{ !" > > > >% % % %: j           F (  (  (  (F	 	 	 	   1 1 1 1h   .        ( ( ( (   " " " " ".	 	 	 	E E E E E   ` ` ` `# # # #LQ Q Q Q
: : : :*8 8 8 8$ BD'
 '
 '
 '
 '
T         r*   