???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................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rdS x2|D ]*}|j|||}|dk rdS |t|7 }qW dS )Nr"   Fr&   Trm   )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rttjdkrtjd dkrtjjtjd d }qtj}nFt	| drx,| jD ]"}tjj||}tjj|r|S qW 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rt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|rt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 |stj|}|d |dd   dksd }|d krd }n*|d k	rtj	||j
}n
tj	|}|sd }|d k r|d kri }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rd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rx^|jj	 D ]P\}	}
d||	f }	tj
tj|
stj|
rn| j||
rn| j||
|	|||| qnW tj|o| jrtxt|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||
|	|||| qW tj|r$| jr$x|jj	 D ]\}	}
t|
trt||	}
t|
trt||	j}
tj
|
stj|
st|
tr| j||
rd||	f }	| j||
|	|||| qW 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rd }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|rt|dd d }|d k	r|d kr|d S tjd}x(t|t|D ]}|j|| r|S qW 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rx:|jj D ],\}}|r|  j |O  _ qf|  j | M  _ qfW | j t	@ rq2|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|rtt|d |j  x|D ]}td| qW |rtt|d |j  x |D ]\}}td||f  qW |rJt| j tt|d |j  x(|D ] \}\}	}
td|	|
|f  q&W |rvt|dt| jd	 t|| d
|d |rtd|d n|rt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@ stjdtjt d|}tjdd|}||krdS |t@ rd	j|j	 }d	j|j	 }||krdS |t
@ rt||rd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@ rtj||dd}t
|dd  }d}n,|t@ rt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< |	rt||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 }xt  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  qW x|r|d dkr|jd qW 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 qX 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rtjj|\}}tjjd| t|d d }tjd= t|||d\}	}
nt|d||d\}	}
|	rdS qW 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


,		+
