grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 й¼]d–ã!@s$dZddddddddd d d d d ddddddddddddddddddd d!g!Zd"d#lZd"d#lZd"d#lZd"d#lZd"d#lZd"d#lZd"d#lZd"d#l Z d"d#l Z d"d#l Z d"d#l Z d"d$l mZd"d%lmZed&d'ƒZiZd(d„ZedƒZedƒZedƒZedƒZedƒZedƒZeeBeBeBeBeBZed ƒZed ƒZed ƒZed ƒZedƒZeeBeBeBeBZ d)Z!d*Z"d+d,„Z#d-d.d/„Z$d0d1„Z%d2d3d4„Z&d5d6„Z'Gd7d8„d8eƒZ(d9d:„Z)d;d<„Z*d=d>„Z+Gd?d@„d@ej,ƒZ-dAdB„Z.GdCd„dƒZ/GdDd„dƒZ0GdEd„dƒZ1GdFd„dƒZ2GdGd„dƒZ3GdHd„dƒZ4GdId„de5ƒZ6GdJd„de5ƒZ7GdKd„de3ƒZ8d#a9d#d#d#d#dLd"d#dMdMdNd„ Z:dLd#d#d#d#dLd"d#dMe1ƒd#dOd„ Z;dMdPd#d"dQd„Z<d"a=dRd„Z>GdSdT„dTe j?ƒZ@GdUdV„dVe@ƒZAGdWdX„dXe jBƒZCd#d#d#d#dYd„ZDGdZd[„d[e@ƒZEdLd#d#e1ƒd#d\d]„ZFd^d„ZGd_d„ZHd`d„ZIdMd#dad „ZJdMd#dbdc„ZKdMddd!„ZLGdedf„dfƒZMdfeMdgdhdidjdkdldmdndodpiZNdqdr„ZOePdskr e jQeOƒƒd#S)tzreStructuredText 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Ú TestResultszfailed attemptedcCstj|dttƒ>ƒS)Né)ÚOPTIONFLAGS_BY_NAMEÚ setdefaultÚlen)Úname©r+ú,/opt/alt/python35/lib64/python3.5/doctest.pyr…sz z...cCsRd}xEtjD]:}|j|dƒ}|tt|ƒkr||jO}qW|S)Nr")Ú __future__Zall_feature_namesÚgetÚgetattrZ compiler_flag)ÚglobsÚflagsZfnameZfeaturer+r+r,Ú_extract_future_flags¸s r2écCsutj|ƒr|St|tƒr>t|tƒtƒdgƒS|dkretjtj |ƒj dSt dƒ‚dS)NÚ*Ú__name__z"Expected a module, string, or None) ÚinspectÚismoduleÚ isinstanceÚstrÚ __import__ÚglobalsÚlocalsÚsysÚmodulesÚ _getframeÚ f_globalsÚ TypeError)ÚmoduleÚdepthr+r+r,Ú_normalize_moduleÄs  rDc Cs¸|rˆt|dƒ}t||ƒ}t|ddƒdk rˆt|jdƒrˆ|jj|ƒ}|j|ƒ}|jtj dƒ|fSt |d|ƒ�}|j ƒ|fSWdQRXdS)NéÚ __loader__Úget_dataÚ Úencoding) rDÚ_module_relative_pathr/ÚhasattrrFrGÚdecodeÚreplaceÚosÚlinesepÚopenÚread)ÚfilenameÚpackageÚmodule_relativerIZ file_contentsÚfr+r+r,Ú_load_testfile×srVécCstjd|d|ƒS)Nz (?m)^(?!$)ú )ÚreÚsub)ÚsÚindentr+r+r,Ú_indentåsr]cCs;tƒ}|\}}}tj|||d|ƒ|jƒS)NÚfile)r#Ú tracebackÚprint_exceptionÚgetvalue)Úexc_infoZexcoutÚexc_typeÚexc_valÚexc_tbr+r+r,Ú_exception_tracebackís rfc@s+eZdZdd„Zddd„ZdS)Ú _SpoofOutcCs3tj|ƒ}|r/|jdƒ r/|d7}|S)NrH)r#raÚendswith)ÚselfÚresultr+r+r,raús z_SpoofOut.getvalueNcCs|j|ƒtj|ƒdS)N)Úseekr#Útruncate)riÚsizer+r+r,rls z_SpoofOut.truncate)r5Ú __module__Ú __qualname__rarlr+r+r+r,rgùs  rgcCst|kr||kS|jtƒ}dt|ƒ}}|d}|rq|j|ƒrmt|ƒ}|d=ndS|d}|r®|j|ƒrª|t|ƒ8}|d=ndS||kr¾dSxC|D];}|j|||ƒ}|dkrðdS|t|ƒ7}qÅWdS)Nr"Fr&Téÿÿÿÿrp)ÚELLIPSIS_MARKERÚsplitr)Ú startswithrhÚfind)ÚwantÚgotZwsÚstartposÚendposÚwr+r+r,Ú_ellipsis_matchs0          rzcCs"|jƒ}|rd|SdSdS)Nz# ú#)Úrstrip)Úliner+r+r,Ú _comment_line9s r~cCs”dt|ƒ}}|jdƒ}|dkr4|}|jdd|ƒ}|dkr[|}|jdd|ƒ}|dkr†|d}|||…S)Nr"rHú:Ú.r&)r)rtÚrfind)ÚmsgÚstartÚendÚir+r+r,Ú_strip_exception_detailsAs     r†c@sCeZdZdd„Zddd„Zdd„Zdd „ZdS) Ú_OutputRedirectingPdbcCs;||_d|_tjj|d|ddƒd|_dS)NFÚstdoutÚnosigintTr&)Ú_OutputRedirectingPdb__outÚ$_OutputRedirectingPdb__debugger_usedÚpdbÚPdbÚ__init__Z use_rawinput)riÚoutr+r+r,rŽas  z_OutputRedirectingPdb.__init__NcCs;d|_|dkr$tjƒj}tjj||ƒdS)NT)r‹r=r?Úf_backrŒr�Ú set_trace)riÚframer+r+r,r‘is  z_OutputRedirectingPdb.set_tracecCs|jrtjj|ƒdS)N)r‹rŒr�Ú set_continue)rir+r+r,r“os z"_OutputRedirectingPdb.set_continuec Gs=tj}|jt_ztjj||ŒSWd|t_XdS)N)r=rˆrŠrŒr�Útrace_dispatch)riÚargsÚ save_stdoutr+r+r,r”us   z$_OutputRedirectingPdb.trace_dispatch)r5rnrorŽr‘r“r”r+r+r+r,r‡[s   r‡cCs÷tj|ƒstd|ƒ‚|jdƒr:tdƒ‚t|dƒretjj|j ƒd}nv|j dkrÈt t j ƒdkr¼t j ddkr¼tjjt j dƒd}qÛtj}ntd|j ƒ‚tjj||jdƒŒS) NzExpected a module: %rú/z1Module-relative files may not have absolute pathsÚ__file__r"Ú__main__ÚzBCan't resolve paths relative to the module %r (it has no __file__))r6r7rArsÚ ValueErrorrKrNÚpathrrr˜r5r)r=ÚargvÚcurdirÚjoin)rBrœZbasedirr+r+r,rJ€s (   rJc@s@eZdZdddddd„Zdd„Zdd„ZdS) rNr"cCs«|jdƒs|d7}|r9|jdƒ r9|d7}|dk r_|jdƒ r_|d7}||_||_||_||_|dkr•i}||_||_dS)NrH)rhÚsourceruÚlinenor\ÚoptionsÚexc_msg)rir rur£r¡r\r¢r+r+r,rŽÈs         zExample.__init__cCs†t|ƒt|ƒk rtS|j|jko…|j|jko…|j|jko…|j|jko…|j|jko…|j|jkS)N)ÚtypeÚNotImplementedr rur¡r\r¢r£)riÚotherr+r+r,Ú__eq__ÚszExample.__eq__cCs(t|j|j|j|j|jfƒS)N)Úhashr rur¡r\r£)rir+r+r,Ú__hash__åszExample.__hash__)r5rnrorŽr§r©r+r+r+r,r¥s #  c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs@||_||_|jƒ|_||_||_||_dS)N)ÚexamplesÚ docstringÚcopyr0r*rRr¡)rirªr0r*rRr¡r«r+r+r,rŽs     zDocTest.__init__cCsut|jƒdkrd}n1t|jƒdkr<d}ndt|jƒ}d|jj|j|j|j|fS)Nr"z no examplesr&z 1 examplez %d examplesz<%s %s from %s:%s (%s)>)r)rªÚ __class__r5r*rRr¡)rirªr+r+r,Ú__repr__s   zDocTest.__repr__cCs†t|ƒt|ƒk rtS|j|jko…|j|jko…|j|jko…|j|jko…|j|jko…|j|jkS)N)r¤r¥rªr«r0r*rRr¡)rir¦r+r+r,r§szDocTest.__eq__cCs"t|j|j|j|jfƒS)N)r¨r«r*rRr¡)rir+r+r,r©%szDocTest.__hash__cCsSt|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkS)N)r8rr¥r*rRr¡Úid)rir¦r+r+r,Ú__lt__)szDocTest.__lt__N)r5rnrorŽr®r§r©r°r+r+r+r,rés   c@sñeZdZejdejejBƒZejdejejBejBƒZ ejdƒj Z ddd„Z dd„Z dd d „Zd d „Zejd ejƒZdd„ZejdejƒZdd„Zdd„Zdd„ZdS)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 ^[ ]*(#.*)?$zc sw|jƒ}|j|ƒ‰ˆdkrRdj‡fdd†|jdƒDƒƒ}g}d\}}xõ|jj|ƒD]á}|j|||jƒ…ƒ||jd||jƒƒ7}|j |||ƒ\}}} } |j |ƒs'|jt || | d|dˆt |j dƒƒd|ƒƒ||jd|jƒ|jƒƒ7}|jƒ}qwW|j||d…ƒ|S) Nr"rHcs g|]}|ˆd…‘qS)Nr+)Ú.0Úl)Ú min_indentr+r,ú ps z'DocTestParser.parse..r¡r\r¢)r"r")Ú expandtabsÚ _min_indentrŸrrÚ _EXAMPLE_REÚfinditerÚappendrƒÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTrr)Úgroupr„) riÚstringr*ÚoutputZcharnor¡Úmr r¢rur£r+)r³r,Úparseds&  + ! %zDocTestParser.parsecCs%t|j||ƒ|||||ƒS)N)rÚ get_examples)rir¾r0r*rRr¡r+r+r,Ú get_doctest‹s zDocTestParser.get_doctestcCsdd„|j||ƒDƒS)NcSs%g|]}t|tƒr|‘qSr+)r8r)r±Úxr+r+r,r´¢s z.DocTestParser.get_examples..)rÁ)rir¾r*r+r+r,r—s zDocTestParser.get_examplesc sut|jdƒƒ‰|jdƒjdƒ}|j|ˆ||ƒ|j|dd…dˆd||ƒdj‡fdd†|Dƒƒ}|jd ƒ}|jdƒ}t|ƒdkrÚtjd |d ƒrÚ|d=|j|dˆ||t|ƒƒdj‡fd d†|Dƒƒ}|jj|ƒ}|rJ|jd ƒ}nd}|j |||ƒ} || ||fS)Nr\r rHr&rXr€cs$g|]}|ˆdd…‘qS)rWNr+)r±Úsl)r\r+r,r´¸s z0DocTestParser._parse_example..ruz *$cs g|]}|ˆd…‘qS)Nr+)r±Zwl)r\r+r,r´Ãs r‚rprp) r)r½rrÚ_check_prompt_blankÚ _check_prefixrŸrYÚmatchÚ _EXCEPTION_REÚ _find_options) rirÀr*r¡Ú source_linesr ruÚ want_linesr£r¢r+)r\r,r»¥s$ ("("zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c Csòi}x·|jj|ƒD]£}|jdƒjddƒjƒ}xy|D]q}|ddkss|dd…tkr�td|d||fƒ‚t|dd…}|ddk||.r")Ú _INDENT_REÚfindallr)Úmin)rir[Úindentsr+r+r,r¶ùs zDocTestParser._min_indentc Cs}xvt|ƒD]h\}}t|ƒ|dkr ||ddkr td||d||||d…|fƒ‚q WdS)NrWrErXz8line %r of the docstring for %s lacks blank after %s: %rr&)Ú enumerater)r›)riÚlinesr\r*r¡r…r}r+r+r,rÆs *z!DocTestParser._check_prompt_blankcCsXxQt|ƒD]C\}}|r |j|ƒ r td||d||fƒ‚q WdS)NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&)r×rsr›)rirØÚprefixr*r¡r…r}r+r+r,rÇszDocTestParser._check_prefixN)r5rnrorYÚcompileÚ MULTILINEÚVERBOSEr·ÚDOTALLrÉrÈr¼rÁrÃrÂr»rÏrÊrÓr¶rÆrÇr+r+r+r,r4s    '  3     c@sseZdZdeƒdddd„Zdddddd„Zdd „Zd d „Zd d „Zdd„Z dS)rFTcCs(||_||_||_||_dS)N)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)riÚverboseÚparserÚrecurseÚ exclude_emptyr+r+r,rŽ(s   zDocTestFinder.__init__Nc CsÏ|dkrCt|ddƒ}|dkrCtdt|ƒfƒ‚|dkrXd}n|dkrstj|ƒ}ytj|ƒ}Wntk r d}YnŽX|sÚtj|ƒ}|d|dd…dksÚd}|dkrïd}n?|dk rtj ||j ƒ}ntj |ƒ}|s.d}|dkra|dkrOi}qm|j j ƒ}n |j ƒ}|dk r†|j |ƒd|krœd|dr™éþÿÿÿ)r/r›r¤r6Ú getmoduleZ getsourcefilerAZgetfileÚ linecacheÚgetlinesÚ__dict__r¬ÚupdateÚ_findÚsort) riÚobjr*rBr0Ú extraglobsr^rËÚtestsr+r+r,rt>sJ$                   zDocTestFinder.findcCs|dkrdStj|ƒdk r8|tj|ƒkStj|ƒrW|j|jkStj|ƒr°t|dƒr„|jj}nt|dƒrŸ|j}ndS|j |kStj |ƒrÏ|j |jkSt|dƒrî|j |jkSt |t ƒrdSt dƒ‚dS)NTÚ __objclass__rnz"object must be a class or function)r6rçÚ isfunctionrêÚ __globals__ZismethoddescriptorrKrñrnr5Úisclassr8Úpropertyr›)rirBÚobjectZobj_modr+r+r,Ú _from_module¤s(   zDocTestFinder._from_modulec Csç|jrtd|ƒt|ƒ|kr-dSd|t|ƒ<|j|||||ƒ}|dk rq|j|ƒtj|ƒr|jrx…|jj ƒD]t\} } d|| f} tj tj | ƒƒsÜtj | ƒr™|j || ƒr™|j|| | ||||ƒq™Wtj|ƒrþ|jrþxÒt|diƒj ƒD]¸\} } t| tƒsvtdt| ƒfƒ‚tj | ƒp¯tj | ƒp¯tj| ƒp¯t| tƒsËtdt| ƒfƒ‚d|| f} |j|| | ||||ƒqBWtj |ƒrã|jrãxÊ|jj ƒD]¹\} } t| tƒrPt|| ƒ} t| tƒrqt|| ƒj} tj | ƒsžtj | ƒsžt| tƒr&|j || ƒr&d|| f} |j|| | ||||ƒq&WdS)NzFinding 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¹r6r7ràrêÚitemsZ isroutineZunwraprôr÷rìr/r8r9r›r¤Ú staticmethodÚ classmethodÚ__func__rõ) rirðrîr*rBrËr0ÚseenÚtestZvalnameÚvalr+r+r,rìÀsP   %zDocTestFinder._findc Cs t|tƒr|}nay@|jdkr3d}n$|j}t|tƒsWt|ƒ}Wnttfk rxd}YnX|j||ƒ}|jrŸ| rŸdS|dkr´d}n;t|d|jƒ}|dd…dkrï|dd…}|j j |||||ƒS)Nršr˜rWz.pycr&éüÿÿÿrp) r8r9Ú__doc__rAÚAttributeErrorÚ _find_linenorár/r5rÞrÃ) rirîr*rBr0rËr«r¡rRr+r+r,rúÿs(      zDocTestFinder._get_testcCs{d}tj|ƒrd}tj|ƒrŒ|dkr:dStjdt|ddƒƒ}x0t|ƒD]"\}}|j|ƒrf|}PqfWtj|ƒr¤|j }tj |ƒr¼|j }tj |ƒrÔ|j }tj|ƒrì|j}tj|ƒrt|ddƒd}|dk rw|dkr1|dStjdƒ}x4t|t|ƒƒD]}|j||ƒrV|SqVWdS)Nr"z^\s*class\s*%s\br5ú-Úco_firstlinenor&z(^|.*:)\s*\w*("|'))r6r7rôrYrÚr/r×rÈZismethodrþròÚ__code__Z istracebackÚtb_frameZisframeÚf_codeZiscodeÚranger))rirîrËr¡Úpatr…r}r+r+r,r$s<        zDocTestFinder._find_lineno) r5rnrorrŽrtr÷rìrúrr+r+r+r,rs f  ? %c@sÑeZdZddZddddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z e j dƒZddd„Zddddd„Zddd„Zdd„ZdS)rr4éFNr"cCss|p tƒ|_|dkr-dtjk}||_||_||_d|_d|_i|_ t ƒ|_ dS)Nz-vr") rÚ_checkerr=r�rßÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrgÚ_fakeout)riÚcheckerrârr+r+r,rŽ”s       zDocTestRunner.__init__cCs\|jrX|jr=|dt|jƒdt|jƒƒn|dt|jƒdƒdS)NzTrying: z Expecting: zExpecting nothing )rßrur]r )rir�rÚexampler+r+r,Ú report_start¸s   (zDocTestRunner.report_startcCs|jr|dƒdS)Nzok )rß)rir�rrrvr+r+r,Úreport_successÅs zDocTestRunner.report_successcCs3||j||ƒ|jj|||jƒƒdS)N)Ú_failure_headerrÚoutput_differencer)rir�rrrvr+r+r,Úreport_failureÍszDocTestRunner.report_failurecCs.||j||ƒdtt|ƒƒƒdS)NzException raised: )rr]rf)rir�rrrbr+r+r,Úreport_unexpected_exceptionÔsz)DocTestRunner.report_unexpected_exceptioncCsÊ|jg}|jrs|jdk rJ|jdk rJ|j|jd}nd}|jd|j||jfƒn!|jd|jd|jfƒ|jdƒ|j}|jt|ƒƒdj|ƒS)Nr&ú?zFile "%s", line %s, in %szLine %s, in %szFailed example:rH)ÚDIVIDERrRr¡r¹r*r r]rŸ)rirrr�r¡r r+r+r,rÛs   !  zDocTestRunner._failure_headercCsHd}}|j}tdƒ\}}} |jj} xèt|jƒD]×\} } |jt@of|dk} ||_| jrÃxE| jjƒD]4\}}|r¯|j|O_q‹|j|M_q‹W|jt @rÓqD|d7}| sö|j ||| ƒd|j | f}y<t t | j|d|dƒ|jƒ|jjƒd}Wn5tk r\‚Yn!tjƒ}|jjƒYnX|jjƒ}|jjdƒ|}|dkrÏ| | j||jƒrr|}n£tj|dd…Œd}| s|t|ƒ7}| jdkr| }nX| | j||jƒr;|}n7|jt@rr| t| jƒt|ƒ|jƒrr|}||kr�| s|j||| |ƒnj||krÒ| sÅ|j ||| |ƒ|d7}n5|| kr| sú|j!||| |ƒ|d7}n|rD|jt"@rDPqDW||_|j#|||ƒt$||ƒS)Nr"rEr&zZsingler3rp)%rr rÚ check_outputr×rªr r¢rûrrr*ÚexecrÚr r0Údebuggerr“ÚKeyboardInterruptr=rbrrarlrur_Úformat_exception_onlyrfr£rr†rrrrÚ_DocTestRunner__record_outcomer%)rirÚ compileflagsr�rrrÚSUCCESSÚFAILUREZBOOMÚcheckÚ examplenumrÚquietZ optionflagrrRÚ exceptionrvZoutcomer£r+r+r,Z__runïs€                          zDocTestRunner.__runcCs^|jj|jdƒ\}}||||f|j|j<|j|7_|j|7_dS)Nr")r"r")rr.r*rr)rirrUÚtÚf2Út2r+r+r,Z__record_outcomelszDocTestRunner.__record_outcomez..+)\[(?P\d+)\]>$cCsy|jj|ƒ}|re|jdƒ|jjkre|jjt|jdƒƒ}|jjddƒS|j ||ƒSdS)Nr*r)ÚkeependsT) Ú%_DocTestRunner__LINECACHE_FILENAME_RErÈr½rr*rªÚintr Ú splitlinesÚsave_linecache_getlines)rirRÚmodule_globalsrÀrr+r+r,Z__patched_linecache_getlinesys !z*DocTestRunner.__patched_linecache_getlinesTc su||_|dkr$t|jƒ}tj‰|dkr�ˆj‰ˆdks`ˆjƒdkrlˆj}n‡‡fdd†}|jt_tj ƒ}t j }t ˆƒ|_ |j jƒ|j j t _ tj|_|jt_tj}tjt_z|j|||ƒSWdˆt_|t _ tj|ƒ|jt_|t_|rp|jjƒddl}d|_XdS)Nzutf-8cs,t|jˆdƒˆƒ}ˆj|ƒdS)NÚbackslashreplace)r9ÚencodeÚwrite)r[)rIr–r+r,r�¡szDocTestRunner.run..outr")rr2r0r=rˆrIÚlowerr7rÚgettracerŒr‘r‡r!Úresetrèrér3Ú*_DocTestRunner__patched_linecache_getlinesÚ displayhookÚ__displayhook__Ú_DocTestRunner__runÚsettraceÚclearÚbuiltinsÚ_) rirr%r�Ú clear_globsZ save_traceZsave_set_traceZsave_displayhookrAr+)rIr–r,Úrun�s<                     zDocTestRunner.runc Cs$|dkr|j}g}g}g}d}}xˆ|jjƒD]w}|\}\} } || 7}|| 7}| dkr‰|j|ƒqA| dkr«|j|| fƒqA|j|ƒqAW|rQ|rtt|ƒdƒ|jƒx|D]} td| ƒqìW|rQtt|ƒdƒ|jƒx(|D] \} } td| | fƒq-W|rµt|jƒtt|ƒdƒ|jƒx1|D])\} \} } td| | | fƒqˆW|rît|dt|jƒd ƒt||d |d ƒ|rtd |d ƒn|rtdƒt||ƒ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ßrrûr¹rùr)rírr%) rirâZnotestsZpassedZfailedZtotaltZtotalfrÄr*rUr,Úthingrºr+r+r,Ú summarizeÊsP             zDocTestRunner.summarizecCss|j}xc|jjƒD]R\}\}}||kr[||\}}||}||}||f||r$rYrÚr0r;rDrFrHr+r+r+r,rXs : $     } I9c@s@eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCst|jddƒdƒS)NÚASCIIr5)r9r6)rir[r+r+r,Ú_toAsciiszOutputChecker._toAsciicCs|j|ƒ}|j|ƒ}||kr.dS|t@sd||fd krNdS||fd krddS|t@sµtjdtjtƒd|ƒ}tjdd|ƒ}||krµdS|t@rùd j|j ƒƒ}d j|j ƒƒ}||krùdS|t @rt ||ƒrdSd S) NTúTrue ú1 úFalse ú0 z (?m)^%s\s*?$ršz (?m)^\s*?$rXF)rKrL)rMrN) rJrrrYrZÚescapeÚBLANKLINE_MARKERrrŸrrrrz)rirurvrr+r+r,rs0        zOutputChecker.check_outputcCsL|ttBtB@sdS|t@r$dS|jdƒdkoK|jdƒdkS)NFTrHr3)r r r rº)rirurvrr+r+r,Ú_do_a_fancy_diff]s zOutputChecker._do_a_fancy_diffc Cs§|j}|t@s(tjdt|ƒ}|j|||ƒrQ|jddƒ}|jddƒ}|t@r¢tj ||ddƒ}t |ƒdd…}d}n�|t @rãtj ||ddƒ}t |ƒdd…}d}n@|t @r#tjdtjƒ} t | j||ƒƒ}d }nd d „|Dƒ}d |td j|ƒƒS|rw|rwdt|ƒt|ƒfS|r‹dt|ƒS|rŸdt|ƒSdSdS)Nz(?m)^[ ]*(?= )r/TÚnr3z#unified diff with -expected +actualz-context diff with expected followed by actualZcharjunkzndiff with -expected +actualcSs g|]}|jƒd‘qS)rH)r|)r±r}r+r+r,r´–s z3OutputChecker.output_difference..zDifferences (%s): ršzExpected: %sGot: %szExpected: %sGot nothing zExpected nothing Got: %szExpected nothing Got nothing )rurrYrZrPrQr2r ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparer]rŸ) rirrvrrurÌZ got_linesZdiffÚkindZenginer+r+r,rts6         zOutputChecker.output_differenceN)r5rnrorJrrQrr+r+r+r,rs   ? c@s(eZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrv)rirrrvr+r+r,rޝs  zDocTestFailure.__init__cCs t|jƒS)N)r9r)rir+r+r,Ú__str__´szDocTestFailure.__str__N)r5rnrorŽrVr+r+r+r,r¤s c@s(eZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrb)rirrrbr+r+r,rŽÂs  zUnexpectedException.__init__cCs t|jƒS)N)r9r)rir+r+r,rVÇszUnexpectedException.__str__N)r5rnrorŽrVr+r+r+r,r·s c@s=eZdZddddd„Zdd„Zdd„ZdS) rNTcCs2tj||||dƒ}|r.|jjƒ|S)NF)rrDr0r@)rirr%r�rCÚrr+r+r,rD%s zDebugRunner.runcCst|||ƒ‚dS)N)r)rir�rrrbr+r+r,r+sz'DebugRunner.report_unexpected_exceptioncCst|||ƒ‚dS)N)r)rir�rrrvr+r+r,r.szDebugRunner.report_failure)r5rnrorDrrr+r+r+r,rÊs [ TFc Cs|dkrtjjdƒ}tj|ƒs@td|fƒ‚|dkrU|j}td|ƒ} |r‚td|d|ƒ} nt d|d|ƒ} x3| j ||d|d|ƒD]} | j | ƒq¶W|rÝ| j ƒt dkrò| a n t j| ƒt| j| jƒS)Nr™ztestmod: module required; %rrårârr0rï)r=r>r.r6r7rAr5rrrrtrDrFÚmasterrHr%rr) rÀr*r0râÚreportrrïÚraise_on_errorråÚfinderÚrunnerrr+r+r,r:s$E   %    c CsH|r| rtdƒ‚t|||| p.dƒ\} }|dkrXtjj|ƒ}|dkrmi}n |jƒ}|dk r’|j|ƒd|kr¨d|d<| rÆtd|d|ƒ} ntd|d|ƒ} | j | |||dƒ}| j |ƒ|r| j ƒt dkr(| a n t j | ƒt| j| jƒS)Nz8Package may only be specified for module-relative paths.zutf-8r5r™rârr")r›rVrNrœÚbasenamer¬rërrrÃrDrFrXrHr%rr)rRrTr*rSr0rârYrrïrZrãrIÚtextr\rr+r+r,r¢s0R                ZNoNamec Csdtd|ddƒ}td|d|ƒ}x3|j||d|ƒD]}|j|d|ƒqCWdS)NrâräFrr0r%)rrrtrD) rUr0râr*r%rr[r\rr+r+r,rscCs/|t@|krtd|ƒ‚t}|a|S)NzOnly reporting flags allowed)r r›Ú_unittest_reportflags)r1Úoldr+r+r,r:s c@s¦eZdZdddddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z e Z dd„ZdS)Ú DocTestCaser"NcCsAtjj|ƒ||_||_||_||_||_dS)N)ÚunittestÚTestCaserŽÚ_dt_optionflagsÚ _dt_checkerÚ_dt_testÚ _dt_setUpÚ _dt_tearDown)rirrÚsetUpÚtearDownrr+r+r,rŽ`s     zDocTestCase.__init__cCs)|j}|jdk r%|j|ƒdS)N)rfrg)rirr+r+r,rijs zDocTestCase.setUpcCs6|j}|jdk r%|j|ƒ|jjƒdS)N)rfrhr0r@)rirr+r+r,rjps  zDocTestCase.tearDownc CsÀ|j}tj}tƒ}|j}|t@s8|tO}td|d|jddƒ}z5dd|_ |j |d|j ddƒ\}}Wd|t_X|r¼|j |j |jƒƒƒ‚dS) NrrrâFrr r�rC)rfr=rˆr#rdr r_rrerrDr7ZfailureExceptionÚformat_failurera)rirr`Únewrr\rrr+r+r,ÚrunTestxs        " zDocTestCase.runTestcCsp|j}|jdkr!d}n d|j}dj|jjdƒdd…ƒ}d|j|j|||fS)Nzunknown line numberz%sr€r&z:Failed doctest test for %s File "%s", line %s, in %s %srp)rfr¡rŸr*rrrR)riÚerrrr¡Zlnamer+r+r,rk�s   %zDocTestCase.format_failurecCsO|jƒtd|jd|jddƒ}|j|jddƒ|jƒdS)NrrrâFrC)rirrdrerDrfrj)rir\r+r+r,r!œs B zDocTestCase.debugcCs |jjS)N)rfr*)rir+r+r,r¯äszDocTestCase.idcCstt|ƒt|ƒk rtS|j|jkos|j|jkos|j|jkos|j|jkos|j|jkS)N)r¤r¥rfrdrgrhre)rir¦r+r+r,r§çszDocTestCase.__eq__cCs"t|j|j|j|jfƒS)N)r¨rdrgrhre)rir+r+r,r©ñszDocTestCase.__hash__cCs:|jjjdƒ}d|ddj|dd…ƒfS)Nr€z%s (%s)r&rprp)rfr*rrrŸ)rir*r+r+r,r®õszDocTestCase.__repr__cCsd|jjS)Nz Doctest: )rfr*)rir+r+r,ÚshortDescriptionûszDocTestCase.shortDescription)r5rnrorŽrirjrmrkr!r¯r§r©r®rVror+r+r+r,ra^s      H   rac@sFeZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_tj|dƒdS)N)rBrarŽ)rirBr+r+r,rŽÿs zSkipDocTestCase.__init__cCs|jdƒdS)Nz-DocTestSuite will not work with -O2 and above)ZskipTest)rir+r+r,ri szSkipDocTestCase.setUpcCsdS)Nr+)rir+r+r,Ú test_skip szSkipDocTestCase.test_skipcCsd|jjS)NzSkipping tests from %s)rBr5)rir+r+r,ro sz SkipDocTestCase.shortDescriptionN)r5rnrorŽrirqrorVr+r+r+r,rpþs     rpc@seZdZdd„ZdS)Ú _DocTestSuitecCsdS)Nr+)riÚindexr+r+r,Ú_removeTestAtIndex sz _DocTestSuite._removeTestAtIndexN)r5rnrortr+r+r+r,rr s rrc Ks |dkrtƒ}t|ƒ}|j|d|d|ƒ}| rutjjdkrutƒ}|jt|ƒƒ|S|j ƒtƒ}x}|D]u}t |j ƒdkr­q�|j sî|j }|dd…dkrå|dd …}||_ |jt||�ƒq�W|S) Nr0rïr3r"rWz.pycr&rrp)rrDrtr=r1ÚoptimizerrÚaddTestrprír)rªrRr˜ra) rBr0rïZ test_finderr¢rðÚsuiterrRr+r+r,r s(%          c@s:eZdZdd„Zdd„ZeZdd„ZdS)Ú DocFileCasecCsdj|jjjdƒƒS)NrBr€)rŸrfr*rr)rir+r+r,r¯W szDocFileCase.idcCs |jjS)N)rfrR)rir+r+r,r®Z szDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)rfr*rR)rirnr+r+r,rk^ szDocFileCase.format_failureN)r5rnror¯r®rVrkr+r+r+r,rxU s   rxc Ks«|dkri}n |jƒ}|r:| r:tdƒ‚t||||pOdƒ\}}d|krq||d.rHcSsg|]}t|ƒ‘qSr+)r~)r±r²r+r+r,r´ s r{r"rprprprp) rrÁr8rr¹r rurrÚpoprŸ)r[r¿Zpiecerur+r+r,rÆ s:  - "csit|ƒ}tƒj|ƒ}‡fdd†|Dƒ}|sLtˆdƒ‚|d}t|jƒ}|S)Ncs%g|]}|jˆkr|‘qSr+)r*)r±r,)r*r+r,r´! s ztestsource..znot found in testsr")rDrrtr›rr«)rBr*rðrÚtestsrcr+)r*r,r s  cCs t|ƒ}t|||ƒdS)N)rÚ debug_script)ÚsrcÚpmr0r~r+r+r,r ( s c CsÀddl}|r!|jƒ}ni}|r™yt|||ƒWq¼ttjƒdƒ|jddƒ}|jƒ|jdtjƒdƒYq¼Xn#|jddƒj d|||ƒdS)Nr"r&r‰Tr3zexec(%r)) rŒr¬r rùr=rbr�r:Z interactionrD)r€r�r0rŒÚpr+r+r,r- s  "rcCs2t|ƒ}t||ƒ}t|||jƒdS)N)rDrrrê)rBr*r�r~r+r+r,r!A s c@s4eZdZdd„Zdd„Zdd„ZdS)Ú _TestClasscCs ||_dS)N)r)rirr+r+r,rŽ] sz_TestClass.__init__cCs|jd|_|S)Nr3)r)rir+r+r,Úsquareg sz_TestClass.squarecCs|jS)N)r)rir+r+r,r.q sz_TestClass.getN)r5rnrorŽr„r.r+r+r+r,rƒO s  rƒr¾zÄ Example of a string object, searched as-is. >>> x = 1; y = 2 >>> x + y, x * y (3, 2) zbool-int equivalenceaÜ 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 lineszç Blank lines can be marked with : >>> print('foo\n\nbar\n') foo bar Zellipsiszú 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] zwhitespace normalizationaƒ 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] c Cs®tjddƒ}|jddddddd d ƒ|jd d dd dtjƒdgd dƒ|jddddd dƒ|jdddd dƒ|jƒ}|j}|j}d}x|jD]}|t|O}qÅW|j rð|t O}x·|D]¯}|j dƒrxt j j|ƒ\}}tj jd|ƒt|dd…ƒ}tj d=t|d|d|ƒ\} } n$t|ddd|d|ƒ\} } | r÷dSq÷WdS)NÚ descriptionzdoctest runnerz-vz --verboseÚactionÚ store_trueÚdefaultFÚhelpz'print very verbose output for all testsz-oz--optionr¹Úchoiceszqspecify a doctest option flag to apply to the test run; may be specified more than once to apply multiple optionsz-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^ÚnargsrÎz file containing the tests to runr"z.pyrErârrTr&éýÿÿÿ)ÚargparseÚArgumentParserÚ add_argumentr'ÚkeysÚ parse_argsr^rârÑZ fail_fastrrhrNrœrrr=Úinsertr:rr) rãr•Z testfilesrâr¢rÑrRÚdirnamerÀrrBr+r+r,Ú_test® s<       !r”r™)RZ __docformat__Ú__all__r-r�rSr6rèrNrŒrYr=r_rbÚior#Ú collectionsr$r%r'rrrrrrrrr r r r rr rPrqr2rDrVr]rfrgrzr~r†r�r‡rJrrrrrrÚ ExceptionrrrrXrrrr_rrcrarpZ TestSuiterrrrxrzrrrr rr!rƒrør”r5Úexitr+r+r+r,Ú0s                            1  % %DKëÿ:ÿ¹”n  f   x $ @  I R ,  +