a
    xd,                     @   s   d 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
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 i fddZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )zB
lit - LLVM Integrated Tester.

See lit.pod for more information.
    N)
GoogleTest)record_test_timesc                    s  t j  t|  j}t dk}t jjtj	
tjd  j	 j j j j j j| j| j jd}t j| j j}|stjd td  js jrt| j j td  j rt!t"j#$dd |D }t%d&t'| td  j(d ur2 j(|j(kr2|)d	*|j( j(  j(|_(t+| j  fd
d|D }|stjdt,|   j-rtjd td ntjd td  j.r܈ j.\}}t/||||}|stjd td |d  j0 }t1|  t2|| t33 }	t4|| t,| t33 |	 }
t5|| t67||\}} j8rNt9| t:||
   j.rf|n|} j;D ]}|<||
 qp|j=rtjd|j=  td |j>rtjd|j>  t?dd |D }|r j@rtjd n
td d S )NWindowsr   )ZprognamepathquietuseValgrindvalgrindLeakCheckvalgrindArgs	noExecutedebugZ	isWindowsorderparamsZconfig_prefixZecho_all_commandsz7error: did not discover any tests for provided path(s)
   c                 s   s    | ]}|j d u r| V  qd S N)Zgtest_json_fileZgetUsedFeatures.0t r   Q/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lit/main.py	<genexpr>8       zmain.<locals>.<genexpr> zThe test suite configuration requested an individual test timeout of {0} seconds but a timeout of {1} seconds was requested on the command line. Forcing timeout to be {1} secondsc                    s0   g | ](} j | r j| s|qS r   )filtersearchgetFullNameZ
filter_outr   optsr   r   
<listcomp>I   s   zmain.<locals>.<listcomp>z;error: filter did not match any tests (of %d discovered).  z>Suppressing error because '--allow-empty-runs' was specified.
z1Use '--allow-empty-runs' to suppress this error.
zVwarning: shard does not contain any tests.  Consider decreasing the number of shards.
z
%d error(s) in tests
z
%d warning(s) in tests
c                 s   s   | ]}|  V  qd S r   	isFailurer   r   r   r   r      r   zK
Exiting with status 0 instead of 1 because '--ignore-fail' was specified.
   )AlitZcl_arguments
parse_argscreate_paramsuser_paramsplatformsystemZ	LitConfigosr   basenamesysargvr   r   r   r	   r
   r   r   ZconfigPrefixZechoAllCommandsZ	discoveryZfind_tests_for_inputsZ
test_pathsZindirectlyRunCheckstderrwriteexitshow_suites
show_testsprint_discoveredZshow_used_featuresset	itertoolschainfrom_iterableprintjoinsortedZmaxIndividualTestTimenoteformatdetermine_orderlenZallow_empty_runsZshardfilter_by_shardZ	max_tests
mark_xfailmark_excludedtime	run_testsr   r   Zpost_process_shard_resultsZ
time_testsprint_histogramprint_resultsreportsZwrite_resultsZ	numErrorsZnumWarningsanyZ
ignoreFail)builtin_paramsr   Z
is_windows
lit_configdiscovered_testsfeaturesselected_testsrunshardsstartelapsedZtests_for_reportreportZhas_failurer   r   r   main   s    











rO   c                    s,   dd  t | }| fdd|D  |S )Nc                 S   s   d| v r|  ddS | dfS )N=r     )split)pr   r   r   parse   s    zcreate_params.<locals>.parsec                    s   g | ]} |qS r   r   )r   rS   rT   r   r   r      r   z!create_params.<locals>.<listcomp>)dictupdate)rE   r$   r   r   rU   r   r#      s    r#   c           
      C   s   | j tjjd |rt| dd }td |D ]\}}tdd |D }td|j|f  td|j	  td	|j
  d
t|jj}td|  t|jj}dd |D }dd|}td|  q0|rtd | D ]}	td|	   qd S )Nkeyc                 S   s   | j S r   )suiter   r   r   r   <lambda>   r   z"print_discovered.<locals>.<lambda>z-- Test Suites --c                 s   s   | ]
}d V  qdS )r    Nr   )r   _r   r   r   r      r   z#print_discovered.<locals>.<genexpr>z  %s - %d testsz    Source Root: %sz    Exec Root  : %sr   z    Available Features: %sc                 s   s   | ]\}}d ||f V  qdS )z%s => %sNr   )r   xyr   r   r   r      r   
   z    Available Substitutions: %sz-- Available Tests --  %s)sortr!   rC   Zby_suite_and_test_pathr2   groupbyr5   sumnameZsource_rootZ	exec_rootr6   r7   configZavailable_featuressubstitutionsljustr   )
testsr.   r/   Ztests_by_suiterZ   Z	test_iterZ
test_countrH   rh   r   r   r   r   r0      s&    r0   c                 C   st   ddl m} ||}||jkr2dd l}||  n>||jkrN| jdd d n"||jks`J d| jdd d d S )Nr   )	TestOrderc                 S   s   |   S r   r   r[   r   r   r   r\      r   z!determine_order.<locals>.<lambda>rX   zUnknown TestOrder valuec                 S   s   | j  | j |  fS r   )Zprevious_failureZprevious_elapsedr   r[   r   r   r   r\      r   )lit.cl_argumentsrk   ZRANDOMrandomshuffleZLEXICALrc   ZSMART)rj   r   rk   Z
enum_orderrn   r   r   r   r:      s    

r:   c           	         s   t |d t |} fdd|D }d}ddd |d | D }t||krZ|d7 }d| d	| d
t| d	t  d| d| d| d}|| |S )Nr    c                    s   g | ]} | qS r   r   r   irj   r   r   r      r   z#filter_by_shard.<locals>.<listcomp>   z, c                 S   s   g | ]}t |d  qS )r    )strrp   r   r   r   r      r   z, ...zSelecting shard /z = size z = tests #(z*k)+z = [])ranger;   r6   r8   )	rj   rJ   rK   rF   Ztest_ixsrI   Zpreview_lenpreviewmsgr   rr   r   r<      s&    
r<   c                 C   s`   | D ]V}t j|j}| }||jv s2||jv r@| jd7  _||jv sT||jv rd|_qd S )N*T)r'   sepr6   Zpath_in_suiter   ZxfailZxfailsZ	xfail_not)rI   r   r   Z	test_fileZtest_full_namer   r   r   r=      s    r=   c                 C   s8   t | t | }tjtjj}|D ]}|| q$d S r   )r1   r!   TestResultZEXCLUDEDZ	setResult)rG   rI   Zexcluded_testsresultr   r   r   r   r>      s    r>   c           	      C   s   t t| |j}tj|| ||}tj| |||j|j	|j
}|  d}d }zt|| W nJ tyv   d}d}Y n2 tjjy   d}Y n tjjy   d}Y n0 || |rtjd|  d S )NFTz  interrupted by userz0warning: reached maximum number of test failureszwarning: reached timeoutz%s, skipping remaining tests
)minr;   workersr!   displayZcreate_displayrJ   ZRunrW   Zmax_failurestimeoutZprint_headerexecute_in_tmp_dirKeyboardInterruptZMaxFailuresErrorTimeoutErrorclearr)   r+   r,   )	rj   rF   r   rG   r   r   rJ   interruptederrorr   r   r   r@      s(    

r@   c                    s  d  dt jvrbdd l}|jdd  fdddD }t j| dd	 | jD D ]}|j| qPzZ|   W  rzdd l}|	  W n2 t
y } z|d
   W Y d }~n
d }~0 0 nT rzdd l}|	  W n4 t
y } z|d
   W Y d }~n
d }~0 0 0 d S )NZLIT_PRESERVES_TMPr   zlit-tmp-)prefixc                    s   i | ]
}| qS r   r   )r   kZtmp_dirr   r   
<dictcomp>   r   z&execute_in_tmp_dir.<locals>.<dictcomp>)TMPTMPDIRTEMPZTEMPDIRc                 S   s   h | ]
}|j qS r   )rg   r   r   r   r   	<setcomp>   r   z%execute_in_tmp_dir.<locals>.<setcomp>zVFailed to delete temp directory '%s', try upgrading your version of Python to fix this)r'   environtempfilemkdtemprW   rj   environmentexecuteshutilrmtree	Exceptionwarning)rJ   rF   r   Ztmp_dir_envscfgr   er   r   r   r      s,    

&r   c                 C   s&   dd | D }|r"t jj|dd d S )Nc                 S   s$   g | ]}|j jr| |j jfqS r   )r~   rM   r   r   r   r   r   r     s   
z#print_histogram.<locals>.<listcomp>ZTests)title)r!   utilZprintHistogram)rj   Z
test_timesr   r   r   rA     s
    rA   c                 C   st   dd t jj D }| D ]}||jj | qt jj D ]"}tt|| dd d||j	 q>t
||j| d S )Nc                 S   s   i | ]
}|g qS r   r   )r   coder   r   r   r     r   z!print_results.<locals>.<dictcomp>c                 S   s   |   S r   rl   r[   r   r   r   r\     r   zprint_results.<locals>.<lambda>rX   )r!   r|   
ResultCode	all_codesr~   r   appendprint_groupr7   shown_codesprint_summaryr   )rj   rM   r   tests_by_codetestr   r   r   r   rB     s     rB   c                 C   sb   | sd S |j s||vrd S td td|jt|  | D ]}td|   q<tjd d S )Nz********************z{} Tests ({}):rb   r`   )	r   r5   r9   labelr;   r   r)   stdoutr,   )rj   r   r   r   r   r   r   r     s    r   c           	         s    st d|   fddtjj D }fdd|D }dd |D }|sRd S tdd |D }tdd |D }|D ]0\}}||}t||}t d	||f  qzd S )
Nz
Testing Time: %.2fsc                    s   g | ]} r|j r|qS r   r   r   c)r   r   r   r   /  s   
z!print_summary.<locals>.<listcomp>c                    s   g | ]}|j t | fqS r   )r   r;   r   )r   r   r   r   1  r   c                 S   s   g | ]\}}|r||fqS r   r   )r   r   countr   r   r   r   2  r   c                 s   s   | ]\}}t |V  qd S r   )r;   )r   r   r]   r   r   r   r   6  r   z print_summary.<locals>.<genexpr>c                 s   s   | ]\}}t t|V  qd S r   )r;   rt   )r   r]   r   r   r   r   r   7  r   z  %s: %s)	r5   r!   r|   r   r   maxri   rt   rjust)	r   r   rM   codesgroupsZmax_label_lenZmax_count_lenr   r   r   )r   r   r   r   +  s    
r   ) __doc__r2   r'   r%   r)   r?   rm   r!   Zlit.discoveryZlit.displayZlit.LitConfigZlit.reportsZlit.runZlit.TestZlit.utilZlit.formats.googletestr   Zlit.TestTimesr   rO   r#   r0   r:   r<   r=   r>   r@   r   rA   rB   r   r   r   r   r   r   <module>   s8   q		