f9  dZgdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZddlmZeddZiZdZed Zed Zed Zed Zed ZedZeezezezezezZedZedZedZedZedZeezezezezZ dZ!dZ"dZ#dYdZ$dZ%dZ&dZdZ'dZ(Gdde Z)d Z*d!Z+d"Z,Gd#d$ej-Z.d%Z/Gd&d'Z0Gd(d)Z1Gd*d+Z2Gd,d-Z3Gd.d/Z4Gd0d1Z5Gd2d3e6Z7Gd4d5e6Z8Gd6d7e4Z9da: d[d:Z;d8ddddd8ddd9e2df d;Z< d\d=Z=da>d>Z?Gd?d@e j@ZAGdAdBeAZBGdCdDe jCZDd]dEZEGdFdGeAZFd8dde2dfdHZGdIZHdJZIdKZJd^dLZKd^dMZLd_dNZMGdOdPZNeNdQdRdSdTdUdVZOdWZPeQdXkre jRePdSdS)`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 OutputCheckerDocTestFailureUnexpectedException DebugRunnertestmodtestfilerun_docstring_examples DocTestSuite DocFileSuiteset_unittest_reportflagsscript_from_examples testsource debug_srcdebugN)StringIOIncrementalNewlineDecoder) namedtuple TestResultszfailed attemptedcbt|dttzS)N)OPTIONFLAGS_BY_NAME setdefaultlennames ./opt/alt/python311/lib64/python3.11/doctest.pyrrs&  ) )$S9L5M5M0M N NNrrrrrrr r r r rz z...c d}tjD]9}||d}|tt|ur ||jz}:|S)Nr#) __future__all_feature_namesgetgetattr compiler_flag)globsflagsfnamefeatures r/_extract_future_flagsr;s[ E-++))E4(( gj%00 0 0 W* *E Lr0c0 tj|r|St|tr+t |t t dgS|/tjtj |j dStd)N*__name__z"Expected a module, string, or None) inspectismodule isinstancestr __import__globalslocalssysmodules _getframe f_globals TypeError)moduledepths r/_normalize_modulerNs> FC >&'))VXXu=== {3=//9*EFF<===r0cJtdd|dSNT)r%decode)datas r/_newline_convertrSs" $T4 0 0 7 7d C CCr0c|rt|d}t||}t|ddx} |jj}n#t $rYnwxYwt |dr;||}||}t||fSt||5}| |fcdddS#1swxYwYdS)N __loader__get_data)encoding) rN_module_relative_pathr5__spec__loaderAttributeErrorhasattrrWrQrSopenread)filenamepackagemodule_relativerXr[ file_contentsfs r/_load_testfileres@ =#GQ//((;;g|T:: :F C  )0!     6: & & ="OOH55M)00::M$M22H< < h * * *"avvxx!""""""""""""""""""s# A AA0CCCc6 tjd|dz|S)Nz (?m)^(?!$) )resub)sindents r/_indentrms! 6,s A . ..r0c t}|\}}}tj|||||S)N)file)r$ tracebackprint_exceptiongetvalue)exc_infoexcoutexc_typeexc_valexc_tbs r/_exception_tracebackrxsH ZZF (Hgv hfEEEE ??  r0ceZdZdZddZdS) _SpoofOutcftj|}|r|ds|dz }|SN )r$rrendswith)selfresults r/rrz_SpoofOut.getvalues="4((  &//$//  dNF r0NcX||tj|dSN)seekr$truncate)rsizes r/rz_SpoofOut.truncate s( $$r0r)r? __module__ __qualname__rrrr0r/rzrzs7      r0rzc t|vr||kS|t}dt|}}|d}|r*||rt|}|d=ndS|d}|r-||r|t|z}|d=ndS||krdS|D]4}||||}|dkrdS|t|z }5dS)Nr#FT)ELLIPSIS_MARKERsplitr, startswithr~find)wantgotwsstartposendposws r/_ellipsis_matchrs" d""s{ O $ $B#c((fH 1A >>!   1vvH15 2A <<??  c!ff F25&u 88Ax00 a<<55CFF 4r0c> |}|rd|zSdS)Nz# #)rstrip)lines r/ _comment_liner@s)/ ;;==D Dysr0cdt|}}|d}|dkr|}|dd|}|dkr|}|dd|}|dkr|dz}|||S)Nr#r}:.r))r,rrfind)msgstartendis r/_strip_exception_detailsrHsCHH3E AAvv aAAvv #q#AAvv! ucz?r0c*eZdZ dZddZdZdZdS)_OutputRedirectingPdbct||_d|_tj||dd|_dS)NFT)stdoutnosigintr))_OutputRedirectingPdb__out$_OutputRedirectingPdb__debugger_usedpdbPdb__init__ use_rawinput)routs r/rz_OutputRedirectingPdb.__init__hs< $ cD999r0Ncd|_|tjj}tj||dSrP)rrGrIf_backrr set_trace)rframes r/rz_OutputRedirectingPdb.set_traceps;# =MOO*E $&&&&&r0cV|jr!tj|dSdSr)rrr set_continuers r/rz"_OutputRedirectingPdb.set_continuevs5   ' G  & & & & & ' 'r0ctj}|jt_ tjj|g|R|t_S#|t_wxYwr)rGrrrrtrace_dispatch)rargs save_stdouts r/rz$_OutputRedirectingPdb.trace_dispatch|sKj Z  %7)$6666$CJJCJ $ $ $ $s AAr)r?rrrrrrrr0r/rrbsZ '''' ''' %%%%%r0rctj|std|z|drt dt jj|d}t|dr+t j|j d}n|j dkrvttjdkrLtjddkr6t jtjdd}nt j}ntt|drM|jD]E}t j||}t j|r|cSFt d |j zt 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@rArKr ValueErrorospathjoinrr]rr?r,rGargvcurdirrexists)rL test_pathbasedir directoryfullpaths r/rYrYs  F # #:/&8999C  NLMMM ys335Ivz"",'--003 J & & sx==??sx{b00gmmCHQK003GGiGG 6: & & $#_ $ $ 7<< 9==7>>(++$#OOO$3!?+,, , 7<< + ++r0c(eZdZ ddZdZdZdS)rNr#c|ds|dz }|r|ds|dz }||ds|dz }||_||_||_||_|i}||_||_dSr|)r~sourcerlinenorloptionsexc_msg)rrrrrrlrs r/rzExample.__init__st$$  dNF   d++  DLD  w'7'7'='=  tOG    ?bG  r0c t|t|urtS|j|jkoO|j|jko?|j|jko/|j|jko|j|jko|j|jkSr)typeNotImplementedrrrrlrrrothers r/__eq__zExample.__eq__s ::T%[[ ( (! !{el*-yEJ&-{el*-{el*-|u}, - |u},  -r0c\t|j|j|j|j|jfSr)hashrrrrlrrs r/__hash__zExample.__hash__s.T[$)T[$+\#$$ $r0)Nr#r#N)r?rrrrrrr0r/rrsV!DEF$ - - -$$$$$r0rc.eZdZ dZdZdZdZdZdS)rc ||_||_||_||_||_||_dSr)examples docstringcopyr7r.r`r)rrr7r.r`rrs r/rzDocTest.__init__s? ! "ZZ\\     r0c t|jdkrd}n2t|jdkrd}ndt|jz}d|jjd|jd|jd |jd |d S) Nr#z no examplesr)z 1 examplez %d examples)r,r __class__r?r.r`r)rrs r/__repr__zDocTest.__repr__s t}   " "$HH   1 $ $"HH$s4='9'99H(((DMMM4;;;B Cr0c t|t|urtS|j|jkoO|j|jko?|j|jko/|j|jko|j|jko|j|jkSr)rrrrr7r.r`rrs r/rzDocTest.__eq__*s ::T%[[ ( (! !}.+~0+zU[(+yEJ&+}. + {el*  +r0cPt|j|j|j|jfSr)rrr.r`rrs r/rzDocTest.__hash__5s!T^TY t{KLLLr0ct|tstS|j|jnd}|j|jnd}|j|j|t |f|j|j|t |fkS)Nr)rBrrrr.r`id)rrself_lno other_lnos r/__lt__zDocTest.__lt__9sv%)) "! !"&+"94;;r$)L$U^Y5 BC Dr0N)r?rrrrrrrrr0r/rrso.    C C C + + +MMMDDDDDr0rcNeZdZ ejdejejzZejdejejzejzZ ejdj Z ddZ dZ ddZdZejd ejZd Zejd ejZd Zd ZdZdS)ra # Source consists of a PS1 line followed by zero or more PS2 lines. (?P (?:^(?P [ ]*) >>> .*) # PS1 line (?:\n [ ]* \.\.\. .*)*) # PS2 lines \n? # Want consists of any non-blank lines that do not start with PS1. (?P (?:(?![ ]*$) # 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 Traceback\ \( (?: most\ recent\ call\ last | innermost\ last ) \) : ) \s* $ # toss trailing whitespace on the header. (?P .*?) # don't blink: absorb stuff until... ^ (?P \w+ .*) # a line *starts* with alphanum. z ^[ ]*(#.*)?$c |}|| dkr4d fd|dD}g}d\}}|j|D],}||||||d||z }| |||\}}} } | |sK|t|| | | t| dz|||d||z }|}.|||d|S)Nr#r}c$g|] }|d Srr).0l min_indents r/ z'DocTestParser.parse..s!KKK1*++KKKr0r#r#rl)rrlr) expandtabs _min_indentrr _EXAMPLE_REfinditerappendrcount_parse_example_IS_BLANK_OR_COMMENTrr,groupr) rstringr.outputcharnormrrrrrs @r/parsezDocTestParser.parsevs ""$$%%f-- >>YYKKKK T8J8JKKKLLF!**622  A MM& !12 3 3 3 fll4;; ;F((D&99 -VWdG,,V44 7 wvtW+1+5c!''(:K:K6L6L+L,3 5 5 5777 fll4AEEGG<< .s6+++aa))++++r0)r)rrr.s r/rzDocTestParser.get_exampless5 ++4::fd33+++ +r0c H t|d |dd}|| ||||ddd zdz||d fd|D}|d}|d}t|dkrt jd |d r|d =||d z||t|zd fd |D}|j|}|r|d }nd}| |||} || ||fS) Nrlrr}r)rhrc*g|]}|dzdS)rfNr)rslrls r/rz0DocTestParser._parse_example..s%AAAbBvaxyyMAAAr0rz *$rc$g|] }|d Srr)rwlrls r/rz0DocTestParser._parse_example..s!;;;""VWW+;;;r0r) r,rr_check_prompt_blank _check_prefixrrimatch _EXCEPTION_RE _find_options) rrr.r source_linesrr want_linesrrrls @r/rzDocTestParser._parse_examples QWWX&&''wwx((..t44    vtVDDD <+SZ#-=tVLLLAAAALAAABB wwvZZ%% z??Q  28FJrN#C#C 2 :s6z4!C $5$55 7 7 7yy;;;; ;;;<<   $ $T * *  ggennGGG$$VT6::wg--r0z#\s*doctest:\s*([^\n\'"]*)$c  i}|j|D]}|ddd}|D]\}|ddvs|ddt vrt d|dzd|d|t |dd}|dd k||<]|r-||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_optionss6 *33F;; 3 3AWWQZZ//S99??AAN( 3 31IT))122J&999$*&,Qhhhff&>???+6!"":6!'c!1  3  5t0088 5*$ffdddFF455 5r0z ^([ ]*)(?=\S)c d|j|D}t|dkrt|SdS)Nc,g|]}t|Sr)r,)rrls r/rz-DocTestParser._min_indent.. sHHH63v;;HHHr0r#) _INDENT_REfindallr,min)rrkindentss r/rzDocTestParser._min_indent sJEHHT_-D-DQ-G-GHHH w<)> j"((1***ddd"&vfQh"7"7"7"?@@@ @ @r0c  t|D]:\}}|r3||std||zdzd|d|;dS)Nrr)r%z& has inconsistent leading whitespace: )r&rr)rr'prefixr.rrrs r/rzDocTestParser._check_prefix!s| !'' ; ;GAt ;DOOF33 ; j"((1***dddDD":;;; ; ;r0N)r)r?rrricompile MULTILINEVERBOSErDOTALLrrrrrrrrrr rrrrr0r/rrFsD"*  \BJ & ( (K,BJ Z", & 2 4 4M&2:o66<%%%%N 7 7 7 + + + +*.*.*.f&2:&D&(l448,bl;;J @ @ @ ; ; ; ; ;r0rcVeZdZ deddfdZd dZdZdZdZd Z d Z dS) rFTc@ ||_||_||_||_dSr)_parser_verbose_recurse_exclude_empty)rverboseparserrecurse exclude_emptys r/rzDocTestFinder.__init__:s,    +r0Nc  |2t|dd}|tdt||durd}n|tj|} tj|}|s-tj|}|d|ddzdksd}|d}nH|tj||j }ntj|}|sd}n#t$rd}YnwxYw||i}n.|j }n| }|| |d|vrd|d<g}| ||||||i||S)Nr?zHDocTestFinder.find: name must be given when obj.__name__ doesn't exist: Fr#z<]>r)r5rrr@ getmodule getsourcefilegetfile linecachegetlines__dict__rKrupdate_findsort) robjr.rLr7 extraglobsrortestss r/rzDocTestFinder.findPs! F <3 D11D| j"&s)))"./// U??FF ^&s++F  ((--D ?s++AwtBCCy(E11$4|# %$-#5dFO#L#LLL$-#5d#;#;L#(#'L+   LLL 0 =~,,..JJLLE  ! LL $ $ $ U " " *E*  5#tV\5"EEE   sC C! C!cL |dStj||tj|uStj|r|j|juStj|stj|rBt|dr |jj }nt|dr|j }ndS|j |kStj |r|j |j kSt|dr|j |j kSt|trdStd)NT __objclass__rz"object must be a class or function)r@r: isfunctionr? __globals__ismethoddescriptorismethodwrapperr]rGrr?isclassrBpropertyr)rrLobjectobj_mods r/ _from_modulezDocTestFinder._from_modules@  >4  v & & 2W.v666 6   ' ' C?f&88 8(00 C%f-- Cv~..  -8..  +t?g- - _V $ $ C?f&77 7 V\ * * C?f&77 7  ) ) C4ABB Br0c| |} tj|}n#t$rYnwxYwtj|Sr)r@unwrapr isroutine)rrC maybe_routines r/ _is_routinezDocTestFinder._is_routinesU   #N=99MM    D  ///s  ''c  |jrtd|zt||vrdSd|t|<||||||}|||t j|r|jr|j D]f\} } |d| } | | st j | r1| || r| || | ||||gt j|r|jrt|di D]\} } t| t st#dt%| t j| s\t j | sHt j| s4t| t st#dt%| |d| } | || | ||||t j |r|jr|j D]\} } t| t(t*fr| j} t j| s)t j | st| t.r8| || r"|d| } | || | ||||dSdSdS)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__.)r1printr _get_testrr@rAr2r?itemsrUrLrPrAr5rBrCrrrS staticmethod classmethod__func__rM) rrErCr.rLrr7seentestvalnamevals r/rAzDocTestFinder._findsc  = 0 '$. / / / c77d?? FRWW ~~c4 EE   LL     C  ,T] , # 2 2 4 4 , , %)TT773%%c**,goc.B.B,%%fc22,JJuc7FL$d,,,  C  (T] ( 'Z < < B B D D ( ( !'3//7$*&*7mmm&6777 )#..3'/#2F2F3(--31;C1E1E3$*'+3iii&2333/3ddGG< 5#w  $(((( ?3   ,DM , # 2 2 4 4 , , cL+#>??',C&s++,ws/C/C, h//,''44,*.ww7GJJuc7FL$d,,, , , , , , ,r0c t|tr|}nP |jd}n+|j}t|tst|}n#ttf$rd}YnwxYw|||}|jr|sdS|d}n0t|ddp|j}|dddkr |dd}|j |||||S)Nrr.pycr) rBrC__doc__rKr\ _find_linenor3r5r?r0r) rrCr.rLr7rrrr`s r/rYzDocTestFinder._get_tests! c3   II ;& "II # I%i553$' NN ~.     ""3 55   y 4 >HHvz488KFOH}&&#CRC=|'' 5$(0&:: :s5AA'&A'c  d}t|dd}tj|r|d}tj|rl|j|dSt jdt jt|ddz}t|D]\}}||r|}ntj |r|j }t|tr|j }tj|r*t|ddrtj|j}tj|r|j}tj|r|j}tj|r |jdz }|Z||dzSt jd}t/|t1|D]!}|||r|cS"dS)Nrer#z^\s*class\s*%s\br?-r)z(^|.*:)\s*\w*("|\'))r5r@rArLrir*escaper&rismethodr]rBrMfgetrHrR__code__ istracebacktb_frameisframef_codeiscodeco_firstlinenoranger,)rrCrrrpatrrs r/rfzDocTestFinder._find_linenoAs CD11   C  Y%:F ?3   I$9#t*0YwsJ'D'DEEFGGC$\22  499T??FE  C 4 # c8 $ $ (C  c " " /wsIt'D'D /.%%.C  s # #73#   ,'!+F  #ax*344CL(9(9:: " "99\&122"!MMM"tr0NNNN) r?rrrrrrPrUrArYrfrr0r/rr1s %]]__T,,,,,ddddLCCC: 0 0 0;,;,;,z$:$:$:L44444r0rceZdZ dZddZdZdZdZdZd Z d Z d Z e j d Zdd ZddZddZdZdS)rzF**********************************************************************Nr#c |p t|_|dtjv}||_||_||_d|_d|_i|_ t|_ dS)N-vr#) r_checkerrGrr1 optionflagsoriginal_optionflagstriesfailures_name2ftrz_fakeout)rcheckerr4rzs r/rzDocTestRunner.__init__si  2=?? ?ch&G &$/!   "  r0c |jrf|jr:|dt|jzdzt|jzdS|dt|jzdzdSdS)NzTrying: z Expecting: zExpecting nothing )r1rrmr)rrr_examples r/ report_startzDocTestRunner.report_starts  = +| +K''."9"99"#%,W\%:%:;<<<<<K''."9"99)*+++++  + +r0c0 |jr |ddSdS)Nzok )r1rrr_rrs r/report_successzDocTestRunner.report_successs.  =  CKKKKK  r0c |||||j|||jzdSr)_failure_headerryoutput_differencerzrs r/report_failurezDocTestRunner.report_failures^  D w / / M + +GS$:J K K L M M M M Mr0c ||||dztt|zdS)NzException raised: )rrmrxrrr_rrss r/report_unexpected_exceptionz)DocTestRunner.report_unexpected_exceptions`  D w / / ! "$+,@,J,J$K$K L M M M M Mr0c|jg}|jrL|j|j|j|jzdz}nd}|d|jd|d|jn(|d|jdzd|j|d|j}|t |d|S) Nr)?zFile "", line , in zLine zFailed example:r})DIVIDERr`rrr.rrmr)rr_rrrrs r/rzDocTestRunner._failure_headers|n = I{&7>+Ew~59 JJJ vvvtyy: ; ; ; ; JJJ7>!+;+;+;TYYG H H H $%%% 76??###yy~~r0c  dx}}|j}td\}}} |jj} t |jD]\} } |jt zo|dk} ||_| jrC| jD])\}}|r|xj|zc_|xj|zc_*|jtzr||dz }| s| ||| d|j | fz} tt| j|d|d|j|jd}n=#t$$rt'j}|jYnxYw|j}|jd|}|| | j||jr|}n t3j|dd}t7|dt8r`|djd|djd |djdft?fd t |D}||d}d |}| s|tC|z }| j"| }n\| | j"||jr|}nB|jtFzr3| tI| j"tI||jr|}||ur| s|%||| |nG||ur | s|&||| ||dz }n#|| ur| s|'||| ||dz }|r|jtPzrn||_|)|||tU||S) Nr#rUr)zsingleTr<rrc3LK|]\}}||VdSr)r)rindexrexception_line_prefixess r/ z&DocTestRunner.__run..ksN))'E4??+BCC)))))))r0r)+rzrsry check_outputr&rr rrZrrr.execr*rr7debuggerrKeyboardInterruptrGrsrrrrrrpformat_exception_only issubclass SyntaxErrorrrnextrrxrrrrrrr_DocTestRunner__record_outcomer')rr_ compileflagsrr}r|r{SUCCESSFAILUREBOOMcheck examplenumrquiet optionflagrar` exceptionroutcome formatted_ex exc_msg_indexrrs @r/__runzDocTestRunner.__runs 5 $/!&q$ *$-T]#;#;o o  J%(AA"\  4D  8)0)>)>)@)@88%Z8((J6(((((ZK7((($&  QJE 6!!#tW555 *TY ,CCH -WW^Xx)41126*>>> **,,, $    -LNN  **,,,,,-((**C M " "1 % % %G 5sD,<==&%G )> "1" N ilK88@ %Q<4777$Q<2QQYq\5NQQQ/+%)))))+4\+B+B)))%%M $0 #?L'',//;/ :::C?*"GGU7?GT5EFF*%GG%(??*u5goFF5g>>!-//*#*'!!A''T7C@@@G##A''T7C@@@A D@44S$5>@@@A  D,y8 0 dHe4448U+++s (AD//8E)c |j|jd\}}||z||zf|j|j<|xj|z c_|xj|z c_dS)Nr)r~r4r.r}r|)rr_rdtf2t2s r/__record_outcomezDocTestRunner.__record_outcomesc ""49e44B$%bD!B$< di    a r0z..+)\[(?P\d+)\]>$cF|j|}|rp|d|jjkrM|jjt |d}|jdS| ||S)Nr.rTkeepends) %_DocTestRunner__LINECACHE_FILENAME_RErrr_r.rintr splitlinessave_linecache_getlines)rr`module_globalsrrs r/__patched_linecache_getlinesz*DocTestRunner.__patched_linecache_getliness  ( . .x 8 8  JDIN22i(QWW\-B-B)C)CDG>,,d,;; ;//.II Ir0Tc" ||_|t|j}tj |/ j  dkr j}n fd}|jt_tj }tj }t |_ |j |j j t_ tj|_|jt_tj}tjt_ |||| t_|t_ tj||jt_|t_|r%|jddl}d|_SS# t_|t_ tj||jt_|t_|r$|jddl}d|_wxYw)Nutf-8czt|d}|dS)Nbackslashreplace)rCencodewrite)rkrXrs r/rzDocTestRunner.run..outs;AHHX/ABBHMMA%%a(((((r0r#)r_r;r7rGrrXlowerrrgettracerrrrresetr=r>r*_DocTestRunner__patched_linecache_getlines displayhook__displayhook___DocTestRunner__runsettraceclearbuiltins_) rr_rr clear_globs save_tracesave_set_tracesave_displayhookrrXrs @@r/runzDocTestRunner.runs &  0<>#3#3w#>#>!'))))))] \^^ -k::   / (1'9$!> ?- "::dL#66$CJ*CM L $ $ $!%!=I .CO "   """!  " %CJ*CM L $ $ $!%!=I .CO "   """! !!!!s FA1Hc ||j}g}g}g}dx}}|jD]c}|\}\} } || z }|| z }| dkr||0| dkr||| fN||d|r|rFt t |d||D]} t d| |rMt t |d||D]\} } t d| | fz|ret |jt t |d||D]\} \} } t d| | | fz|r9t |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.) r1r~rZrrXr,rBrr') rr4notestspassedfailedtotalttotalfrr.rdrthingrs r/ summarizezDocTestRunner.summarizesb  ?mG$$&& ! !ALD&1a aKF aKFAvvt$$$$a ay**** a     ? (c'll$9::: $((E%'''' ?c&kk#<=== $*??LE5,u~=>>>>  ; $,    #f++4 5 5 5 KKMMM!' ; ; v1)Q5M9::::  D &*c$-&8&8( C C C &6/< C C C  " %v{ ; ; ; ;  " . ! ! !66***r0c|j}|jD](\}\}}||vr||\}}||z}||z}||f||<)dSr)r~rZ)rrdr.rdrrrs r/mergezDocTestRunner.merge7sq M!N0022  LD&1aqyy 4BFFdAdGG  r0)NNr#rNNT)r?rrrrrrrrrrrrir*rrrrrrr0r/rr{s6rG$$$$H + + +MMMMMM(L,L,L,\)bj*FGGJJJJD"D"D"D"R4+4+4+4+r     r0rc(eZdZ dZdZdZdZdS)rcL t|dddS)NASCIIr)rCr)rrks r/_toAsciizOutputChecker._toAsciiLs( 188G%788'BBBr0cP ||}||}||krdS|tzs||fdkrdS||fdkrdS|tzsNtjdtjt zd|}tjdd|}||krdS|tzrVd| }d| }||krdS|tzrt||rdSdS) NT)zTrue z1 )zFalse z0 z (?m)^%s\s*?$rz(?m)^[^\S\n]+$rhF) rrrrirjriBLANKLINE_MARKERrrrrrrrrrzs r/rzOutputChecker.check_outputRsN mmC  }}T"" $;;444 Dz...tDz///t33 6/BI6F,G,GGd$$D&*B44Cd{{t - - ((399;;''C88DJJLL))Dd{{t  ! tS)) tur0c|ttztzzsdS|tzrdS|ddko|ddkS)NFTr}r<)r r r rrs r/_do_a_fancy_diffzOutputChecker._do_a_fancy_diffsil*+*+, 5  % 4zz$!#; $!(;;r0c\ |j}|tzstjdt|}||||r|d}|d}|tzr1tj ||d}t|dd}d}n|tzr1tj ||d}t|dd}d}nN|tzrDtjtj} t| ||}d }d |zt#d |zS|r$|r"d t#|d t#|S|rdt#|zS|rdt#|zSdS)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) rrrrzrr got_linesdiffkindengines r/rzOutputChecker.output_differences |33 C&*, >44r0N)r?rrrrrrrr0r/rrDsYCCC <<<~<<<.,5,5,5,5,5r0rceZdZ dZdZdS)rc0||_||_||_dSr)r_rr)rr_rrs r/rzDocTestFailure.__init__s  r0c*t|jSrrCr_rs r/__str__zDocTestFailure.__str__49~~r0Nr?rrrrrr0r/rrs7  r0rceZdZ dZdZdS)rc0||_||_||_dSr)r_rrs)rr_rrss r/rzUnexpectedException.__init__s    r0c*t|jSrrrs r/rzUnexpectedException.__str__rr0Nrrr0r/rrs7 !!! r0rc$eZdZ ddZdZdZdS)rNTcxt||||d}|r|j|S)NF)rrr7r)rr_rrrrs r/rzDebugRunner.runWs>   dD,U C C   J     r0c$t|||r)rrs r/rz'DebugRunner.report_unexpected_exception]s!$:::r0c$t|||r)rrs r/rzDebugRunner.report_failure`sT7C000r0r)r?rrrrrrr0r/rrsMX t ;;;11111r0rTFc  |tjd}tj|st d|||j}t|} |rt||} nt||} | ||||D]} | | |r| t| a nt| t| j| jS)Nrztestmod: module required; )r7r4rzr7rD)rGrHr4r@rArKr?rrrrrrmasterrr'r}r|) rr.r7r4reportrzrDraise_on_errorr7finderrunnerr_s r/rrls!>D y KOOJ ' '  A  ?i!!=>>> |z 7 7 7FIW+FFFwKHHH At5Z HH 4  ~ V v 5 55r0c Z |r|stdt|||| pd\} }|tj|}|i}n|}|||d|vrd|d<| rt||} nt||} | | |||d}| ||r| t| a nt | t| j| jS)N8Package may only be specified for module-relative paths.rr?rrr#)rrerrbasenamerr@rrrrrrrr'r}r|)r`rbr.rar7r4r rzrDr r5rXtextr r_s r/rrsbK\,,+,, ,$Hg$,$799ND( |w)) }  Z   &jIW+FFFwKHHH   dE41 = =D JJt  ~ V v 5 55r0NoNamec t|d}t||}||||D]}|||dS)NF)r4r6r)r7)r)rrrr) rdr7r4r.rrzr r r_s r/rrOsq 7E : : :F 7 D D DF At5 1144 4l 333344r0cV |tz|krtd|t}|a|S)NzOnly reporting flags allowed)rr_unittest_reportflags)r8olds r/rrls:8 E))7??? C! Jr0cdeZdZ ddZdZdZdZdZdZd Z d Z d Z d Z e jZd ZdS) DocTestCaser#Nctj|||_||_||_||_||_dSr)unittestTestCaser_dt_optionflags _dt_checker_dt_test _dt_setUp _dt_tearDown)rr_rzsetUptearDownrs r/rzDocTestCase.__init__sG ""4(((*" $r0c|j}|j|_|j||dSdSr)rr7r _dt_globsrrr_s r/r zDocTestCase.setUpsD}** > % NN4  & %r0c|j}|j|||j|j|jdSr)rrr7rr@r#r$s r/r!zDocTestCase.tearDownsZ}   (   d # # #  $.)))))r0c|j}tj}t}|j}|t zs |t z}t||jd} d|_ | ||j d\}}|t_n#|t_wxYw|r:| | |dS)NFrzrr4zF----------------------------------------------------------------------)rr)rrGrr$rrrrrrrrfailureExceptionformat_failurerr)rr_rnewrzr r}r|s r/runTestzDocTestCase.runTests}jjj* o- 1 0 0K;'+'7HHH #FN$jj#))88OHeCJJCJ      M''(;(;CLLNN(K(KLL L M Ms 'B Bc |j}|jd}n d|jz}d|jddd}d|jd|jd|d|d | S) Nzunknown line numberz%srrFailed doctest test for File "rrz )rrrr.rr`)rerrr_rlnames r/r)zDocTestCase.format_failures|} ; *FFDK'F--bcc233999dmmmVVVUUUCCA r0c |t|j|jd}||jd|dS)NFr')r)r rrrrrr!)rr s r/r"zDocTestCase.debugsd? B )=%)%5uFFF 4=e 444 r0c|jjSrrr.rs r/rzDocTestCase.id s }!!r0ct|t|urtS|j|jko?|j|jko/|j|jko|j|jko|j|jkSr)rrrrrrrrs r/rzDocTestCase.__eq__ s~ ::T%[[ ( (! !}.5#u'<<5~05 E$6655#44  5r0cPt|j|j|j|jfSr)rrrrrrs r/rzDocTestCase.__hash__& s-T)4>4;L%'(( (r0c|jjd}|ddd|dddS)Nrrr))rr.rr)rr.s r/rzDocTestCase.__repr__* sG}!'',, HHHchhtCRCy&9&9&9&9::r0c d|jjzS)Nz Doctest: r3rs r/shortDescriptionzDocTestCase.shortDescription0 sT]///r0)r#NNN)r?rrrr r!r+r)r"rrrrrNrr9rr0r/rrsAE%%%%!!!***MMM0   FFFP"""555(((;;;nG00000r0rc*eZdZdZdZdZdZeZdS)SkipDocTestCasecJ||_t|ddSr)rLrr)rrLs r/rzSkipDocTestCase.__init__4 s% T4(((((r0c0|ddS)Nz-DocTestSuite will not work with -O2 and above)skipTestrs r/r zSkipDocTestCase.setUp8 s EFFFFFr0cdSrrrs r/ test_skipzSkipDocTestCase.test_skip;  r0c d|jjzS)NzSkipping tests from %s)rLr?rs r/r9z SkipDocTestCase.shortDescription> s'$+*>>>r0N)r?rrrr r@r9rrr0r/r;r;3 sT)))GGG   ???GGGr0r;ceZdZdZdS) _DocTestSuitecdSrr)rrs r/_removeTestAtIndexz _DocTestSuite._removeTestAtIndexF rAr0N)r?rrrFrr0r/rDrDD s#     r0rDc " |t}t|}||||}|sGtjjdkr2t }|t||S| t }|D]h}t|j dkr|j s&|j }|dddkr |dd}||_ |t|fi|i|S)Nrr<r#rcrdr)rrNrrGr8optimizerDaddTestr;rBr,rr`rr) rLr7rD test_finderrrEsuiter_r`s r/rrJ s!F#oo v & &F   V5Z  H HE SY'!++ of--...  JJLLL OOE44 t}   " " } %H}&&#CRC=$DM k$22'223333 Lr0c eZdZdZdZdZdS) DocFileCasecfd|jjdS)Nrr)rrr.rrs r/rzDocFileCase.id s'xx *0055666r0c|jjSr)rr`rs r/rzDocFileCase.__repr__ s }%%r0c@d|jjd|jjd|S)Nr-r.z ", line 0 )rr.r`)rr/s r/r)zDocFileCase.format_failure s.=%%%t}'='='=ssD r0N)r?rrrrr)rr0r/rMrM sA777&&&r0rMc $|i}n|}|r|stdt||||pd\}}d|vr||d<tj|}|||||d} t| fi|S)Nrrrr#)rrrerrrrrM) rrbrar7r5rXrdocr.r_s r/ DocFileTestrS s } ,,+,, ,tWo'2744IC j 7  D ! !D   c5$a 8 8D t ' 'w ' ''r0c t}|ddr%t|d|d<|D]"}|t |fi|#|S)NrbTra)rDr4rNrIrS)pathskwrKrs r/rr s6n OOE  vv&&=)"&&*;*;<<9 // k$--"--.... Lr0c g}t|D]}t|trk||jdd|j}|r?|d|d|dddDz }|d|dddDz }|r.|ddkr"||r |ddk"|r/|ddkr#|d|r |ddk#d |dzS)Nrz # Expected:cg|]}d|zS)z## rrrs r/rz(script_from_examples..= sBBBq57BBBr0r}c,g|]}t|Sr)rrYs r/rz(script_from_examples..@ s0888%Q''888r0rr#) rrrBrrrrrpopr)rkrpiecers r/rr s8 rF&&q)) 8 8 eW % % 8 MM%,ss+ , , ,:D C m,,,BBDJJt,<,.U s / / /!$Ar0znot found in testsr#)rNrrrrr)rLr.rEr_testsrcs ` r/r r L s} v & &F OO  ( (E / / / /u / / /D 53444 7D"4>22G Nr0cH t|}t|||dSr)r debug_script)srcpmr7r_s r/r!r!\ s*>"3''G"e$$$$$r0c ddl}|r|}ni}|r t|||dS#tt jd|jd}||dt jdYdSxYw|jd d|z||dS)Nr#r)T)rr<zexec(%r)) rrrrXrGrsrr interactionr)rbrcr7rps r/raraa s=JJJ   C 3 eU # # # # # 3 #,..# $ $ $&&&A GGIII MM$ q 1 2 2 2 2 2 2"":#3UEBBBBBs 5A:B2cr t|}t||}t|||jdSr)rNr rar?)rLr.rcr_s r/r"r"u s? v & &F&&G"fo.....r0c"eZdZ dZdZdZdS) _TestClassc ||_dSrra)rras r/rz_TestClass.__init__ s r0c& |jdz|_|S)Nr<rkrs r/squarez_TestClass.square s 8q= r0c |jSrrkrs r/r4z_TestClass.get s xr0N)r?rrrrmr4rr0r/riri sF r0riz 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 : >>> print('foo\n\nbar\n') foo bar 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] )rirzbool-int equivalencez blank linesellipsiszwhitespace normalizationc4ddl}|d}|ddddd |d d d tgd |dddd|ddd|}|j}|j}d}|jD]}|t|z}|j r |tz}|D]}| dr|tj |\}}tj d|t#|dd} tj d=t%| ||\} } nt'|d||\} } | rdSdS)Nr#zdoctest runner) descriptionrxz --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)rschoicesrtruz-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))rsrurorz file containing the tests to run)nargsruz.pyr)rbr4rzr))argparseArgumentParser add_argumentr*keys parse_argsror4r fail_fastrr~rrrrGinsertrDrr) ryr5r testfilesr4rrr`dirnamerr}rs r/_testr s OOO  $ $1A $ B BF k,FHHH j 3 8 8 : :BEGGG  mLFHHH c?AAA     D IlGG+//&v.. ~9   U # # K!# h 7 7 GX HOOAw ' ' '8CRC=))A !!W'JJJKHaa"8U-4'KKKKHa  11  1r0r)r<)rf) NNNNTr#NFF)FrNr#ru)FN)F)S __docformat____all__r2rr@r=rrrirGrprior$r% collectionsr&r'r*rrrrrrrr r r r r rrrrr;rNrSrermrxrzrrrrrrYrrrrrr Exceptionrrrrrrrrrrrr; TestSuiterDrrMrSrrr r!rar"rirWrr?exitrr0r/rsS%N& + + + Z 22222222""""""j(:;; .OOO-,-EFF++,CDD**+ABB  z * *6""--.GHH*)*()  , ,#">22 "">22 "">22 //0KLL   , ,   -- !&   >>>>&DDD"""$////             ///b4"%"%"%"%"%CG"%"%"%J , , ,\B$B$B$B$B$B$B$B$HGDGDGDGDGDGDGDGDZd;d;d;d;d;d;d;d;VDDDDDDDDT GGGGGGGGRP5P5P5P5P5P5P5P5dY&)&e1e1e1e1e1-e1e1e1\ 373705f6f6f6f6P(,$dU==??y6y6y6y6v:B:;44446!!!Ha0a0a0a0a0(#a0a0a0Fk"     H&   >>>>@     +   '+D==??((((4CCCRP$P$P$d %%%% CCCC( / / / /********X%%( )Q0 0 f* * * Z z CHUUWWr0