
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a_˜ ã                !   @   sp  d Z ddddddddd	d
dddddddddddddddddddddd d!g!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 ed&d'ƒZi Zd(d„ ZedƒZedƒZedƒZedƒZedƒZedƒZeeB eB eB eB eB Zed	ƒZed
ƒZedƒZedƒZedƒZeeB eB eB eB Zd)Z d*Z!d+d,„ Z"drd.d/„Z#d0d1„ Z$d2d3„ Z%dsd5d6„Z&d7d8„ Z'G d9d:„ d:eƒZ(d;d<„ Z)d=d>„ Z*d?d@„ Z+G dAdB„ dBej,ƒZ-dCdD„ Z.G dEd„ dƒZ/G dFd„ dƒZ0G dGd„ dƒZ1G dHd„ dƒZ2G dId„ dƒZ3G dJd„ dƒZ4G dKd„ de5ƒZ6G dLd„ de5ƒZ7G dMd„ de3ƒZ8d#a9dtdPd„Z:dNd#d#d#d#dNd"d#dOe1ƒ d#fdQd„Z;dudSd„Z<d"a=dTd„ Z>G dUdV„ dVej?ƒZ@G dWdX„ dXe@ƒZAG dYdZ„ dZejBƒZCdvd[d„ZDG d\d]„ d]e@ƒZEdNd#d#e1ƒ d#fd^d_„ZFd`d„ ZGdad„ ZHdbd„ ZIdwdcd „ZJdxddde„ZKdydfd!„ZLG dgdh„ dhƒZMeMdidjdkdldmdnœZNdodp„ ZOePdqk�rle	 QeOƒ ¡ d#S )zzreStructuredText enÚregister_optionflagÚDONT_ACCEPT_TRUE_FOR_1ÚDONT_ACCEPT_BLANKLINEÚNORMALIZE_WHITESPACEÚELLIPSISÚSKIPÚIGNORE_EXCEPTION_DETAILÚCOMPARISON_FLAGSÚREPORT_UDIFFÚREPORT_CDIFFÚREPORT_NDIFFÚREPORT_ONLY_FIRST_FAILUREÚREPORTING_FLAGSÚ	FAIL_FASTÚExampleÚDocTestÚDocTestParserÚDocTestFinderÚDocTestRunnerÚOutputCheckerÚDocTestFailureÚUnexpectedExceptionÚDebugRunnerÚtestmodÚtestfileÚrun_docstring_examplesÚDocTestSuiteÚDocFileSuiteÚset_unittest_reportflagsÚscript_from_examplesÚ
testsourceÚ	debug_srcÚdebugé    N)ÚStringIO)Ú
namedtupleÚTestResultszfailed attemptedc                 C   s   t  | dtt ƒ> ¡S )Né   )ÚOPTIONFLAGS_BY_NAMEÚ
setdefaultÚlen©Úname© r,   ú,/opt/alt/python38/lib64/python3.8/doctest.pyr   „   s    z<BLANKLINE>z...c                 C   s8   d}t jD ](}|  |d ¡}|tt |ƒkr
||jO }q
|S )Nr"   )Ú
__future__Zall_feature_namesÚgetÚgetattrZcompiler_flag)ÚglobsÚflagsZfnameZfeaturer,   r,   r-   Ú_extract_future_flags·   s    
r3   é   c                 C   sV   t  | ¡r| S t| tƒr,t| tƒ tƒ dgƒS | d krJtjt 	|¡j
d  S tdƒ‚d S )NÚ*Ú__name__z"Expected a module, string, or None)ÚinspectÚismoduleÚ
isinstanceÚstrÚ
__import__ÚglobalsÚlocalsÚsysÚmodulesÚ	_getframeÚ	f_globalsÚ	TypeError)ÚmoduleZdepthr,   r,   r-   Ú_normalize_moduleÃ   s    


rD   c                 C   s   dD ]}|   |d¡} q| S )N)z
úÚ
)Úreplace)ÚdataÚnewliner,   r,   r-   Ú_newline_convertÖ   s    rJ   c              
   C   s†   |rVt |dƒ}t|| ƒ} t|dd ƒd k	rVt|jdƒrV|j | ¡}| |¡}t|ƒ| fS t| |d��}| 	¡ | fW  5 Q R £ S Q R X d S )Né   Ú
__loader__Úget_data)Úencoding)
rD   Ú_module_relative_pathr0   ÚhasattrrL   rM   ÚdecoderJ   ÚopenÚread)ÚfilenameÚpackageÚmodule_relativerN   Zfile_contentsÚfr,   r,   r-   Ú_load_testfileÝ   s    


rX   é   c                 C   s   t  d|d | ¡S )Nz
(?m)^(?!$)ú )ÚreÚsub)ÚsÚindentr,   r,   r-   Ú_indentë   s    r_   c                 C   s*   t ƒ }| \}}}tj||||d� | ¡ S )N)Úfile)r#   Ú	tracebackÚprint_exceptionÚgetvalue)Úexc_infoZexcoutÚexc_typeZexc_valZexc_tbr,   r,   r-   Ú_exception_tracebackó   s    
rf   c                   @   s   e Zd Zdd„ Zddd„ZdS )Ú	_SpoofOutc                 C   s$   t  | ¡}|r | d¡s |d7 }|S ©NrF   )r#   rc   Úendswith)ÚselfÚresultr,   r,   r-   rc      s    
z_SpoofOut.getvalueNc                 C   s   |   |¡ t | ¡ d S ©N)Úseekr#   Útruncate)rj   Úsizer,   r,   r-   rn   	  s    
z_SpoofOut.truncate)N)r6   Ú
__module__Ú__qualname__rc   rn   r,   r,   r,   r-   rg   ÿ   s   	rg   c                 C   sÂ   t | kr| |kS |  t ¡}dt|ƒ }}|d }|rR| |¡rNt|ƒ}|d= ndS |d }|r€| |¡r||t|ƒ8 }|d= ndS ||krŒdS |D ],}| |||¡}|dk r° dS |t|ƒ7 }q�dS )Nr"   FéÿÿÿÿT)ÚELLIPSIS_MARKERÚsplitr)   Ú
startswithri   Úfind)ÚwantÚgotZwsÚstartposÚendposÚwr,   r,   r-   Ú_ellipsis_match  s0    


r|   c                 C   s   |   ¡ } | rd|  S dS d S )Nz# ú#)Úrstrip)Úliner,   r,   r-   Ú_comment_line?  s    r€   c                 C   sh   dt | ƒ }}|  d¡}|dkr$|}|  dd|¡}|dkr>|}|  dd|¡}|dkr\|d }| ||… S )Nr"   rF   ú:Ú.r&   )r)   rv   Úrfind)ÚmsgÚstartÚendÚir,   r,   r-   Ú_strip_exception_detailsG  s    
rˆ   c                   @   s.   e Zd Zdd„ Zd
dd„Zdd„ Zdd	„ ZdS )Ú_OutputRedirectingPdbc                 C   s(   || _ d| _tjj| |dd� d| _d S )NFT)ÚstdoutÚnosigintr&   )Ú_OutputRedirectingPdb__outÚ$_OutputRedirectingPdb__debugger_usedÚpdbÚPdbÚ__init__Zuse_rawinput)rj   Úoutr,   r,   r-   r�   g  s    z_OutputRedirectingPdb.__init__Nc                 C   s*   d| _ |d krt ¡ j}tj | |¡ d S )NT)r�   r>   r@   Úf_backrŽ   r�   Ú	set_trace)rj   Úframer,   r,   r-   r“   o  s    
z_OutputRedirectingPdb.set_tracec                 C   s   | j rtj | ¡ d S rl   )r�   rŽ   r�   Úset_continue©rj   r,   r,   r-   r•   u  s    z"_OutputRedirectingPdb.set_continuec                 G   s2   t j}| jt _ztjj| f|žŽ W ¢S |t _X d S rl   )r>   rŠ   rŒ   rŽ   r�   Útrace_dispatch)rj   ÚargsÚsave_stdoutr,   r,   r-   r—   {  s
    z$_OutputRedirectingPdb.trace_dispatch)N)r6   rp   rq   r�   r“   r•   r—   r,   r,   r,   r-   r‰   a  s   
r‰   c                 C   sò   t  | ¡std|  ƒ‚| d¡r(tdƒ‚tjj| d¡Ž }t	| dƒrXtj | j
¡d }nŒ| jdkržttjƒdkr–tjd dkr–tj tjd ¡d }qätj}nFt	| dƒrÖ| jD ]&}tj ||¡}tj |¡r®|  S q®td	| j ƒ‚tj ||¡S )
NzExpected a module: %rú/z1Module-relative files may not have absolute pathsÚ__file__r"   Ú__main__Ú Ú__path__zBCan't resolve paths relative to the module %r (it has no __file__))r7   r8   rB   ru   Ú
ValueErrorÚosÚpathÚjoinrt   rP   r›   r6   r)   r>   ÚargvÚcurdirrž   Úexists)rC   Z	test_pathZbasedirZ	directoryÚfullpathr,   r,   r-   rO   †  s(    






þrO   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
r   Nr"   c                 C   sv   |  d¡s|d7 }|r(|  d¡s(|d7 }|d k	rB|  d¡sB|d7 }|| _|| _|| _|| _|d krfi }|| _|| _d S rh   )ri   Úsourcerw   Úlinenor^   ÚoptionsÚexc_msg)rj   r§   rw   rª   r¨   r^   r©   r,   r,   r-   r�   ×  s    
 zExample.__init__c                 C   s\   t | ƒt |ƒk	rtS | j|jkoZ| j|jkoZ| j|jkoZ| j|jkoZ| j|jkoZ| j|jkS rl   )ÚtypeÚNotImplementedr§   rw   r¨   r^   r©   rª   ©rj   Úotherr,   r,   r-   Ú__eq__é  s    
ÿ
þ
ý
ü
ûzExample.__eq__c                 C   s   t | j| j| j| j| jfƒS rl   )Úhashr§   rw   r¨   r^   rª   r–   r,   r,   r-   Ú__hash__ô  s    ÿzExample.__hash__)Nr"   r"   N)r6   rp   rq   r�   r¯   r±   r,   r,   r,   r-   r   ´  s
   #  ÿ
c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   c                 C   s,   || _ || _| ¡ | _|| _|| _|| _d S rl   )ÚexamplesÚ	docstringÚcopyr1   r+   rT   r¨   )rj   r²   r1   r+   rT   r¨   r³   r,   r,   r-   r�     s    
zDocTest.__init__c                 C   sR   t | jƒdkrd}n"t | jƒdkr(d}ndt | jƒ }d| jj| j| j| j|f S )Nr"   zno examplesr&   z	1 examplez%d examplesz<%s %s from %s:%s (%s)>)r)   r²   Ú	__class__r6   r+   rT   r¨   )rj   r²   r,   r,   r-   Ú__repr__  s       ÿÿzDocTest.__repr__c                 C   s\   t | ƒt |ƒk	rtS | j|jkoZ| j|jkoZ| j|jkoZ| j|jkoZ| j|jkoZ| j|jkS rl   )r«   r¬   r²   r³   r1   r+   rT   r¨   r­   r,   r,   r-   r¯   )  s    
ÿ
þ
ý
ü
ûzDocTest.__eq__c                 C   s   t | j| j| j| jfƒS rl   )r°   r³   r+   rT   r¨   r–   r,   r,   r-   r±   4  s    zDocTest.__hash__c                 C   s:   t |tƒstS | j| j| jt| ƒf|j|j|jt|ƒfk S rl   )r9   r   r¬   r+   rT   r¨   Úidr­   r,   r,   r-   Ú__lt__8  s
    
þzDocTest.__lt__N)r6   rp   rq   r�   r¶   r¯   r±   r¸   r,   r,   r,   r-   r   ø  s
   c                   @   s¦   e Zd Ze dejejB ¡Ze dejejB ejB ¡Z	e d¡j
Zddd„Zdd„ Zdd	d
„Zdd„ Ze dej¡Zdd„ Ze dej¡Zdd„ Zdd„ Zdd„ ZdS )r   aú  
        # Source consists of a PS1 line followed by zero or more PS2 lines.
        (?P<source>
            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
            (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
        \n?
        # Want consists of any non-blank lines that do not start with PS1.
        (?P<want> (?:(?![ ]*$)    # Not a blank line
                     (?![ ]*>>>)  # Not a line starting with PS1
                     .+$\n?       # But any other line
                  )*)
        aß  
        # Grab the traceback header.  Different versions of Python have
        # said different things on the first traceback line.
        ^(?P<hdr> Traceback\ \(
            (?: most\ recent\ call\ last
            |   innermost\ last
            ) \) :
        )
        \s* $                # toss trailing whitespace on the header.
        (?P<stack> .*?)      # don't blink: absorb stuff until...
        ^ (?P<msg> \w+ .*)   #     a line *starts* with alphanum.
        z^[ ]*(#.*)?$ú<string>c                    s  |  ¡ }|  |¡‰ ˆ dkr8d ‡ fdd„| d¡D ƒ¡}g }d\}}| j |¡D ]š}| ||| ¡ … ¡ || d|| ¡ ¡7 }|  	|||¡\}}}	}
|  
|¡sÈ| t||	|
|ˆ t| d¡ƒ |d�¡ || d| ¡ | ¡ ¡7 }| ¡ }qP| ||d … ¡ |S )Nr"   rF   c                    s   g | ]}|ˆ d … ‘qS rl   r,   ©Ú.0Úl©Z
min_indentr,   r-   Ú
<listcomp>  s     z'DocTestParser.parse.<locals>.<listcomp>©r"   r"   r^   )r¨   r^   r©   )Ú
expandtabsÚ_min_indentr¢   rt   Ú_EXAMPLE_REÚfinditerÚappendr…   ÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTr   r)   Úgroupr†   )rj   Ústringr+   ÚoutputZcharnor¨   Úmr§   r©   rw   rª   r,   r½   r-   Úparses  s*    
ÿ

ý
zDocTestParser.parsec                 C   s   t |  ||¡|||||ƒS rl   )r   Úget_examples)rj   rÉ   r1   r+   rT   r¨   r,   r,   r-   Úget_doctestš  s    	   ÿzDocTestParser.get_doctestc                 C   s   dd„ |   ||¡D ƒS )Nc                 S   s   g | ]}t |tƒr|‘qS r,   )r9   r   )r»   Úxr,   r,   r-   r¾   ±  s    
ÿz.DocTestParser.get_examples.<locals>.<listcomp>)rÌ   )rj   rÉ   r+   r,   r,   r-   rÍ   ¦  s    zDocTestParser.get_examplesc           
         s
  t | d¡ƒ‰ | d¡ d¡}|  |ˆ ||¡ |  |dd … dˆ  d ||¡ d ‡ fdd„|D ƒ¡}| d	¡}| d¡}t |ƒdkrœt d
|d ¡rœ|d= |  |dˆ  ||t |ƒ ¡ d ‡ fdd„|D ƒ¡}| j |¡}|rì| d¡}nd }|  	|||¡}	||	||fS )Nr^   r§   rF   r&   rZ   r‚   c                    s   g | ]}|ˆ d  d… ‘qS )rY   Nr,   )r»   Zsl©r^   r,   r-   r¾   Ç  s     z0DocTestParser._parse_example.<locals>.<listcomp>rw   z *$rr   c                    s   g | ]}|ˆ d … ‘qS rl   r,   )r»   ZwlrÐ   r,   r-   r¾   Ò  s     r„   )
r)   rÈ   rt   Ú_check_prompt_blankÚ_check_prefixr¢   r[   ÚmatchÚ_EXCEPTION_REÚ_find_options)
rj   rË   r+   r¨   Úsource_linesr§   rw   Ú
want_linesrª   r©   r,   rÐ   r-   rÆ   ´  s&     


ÿzDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c           	      C   s¬   i }| j  |¡D ]v}| d¡ dd¡ ¡ }|D ]V}|d dksN|dd … tkrdtd|d ||f ƒ‚t|dd …  }|d dk||< q.q|r¨|  |¡r¨td|||f ƒ‚|S )	Nr&   ú,rZ   r"   z+-z7line %r of the doctest for %s has an invalid option: %rú+zSline %r of the doctest for %s has an option directive on a line with no example: %r)Ú_OPTION_DIRECTIVE_RErÃ   rÈ   rG   rt   r'   rŸ   rÇ   )	rj   r§   r+   r¨   r©   rË   Zoption_stringsÚoptionÚflagr,   r,   r-   rÕ   ê  s"    ÿþþzDocTestParser._find_optionsz^([ ]*)(?=\S)c                 C   s2   dd„ | j  |¡D ƒ}t|ƒdkr*t|ƒS dS d S )Nc                 S   s   g | ]}t |ƒ‘qS r,   )r)   )r»   r^   r,   r,   r-   r¾   
  s     z-DocTestParser._min_indent.<locals>.<listcomp>r"   )Ú
_INDENT_REÚfindallr)   Úmin)rj   r]   Úindentsr,   r,   r-   rÁ     s    zDocTestParser._min_indentc              	   C   s^   t |ƒD ]P\}}t|ƒ|d kr||d  dkrtd|| d ||||d … |f ƒ‚qd S )NrY   rK   rZ   z8line %r of the docstring for %s lacks blank after %s: %rr&   )Ú	enumerater)   rŸ   )rj   Úlinesr^   r+   r¨   r‡   r   r,   r,   r-   rÑ     s      ÿþz!DocTestParser._check_prompt_blankc                 C   s>   t |ƒD ]0\}}|r| |¡std|| d ||f ƒ‚qd S )NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&   )rá   ru   rŸ   )rj   râ   Úprefixr+   r¨   r‡   r   r,   r,   r-   rÒ     s
    þzDocTestParser._check_prefixN)r¹   )r¹   )r6   rp   rq   r[   ÚcompileÚ	MULTILINEÚVERBOSErÂ   ÚDOTALLrÔ   rÓ   rÇ   rÌ   rÎ   rÍ   rÆ   rÚ   rÕ   rÝ   rÁ   rÑ   rÒ   r,   r,   r,   r-   r   C  s&   	
õõ
'
3ÿc                   @   sJ   e Zd Zdeƒ ddfdd„Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )r   FTc                 C   s   || _ || _|| _|| _d S rl   )Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rj   ÚverboseÚparserÚrecurseÚexclude_emptyr,   r,   r-   r�   7  s    zDocTestFinder.__init__Nc           	   	   C   sN  |d kr.t |dd ƒ}|d kr.tdt|ƒf ƒ‚|dkr<d }n|d krNt |¡}zt |¡}W n tk
rt   d }Y ndX |s t |¡}|d |dd …  dks d }|d kr®d }n*|d k	rÆt 	||j
¡}n
t 	|¡}|sØd }|d krú|d krîi }n
|j
 ¡ }n| ¡ }|d k	�r| |¡ d|k�r(d|d< g }|  ||||||i ¡ | ¡  |S )Nr6   zJDocTestFinder.find: name must be given when obj.__name__ doesn't exist: %rFr"   éþÿÿÿz<]>rœ   )r0   rŸ   r«   r7   Ú	getmoduleZgetsourcefilerB   ZgetfileÚ	linecacheÚgetlinesÚ__dict__r´   ÚupdateÚ_findÚsort)	rj   Úobjr+   rC   r1   Ú
extraglobsr`   rÖ   Útestsr,   r,   r-   rv   M  sL    $þ


 



zDocTestFinder.findc                 C   sÂ   |d krdS t  |¡d k	r(|t  |¡kS t  |¡r>|j|jkS t  |¡r|t|dƒr\|jj}nt|dƒrn|j}ndS |j	|kS t  
|¡r’|j	|jkS t|dƒr¨|j	|jkS t|tƒr¶dS tdƒ‚d S )NTÚ__objclass__rp   z"object must be a class or function)r7   rñ   Ú
isfunctionrô   Ú__globals__ZismethoddescriptorrP   rû   rp   r6   Úisclassr9   ÚpropertyrŸ   )rj   rC   ÚobjectZobj_modr,   r,   r-   Ú_from_module³  s(    








zDocTestFinder._from_modulec              
   C   s  | j rtd| ƒ t|ƒ|kr"d S d|t|ƒ< |  |||||¡}|d k	rR| |¡ t |¡r¾| jr¾|j 	¡ D ]P\}	}
d||	f }	t 
t |
¡¡sšt |
¡rl|  ||
¡rl|  ||
|	||||¡ qlt |¡�rn| j�rnt|di ƒ 	¡ D ]Š\}	}
t|	tƒ�stdt|	ƒf ƒ‚t 
|
¡�sJt |
¡�sJt |
¡�sJt|
tƒ�sJtdt|
ƒf ƒ‚d||	f }	|  ||
|	||||¡ qât |¡�r| j�r|j 	¡ D ]Œ\}	}
t|
tƒ�rªt||	ƒ}
t|
tƒ�rÂt||	ƒj}
t 
|
¡�sæt |
¡�sæt|
tƒ�rŒ|  ||
¡�rŒd||	f }	|  ||
|	||||¡ �qŒd S )NzFinding tests in %sr&   z%s.%sÚ__test__z5DocTestFinder.find: __test__ keys must be strings: %rz`DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: %rz%s.__test__.%s)ré   Úprintr·   Ú	_get_testrÄ   r7   r8   rê   rô   ÚitemsZ	isroutineZunwraprþ   r  rö   r0   r9   r:   rŸ   r«   ÚstaticmethodÚclassmethodÚ__func__rÿ   )rj   rú   rø   r+   rC   rÖ   r1   ÚseenÚtestZvalnameÚvalr,   r,   r-   rö   Ï  sn    
ÿ
þ ÿþÿÿý ÿ
ÿ
þ ÿzDocTestFinder._findc           	   	   C   sÄ   t |tƒr|}nJz,|jd kr"d}n|j}t |tƒs:t|ƒ}W n ttfk
rX   d}Y nX |  ||¡}| jrt|std S |d kr‚d }n.t|dd ƒp’|j}|dd … dkr°|d d… }| j	 
|||||¡S )Nr�   r›   éüÿÿÿú.pycrr   )r9   r:   Ú__doc__rB   ÚAttributeErrorÚ_find_linenorë   r0   r6   rè   rÎ   )	rj   rø   r+   rC   r1   rÖ   r³   r¨   rT   r,   r,   r-   r    s,    




 ÿzDocTestFinder._get_testc                 C   s  d }t  |¡rd}t  |¡rb|d kr(d S t dt|ddƒ ¡}t|ƒD ]\}}| |¡rF|} qbqFt  |¡rr|j	}t  
|¡r‚|j}t  |¡r’|j}t  |¡r¢|j}t  |¡r¼t|dd ƒd }|d k	�r
|d krÖ|d S t d¡}t|t|ƒƒD ]}| || ¡rî|  S qîd S )Nr"   z^\s*class\s*%s\br6   ú-Úco_firstlinenor&   z(^|.*:)\s*\w*("|\'))r7   r8   rþ   r[   rä   r0   rá   rÓ   Zismethodr  rü   Ú__code__ZistracebackÚtb_frameZisframeÚf_codeZiscodeÚranger)   )rj   rø   rÖ   r¨   Zpatr‡   r   r,   r,   r-   r  4  s>    


ÿ

 
 
 
 



zDocTestFinder._find_lineno)NNNN)
r6   rp   rq   r   r�   rv   r  rö   r  r  r,   r,   r,   r-   r   .  s   	 ÿ

f?&c                   @   s‚   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze d¡Zddd„Zd dd„Zd!dd„Zdd„ ZdS )"r   zF**********************************************************************Nr"   c                 C   sN   |pt ƒ | _|d krdtjk}|| _|| _|| _d| _d| _i | _	t
ƒ | _d S )Nú-vr"   )r   Ú_checkerr>   r£   ré   ÚoptionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrg   Ú_fakeout)rj   Úcheckerrì   r  r,   r,   r-   r�   ¤  s    
zDocTestRunner.__init__c                 C   sH   | j rD|jr.|dt|jƒ d t|jƒ ƒ n|dt|jƒ d ƒ d S )NzTrying:
zExpecting:
zExpecting nothing
)ré   rw   r_   r§   )rj   r‘   r
  Úexampler,   r,   r-   Úreport_startÈ  s    ÿÿÿzDocTestRunner.report_startc                 C   s   | j r|dƒ d S )Nzok
)ré   ©rj   r‘   r
  r   rx   r,   r,   r-   Úreport_successÕ  s    zDocTestRunner.report_successc                 C   s&   ||   ||¡| j ||| j¡ ƒ d S rl   )Ú_failure_headerr  Úoutput_differencer  r"  r,   r,   r-   Úreport_failureÝ  s    ÿzDocTestRunner.report_failurec                 C   s$   ||   ||¡d tt|ƒƒ ƒ d S )NzException raised:
)r$  r_   rf   ©rj   r‘   r
  r   rd   r,   r,   r-   Úreport_unexpected_exceptionä  s
    ÿ
ÿz)DocTestRunner.report_unexpected_exceptionc                 C   s”   | j g}|jrR|jd k	r4|jd k	r4|j|j d }nd}| d|j||jf ¡ n| d|jd |jf ¡ | d¡ |j}| t|ƒ¡ d |¡S )Nr&   ú?zFile "%s", line %s, in %szLine %s, in %szFailed example:rF   )ÚDIVIDERrT   r¨   rÄ   r+   r§   r_   r¢   )rj   r
  r   r‘   r¨   r§   r,   r,   r-   r$  ë  s    ÿ
zDocTestRunner._failure_headerc              	   C   s†  d }}| j }tdƒ\}}}	| jj}
t|jƒD �]6\}}| j t@ oH|dk}|| _ |jrŽ|j ¡ D ],\}}|r||  j |O  _ q`|  j | M  _ q`| j t	@ ršq.|d7 }|s´|  
|||¡ d|j|f }z,tt|j|d|dƒ|jƒ | j ¡  d }W n4 tk
�r   ‚ Y n   t ¡ }| j ¡  Y nX | j ¡ }| j d¡ |}|d k�r`|
|j|| j ƒ�rÜ|}n|tj|d d… Ž d }|�sˆ|t|ƒ7 }|jd k�rš|	}nB|
|j|| j ƒ�r²|}n*| j t@ �rÜ|
t|jƒt|ƒ| j ƒ�rÜ|}||k�rþ|�sR|  ||||¡ nT||k�r(|�s|   ||||¡ |d7 }n*||	k�rR|�sH|  !||||¡ |d7 }n |r.| j t"@ r. �qhq.|| _ |  #|||¡ t$||ƒS )Nr"   rK   r&   z<doctest %s[%d]>Zsingler4   rr   )%r  r  r  Úcheck_outputrá   r²   r   r©   r  r   r!  r+   Úexecrä   r§   r1   Údebuggerr•   ÚKeyboardInterruptr>   rd   r  rc   rn   rw   ra   Úformat_exception_onlyrf   rª   r   rˆ   r#  r&  r(  r   Ú_DocTestRunner__record_outcomer%   )rj   r
  Úcompileflagsr‘   r  r  r  ÚSUCCESSÚFAILUREZBOOMZcheckÚ
examplenumr   ÚquietZ
optionflagr  rT   Z	exceptionrx   Zoutcomerª   r,   r,   r-   Z__runÿ  sŽ    
ÿ
 ÿÿ



þ




ÿ
zDocTestRunner.__runc                 C   sL   | j  |jd¡\}}|| || f| j |j< |  j|7  _|  j|7  _d S )Nr¿   )r  r/   r+   r  r  )rj   r
  rW   ÚtÚf2Út2r,   r,   r-   Z__record_outcome|  s    zDocTestRunner.__record_outcomez.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$c                 C   sV   | j  |¡}|rF| d¡| jjkrF| jjt| d¡ƒ }|jjdd�S |  	||¡S d S )Nr+   r4  T©Úkeepends)
Ú%_DocTestRunner__LINECACHE_FILENAME_RErÓ   rÈ   r
  r+   r²   Úintr§   Ú
splitlinesÚsave_linecache_getlines)rj   rT   Úmodule_globalsrË   r   r,   r,   r-   Z__patched_linecache_getlines‰  s
    z*DocTestRunner.__patched_linecache_getlinesTc           	   	      s  || _ |d krt|jƒ}tj‰|d krVˆj‰ ˆ d ks@ˆ  ¡ dkrHˆj}n‡ ‡fdd„}| jt_t 	¡ }t
j}tˆƒ| _| j ¡  | jjt
_tj| _| jt_tj}tjt_z|  |||¡W ¢S ˆt_|t
_t |¡ | jt_|t_|� rþ|j ¡  dd l}d |_X d S )Núutf-8c                    s    t |  ˆ d¡ˆ ƒ} ˆ | ¡ d S )NÚbackslashreplace)r:   ÚencodeÚwrite)r]   ©rN   r™   r,   r-   r‘   ±  s    zDocTestRunner.run.<locals>.outr"   )r
  r3   r1   r>   rŠ   rN   ÚlowerrC  r  ÚgettracerŽ   r“   r‰   r-  Úresetrò   ró   r>  Ú*_DocTestRunner__patched_linecache_getlinesÚdisplayhookÚ__displayhook__ÚsettraceÚclearÚbuiltinsÚ_Ú_DocTestRunner__run)	rj   r
  r1  r‘   Úclear_globsZ
save_traceZsave_set_traceZsave_displayhookrM  r,   rD  r-   Úrun‘  s<    





zDocTestRunner.runc                 C   s’  |d kr| j }g }g }g }d }}| j ¡ D ]V}|\}\}	}
||
7 }||	7 }|
dkr`| |¡ q,|	dkrx| ||
f¡ q,| |¡ q,|rî|r¶tt|ƒdƒ | ¡  |D ]}td|ƒ q¦|rîtt|ƒdƒ | ¡  |D ]\}}td||f ƒ qÔ|�r:t| jƒ tt|ƒdƒ | ¡  |D ] \}\}	}
td|	|
|f ƒ �q|�rft|dt| jƒd	ƒ t|| d
|dƒ |�rztd|dƒ n|�rˆtdƒ t||ƒS )Nr"   zitems had no tests:z   zitems passed all tests:z %3d tests in %szitems had failures:z %3d of %3d in %sztests inzitems.z
passed andzfailed.z***Test Failed***z	failures.zTest passed.)	ré   r  r  rÄ   r  r)   r÷   r*  r%   )rj   rì   ZnotestsZpassedZfailedZtotaltZtotalfrÏ   r+   rW   r6  ÚthingrÅ   r,   r,   r-   Ú	summarizeÚ  sP    
zDocTestRunner.summarizec                 C   sR   | j }|j  ¡ D ]<\}\}}||kr@|| \}}|| }|| }||f||< qd S rl   )r  r  )rj   r®   Údr+   rW   r6  r7  r8  r,   r,   r-   Úmerge  s    zDocTestRunner.merge)NNr"   )N)NNT)N)r6   rp   rq   r*  r�   r!  r#  r&  r(  r$  rO  r0  r[   rä   r;  rH  rQ  rS  rU  r,   r,   r,   r-   r   h  s   :
$}



I
9c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c                 C   s   t | dd¡dƒS )NÚASCIIrA  )r:   rB  )rj   r]   r,   r,   r-   Ú_toAscii(  s    zOutputChecker._toAsciic                 C   sÌ   |   |¡}|   |¡}||kr dS |t@ sH||fdkr8dS ||fdkrHdS |t@ s‚t dt t¡ d|¡}t dd|¡}||kr‚dS |t@ r²d | 	¡ ¡}d | 	¡ ¡}||kr²dS |t
@ rÈt||ƒrÈdS dS )	NT)zTrue
z1
)zFalse
z0
z(?m)^%s\s*?$r�   z(?m)^[^\S\n]+$rZ   F)rW  r   r   r[   r\   ÚescapeÚBLANKLINE_MARKERr   r¢   rt   r   r|   ©rj   rw   rx   r  r,   r,   r-   r+  .  s4    

 ÿ
zOutputChecker.check_outputc                 C   s<   |t tB tB @ sdS |t@ r dS | d¡dko:| d¡dkS )NFTrF   r4   )r	   r
   r   rÅ   rZ  r,   r,   r-   Ú_do_a_fancy_diffm  s    ÿþzOutputChecker._do_a_fancy_diffc           
      C   s(  |j }|t@ st dt|¡}|  |||¡rà|jdd�}|jdd�}|t@ rptj	||dd�}t
|ƒdd … }d}nZ|t@ ržtj||dd�}t
|ƒdd … }d}n,|t@ rÊtjtjd�}	t
|	 ||¡ƒ}d	}n d
| td |¡ƒ S |rü|rüdt|ƒt|ƒf S |�rdt|ƒ S |�r dt|ƒ S dS d S )Nz(?m)^[ ]*(?=
)Tr9  r4   )Únz#unified diff with -expected +actualz-context diff with expected followed by actual)Zcharjunkzndiff with -expected +actualzDifferences (%s):
r�   zExpected:
%sGot:
%szExpected:
%sGot nothing
zExpected nothing
Got:
%szExpected nothing
Got nothing
)rw   r   r[   r\   rY  r[  r=  r	   ÚdifflibZunified_diffÚlistr
   Zcontext_diffr   ZDifferZIS_CHARACTER_JUNKZcomparer_   r¢   )
rj   r   rx   r  rw   r×   Z	got_linesZdiffZkindZenginer,   r,   r-   r%  „  s4    zOutputChecker.output_differenceN)r6   rp   rq   rW  r+  r[  r%  r,   r,   r,   r-   r      s   ?c                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s   || _ || _|| _d S rl   )r
  r   rx   )rj   r
  r   rx   r,   r,   r-   r�   ½  s    zDocTestFailure.__init__c                 C   s
   t | jƒS rl   ©r:   r
  r–   r,   r,   r-   Ú__str__Â  s    zDocTestFailure.__str__N©r6   rp   rq   r�   r`  r,   r,   r,   r-   r   ²  s   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s   || _ || _|| _d S rl   )r
  r   rd   )rj   r
  r   rd   r,   r,   r-   r�   Ð  s    zUnexpectedException.__init__c                 C   s
   t | jƒS rl   r_  r–   r,   r,   r-   r`  Õ  s    zUnexpectedException.__str__Nra  r,   r,   r,   r-   r   Å  s   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
r   NTc                 C   s$   t  | |||d¡}|r |j ¡  |S )NF)r   rQ  r1   rL  )rj   r
  r1  r‘   rP  Úrr,   r,   r-   rQ  3  s    
zDebugRunner.runc                 C   s   t |||ƒ‚d S rl   )r   r'  r,   r,   r-   r(  9  s    z'DebugRunner.report_unexpected_exceptionc                 C   s   t |||ƒ‚d S rl   )r   r"  r,   r,   r-   r&  <  s    zDebugRunner.report_failure)NNT)r6   rp   rq   rQ  r(  r&  r,   r,   r,   r-   r   Ø  s   [
TFc	                 C   s¶   | d krt j d¡} t | ¡s,td| f ƒ‚|d kr:| j}t|d�}	|rVt||d�}
nt	||d�}
|	j
| |||d�D ]}|
 |¡ qt|r�|
 ¡  td krž|
an
t |
¡ t|
j|
jƒS )Nrœ   ztestmod: module required; %r)rï   ©rì   r  ©r1   rù   )r>   r?   r/   r7   r8   rB   r6   r   r   r   rv   rQ  rS  ÚmasterrU  r%   r  r  )rË   r+   r1   rì   Úreportr  rù   Úraise_on_errorrï   ÚfinderÚrunnerr
  r,   r,   r-   r   H  s$    E


c                 C   sÞ   |r|st dƒ‚t| |||pdƒ\}} |d kr:tj | ¡}|d krHi }n| ¡ }|d k	rb| |¡ d|krrd|d< |	r„t||d�}nt||d�}|
 	|||| d¡}| 
|¡ |r¸| ¡  td krÆ|an
t |¡ t|j|jƒS )Nú8Package may only be specified for module-relative paths.r@  r6   rœ   rc  r"   )rŸ   rX   r    r¡   Úbasenamer´   rõ   r   r   rÎ   rQ  rS  re  rU  r%   r  r  )rT   rV   r+   rU   r1   rì   rf  r  rù   rg  rí   rN   Útextri  r
  r,   r,   r-   r   °  s2    Rÿ


ÚNoNamec           	      C   s@   t |dd�}t||d�}|j| ||d�D ]}|j||d� q(d S )NF)rì   rî   rc  )r1   )r1  )r   r   rv   rQ  )	rW   r1   rì   r+   r1  r  rh  ri  r
  r,   r,   r-   r   +  s    c                 C   s"   | t @ | krtd| ƒ‚t}| a|S )NzOnly reporting flags allowed)r   rŸ   Ú_unittest_reportflags)r2   Úoldr,   r,   r-   r   H  s
    
c                   @   sl   e Zd Zd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ejZdd„ ZdS )ÚDocTestCaser"   Nc                 C   s.   t j | ¡ || _|| _|| _|| _|| _d S rl   )ÚunittestÚTestCaser�   Ú_dt_optionflagsÚ_dt_checkerÚ_dt_testÚ	_dt_setUpÚ_dt_tearDown)rj   r
  r  ÚsetUpÚtearDownr  r,   r,   r-   r�   n  s    zDocTestCase.__init__c                 C   s   | j }| jd k	r|  |¡ d S rl   )ru  rv  ©rj   r
  r,   r,   r-   rx  x  s    
zDocTestCase.setUpc                 C   s(   | j }| jd k	r|  |¡ |j ¡  d S rl   )ru  rw  r1   rL  rz  r,   r,   r-   ry  ~  s    

zDocTestCase.tearDownc                 C   s~   | j }tj}tƒ }| j}|t@ s(|tO }t|| jdd�}z d|_	|j
||jdd�\}}W 5 |t_X |rz|  |  | ¡ ¡¡‚d S )NF©r  r  rì   zF----------------------------------------------------------------------)r‘   rP  )ru  r>   rŠ   r#   rs  r   rn  r   rt  r*  rQ  rC  ZfailureExceptionÚformat_failurerc   )rj   r
  ro  Únewr  ri  r  r  r,   r,   r-   ÚrunTest†  s(     ÿ  ÿzDocTestCase.runTestc                 C   sP   | j }|jd krd}n
d|j }d |j d¡dd … ¡}d|j|j|||f S )Nzunknown line numberz%sr‚   rr   z:Failed doctest test for %s
  File "%s", line %s, in %s

%s)ru  r¨   r¢   r+   rt   rT   )rj   Úerrr
  r¨   Zlnamer,   r,   r-   r|  ž  s    

þzDocTestCase.format_failurec                 C   s6   |   ¡  t| j| jdd�}|j| jdd� |  ¡  d S )NFr{  )rP  )rx  r   rs  rt  rQ  ru  ry  )rj   ri  r,   r,   r-   r!   ª  s    B ÿzDocTestCase.debugc                 C   s   | j jS rl   ©ru  r+   r–   r,   r,   r-   r·   ò  s    zDocTestCase.idc                 C   sP   t | ƒt |ƒk	rtS | j|jkoN| j|jkoN| j|jkoN| j|jkoN| j|jkS rl   )r«   r¬   ru  rs  rv  rw  rt  r­   r,   r,   r-   r¯   õ  s    
ÿ
þ
ý
üzDocTestCase.__eq__c                 C   s   t | j| j| j| jfƒS rl   )r°   rs  rv  rw  rt  r–   r,   r,   r-   r±   ÿ  s    ÿzDocTestCase.__hash__c                 C   s,   | j j d¡}d|d d |d d… ¡f S )Nr‚   z%s (%s)rr   )ru  r+   rt   r¢   )rj   r+   r,   r,   r-   r¶   	  s    zDocTestCase.__repr__c                 C   s   d| j j S )Nz	Doctest: r€  r–   r,   r,   r-   ÚshortDescription		  s    zDocTestCase.shortDescription)r"   NNN)r6   rp   rq   r�   rx  ry  r~  r|  r!   r·   r¯   r±   r¶   r   r`  r�  r,   r,   r,   r-   rp  l  s     ÿ

H
rp  c                   @   s0   e Zd Zdd„ Zdd„ Zdd„ Zdd„ ZeZd	S )
ÚSkipDocTestCasec                 C   s   || _ t | d ¡ d S rl   )rC   rp  r�   )rj   rC   r,   r,   r-   r�   	  s    zSkipDocTestCase.__init__c                 C   s   |   d¡ d S )Nz-DocTestSuite will not work with -O2 and above)ZskipTestr–   r,   r,   r-   rx  	  s    zSkipDocTestCase.setUpc                 C   s   d S rl   r,   r–   r,   r,   r-   Ú	test_skip	  s    zSkipDocTestCase.test_skipc                 C   s   d| j j S )NzSkipping tests from %s)rC   r6   r–   r,   r,   r-   r�  	  s    z SkipDocTestCase.shortDescriptionN)r6   rp   rq   r�   rx  rƒ  r�  r`  r,   r,   r,   r-   r‚  	  s
   r‚  c                   @   s   e Zd Zdd„ ZdS )Ú_DocTestSuitec                 C   s   d S rl   r,   )rj   Úindexr,   r,   r-   Ú_removeTestAtIndex	  s    z _DocTestSuite._removeTestAtIndexN)r6   rp   rq   r†  r,   r,   r,   r-   r„  	  s   r„  c           	      K   sº   |d krt ƒ }t| ƒ} |j| ||d�}|sNtjjdkrNtƒ }| t| ƒ¡ |S | 	¡  tƒ }|D ]T}t
|jƒdkrtq`|js¢| j}|dd … dkrœ|d d… }||_| t|f|Ž¡ q`|S )Nrd  r4   r"   r  r  rr   )r   rD   rv   r>   r2   Úoptimizer„  ÚaddTestr‚  r÷   r)   r²   rT   r›   rp  )	rC   r1   rù   Ztest_finderr©   rú   Úsuiter
  rT   r,   r,   r-   r   #	  s(    %c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚDocFileCasec                 C   s   d  | jj d¡¡S )NrN  r‚   )r¢   ru  r+   rt   r–   r,   r,   r-   r·   e	  s    zDocFileCase.idc                 C   s   | j jS rl   )ru  rT   r–   r,   r,   r-   r¶   h	  s    zDocFileCase.__repr__c                 C   s   d| j j| j j|f S )Nz2Failed doctest test for %s
  File "%s", line 0

%s)ru  r+   rT   )rj   r  r,   r,   r-   r|  k	  s    ÿzDocFileCase.format_failureN)r6   rp   rq   r·   r¶   r|  r,   r,   r,   r-   rŠ  c	  s   rŠ  c           
      K   sv   |d kri }n|  ¡ }|r&|s&tdƒ‚t| |||p4dƒ\}} d|krL| |d< tj | ¡}| |||| d¡}	t|	f|ŽS )Nrj  r@  r›   r"   )r´   rŸ   rX   r    r¡   rk  rÎ   rŠ  )
r¡   rV   rU   r1   rí   rN   r©   Údocr+   r
  r,   r,   r-   ÚDocFileTestp	  s    ÿrŒ  c                  O   sD   t ƒ }| dd¡r$t| d¡ƒ|d< | D ]}| t|f|Ž¡ q(|S )NrV   TrU   )r„  r/   rD   rˆ  rŒ  )ÚpathsÚkwr‰  r¡   r,   r,   r-   r   Š	  s    8c                 C   sÎ   g }t ƒ  | ¡D ]x}t|tƒrh| |jd d… ¡ |j}|rˆ| d¡ |dd„ | d¡d d… D ƒ7 }q|dd„ | d¡d d… D ƒ7 }q|r¤|d dkr¤| ¡  qŠ|rÀ|d dkrÀ| d¡ q¤d 	|¡d S )	Nrr   z# Expected:c                 S   s   g | ]}d | ‘qS )z## r,   rº   r,   r,   r-   r¾   
  s     z(script_from_examples.<locals>.<listcomp>rF   c                 S   s   g | ]}t |ƒ‘qS r,   )r€   rº   r,   r,   r-   r¾   
  s   ÿr}   r"   )
r   rÌ   r9   r   rÄ   r§   rw   rt   Úpopr¢   )r]   rÊ   Zpiecerw   r,   r,   r-   r   Ó	  s     :

"ÿ

c                    sJ   t | ƒ} tƒ  | ¡}‡ fdd„|D ƒ}|s4tˆ dƒ‚|d }t|jƒ}|S )Nc                    s   g | ]}|j ˆ kr|‘qS r,   r*   )r»   r6  r*   r,   r-   r¾   .
  s     
 ztestsource.<locals>.<listcomp>znot found in testsr"   )rD   r   rv   rŸ   r   r³   )rC   r+   rú   r
  Útestsrcr,   r*   r-   r   %
  s    

c                 C   s   t | ƒ}t|||ƒ d S rl   )r   Údebug_script)ÚsrcÚpmr1   r�  r,   r,   r-   r    5
  s    c                 C   s”   dd l }|r| ¡ }ni }|rvzt| ||ƒ W q�   tt ¡ d ƒ |jdd�}| ¡  | d t ¡ d ¡ Y q�X n|jdd� 	d|  ||¡ d S )Nr"   r&   T)r‹   r4   zexec(%r))
rŽ   r´   r,  r  r>   rd   r�   rG  ZinteractionrQ  )r’  r“  r1   rŽ   Úpr,   r,   r-   r‘  :
  s    
r‘  c                 C   s$   t | ƒ} t| |ƒ}t||| jƒ d S rl   )rD   r   r‘  rô   )rC   r+   r“  r�  r,   r,   r-   r!   N
  s    
c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
_TestClassc                 C   s
   || _ d S rl   ©r  )rj   r  r,   r,   r-   r�   j
  s    z_TestClass.__init__c                 C   s   | j d | _ | S )Nr4   r–  r–   r,   r,   r-   Úsquaret
  s    z_TestClass.squarec                 C   s   | j S rl   r–  r–   r,   r,   r-   r/   ~
  s    z_TestClass.getN)r6   rp   rq   r�   r—  r/   r,   r,   r,   r-   r•  \
  s   

r•  zÄ
                      Example of a string object, searched as-is.
                      >>> x = 1; y = 2
                      >>> x + y, x * y
                      (3, 2)
                      aÜ  
                                    In 2.2, boolean expressions displayed
                                    0 or 1.  By default, we still accept
                                    them.  This can be disabled by passing
                                    DONT_ACCEPT_TRUE_FOR_1 to the new
                                    optionflags argument.
                                    >>> 4 == 4
                                    1
                                    >>> 4 == 4
                                    True
                                    >>> 4 > 4
                                    0
                                    >>> 4 > 4
                                    False
                                    zç
                Blank lines can be marked with <BLANKLINE>:
                    >>> print('foo\n\nbar\n')
                    foo
                    <BLANKLINE>
                    bar
                    <BLANKLINE>
            zú
                If the ellipsis flag is used, then '...' can be used to
                elide substrings in the desired output:
                    >>> print(list(range(1000))) #doctest: +ELLIPSIS
                    [0, 1, 2, ..., 999]
            aƒ  
                If the whitespace normalization flag is used, then
                differences in whitespace are ignored.
                    >>> print(list(range(30))) #doctest: +NORMALIZE_WHITESPACE
                    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
                     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
                     27, 28, 29]
            )r•  rÉ   zbool-int equivalencezblank linesZellipsiszwhitespace normalizationc                  C   s"  dd l } | jdd�}|jdddddd	� |jd
ddt ¡ g dd� |jddddd� |jdddd� | ¡ }|j}|j}d}|jD ]}|t| O }q‚|j	r¢|t
O }|D ]v}| d¡rþtj |¡\}}tj d|¡ t|d d… ƒ}	tjd= t|	||d�\}
}nt|d||d�\}
}|
r¦ dS q¦dS )Nr"   zdoctest runner)Zdescriptionr  z	--verboseÚ
store_trueFz'print very verbose output for all tests)ÚactionÚdefaultÚhelpz-oz--optionrÄ   zqspecify a doctest option flag to apply to the test run; may be specified more than once to apply multiple options)r™  Úchoicesrš  r›  z-fz--fail-fastzystop running tests after first failure (this is a shorthand for -o FAIL_FAST, and is in addition to any other -o options))r™  r›  r`   rÙ   z file containing the tests to run)Únargsr›  z.pyéýÿÿÿrc  )rV   rì   r  r&   )ÚargparseÚArgumentParserÚadd_argumentr'   ÚkeysÚ
parse_argsr`   rì   rÛ   Z	fail_fastr   ri   r    r¡   rt   r>   Úinsertr;   r   r   )rŸ  rí   r˜   Z	testfilesrì   r©   rÛ   rT   ÚdirnamerË   r  rN  r,   r,   r-   Ú_test»
  sL    ÿ
 þ
ÿÿ

 ÿ
r¦  rœ   )r4   )rY   )	NNNNTr"   NFF)Frm  Nr"   )NNNN)FN)FN)F)RZ__docformat__Ú__all__r.   r]  r7   rò   r    rŽ   r[   r>   ra   rq  Úior#   Úcollectionsr$   r%   r'   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   rY  rs   r3   rD   rJ   rX   r_   rf   rg   r|   r€   rˆ   r�   r‰   rO   r   r   r   r   r   r   Ú	Exceptionr   r   r   re  r   r   r   rn  r   rr  rp  r‚  Z	TestSuiter„  r   rŠ  rŒ  r   r   r   r    r‘  r!   r•  r  r¦  r6   Úexitr,   r,   r,   r-   Ú<module>0   sD  Ö-
ÿþýüûÿþýü

1%.DK l  <   ; n         þ
h     ý
{    ÿ
$ !
@ þ
IR


,	Ø3-
