
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \Ç— ã            !   @   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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#dpd.d/„Z$d0d1„ Z%dqd3d4„Z&d5d6„ Z'G d7d8„ d8eƒZ(d9d:„ Z)d;d<„ Z*d=d>„ Z+G d?d@„ d@ej,ƒZ-dAdB„ Z.G dCd„ dƒZ/G dDd„ dƒZ0G dEd„ dƒZ1G dFd„ dƒZ2G dGd„ dƒZ3G dHd„ dƒZ4G dId„ de5ƒZ6G dJd„ de5ƒZ7G dKd„ de3ƒZ8d#a9drdNd„Z:dLd#d#d#d#dLd"d#dMe1ƒ d#fdOd„Z;dsdQd„Z<d"a=dRd„ Z>G dSdT„ dTej?ƒZ@G dUdV„ dVe@ƒZAG dWdX„ dXejBƒZCdtdYd„ZDG dZd[„ d[e@ƒZEdLd#d#e1ƒ d#fd\d]„ZFd^d„ ZGd_d„ ZHd`d„ ZIdudad „ZJdvdbdc„ZKdwddd!„ZLG dedf„ dfƒZMeMdgdhdidjdkdlœZNdmdn„ ZOePdok�rle
jQeOƒ ƒ d#S )xz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 j| dtt ƒ> ƒS )Né   )ÚOPTIONFLAGS_BY_NAMEÚ
setdefaultÚlen)Úname© r+   ú/usr/lib64/python3.6/doctest.pyr   …   s    z<BLANKLINE>z...c             C   s<   d}x2t jD ](}| j|d ƒ}|tt |ƒkr||jO }qW |S )Nr"   )Ú
__future__Zall_feature_namesÚgetÚgetattrZcompiler_flag)ÚglobsÚflagsZfnameZfeaturer+   r+   r,   Ú_extract_future_flags¸   s    r2   é   c             C   sV   t j| ƒr| S t| tƒr,t| tƒ tƒ dgƒS | d krJtjtj	|ƒ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    


rC   c          	   C   s€   |r\t |dƒ}t|| ƒ} t|dd ƒd k	r\t|jdƒr\|jj| ƒ}|j|ƒ}|jtj	dƒ| fS t
| |d��}|jƒ | fS Q R X d S )Né   Ú
__loader__Úget_dataÚ
)Úencoding)rC   Ú_module_relative_pathr/   ÚhasattrrE   rF   ÚdecodeÚreplaceÚosÚlinesepÚopenÚread)ÚfilenameÚpackageÚmodule_relativerH   Zfile_contentsÚfr+   r+   r,   Ú_load_testfile×   s    


rU   é   c             C   s   t jd|d | ƒS )Nz
(?m)^(?!$)ú )ÚreÚsub)ÚsÚindentr+   r+   r,   Ú_indentå   s    r\   c             C   s*   t ƒ }| \}}}tj||||d� |jƒ S )N)Úfile)r#   Ú	tracebackÚprint_exceptionÚgetvalue)Úexc_infoZexcoutÚexc_typeZexc_valZexc_tbr+   r+   r,   Ú_exception_tracebackí   s    
rc   c               @   s   e Zd Zdd„ Zddd„ZdS )Ú	_SpoofOutc             C   s&   t j| ƒ}|r"|jdƒ r"|d7 }|S )NrG   )r#   r`   Úendswith)ÚselfÚresultr+   r+   r,   r`   ú   s    
z_SpoofOut.getvalueNc             C   s   | j |ƒ tj| ƒ d S )N)Úseekr#   Útruncate)rf   Úsizer+   r+   r,   ri     s    
z_SpoofOut.truncate)N)r5   Ú
__module__Ú__qualname__r`   ri   r+   r+   r+   r,   rd   ù   s   	rd   c             C   sÄ   t | kr| |kS | jt ƒ}dt|ƒ }}|d }|rR|j|ƒrNt|ƒ}|d= ndS |d }|r€|j|ƒr||t|ƒ8 }|d= ndS ||krŒdS x2|D ]*}|j|||ƒ}|dk r°dS |t|ƒ7 }q’W dS )Nr"   Fr&   Téÿÿÿÿrm   )ÚELLIPSIS_MARKERÚsplitr)   Ú
startswithre   Úfind)ÚwantÚgotZwsÚstartposÚendposÚwr+   r+   r,   Ú_ellipsis_match  s0    



rw   c             C   s   | j ƒ } | rd|  S dS d S )Nz# ú#)Úrstrip)Úliner+   r+   r,   Ú_comment_line9  s    r{   c             C   sh   dt | ƒ }}| jdƒ}|dkr$|}| jdd|ƒ}|dkr>|}| jdd|ƒ}|dkr\|d }| ||… S )Nr"   rG   ú:Ú.r&   )r)   rq   Úrfind)ÚmsgÚstartÚendÚir+   r+   r,   Ú_strip_exception_detailsA  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)rf   Úoutr+   r+   r,   r‹   a  s    z_OutputRedirectingPdb.__init__Nc             C   s*   d| _ |d krtjƒ j}tjj| |ƒ d S )NT)rˆ   r=   r?   Úf_backr‰   rŠ   Ú	set_trace)rf   Úframer+   r+   r,   rŽ   i  s    
z_OutputRedirectingPdb.set_tracec             C   s   | j rtjj| ƒ d S )N)rˆ   r‰   rŠ   Úset_continue)rf   r+   r+   r,   r�   o  s    z"_OutputRedirectingPdb.set_continuec             G   s.   t j}| jt _ztjj| f|žŽ S |t _X d S )N)r=   r…   r‡   r‰   rŠ   Útrace_dispatch)rf   ÚargsÚsave_stdoutr+   r+   r,   r‘   u  s
    z$_OutputRedirectingPdb.trace_dispatch)N)r5   rk   rl   r‹   rŽ   r�   r‘   r+   r+   r+   r,   r„   [  s   
r„   c             C   sò   t j| ƒstd|  ƒ‚|jdƒr(tdƒ‚tjj|jdƒŽ }t	| dƒrXtjj| j
ƒd }nŒ| jdkržttjƒdkr–tjd dkr–tjjtjd ƒd }qätj}nFt	| dƒrÖx,| jD ]"}tjj||ƒ}tjj|ƒr°|S q°W td	| j ƒ‚tj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__))r6   r7   rA   rp   Ú
ValueErrorrM   ÚpathÚjoinro   rJ   r•   r5   r)   r=   ÚargvÚcurdirr˜   Úexists)rB   Z	test_pathZbasedirZ	directoryZfullpathr+   r+   r,   rI   €  s&    





rI   c               @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
r   Nr"   c             C   sz   |j dƒs|d7 }|r*|j dƒ r*|d7 }|d k	rF|j dƒ rF|d7 }|| _|| _|| _|| _|d krji }|| _|| _d S )NrG   )re   Úsourcerr   Úlinenor[   ÚoptionsÚexc_msg)rf   rŸ   rr   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 )N)ÚtypeÚNotImplementedrŸ   rr   r    r[   r¡   r¢   )rf   Úotherr+   r+   r,   Ú__eq__ã  s    zExample.__eq__c             C   s   t | j| j| j| j| jfƒS )N)ÚhashrŸ   rr   r    r[   r¢   )rf   r+   r+   r,   Ú__hash__î  s    zExample.__hash__)Nr"   r"   N)r5   rk   rl   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,   || _ || _|jƒ | _|| _|| _|| _d S )N)ÚexamplesÚ	docstringÚcopyr0   r*   rQ   r    )rf   r©   r0   r*   rQ   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__r5   r*   rQ   r    )rf   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 )N)r£   r¤   r©   rª   r0   r*   rQ   r    )rf   r¥   r+   r+   r,   r¦   #  s    zDocTest.__eq__c             C   s   t | j| j| j| jfƒS )N)r§   rª   r*   rQ   r    )rf   r+   r+   r,   r¨   .  s    zDocTest.__hash__c             C   s:   t |tƒstS | j| j| jt| ƒf|j|j|jt|ƒfk S )N)r8   r   r¤   r*   rQ   r    Úid)rf   r¥   r+   r+   r,   Ú__lt__2  s    
zDocTest.__lt__N)r5   rk   rl   r‹   r­   r¦   r¨   r¯   r+   r+   r+   r,   r   ò  s
   c               @   s¦   e Zd ZejdejejB ƒZejdejejB ejB ƒZ	ejdƒj
Zddd„Zdd„ Zdd	d
„Zdd„ ZejdejƒZdd„ Zej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  |j ƒ }| j|ƒ‰ ˆ dkr8dj‡ fdd„|jdƒD ƒƒ}g }d\}}xª| jj|ƒD ]š}|j|||jƒ … ƒ ||jd||jƒ ƒ7 }| j	|||ƒ\}}}	}
| j
|ƒsÊ|jt||	|
|ˆ t|jdƒƒ |d�ƒ ||jd|jƒ |jƒ ƒ7 }|jƒ }qRW |j||d … ƒ |S )Nr"   rG   c                s   g | ]}|ˆ d … ‘qS )Nr+   )Ú.0Úl)Ú
min_indentr+   r,   ú
<listcomp>y  s    z'DocTestParser.parse.<locals>.<listcomp>r[   )r    r[   r¡   )r"   r"   )Ú
expandtabsÚ_min_indentr›   ro   Ú_EXAMPLE_REÚfinditerÚappendr€   ÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTr   r)   Úgroupr�   )rf   Ústringr*   ÚoutputZcharnor    ÚmrŸ   r¡   rr   r¢   r+   )r³   r,   Úparsem  s&    


zDocTestParser.parsec             C   s   t | j||ƒ|||||ƒS )N)r   Úget_examples)rf   r¾   r0   r*   rQ   r    r+   r+   r,   Úget_doctest”  s    	zDocTestParser.get_doctestc             C   s   dd„ | j ||ƒD ƒS )Nc             S   s   g | ]}t |tƒr|‘qS r+   )r8   r   )r±   Úxr+   r+   r,   r´   «  s    z.DocTestParser.get_examples.<locals>.<listcomp>)rÁ   )rf   r¾   r*   r+   r+   r,   rÂ      s    zDocTestParser.get_examplesc       
         s
  t |jdƒƒ‰ |jdƒjdƒ}| j|ˆ ||ƒ | j|dd … dˆ  d ||ƒ dj‡ fdd„|D ƒƒ}|jd	ƒ}|jdƒ}t |ƒdkrœtjd
|d ƒrœ|d= | j|dˆ  ||t |ƒ ƒ dj‡ fdd„|D ƒƒ}| jj|ƒ}|rì|jdƒ}nd }| j	|||ƒ}	||	||fS )Nr[   rŸ   rG   r&   rW   r}   c                s   g | ]}|ˆ d  d… ‘qS )rV   Nr+   )r±   Zsl)r[   r+   r,   r´   Á  s    z0DocTestParser._parse_example.<locals>.<listcomp>rr   z *$c                s   g | ]}|ˆ d … ‘qS )Nr+   )r±   Zwl)r[   r+   r,   r´   Ì  s    r   rm   rm   )
r)   r½   ro   Ú_check_prompt_blankÚ_check_prefixr›   rX   ÚmatchÚ_EXCEPTION_REÚ_find_options)
rf   rÀ   r*   r    Úsource_linesrŸ   rr   Ú
want_linesr¢   r¡   r+   )r[   r,   r»   ®  s$     

zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c       	      C   s´   i }xŠ| j j|ƒD ]z}|jdƒjddƒjƒ }x^|D ]V}|d dksR|dd … tkrhtd|d ||f ƒ‚t|dd …  }|d dk||< q2W qW |r°| j|ƒr°td|||f ƒ‚|S )	Nr&   ú,rW   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½   rL   ro   r'   r™   r¼   )	rf   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 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)rf   rZ   Úindentsr+   r+   r,   r¶     s    zDocTestParser._min_indentc          	   C   sb   x\t |ƒD ]P\}}t|ƒ|d kr
||d  dkr
td|| d ||||d … |f ƒ‚q
W d S )NrV   rD   rW   z8line %r of the docstring for %s lacks blank after %s: %rr&   )Ú	enumerater)   r™   )rf   Úlinesr[   r*   r    r‚   rz   r+   r+   r,   rÅ   
  s
     z!DocTestParser._check_prompt_blankc             C   sD   x>t |ƒD ]2\}}|r
|j|ƒ r
td|| d ||f ƒ‚q
W d S )NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&   )rÕ   rp   r™   )rf   rÖ   Úprefixr*   r    r‚   rz   r+   r+   r,   rÆ     s    zDocTestParser._check_prefixN)r°   )r°   )r5   rk   rl   rX   ÚcompileÚ	MULTILINEÚVERBOSEr·   ÚDOTALLrÈ   rÇ   r¼   rÁ   rÃ   rÂ   r»   rÎ   rÉ   rÑ   r¶   rÅ   rÆ   r+   r+   r+   r,   r   =  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 )N)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rf   ÚverboseÚparserÚrecurseÚexclude_emptyr+   r+   r,   r‹   1  s    zDocTestFinder.__init__Nc       	      C   sP  |d kr.t |dd ƒ}|d kr.tdt|ƒf ƒ‚|dkr<d }n|d krNtj|ƒ}ytj|ƒ}W n tk
rt   d }Y ndX |s tj|ƒ}|d |dd …  dks d }|d kr®d }n*|d k	rÆtj	||j
ƒ}n
tj	|ƒ}|sØd }|d k� rü|d krði }n
|j
jƒ }n|jƒ }|d k	�r|j|ƒ d|k�r*d|d< g }| j||||||i ƒ |jƒ  |S )	Nr5   zJDocTestFinder.find: name must be given when obj.__name__ doesn't exist: %rFr"   r3   z<]>r–   éþÿÿÿ)r/   r™   r£   r6   Ú	getmoduleZgetsourcefilerA   ZgetfileÚ	linecacheÚgetlinesÚ__dict__r«   ÚupdateÚ_findÚsort)	rf   Úobjr*   rB   r0   Ú
extraglobsr]   rÊ   Útestsr+   r+   r,   rq   G  sJ    $


 




zDocTestFinder.findc             C   sÂ   |d krdS t j|ƒd k	r(|t j|ƒkS t j|ƒr>|j|jkS t j|ƒr|t|dƒr\|jj}nt|dƒrn|j}ndS |j	|kS t j
|ƒr’|j	|jkS t|dƒr¨|j	|jkS t|tƒr¶dS tdƒ‚d S )NTÚ__objclass__rk   z"object must be a class or function)r6   rå   Ú
isfunctionrè   Ú__globals__ZismethoddescriptorrJ   rï   rk   r5   Úisclassr8   Úpropertyr™   )rf   rB   Ú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|ƒ< | j|||||ƒ}|d k	rR|j|ƒ tj|ƒrÂ| jrÂx^|jj	ƒ D ]P\}	}
d||	f }	tj
tj|
ƒƒsœtj|
ƒrn| j||
ƒrn| j||
|	||||ƒ qnW tj|ƒoÐ| j�rtxžt|di ƒj	ƒ D ]Š\}	}
t|	tƒ�stdt|	ƒf ƒ‚tj
|
ƒ�p8tj|
ƒ�p8tj|
ƒ�p8t|
tƒ�sNtdt|
ƒf ƒ‚d||	f }	| j||
|	||||ƒ qæW tj|ƒ�r$| j�r$xš|jj	ƒ D ]Œ\}	}
t|
tƒ�r²t||	ƒ}
t|
tƒ�rÊt||	ƒj}
tj
|
ƒ�sîtj|
ƒ�sît|
tƒ�r”| j||
ƒ�r”d||	f }	| j||
|	||||ƒ �q”W 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¹   r6   r7   rÞ   rè   ÚitemsZ	isroutineZunwraprò   rõ   rê   r/   r8   r9   r™   r£   ÚstaticmethodÚclassmethodÚ__func__ró   )rf   rî   rì   r*   rB   rÊ   r0   ÚseenÚtestZvalnameÚvalr+   r+   r,   rê   É  sP    


zDocTestFinder._findc       	      C   sÂ   t |tƒr|}nJy,|jd kr"d}n|j}t |tƒs:t|ƒ}W n ttfk
rX   d}Y nX | j||ƒ}| jrv| rvd S |d kr„d }n*t|d|jƒ}|dd … dkr®|d d… }| j	j
|||||ƒS )Nr—   r•   rV   z.pycr&   éüÿÿÿrm   )r8   r9   Ú__doc__rA   ÚAttributeErrorÚ_find_linenorß   r/   r5   rÜ   rÃ   )	rf   rì   r*   rB   r0   rÊ   rª   r    rQ   r+   r+   r,   rø     s(    



zDocTestFinder._get_testc             C   s  d }t j|ƒrd}t j|ƒrd|d kr(d S tjdt|ddƒ ƒ}x$t|ƒD ]\}}|j|ƒrH|}P qHW t j|ƒrt|j	}t j
|ƒr„|j}t j|ƒr”|j}t j|ƒr¤|j}t j|ƒr¾t|dd ƒd }|d k	�r|d krØ|d S tjdƒ}x(t|t|ƒƒD ]}|j|| ƒrò|S qòW d S )Nr"   z^\s*class\s*%s\br5   ú-Úco_firstlinenor&   z(^|.*:)\s*\w*("|\'))r6   r7   rò   rX   rØ   r/   rÕ   rÇ   Zismethodrü   rð   Ú__code__ZistracebackÚtb_frameZisframeÚf_codeZiscodeÚranger)   )rf   rì   rÊ   r    Zpatr‚   rz   r+   r+   r,   r  -  s<    



 
 
 
 


zDocTestFinder._find_lineno)NNNN)
r5   rk   rl   r   r‹   rq   rõ   rê   rø   r  r+   r+   r+   r,   r   (  s   	
f?%c               @   s†   e Zd Zd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jdƒZd dd„Zd!dd„Zd"dd„Zdd„ ZdS )#r   r4   éF   Nr"   c             C   sN   |pt ƒ | _|d krdtjk}|| _|| _|| _d| _d| _i | _	t
ƒ | _d S )Nz-vr"   )r   Ú_checkerr=   rœ   rÝ   ÚoptionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrd   Ú_fakeout)rf   Ú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Ý   rr   r\   rŸ   )rf   rŒ   rþ   Úexampler+   r+   r,   Úreport_startÁ  s     zDocTestRunner.report_startc             C   s   | j r|dƒ d S )Nzok
)rÝ   )rf   rŒ   rþ   r  rs   r+   r+   r,   Úreport_successÎ  s    zDocTestRunner.report_successc             C   s&   || j ||ƒ| jj||| jƒ ƒ d S )N)Ú_failure_headerr  Úoutput_differencer  )rf   rŒ   rþ   r  rs   r+   r+   r,   Úreport_failureÖ  s    zDocTestRunner.report_failurec             C   s$   || j ||ƒd tt|ƒƒ ƒ d S )NzException raised:
)r  r\   rc   )rf   rŒ   rþ   r  ra   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}|jd|j||jf ƒ n|jd|jd |jf ƒ |jdƒ |j}|jt|ƒƒ dj|ƒS )Nr&   ú?zFile "%s", line %s, in %szLine %s, in %szFailed example:rG   )ÚDIVIDERrQ   r    r¹   r*   rŸ   r\   r›   )rf   rþ   r  rŒ   r    rŸ   r+   r+   r,   r  ä  s    
zDocTestRunner._failure_headerc             C   sŒ  d }}| j }tdƒ\}}}	| jj}
�xFt|jƒD �]6\}}| j t@ oL|dk}|| _ |jr–x:|jjƒ D ],\}}|r‚|  j |O  _ qf|  j | M  _ qfW | j t	@ r¢q2|d7 }|s¼| j
|||ƒ d|j|f }y,tt|j|d|dƒ|jƒ | jjƒ  d }W n4 tk
�r   ‚ Y n   tjƒ }| jjƒ  Y nX | jjƒ }| jjdƒ |}|d k�rh|
|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|�sZ| j||||ƒ nT||k�r0|�s&| j ||||ƒ |d7 }n*||	k�rZ|�sP| j!||||ƒ |d7 }n |r2| j t"@ r2P q2W || _ | j#|||ƒ t$||ƒS )Nr"   rD   r&   z<doctest %s[%d]>Zsingler3   rm   )%r  r	  r  Úcheck_outputrÕ   r©   r   r¡   rù   r   r  r*   ÚexecrØ   rŸ   r0   Údebuggerr�   ÚKeyboardInterruptr=   ra   r  r`   ri   rr   r^   Úformat_exception_onlyrc   r¢   r   rƒ   r  r  r  r   Ú_DocTestRunner__record_outcomer%   )rf   rþ   ÚcompileflagsrŒ   r  r  r  ÚSUCCESSÚFAILUREZBOOMZcheckÚ
examplenumr  ÚquietZ
optionflagrÿ   rQ   Z	exceptionrs   Zoutcomer¢   r+   r+   r,   Z__runø  s€    












zDocTestRunner.__runc             C   sL   | j j|jdƒ\}}|| || f| j |j< |  j|7  _|  j|7  _d S )Nr"   )r"   r"   )r  r.   r*   r  r  )rf   rþ   rT   ÚtÚf2Út2r+   r+   r,   Z__record_outcomeu  s    zDocTestRunner.__record_outcomez.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$c             C   sV   | j j|ƒ}|rF|jdƒ| jjkrF| jjt|jdƒƒ }|jjdd�S | j	||ƒS d S )Nr*   r%  T)Úkeepends)
Ú%_DocTestRunner__LINECACHE_FILENAME_RErÇ   r½   rþ   r*   r©   ÚintrŸ   Ú
splitlinesÚsave_linecache_getlines)rf   rQ   Ú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@ˆ jƒ dkrHˆj}n‡ ‡fdd„}| jt_tj	ƒ }t
j}tˆƒ| _| jjƒ  | jjt
_tj| _| jt_tj}tjt_z| j|||ƒS ˆt_|t
_tj|ƒ | jt_|t_|rø|jjƒ  dd l}d |_X d S )Nzutf-8c                s    t | jˆ dƒˆ ƒ} ˆj| ƒ d S )NÚbackslashreplace)r9   ÚencodeÚwrite)rZ   )rH   r“   r+   r,   rŒ   ª  s    zDocTestRunner.run.<locals>.outr"   )rþ   r2   r0   r=   r…   rH   Úlowerr2  r  Úgettracer‰   rŽ   r„   r  Úresetræ   rç   r.  Ú*_DocTestRunner__patched_linecache_getlinesÚdisplayhookÚ__displayhook__Ú_DocTestRunner__runÚsettraceÚclearÚbuiltinsÚ_)	rf   rþ   r"  rŒ   Úclear_globsZ
save_traceZsave_set_traceZsave_displayhookr<  r+   )rH   r“   r,   ÚrunŠ  s<    





zDocTestRunner.runc             C   s¢  |d kr| j }g }g }g }d }}xd| jjƒ D ]V}|\}\}	}
||
7 }||	7 }|
dkrb|j|ƒ q.|	dkrz|j||
fƒ q.|j|ƒ q.W |rú|r¾tt|ƒdƒ |jƒ  x|D ]}td|ƒ q¬W |rútt|ƒdƒ |jƒ  x |D ]\}}td||f ƒ qÞW |�rJt| jƒ tt|ƒdƒ |jƒ  x(|D ] \}\}	}
td|	|
|f ƒ �q&W |�rvt|dt| jƒd	ƒ t|| d
|dƒ |�rŠt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%   )rf   rà   ZnotestsZpassedZfailedZtotaltZtotalfrÄ   r*   rT   r'  Úthingrº   r+   r+   r,   Ú	summarizeÓ  sP    

zDocTestRunner.summarizec             C   sV   | j }xJ|j jƒ D ]<\}\}}||krB|| \}}|| }|| }||f||< qW d S )N)r  rù   )rf   r¥   Údr*   rT   r'  r(  r)  r+   r+   r,   Úmerge  s    zDocTestRunner.merge)NNr"   )N)NNT)N)r5   rk   rl   r  r‹   r  r  r  r  r  r9  r!  rX   rØ   r+  r6  r?  rA  rC  r+   r+   r+   r,   r   a  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 |jddƒdƒS )NÚASCIIr0  )r9   r1  )rf   rZ   r+   r+   r,   Ú_toAscii!  s    zOutputChecker._toAsciic             C   sÌ   | j |ƒ}| j |ƒ}||kr dS |t@ sH||fdkr8dS ||fdkrHdS |t@ s‚tjdtjtƒ d|ƒ}tjdd|ƒ}||kr‚dS |t@ r²d	j|j	ƒ ƒ}d	j|j	ƒ ƒ}||kr²dS |t
@ rÈt||ƒrÈdS d
S )NTúTrue
ú1
úFalse
ú0
z(?m)^%s\s*?$r—   z
(?m)^\s*?$rW   F)rF  rG  )rH  rI  )rE  r   r   rX   rY   ÚescapeÚBLANKLINE_MARKERr   r›   ro   r   rw   )rf   rr   rs   r  r+   r+   r,   r  '  s0    


zOutputChecker.check_outputc             C   s<   |t tB tB @ sdS |t@ r dS |jdƒdko:|jdƒdkS )NFTrG   r3   )r	   r
   r   rº   )rf   rr   rs   r  r+   r+   r,   Ú_do_a_fancy_difff  s    zOutputChecker._do_a_fancy_diffc       
      C   s8  |j }|t@ stjdt|ƒ}| j|||ƒ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
|	j||ƒƒ}d	}n d
d„ |D ƒ}d| tdj|ƒƒ S |oô|�rdt|ƒt|ƒf S |�rdt|ƒ S |�r0dt|ƒ S dS d S )Nz(?m)^[ ]*(?=
)T)r*  r3   )Únz#unified diff with -expected +actualz-context diff with expected followed by actual)Zcharjunkzndiff with -expected +actualc             S   s   g | ]}|j ƒ d  ‘qS )rG   )ry   )r±   rz   r+   r+   r,   r´   Ÿ  s    z3OutputChecker.output_difference.<locals>.<listcomp>zDifferences (%s):
r—   zExpected:
%sGot:
%szExpected:
%sGot nothing
zExpected nothing
Got:
%szExpected nothing
Got nothing
)rr   r   rX   rY   rK  rL  r-  r	   ÚdifflibZunified_diffÚlistr
   Zcontext_diffr   ZDifferZIS_CHARACTER_JUNKZcomparer\   r›   )
rf   r  rs   r  rr   rË   Z	got_linesZdiffZkindZenginer+   r+   r,   r  }  s6    
zOutputChecker.output_differenceN)r5   rk   rl   rE  r  rL  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 )N)rþ   r  rs   )rf   rþ   r  rs   r+   r+   r,   r‹   ¸  s    zDocTestFailure.__init__c             C   s
   t | jƒS )N)r9   rþ   )rf   r+   r+   r,   Ú__str__½  s    zDocTestFailure.__str__N)r5   rk   rl   r‹   rP  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 )N)rþ   r  ra   )rf   rþ   r  ra   r+   r+   r,   r‹   Ë  s    zUnexpectedException.__init__c             C   s
   t | jƒS )N)r9   rþ   )rf   r+   r+   r,   rP  Ð  s    zUnexpectedException.__str__N)r5   rk   rl   r‹   rP  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 j| |||dƒ}|r |jjƒ  |S )NF)r   r?  r0   r;  )rf   rþ   r"  rŒ   r>  Úrr+   r+   r,   r?  .  s    
zDebugRunner.runc             C   s   t |||ƒ‚d S )N)r   )rf   rŒ   rþ   r  ra   r+   r+   r,   r  4  s    z'DebugRunner.report_unexpected_exceptionc             C   s   t |||ƒ‚d S )N)r   )rf   rŒ   rþ   r  rs   r+   r+   r,   r  7  s    zDebugRunner.report_failure)NNT)r5   rk   rl   r?  r  r  r+   r+   r+   r,   r   Ó  s   [
TFc	             C   sº   | d krt jjdƒ} tj| ƒs,td| f ƒ‚|d kr:| j}t|d�}	|rVt||d�}
nt	||d�}
x$|	j
| |||d�D ]}|
j|ƒ qvW |r”|
jƒ  td kr¢|
an
tj|
ƒ t|
j|
jƒS )Nr–   ztestmod: module required; %r)rã   )rà   r  )r0   rí   )r=   r>   r.   r6   r7   rA   r5   r   r   r   rq   r?  rA  ÚmasterrC  r%   r  r  )rÀ   r*   r0   rà   Úreportr  rí   Úraise_on_errorrã   ÚfinderÚrunnerrþ   r+   r+   r,   r   C  s$    E


c             C   sà   |r| rt dƒ‚t| |||p dƒ\}} |d kr<tjj| ƒ}|d krJi }n|jƒ }|d k	rd|j|ƒ d|krtd|d< |	r†t||d�}nt||d�}|
j	|||| dƒ}|j
|ƒ |rº|jƒ  td krÈ|an
tj|ƒ t|j|jƒS )Nz8Package may only be specified for module-relative paths.zutf-8r5   r–   )rà   r  r"   )r™   rU   rM   rš   Úbasenamer«   ré   r   r   rÃ   r?  rA  rR  rC  r%   r  r  )rQ   rS   r*   rR   r0   rà   rS  r  rí   rT  rá   rH   ÚtextrV  rþ   r+   r+   r,   r   «  s0    R



ÚNoNamec       	      C   sD   t |dd�}t||d�}x&|j| ||d�D ]}|j||d� q*W d S )NF)rà   râ   )rà   r  )r0   )r"  )r   r   rq   r?  )	rT   r0   rà   r*   r"  r  rU  rV  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)r1   Úoldr+   r+   r,   r   C  s
    
c               @   sj   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Zdd„ ZdS )ÚDocTestCaser"   Nc             C   s.   t jj| ƒ || _|| _|| _|| _|| _d S )N)ÚunittestÚTestCaser‹   Ú_dt_optionflagsÚ_dt_checkerÚ_dt_testÚ	_dt_setUpÚ_dt_tearDown)rf   rþ   r  ÚsetUpÚtearDownr  r+   r+   r,   r‹   i  s    zDocTestCase.__init__c             C   s   | j }| jd k	r| j|ƒ d S )N)ra  rb  )rf   rþ   r+   r+   r,   rd  s  s    
zDocTestCase.setUpc             C   s(   | j }| jd k	r| j|ƒ |jjƒ  d S )N)ra  rc  r0   r;  )rf   rþ   r+   r+   r,   re  y  s    

zDocTestCase.tearDownc             C   s‚   | j }tj}tƒ }| j}|t@ s(|tO }t|| jdd�}z$dd |_	|j
||jdd�\}}W d |t_X |r~| j| j|jƒ ƒƒ‚d S )NF)r  r  rà   r  r
  )rŒ   r>  )ra  r=   r…   r#   r_  r   rZ  r   r`  r  r?  r2  ZfailureExceptionÚformat_failurer`   )rf   rþ   r[  Únewr  rV  r  r  r+   r+   r,   ÚrunTest�  s    
zDocTestCase.runTestc             C   sP   | j }|jd krd}n
d|j }dj|jjdƒdd … ƒ}d|j|j|||f S )Nzunknown line numberz%sr}   r&   z:Failed doctest test for %s
  File "%s", line %s, in %s

%srm   )ra  r    r›   r*   ro   rQ   )rf   Úerrrþ   r    Zlnamer+   r+   r,   rf  ™  s    

zDocTestCase.format_failurec             C   s6   | j ƒ  t| j| jdd�}|j| jdd� | jƒ  d S )NF)r  r  rà   )r>  )rd  r   r_  r`  r?  ra  re  )rf   rV  r+   r+   r,   r!   ¥  s
    BzDocTestCase.debugc             C   s   | j jS )N)ra  r*   )rf   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 )N)r£   r¤   ra  r_  rb  rc  r`  )rf   r¥   r+   r+   r,   r¦   ð  s    zDocTestCase.__eq__c             C   s   t | j| j| j| jfƒS )N)r§   r_  rb  rc  r`  )rf   r+   r+   r,   r¨   ú  s    zDocTestCase.__hash__c             C   s,   | j jjdƒ}d|d dj|d d… ƒf S )Nr}   z%s (%s)r&   rm   rm   )ra  r*   ro   r›   )rf   r*   r+   r+   r,   r­   þ  s    zDocTestCase.__repr__c             C   s   d| j j S )Nz	Doctest: )ra  r*   )rf   r+   r+   r,   ÚshortDescription	  s    zDocTestCase.shortDescription)r"   NNN)r5   rk   rl   r‹   rd  re  rh  rf  r!   r®   r¦   r¨   r­   rP  rj  r+   r+   r+   r,   r\  g  s    
	H
r\  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j| d ƒ d S )N)rB   r\  r‹   )rf   rB   r+   r+   r,   r‹   	  s    zSkipDocTestCase.__init__c             C   s   | j dƒ d S )Nz-DocTestSuite will not work with -O2 and above)ZskipTest)rf   r+   r+   r,   rd  	  s    zSkipDocTestCase.setUpc             C   s   d S )Nr+   )rf   r+   r+   r,   Ú	test_skip	  s    zSkipDocTestCase.test_skipc             C   s   d| j j S )NzSkipping tests from %s)rB   r5   )rf   r+   r+   r,   rj  	  s    z SkipDocTestCase.shortDescriptionN)r5   rk   rl   r‹   rd  rl  rj  rP  r+   r+   r+   r,   rk  	  s
   rk  c               @   s   e Zd Zdd„ ZdS )Ú_DocTestSuitec             C   s   d S )Nr+   )rf   Úindexr+   r+   r,   Ú_removeTestAtIndex	  s    z _DocTestSuite._removeTestAtIndexN)r5   rk   rl   ro  r+   r+   r+   r,   rm  	  s   rm  c       	      K   sÀ   |d krt ƒ }t| ƒ} |j| ||d�}| rPtjjdkrPtƒ }|jt| ƒƒ |S |j	ƒ  tƒ }x\|D ]T}t
|jƒdkrxqd|js¦| j}|dd … dkr |d d… }||_|jt|f|Žƒ qdW |S )	N)r0   rí   r3   r"   rV   z.pycr&   r   rm   )r   rC   rq   r=   r1   Úoptimizerm  ÚaddTestrk  rë   r)   r©   rQ   r•   r\  )	rB   r0   rí   Ztest_finderr¡   rî   Úsuiterþ   rQ   r+   r+   r,   r   	  s(    %
c               @   s(   e Zd Zdd„ Zdd„ ZeZdd„ ZdS )ÚDocFileCasec             C   s   dj | jjjdƒƒS )Nr=  r}   )r›   ra  r*   ro   )rf   r+   r+   r,   r®   `	  s    zDocFileCase.idc             C   s   | j jS )N)ra  rQ   )rf   r+   r+   r,   r­   c	  s    zDocFileCase.__repr__c             C   s   d| j j| j j|f S )Nz2Failed doctest test for %s
  File "%s", line 0

%s)ra  r*   rQ   )rf   ri  r+   r+   r,   rf  g	  s    zDocFileCase.format_failureN)r5   rk   rl   r®   r­   rP  rf  r+   r+   r+   r,   rs  ^	  s   rs  c       
      K   sx   |d kri }n|j ƒ }|r(| r(tdƒ‚t| |||p6dƒ\}} d|krN| |d< tjj| ƒ}|j|||| dƒ}	t|	f|ŽS )Nz8Package may only be specified for module-relative paths.zutf-8r•   r"   )r«   r™   rU   rM   rš   rW  rÃ   rs  )
rš   rS   rR   r0   rá   rH   r¡   Údocr*   rþ   r+   r+   r,   ÚDocFileTestl	  s    
ru  c              O   sH   t ƒ }|jddƒr$t|jdƒƒ|d< x| D ]}|jt|f|Žƒ q*W |S )NrS   TrR   )rm  r.   rC   rq  ru  )ÚpathsÚkwrr  rš   r+   r+   r,   r   †	  s    8
c             C   sÚ   g }xˆt ƒ j| ƒD ]x}t|tƒrj|j|jd d	… ƒ |j}|rŠ|jdƒ |dd„ |jdƒd d
… D ƒ7 }q|dd„ |jdƒd d… D ƒ7 }qW x|rª|d dkrª|jƒ  q�W x|rÊ|d dkrÊ|jdƒ q®W dj	|ƒd S )Nr&   z# Expected:c             S   s   g | ]}d | ‘qS )z## r+   )r±   r²   r+   r+   r,   r´   
  s    z(script_from_examples.<locals>.<listcomp>rG   c             S   s   g | ]}t |ƒ‘qS r+   )r{   )r±   r²   r+   r+   r,   r´   
  s   rx   r"   rm   rm   rm   rm   )
r   rÁ   r8   r   r¹   rŸ   rr   ro   Úpopr›   )rZ   r¿   Zpiecerr   r+   r+   r,   r   Ï	  s    :

"c                sJ   t | ƒ} tƒ j| ƒ}‡ fdd„|D ƒ}|s4tˆ dƒ‚|d }t|jƒ}|S )Nc                s   g | ]}|j ˆ kr|‘qS r+   )r*   )r±   r'  )r*   r+   r,   r´   *
  s    ztestsource.<locals>.<listcomp>znot found in testsr"   )rC   r   rq   r™   r   rª   )rB   r*   rî   rþ   Útestsrcr+   )r*   r,   r   !
  s    

c             C   s   t | ƒ}t|||ƒ d S )N)r   Údebug_script)ÚsrcÚpmr0   ry  r+   r+   r,   r    1
  s    c          
   C   s”   dd l }|r|jƒ }ni }|rvyt| ||ƒ W q�   ttjƒ d ƒ |jdd�}|jƒ  |jd tjƒ d ƒ Y q�X n|jdd�j	d|  ||ƒ d S )Nr"   r&   T)r†   r3   zexec(%r))
r‰   r«   r  r÷   r=   ra   rŠ   r5  Zinteractionr?  )r{  r|  r0   r‰   Úpr+   r+   r,   rz  6
  s    
rz  c             C   s$   t | ƒ} t| |ƒ}t||| jƒ d S )N)rC   r   rz  rè   )rB   r*   r|  ry  r+   r+   r,   r!   J
  s    
c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
_TestClassc             C   s
   || _ d S )N)rÿ   )rf   rÿ   r+   r+   r,   r‹   f
  s    z_TestClass.__init__c             C   s   | j d | _ | S )Nr3   )rÿ   )rf   r+   r+   r,   Úsquarep
  s    z_TestClass.squarec             C   s   | j S )N)rÿ   )rf   r+   r+   r,   r.   z
  s    z_TestClass.getN)r5   rk   rl   r‹   r  r.   r+   r+   r+   r,   r~  X
  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   t jdd�} | jdddddd� | jd	d
dtjƒ g dd� | jddddd� | jdddd� | jƒ }|j}|j}d}x|jD ]}|t| O }q|W |j	rž|t
O }x||D ]t}|jdƒrütjj|ƒ\}}tjjd|ƒ t|d d… ƒ}tjd= t|||d�\}	}
nt|d||d�\}	}
|	r¤dS q¤W dS )Nzdoctest runner)Zdescriptionz-vz	--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ƒ  r"   z.pyrD   )rà   r  )rS   rà   r  r&   éýÿÿÿ)ÚargparseÚArgumentParserÚadd_argumentr'   ÚkeysÚ
parse_argsr]   rà   rÏ   Z	fail_fastr   re   rM   rš   ro   r=   Úinsertr:   r   r   )rá   r’   Z	testfilesrà   r¡   rÏ   rQ   ÚdirnamerÀ   r  r=  r+   r+   r,   Ú_test·
  s<    



rŽ  r–   )r3   )rV   )	NNNNTr"   NFF)FrY  Nr"   )NNNN)FN)FN)F)RZ__docformat__Ú__all__r-   r‡  rN  r6   ræ   rM   r‰   rX   r=   r^   r]  Úior#   Úcollectionsr$   r%   r'   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   rK  rn   r2   rC   rU   r\   rc   rd   rw   r{   rƒ   rŠ   r„   rI   r   r   r   r   r   r   Ú	Exceptionr   r   r   rR  r   r   r   rZ  r   r^  r\  rk  Z	TestSuiterm  r   rs  ru  r   r   r   r    rz  r!   r~  rö   rŽ  r5   Úexitr+   r+   r+   r,   Ú<module>0   s  


1%.DK l  ;   ; n  
fx 
$ !
@IR


,		+
