python (3.12.0)

(root)/
lib/
python3.12/
__pycache__/
doctest.cpython-312.opt-2.pyc

ˑeN	dZgdZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
mZddlmZeddZiZdZed	Zed
ZedZedZed
ZedZeezezezezezZedZedZedZedZedZeezezezezZ dZ!dZ"dZ#dVdZ$dZ%dZ&dWdZ'dZ(Gdde
Z)dZ*dZ+d Z,Gd!d"ejZZ.d#Z/Gd$d%Z0Gd&d'Z1Gd(d)Z2Gd*d+Z3Gd,d-Z4Gd.d/Z5Gd0d1e6Z7Gd2d3e6Z8Gd4d5e4Z9da:			dXd8Z;d6ddddd6ddd7e2dfd9Z<		dYd:Z=da>d;Z?Gd<d=ejZAGd>d?eAZBGd@dAejZDdZdBZEGdCdDeAZFd6dde2dfdEZGdFZHdGZIdHZJd[dIZKd[dJZLd\dKZMGdLdMZNeNdNdOdPdQdRdSZOdTZPeQdUk(re	jePyy)]zreStructuredText en)!register_optionflagDONT_ACCEPT_TRUE_FOR_1DONT_ACCEPT_BLANKLINENORMALIZE_WHITESPACEELLIPSISSKIPIGNORE_EXCEPTION_DETAILCOMPARISON_FLAGSREPORT_UDIFFREPORT_CDIFFREPORT_NDIFFREPORT_ONLY_FIRST_FAILUREREPORTING_FLAGS	FAIL_FASTExampleDocTest
DocTestParser
DocTestFinder
DocTestRunner
OutputCheckerDocTestFailureUnexpectedExceptionDebugRunnertestmodtestfilerun_docstring_examplesDocTestSuiteDocFileSuiteset_unittest_reportflagsscript_from_examples
testsource	debug_srcdebugN)StringIOIncrementalNewlineDecoder)
namedtupleTestResultszfailed attemptedcNtj|dttzS)N)OPTIONFLAGS_BY_NAME
setdefaultlen)names ;/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/doctest.pyrrs ))$S9L5M0MNNrrrrrrr
rrr
rz<BLANKLINE>z...c	d}tjD]6}|j|d}|tt|us(||jz}8|SNr#)
__future__all_feature_namesgetgetattr
compiler_flag)globsflagsfnamefeatures    r._extract_future_flagsr;sY
E--+))E4(gj%00W***E+Lr/c	tj|r|St|trt	|tt
dgS|(		tjtj|Std#t$r6tjtj|jdcYSwxYw#t$rYywxYw)N*__name__z"Expected a module, string, or None)inspectismodule
isinstancestr
__import__globalslocalssysmodules_getframemodulenameAttributeError	_getframe	f_globalsKeyError	TypeError)moduledepths  r._normalize_modulerPs
	FC	 &')VXu==		
O{{3#:#:5#ABB<=="
O{{3==#7#A#A*#MNN
O		s*%A==<B<9B?;B<<B??	C
Cc:tddj|dSNT)r%decode)datas r._newline_convertrUs$T4077dCCr/c|ryt|d}t||}t|ddx}	|jj}t
|dr/|j|}|j|}t||fSt||5}|j|fcdddS#t
$rYowxYw#1swYyxYw)N
__loader__get_data)encoding)rP_module_relative_pathr5__spec__loaderrIhasattrrYrSrUopenread)filenamepackagemodule_relativerZr]
file_contentsfs       r._load_testfilerfs#GQ/((;g|T::FC
 ))006:&"OOH5M)00:M$M2H<<	
h	*"avvx!"""

""sB%	B4%	B10B14B=c8	tjd|dz|S)Nz
(?m)^(?!$) )resub)sindents  r._indentrms 
66,s
A..r/cv	t}|\}}}tj|||||jS)N)file)r$	tracebackprint_exceptiongetvalue)exc_infoexcoutexc_typeexc_valexc_tbs     r._exception_tracebackrxs=
ZF (Hgv
hfE??r/ceZdZdZddZy)	_SpoofOutc`tj|}|r|jds|dz
}|SN
)r$rrendswith)selfresults  r.rrz_SpoofOut.getvalues0""4(&//$/dNF
r/NcP|j|tj|yN)seekr$truncate)rsizes  r.rz_SpoofOut.truncates		$$r/r)r>
__module____qualname__rrrr/r.rzrzs r/rzct	t|vr||k(S|jt}dt|}}|d}|r!|j|rt|}|d=ny|d}|r$|j	|r|t|z}|d=ny||kDry|D]*}|j|||}|dkry|t|z
},y)Nr#FT)ELLIPSIS_MARKERsplitr,
startswithr~find)wantgotwsstartposendposws      r._ellipsis_matchrs
d"s{
O	$B#c(fH
1A>>!1vH1
2A<<?c!fF2&
88Ax0a<CFr/c4	|j}|rd|zSy)Nz# #)rstrip)lines r.
_comment_linerFs /;;=DDyr/cdt|}}|jd}|dk\r|}|jdd|}|dk\r|}|jdd|}|dk\r|dz}|||S)Nr#r}:.r))r,rrfind)msgstartendis    r._strip_exception_detailsrNsvCH3EAAvaAAv		#q#AAv!uc?r/c(eZdZ	dZddZdZdZy)_OutputRedirectingPdbcr||_d|_tjj	||dd|_y)NFT)stdoutnosigintr))_OutputRedirectingPdb__out$_OutputRedirectingPdb__debugger_usedpdbPdb__init__use_rawinput)routs  r.rz_OutputRedirectingPdb.__init__ns2
$cD9r/Ncd|_|tjj}tj
j
||yrR)rrFrJf_backrr	set_trace)rframes  r.rz_OutputRedirectingPdb.set_tracevs4#=MMO**E$&r/c\|jr tjj|yyr)rrrset_continuers r.rz"_OutputRedirectingPdb.set_continue|s$GG  & r/ctj}|jt_	tjj
|g||t_S#|t_wxYwr)rFrrrrtrace_dispatch)rargssave_stdouts   r.rz$_OutputRedirectingPdb.trace_dispatchsAjjZZ
	%77))$66$CJCJsA
Ar)r>rrrrrrrr/r.rrhs
''%r/rctj|std|z|jdrt	dtjj|jd}t|dr-t
jj|jd}n|jdk(rwttjdkDrJtjddk7r4t
jjtjdd}nt
j}nxt|drT|j D]E}t
jj||}t
jj#|sC|cSt	d	|jzt
jj||S)
NzExpected 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__))r?r@rMr
ValueErrorospathjoinrr^rr>r,rFargvcurdirrexists)rN	test_pathbasedir	directoryfullpaths     r.r[r[sNF#/&899C LMMys35Ivz"''--03	J	&sxx=?sxx{b0ggmmCHHQK03GiiG6:&#__
$	77<<	9=77>>(+#O
$3!??+,	,
77<<++r/c&eZdZ			ddZdZdZy)rNc|jds|dz
}|r|jds|dz
}||jds|dz
}||_||_||_||_|i}||_||_yr|)r~sourcerlinenorloptionsexc_msg)rrrrrrlrs       r.rzExample.__init__st$dNF

d+DLDw'7'7'=tOG	?bGr/czt|t|urtS|j|jk(xr|j|jk(xrj|j|jk(xrO|j
|j
k(xr4|j|jk(xr|j|jk(Sr)typeNotImplementedrrrrlrrrothers  r.__eq__zExample.__eq__s:T%[(!!{{ell*-yyEJJ&-{{ell*-{{ell*-||u}},	-
||u}},	-r/ct|j|j|j|j|j
fSr)hashrrrrlrrs r.__hash__zExample.__hash__s3T[[$))T[[$++\\#$	$r/)Nr#r#N)r>rrrrrrr/r.rrs!!DEF$	-$r/rc,eZdZ	dZdZdZdZdZy)rcv	||_||_|j|_||_||_||_yr)examples	docstringcopyr7r-rar)rrr7r-rarrs       r.rzDocTest.__init__s9	!
"ZZ\
	 
r/c&t|jdk(rd}n3t|jdk(rd}ndt|jz}d|jjd|jd|j
d	|jd
|dS)Nr#zno examplesr)z	1 examplez%d examples<rhz from r (z)>)r,r	__class__r>r-rar)rrs  r.__repr__zDocTest.__repr__%spt}}"$H

1
$"H$s4=='99H((DMM4;;B	Cr/czt|t|urtS|j|jk(xr|j|jk(xrj|j|jk(xrO|j
|j
k(xr4|j|jk(xr|j|jk(Sr)rrrrr7r-rarrs  r.rzDocTest.__eq__0s:T%[(!!}}.+~~0+zzU[[(+yyEJJ&+}}.	+
{{ell*	+r/cpt|j|j|j|jfSr)rrr-rarrs r.rzDocTest.__hash__;s&T^^TYY

t{{KLLr/ct|tstS|j|j|j
t
|f|j|j|j
t
|fkSr)rArrr-raridrs  r.__lt__zDocTest.__lt__?sV%)!!DMM4;;4AU^^U\\2e9EF	Gr/N)r>rrrrrrrrr/r.rrs#.	C	+MGr/rceZdZ	ejdej
ejzZejdejej
zejzZ	ejdjZddZdZ
ddZdZejdej
Zd	Zejd
ej
ZdZdZd
Zy)ra
        # 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^[ ]*(#.*)?$c	|j}|j|}|dkDr1dj|jdDcgc]}||d	c}}g}d\}}|jj|D]}|j
|||j||jd||jz
}|j|||\}	}
}}|j|	s;|j
t|	||||t|jdz|
||jd|j|jz
}|j}|j
||d|Scc}w)Nr#r}r#r#rl)rrlr)
expandtabs_min_indentrr_EXAMPLE_REfinditerappendrcount_parse_example_IS_BLANK_OR_COMMENTrr,groupr)
rstringr-
min_indentloutputcharnormrrrrs
             r.parsezDocTestParser.parsezso	""$%%f-
>YYT8JK1*+KLF!!**62	AMM&	23fll4;;F((D&9
-VWdG,,V4

wvtW+1+5c!''(:K6L+L,3 57

fll4AEEG<<FUUWF#	&	

fVWo&
3 LsFcD	t|j|||||||Sr)rget_examples)rrr7r-rars      r.get_doctestzDocTestParser.get_doctests0	t((6Xvv7	7r/cn	|j||Dcgc]}t|tr|c}Scc}wr)rrAr)rrr-xs    r.rzDocTestParser.get_exampless=		 ::fd3+aa)+	++s2c		t|jd}|jdjd}|j|||||j	|ddd|zdz||dj|Dcgc]
}||dzdc}}|jd}|jd}	t|	dkDrt
jd	|	d
r|	d
=|j	|	d|z||t|zdj|	D
cgc]}
|
|d	c}
}|jj|}|r|jd}nd}|j|||}||||fScc}wcc}
w)Nrlrr}r)rhrrz *$rr)
r,rr_check_prompt_blank
_check_prefixrrimatch
_EXCEPTION_RE
_find_options)
rrr-rrlsource_linesslrr
want_lineswlrrs
             r.rzDocTestParser._parse_examplest		QWWX&'wwx(..t4  vtVD<+SZ#-=tVLLAbBvaxyMAB
wwvZZ%
z?Q288FJrN#C2:s6z4!C$55	7yy
;""VW+;<
$$T*ggenGG$$VT6:wg--/B<s<E-E2z#\s*doctest:\s*([^\n\'"]*)$c
	i}|jj|D]x}|jdjddj	}|D]B}|ddvs|ddt
vrt
d|dzd|d|t
|dd}|dd	k(||<Dz|r%|j|rt
d|d|d
||S)Nr),rhr#z+-line z of the doctest for z has an invalid option: +z4 has an option directive on a line with no example: )_OPTION_DIRECTIVE_RErrreplacerr*rr)	rrr-rrroption_stringsoptionflags	         r.rzDocTestParser._find_optionss	**33F;		3AWWQZ//S9??AN(
31IT)12J&99$&,Qhf&>??+6!":6!'c!1

3		3t008$dF45
5r/z
^([ ]*)(?=\S)c	|jj|Dcgc]
}t|}}t|dkDrt|Sycc}wr1)
_INDENT_REfindallr,min)rrkrlindentss    r.rzDocTestParser._min_indentsJE-1__-D-DQ-GH63v;HHw<!w<	IsA
c	t|D]E\}}t||dzk\s||dzdk7s$td||zdzd|d|||dzd|y)	NrrWrhrr) of the docstring for z lacks blank after z: )	enumerater,r)rlinesrlr-rrrs       r.rz!DocTestParser._check_prompt_blankss	!'	@GAt4yF1H$fQh3)> "((1*d"&vfQh"7"?@@	@r/c		t|D]3\}}|s	|j|rtd||zdzd|d|y)Nrr)rz& has inconsistent leading whitespace: )rrr)rrprefixr-rrrs       r.rzDocTestParser._check_prefix%sP	!'	;GAtDOOF3 "((1*dD":;;	;r/N)z<string>)r>rrricompile	MULTILINEVERBOSErDOTALLrrrrrrrrrrrrrrr/r.rrJs"**\\BJJ
&(K,BJJ ZZ",,
&
24M&2::o6<<%N
7+*.f&2::&D&(ll48,bll;J@	;r/rcNeZdZ	deddfdZddZdZdZdZd	Z	d
Z
y)rFTc>	||_||_||_||_yr)_parser_verbose_recurse_exclude_empty)rverboseparserrecurse
exclude_emptys     r.rzDocTestFinder.__init__>s&	

+r/Nc		|&t|dd}|tdt||durd}n|tj|}	tj
|}|s%tj|}|d|ddzdk(sd}|d}n=|!tj||j}ntj|}|sd}	| |i}n+|jj}n|j}||j|d|vrd|d<g}|j||||||i|j|S#t$rd}YwxYw)Nr>zHDocTestFinder.find: name must be given when obj.__name__ doesn't exist: Fr#z<]>r)r5rrr?	getmodule
getsourcefilegetfile	linecachegetlines__dict__rMrupdate_findsort)	robjr-rNr7
extraglobsror	testss	         r.rzDocTestFinder.findTs}!	F<3
D1D| "&s)".//U?F
^&&s+F
	(((-Ds+AwtBCy(E1$4|#%$-#5#5dFOO#LL$-#5#5d#;L##'L=~,,.JJLE!LL$U" *E*

5#tV\5"E
	

Y	 L	 s	EE
Ec	|ytj||tj|uStj|r|j|juStj
|stj|rLt|dr|jj}nt|dr
|j}ny|j|k(Stj|r|j|jk(St|dr|j|jk(St|trytd)NT__objclass__rz"object must be a class or function)r?r1
isfunctionr6__globals__ismethoddescriptorismethodwrapperr^r>rr>isclassrApropertyr)rrNobjectobj_mods    r._from_modulezDocTestFinder._from_modules	>


v
&
2W..v666



'??f&8&888((0%%f-v~. --88. ++??g--
__V
$??f&7&777
V\
*??f&7&777

)ABBr/c|	|}	tj|}tj|S#t$rY wxYwr)r?unwrapr	isroutine)rr:
maybe_routines   r._is_routinezDocTestFinder._is_routinesH	
	#NN=9M  //		s/	;;c
|	|jrtd|zt||vryd|t|<|j|||||}||j	|tj|r|jrz|jjD]]\}	}
|d|	}	|j|
stj|
s4|j||
sG|j||
|	||||_tj|r|jrt|dijD]\}	}
t|	t st#dt%|	tj&|
sQtj|
s<tj|
s't|
t st#dt%|
|d|	}	|j||
|	||||tj|r|jr|jjD]\}	}
t|
t(t*fr|
j,}
tj&|
s&tj|
st|
t.sc|j||
sv|d|	}	|j||
|	||||yyy)NzFinding tests in %sr)r__test__z3DocTestFinder.find: __test__ keys must be strings: z^DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: z
.__test__.)r(printr	_get_testrr?r@r)r6itemsrLrCrGr8r5rArBrrrJstaticmethodclassmethod__func__rD)rr<r:r-rNr	r7seentestvalnamevals           r.r8zDocTestFinder._findsk	=='$./c7d?RW
~~c4ELLC T]] # 2 2 4
,%)73%%c*gooc.B%%fc2JJuc7FL$d,

,C T]] 'Z < B B D

(!'3/$&*7m&677 ))#.'//#2F((-C1E$'+3i&233/3G<

5#w $(

( ??3DMM # 2 2 4
,cL+#>?,,C&&s+ws/C h/''4)-w7GJJuc7FL$d,
,%2r/c	t|tr|}n7	|jd}n'|j}t|tst|}|j||}|jr|sy|d}n(t|ddxs|j}|dddk(r|dd}|jj|||||S#ttf$rd}YwxYw)Nrr.pycr)rArB__doc__rMrI_find_linenor*r5r>r'r)	rr:r-rNr7r	rrras	         r.rPzDocTestFinder._get_tests	c3I
;;& "I #I%i5$'	N	
""35y>Hvz48KFOOH}&#CR=||''	5$(0&:	:%~.
	
s6B99C
C
c
P	d}t|dd}tj|r|d}tj|rc|a|yt	j
dt	jt|ddz}t|D]\}}|j|s|}ntj|r|j}tj|rt|ddr|j}tj|r|j}tj|r|j }tj"|r|j$dz
}|N||dzSt	j
d}t'|t)|D]}|j||s|cSy)Nr\r#z^\s*class\s*%s\br>-r)z(^|.*:)\s*\w*("|\'))r5r?r@rCrir!escaperrismethodrTr?__code__istracebacktb_frameisframef_codeiscodeco_firstlinenoranger,)rr:r	rrpatrrs        r.r]zDocTestFinder._find_linenoEs	
CD1	C Y%:F
??3I$9#**0YYwsJ'DEFGC$\2
499T?F
C #c"wsIt'D,,Cs#3<<S??3szz>>#''!+F#ax**34CL(9:
"99\&12!M
"
r/NNNN)r>rrrrrrGrLr8rPr]rr/r.rr5s= %]_T,,dLC:	0;,z$:L2r/rceZdZ	dZddZdZdZdZdZdZ	d	Z
d
ZejdZddZdd
ZddZdZy)rzF**********************************************************************Nc	|xs
t|_|dtjv}||_||_||_d|_d|_i|_	t|_y)N-vr#)r_checkerrFrr(optionflagsoriginal_optionflagstriesfailures_name2ftrz_fakeout)rcheckerr+rps    r.rzDocTestRunner.__init__sc	  2=?
?chh&G
&$/!


"
r/c	|jrf|jr8|dt|jzdzt|jzy|dt|jzdzyy)NzTrying:
zExpecting:
zExpecting nothing
)r(rrmr)rrrVexamples    r.report_startzDocTestRunner.report_startso	==||K''.."99"#%,W\\%:;<K''.."99)*+r/c0	|jr	|dyy)Nzok
)r(rrrVrxrs     r.report_successzDocTestRunner.report_successs	==Kr/c	||j|||jj|||jzyr)_failure_headerrooutput_differencerpr{s     r.report_failurezDocTestRunner.report_failuresC		D  w/MM++GS$:J:JK
L	Mr/cf	||j||dztt|zy)NzException raised:
)r~rmrxrrrVrxrss     r.report_unexpected_exceptionz)DocTestRunner.report_unexpected_exceptions=		D  w/!
"$+,@,J$K
L	Mr/c|jg}|jrf|j)|j|j|jzdz}nd}|jd|jd|d|jn.|jd|jdzd|j|jd|j
}|jt
|dj|S)	Nr)?zFile "", line , in zLine zFailed example:r})DIVIDERrarrr-rrmr)rrVrxrrrs      r.r~zDocTestRunner._failure_headers||n=={{&7>>+Ew~~59JJ

vtyy:
;
JJ7>>!+;TYYGH

$%

76?#yy~r/c
V	dx}}|j}td\}}}	|jj}
t	|j
D]v\}}|jtzxr|dkD}
||_|jrP|jjD]3\}}|r|xj|zc_|xj|zc_5|jtzr|dz
}|
s|j|||d|j|fz}	tt|j|d|d|j|j j#d}|j*j-}|j*j/d|}|!|
|j0||jr|}nt3j4|ddd}|
s|t7|z
}|j8|	}nf|
|j8||jr|}nE|jt:zr2|
t=|j8t=||jr|}||ur|
sT|j?||||n?||ur|
s|jA|||||dz
}n||	ur|
s|jC|||||dz
}|sb|jtDzswn||_|jG|||tI||S#t$$rt'j(}|j j#YxYw)	Nr#rWr)z<doctest %s[%d]>singleTr)%rprirocheck_outputrrr
rrQrryr-execr!rr7debuggerrKeyboardInterruptrFrsrurrrrrpformat_exception_onlyrxrrrr|rrr_DocTestRunner__record_outcomer')rrVcompileflagsrrsrrrqSUCCESSFAILUREBOOMcheck
examplenumrxquiet
optionflagrXra	exceptionroutcomers                     r.__runzDocTestRunner.__runs2	5 $//!&q$

**$-T]]#;^	J%%(AA"\
 4D)0)>)>)@8%Z((J6(((ZK7(	8$&
QJE!!#tW5
*TYY
,CCH


-WW^^Xx)4126**>

**, 	--((*CMM""1%G sD,<,<=%G$999Ra=I"M/	::C??*"G7??GT5E5EF%G%%(??5gooF5g>!--/#*'!''T7C@G#''T7C@A
D44S$5>@A
D,,y8}^	B0	
dHe48U++}%

-LLN	

**,s
A	K,,9L(c	|jj|jd\}}||z||zf|j|j<|xj|z
c_|xj|z
c_y)Nr)rtr4r-rsrr)rrVretf2t2s      r.__record_outcomezDocTestRunner.__record_outcomes`	""499e4B$%bD!B$<

dii 




a
r/z.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$cJ|jj|}|ru|jd|jjk(rM|jj
t
|jd}|jjdS|j||S)Nr-rTkeepends)
%_DocTestRunner__LINECACHE_FILENAME_RErrrVr-rintr
splitlinessave_linecache_getlines)rramodule_globalsrrxs     r.__patched_linecache_getlinesz*DocTestRunner.__patched_linecache_getliness((..x8DIINN2ii((QWW\-B)CDG>>,,d,;;//.IIr/cx	
	||_|t|j}tj
|4
j
			j
dk(r
j}n	
fd}|jt_tj}tj}t
|_
|jj|jjt_tj |_|j$t_tj&}tj(t_	|j+|||
t_|t_tj,||j"t_|t_|r&|jj/ddl}d|_SS#
t_|t_tj,||j"t_|t_|r&|jj/ddl}d|_wwxYw)Nutf-8c`t|jd}j|y)Nbackslashreplace)rBencodewrite)rkrZrs r.rzDocTestRunner.run.<locals>.outs)AHHX/ABHMA%%a(r/r#)rVr;r7rFrrZlowerrrugettracerrrrresetr4r5r*_DocTestRunner__patched_linecache_getlinesdisplayhook__displayhook___DocTestRunner__runsettraceclearbuiltins_)rrVrrclear_globs
save_tracesave_set_tracesave_displayhookrrZrs         @@r.runzDocTestRunner.runs	&	0<Ljj;"++H8>>#3w#>!'')]]
\\^
-k:




//
(1'9'9$!>>	??--	"::dL#6$CJ*CMLL$!%!=!=I.CO

  "!
%CJ*CMLL$!%!=!=I.CO

  "!
s
>GA5H9c	||j}g}g}g}dx}}|jjD]U}|\}\}	}
||
z
}||	z
}|
dk(r|j|,|	dk(r|j||
fE|j|W|r{|r8t	t|d|j
|D]}t	d||r?t	t|d|j
|D]\}}t	d||fz|rXt	|jt	t|d|j
|D]\}\}	}
t	d|	|
|fz|r2t	|dt|jd	t	||z
d
|d|rt	d|d
n
|rt	dt||S)Nr#zitems had no tests:z   zitems passed all tests:z %3d tests in %szitems had failures:z %3d of %3d in %sztests inzitems.z
passed andzfailed.z***Test Failed***z	failures.zTest passed.)	r(rtrQrrOr,r9rr')
rr+notestspassedfailedtotalttotalfrr-rerthingrs
             r.	summarizezDocTestRunner.summarizes		?mmG$$&
	!ALD&1aaKFaKFAvt$a

ay*

a 
	!c'l$9:$(E%'(c&k#<=
$*?LE5,u~=>?$,,#f+45KKM!'
;
v1)Q5M9:
;&*c$--&8(C&6/<C%v{;
.!66**r/c|j}|jjD]%\}\}}||vr||\}}||z}||z}||f||<'yr)rtrQ)rrdr-rerrrs        r.mergezDocTestRunner.merge(sdMM!NN002		LD&1aqy
4BFFdAdG		r/)NNr#rNNT)r>rrrrryr|rrr~rrrir!rrrrrrr/r.rr}sn6rG$H+MM({,z)bjj*FGJD"R4+rr/rc&eZdZ	dZdZdZdZy)rc<	t|jdddS)NASCIIr)rBr)rrks  r._toAsciizOutputChecker._toAscii=s"	188G%78'BBr/c	|j|}|j|}||k(ry|tzs||fdk(ry||fdk(ry|tzsNtjdtj
tzd|}tjdd|}||k(ry|tzrDdj|j}dj|j}||k(ry|tzr
t||ryy)	NT)zTrue
z1
)zFalse
z0
z(?m)^%s\s*?$rz(?m)^[^\S\n]+$rhF)rrrrirjr`BLANKLINE_MARKERrrrrrrrrrps    r.rzOutputChecker.check_outputCs	mmC }}T"$;44Dz..Dz//3366/BII6F,GGd$D&&*B4Cd{
--((399;'C88DJJL)Dd{!tS)r/c|ttztzzsy|tzry|jddkDxr|jddkDS)NFTr}r)r
rrrrs    r._do_a_fancy_diffzOutputChecker._do_a_fancy_diffsVl*+*+,%zz$!#;		$!(;;r/c	|j}|tzstjdt|}|j|||r|j
d}|j
d}|tzr)tj||d}t|dd}d}n||tzr)tj||d}t|dd}d}nJ|tzrAtjtj}	t|	j!||}d	}d
zt#dj%zS|r|rdt#|d
t#|S|rdt#|zS|rdt#|zSy)Nz(?m)^[ ]*(?=
)Trr)nz#unified diff with -expected +actualz-context diff with expected followed by actual)charjunkzndiff with -expected +actualzDifferences (%s):
rz
Expected:
zGot:
zExpected:
%sGot nothing
zExpected nothing
Got:
%szExpected nothing
Got nothing
)rrrirjrrrr
difflibunified_difflistrcontext_diffrDifferIS_CHARACTER_JUNKcomparermr)
rrxrrprr	got_linesdiffkindengines
          r.rzOutputChecker.output_differences[	||33&&*,<cBC  sK8$7J5I\)++J	QGDz!"~<|+++J	QGDz!"~F|+ 1J1JKFNN:yAB5)4/'"''$-2HHHC.5dmWS\JJ
/'$-??
/'#,>>4r/N)r>rrrrrrrr/r.rr5sC<~<.,5r/rceZdZ	dZdZy)rc.||_||_||_yr)rVrxr)rrVrxrs    r.rzDocTestFailure.__init__s	r/c,t|jSrrBrVrs r.__str__zDocTestFailure.__str__499~r/Nr>rrrrrr/r.rrs	
r/rceZdZ	dZdZy)rc.||_||_||_yr)rVrxrs)rrVrxrss    r.rzUnexpectedException.__init__s	 
r/c,t|jSrrrs r.rzUnexpectedException.__str__rr/Nrrr/r.rrs	!
r/rc"eZdZ	ddZdZdZy)rNcptj||||d}|r|jj|S)NF)rrr7r)rrVrrrrs      r.rzDebugRunner.runHs2dD,UCJJr/ct|||r)rrs     r.rz'DebugRunner.report_unexpected_exceptionNs!$::r/ct|||r)rr{s     r.rzDebugRunner.report_failureQsT7C00r/r)r>rrrrrrr/r.rrsXt;1r/rTFc		|tjjd}tj|std|||j}t|}	|rt||}
n
t||}
|	j||||D]}|
j||r|
jt|
a
ntj|
t|
j |
j"S)Nrztestmod: module required; )r.r+rpr7r;)rFrGr4r?r@rMr>rrrrrrmasterrr'rsrr)rr-r7r+reportrpr;raise_on_errorr.finderrunnerrVs            r.rr]s>D	y
KKOOJ'A!=>>|zz
7FW+FwKHAt5ZH

4
~Vv55r/c	|r
|stdt||||xsd\}}|tjj	|}|i}n|j}||j
|d|vrd|d<|	rt||}
n
t||}
|
j||||d}|
j||r|
jt|
antj|
t|
j|
j S)N8Package may only be specified for module-relative paths.rr>rrr#)rrfrrbasenamerr7rrrrrrrr'rsrr)rarcr-rbr7r+rrpr;rr,rZtextrrVs               r.rrsK\+,	,$Hg$,$79ND(|ww)
}


Z &jW+FwKHdE41=D
JJt

~Vv55r/c	t|d}t||}|j|||D]}|j||y)NF)r+r-r)r7)r)rrrr)	rer7r+r-rrprrrVs	         r.rr@sO 7E
:F
7
DFAt514

4l
34r/cH	|tz|k7rtd|t}|a|S)NzOnly reporting flags allowed)rr_unittest_reportflags)r8olds  r.rr]s48	E)7??
C!Jr/cleZdZ		d
dZdZdZdZdZdZdZ	d	Z
d
ZdZe
jZdZy)DocTestCaseNctjj|||_||_|j
j
|_||_||_	||_
yr)unittestTestCaser_dt_optionflags_dt_checkerr7r	_dt_globs_dt_test	_dt_setUp_dt_tearDown)rrVrpsetUptearDownrvs      r.rzDocTestCase.__init__sP	""4(*"*
$r/cX|j}|j|j|yyr)rrrrVs  r.rzDocTestCase.setUps&}}>>%NN4 &r/c|j}|j|j||jj|jj	|j
yr)rr
r7rr7r
rs  r.rzDocTestCase.tearDownsM}}(d#	



$..)r/c|j}tj}t}|j}|t
zs	|tz}t||jd}	d|_	|j||jd\}}|t_|r.|j|j|jy#|t_wxYw)NFrprvr+zF----------------------------------------------------------------------)rr)rrFrr$rrrrr	rrrfailureExceptionformat_failurerr)rrVrnewrprrsrrs        r.runTestzDocTestCase.runTests}}jjj**o-
00K;'+'7'7H	#FN$jj#)))8OHeCJ''(;(;CLLN(KLLCJs(C
Cc
|j}|jd}nd|jz}dj|jj	ddd}d|jd|j
d|d|d	|
S)
Nzunknown line numberz%srrFailed doctest test for 	
  File "rrz

)rrrr-rra)rerrrVrlnames     r.rzDocTestCase.format_failuresj}};;*FDKK'F-bc2399dmmVUCA	r/c	|jt|j|jd}|j	|j
d|j
y)NFr)r)rrrr	rrr)rrs  r.r"zDocTestCase.debugsN?	B	

)=)=%)%5%5uF

4==e
4

r/c.|jjSrrr-rs r.rzDocTestCase.id
	s}}!!!r/cDt|t|urtS|j|jk(xrj|j|jk(xrO|j|jk(xr4|j
|j
k(xr|j|jk(Sr)rrrrrr
r	rs  r.rzDocTestCase.__eq__
	s:T%[(!!}}.5##u'<'<<5~~05  E$6$6655#4#44		5r/cpt|j|j|j|jfSr)rrrr
r	rs r.rzDocTestCase.__hash__	s3T))4>>4;L;L%%'(	(r/c|jjjd}|dddj|dddS)Nrrr))rr-rr)rr-s  r.rzDocTestCase.__repr__	s:}}!!'', HchhtCRy&9::r/c4d|jjzS)Nz	Doctest: r rs r.shortDescriptionzDocTestCase.shortDescription!	sT]]////r/)r#NNN)r>rrrrrrrr"rrrrrErr&rr/r.rrsMAE	%!*M0
FP"5(;nnG0r/rc(eZdZdZdZdZdZeZy)SkipDocTestCasec>||_tj|dyr)rNrr)rrNs  r.rzSkipDocTestCase.__init__%	sT4(r/c&|jdy)Nz-DocTestSuite will not work with -O2 and above)skipTestrs r.rzSkipDocTestCase.setUp)	s

EFr/cyrrrs r.	test_skipzSkipDocTestCase.test_skip,	r/c4d|jjzS)NzSkipping tests from %s)rNr>rs r.r&z SkipDocTestCase.shortDescription/	s'$++*>*>>>r/N)r>rrrrr-r&rrr/r.r(r($	s)G
?Gr/r(ceZdZdZy)
_DocTestSuitecyrr)rindexs  r._removeTestAtIndexz _DocTestSuite._removeTestAtIndex7	r.r/N)r>rrr4rr/r.r1r15	s
r/r1c	|
t}t|}|j|||}|sCtjj
dk\r&t
}|jt||S|jt
}|D]b}t|jdk(r|js |j}|dddk(r|dd}||_|jt|fi|d|S)Nrrr#rZr[r)rrPrrFr8optimizer1addTestr(r9r,rrarr)	rNr7r;test_finderrr<suiterVras	         r.rr;	s!F#o
v
&FV5ZHESYY''!+


of-.	JJLOE4t}}"}}H}&#CR=$DM


k$2'234Lr/ceZdZdZdZdZy)DocFileCasecjdj|jjjdS)Nrr)rrr-rrs r.rzDocFileCase.id}	s&xx

**00566r/c.|jjSr)rrars r.rzDocFileCase.__repr__	s}}%%%r/chd|jjd|jjd|S)Nrrz", line 0

)rr-ra)rrs  r.rzDocFileCase.format_failure	s(==%%t}}'='=sD	r/N)r>rrrrrrr/r.r;r;{	s7&r/r;c|i}n|j}|r
|stdt||||xsd\}}d|vr||d<tjj|}|j
||||d}	t|	fi|S)Nrrrr#)rrrfrrrrr;)
rrcrbr7r,rZrdocr-rVs
          r.DocFileTestrA	s
}

+,	,tWo'274IC j77D!Dc5$a8Dt'w''r/c	t}|jddrt|jd|d<|D]}|jt	|fi||S)NrcTrb)r1r4rPr7rA)pathskwr9rs    r.rr	se6n
OE

vv&)"&&*;<9
/


k$-"-./Lr/c`	g}tj|D]}t|trg|j	|j
dd|j}|s@|j	d||jdddDcgc]}d|z	c}z
}z||jdddDcgc]
}t|c}z
}|r#|ddk(r|j|r	|ddk(r|r$|ddk(r|jd|r	|ddk(rdj|dzScc}wcc}w)Nrz# Expected:r}z## rr#)rrrArrrrrrpopr)rkrpiecerrs     r.rr	s78rF&&q)8eW%MM%,,s+,::D

m,DJJt,<Sb,ABq57BB
 %D 1#2 68%Q'8
8F8VBZ3&

VBZ3&
VAY#%

1
VAY#%99Vt##C8sD&.D+c	t|}tj|}|Dcgc]}|j|k(s|}}|st	|d|d}t|j}|Scc}w)Nznot found in testsr#)rPrrr-rrr)rNr-r<rrVtestsrcs      r.r r =
stv
&FO  (E/!$A/D/3447D"4>>2GN0s
A/A/c6	t|}t|||yr)rdebug_script)srcpmr7rIs    r.r!r!M
s>"3'G"e$r/c	ddl}|r|j}ni}|r	t|||y|jdjd|z||y#tt	j
d|jd}|j|jdt	j
dYyxYw)Nr#r)T)rrzexec(%r))
rrrrOrFrsrrinteractionr)rLrMr7rps     r.rKrKR
s=

		3eU#	"":#3UEB
	3#,,.#$&A
GGI
MM$q 12s
AA,Ccb	t|}t||}t|||jyr)rPr rKr6)rNr-rMrIs    r.r"r"f
s/v
&F&G"foo.r/c eZdZ	dZdZdZy)
_TestClassc	||_yrrX)rrXs  r.rz_TestClass.__init__
s	r/c0	|jdz|_|S)NrrUrs r.squarez_TestClass.square
s	88q=r/c	|jSrrUrs r.r4z_TestClass.get
s	xxr/N)r>rrrrWr4rr/r.rSrSt
sr/rSz
                      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]
            )rSrzbool-int equivalencezblank linesellipsiszwhitespace normalizationcddl}|jd}|jddddd	|jd
ddtj	gd
|jdddd|jddd|j}|j}|j}d}|jD]}|t|z}|jr	|tz}|D]}|jdrstjj|\}}tjj!d|t#|dd}	tjd=t%|	||\}
}nt'|d||\}
}|
syy)Nr#zdoctest runner)descriptionrnz	--verbose
store_trueFz'print very verbose output for all tests)actiondefaulthelpz-oz--optionrzqspecify 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_rorz file containing the tests to run)nargsr_z.pyr)rcr+rpr))argparseArgumentParseradd_argumentr*keys
parse_argsror+r	fail_fastrr~rrrrFinsertrCrr)rcr,r	testfilesr+rrradirnamerrsrs            r._testrl
s

$
$1A
$
BF
k,FH
j 3 8 8 :BEG
mLFHc?AD		IllGG++/&v../~~9U#!#

h 7GXHHOOAw'8CR=)A!!W'JKHa"8U-4'KKHa
r/r)r)r)	NNNNTr#NFF)FNoNameNr#rk)FN)F)S
__docformat____all__r2rr?r4rrrirFrprior$r%collectionsr&r'r*rrrrrrrr	r
rrr
rrrrr;rPrUrfrmrxrzrrrrrr[rrrrrr	Exceptionrrrrrrrrrrrr(	TestSuiter1rr;rArrr r!rKr"rSrNrlr>exitrr/r.<module>rus7%N&
+Z	
	
2"(:;.O--EF+,CD*+ABz*6"-.GH*)*()	
,,#>2">2">2/0KL,	  --	!&
>2D"$/	  /b4"%CGG"%J ,\B$B$HEGEGVd;d;VBBP
vvp
P5P5dY&)&e1-e1\
373705f6P(,$dU=?y6v:B:;46!Ha0(##a0Fk"
H&&
>@+'+D=?(4CRP$d %
C(	/**X%%( )Q0
f*
ZzCHHUWr/