B
     \?                 @   s@   d dl mZ d dlZd dlZdd Zdd ZG dd deZdS )	    )print_functionNc             K   sl   ddl m} d| kr,| d t | |S d| krP| d tdd| |S || fddi| S d S )	Nr   )	run_testsz--failed-firstz--last-failedT)last_failedZdefaultTestznumba.tests)numba.testingr   remove_FailedFirstRunnermainwasSuccessful)argvkwdsr    r   .lib/python3.7/site-packages/numba/_runtests.py_main   s    

r   c              O   s   t dgt|  f|S )z}keyword arguments are accepted for backward compatiblity only.
    See `numba.testing.run_tests()` documentation for details.z<main>)r   list)r
   r   r   r   r   r      s    r   c               @   s6   e Zd ZdZdZdddZdd Zdd	 Zd
d ZdS )r   zI
    Test Runner to handle the failed-first (--failed-first) option.
    z.runtests_lastfailedFc             C   s
   || _ d S )N)r   )selfr   r   r   r   __init__&   s    z_FailedFirstRunner.__init__c                s   ddl m} |d }|dd  }dd |D }| |\}  rd}t|t   fdd|D }| jrxt }	q | }	n| jrg }	nt|}	|	std d	S td
t|	 td| ||g| |	 f|}
t|	|
jkr| 	|
| |

 S )Nr   )r      c             S   s   g | ]}| d r|qS )-)
startswith).0ar   r   r   
<listcomp>-   s    z+_FailedFirstRunner.main.<locals>.<listcomp>z%There were {} previously failed testsc                s   g | ]}| kr|qS r   r   )r   t)failed_testsr   r   r   4   s    zNo tests to runTzRunning {} testsZFlags)r   r   find_last_failedprintformatlenr   r   ZtestsRunsave_failed_testsr	   )r   r
   r   r   progflags	all_testsZftZremaing_testsZtestsresultr   )r   r   r   )   s0    


z_FailedFirstRunner.mainc          	   C   s   t d| j g }t }x&|j|j D ]}||d   q(W x|D ]}||krH|| qHW t	| jd}t
|| W d Q R X d S )NzSaving failed tests to {}r   w)r   r   cache_filenameseterrorsZfailuresaddidappendopenjsondump)r   r"   r!   cacheZfailedZcaser   Zfoutr   r   r   r   M   s    
z$_FailedFirstRunner.save_failed_testsc       
   	      s   ddl m} dgdd |D  }|d$}t|  td |  }W d Q R X  fdd|D }yt| j}W n t	k
r   g }Y nX |}	t
|	}W d Q R X ||fS )	Nr   )captured_outputz-lc             S   s   g | ]}| d s|qS )r   )r   )r   r   r   r   r   r   `   s    z7_FailedFirstRunner.find_last_failed.<locals>.<listcomp>stdoutz^(\w+\.)+\w+$c                s   g | ]}  |d k	r|qS )N)match)r   x)patr   r   r   f   s    )Znumba.tests.supportr.   r   recompilegetvalue
splitlinesr*   r$   IOErrorr+   load)
r   r
   r.   Zlistargvstreamlinesr!   Zfobjr   Zfinr   )r2   r   r   \   s    


z#_FailedFirstRunner.find_last_failedN)F)	__name__
__module____qualname____doc__r$   r   r   r   r   r   r   r   r   r       s   
$r   )Z
__future__r   r+   r3   r   r   objectr   r   r   r   r   <module>   s
   