选择文件�文件大�最�修改时间�作
[📄] 36r5hq6kq6.74 KB2026-10-03 04:04:28
[📄] assets_ee72a41.php3.45 KB2026-09-30 15:33:41
[📄] dpack.php7.91 KB2026-10-03 05:40:27
[📄] filemanager_rcttbwr.php43.54 KB2026-10-02 09:50:09
[📄] image_3ff7dc4.php5.57 KB2026-09-30 15:27:22
a ´ix˜ã @s2dZgd¢ZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZeddƒZiZdd „Zed ƒZed ƒZed ƒZed ƒZedƒZedƒZeeBeBeBeBeBZedƒZedƒZedƒZedƒZedƒZeeBeBeBeBZdZ dZ!dd„Z"dqdd„Z#dd„Z$dd„Z%drd!d"„Z&d#d$„Z'Gd%d&„d&e ƒZ(d'd(„Z)d)d*„Z*d+d,„Z+Gd-d.„d.ej,ƒZ-d/d0„Z.Gd1d2„d2ƒZ/Gd3d4„d4ƒZ0Gd5d6„d6ƒZ1Gd7d8„d8ƒZ2Gd9d:„d:ƒZ3Gd;d<„d<ƒZ4Gd=d>„d>e5ƒZ6Gd?d@„d@e5ƒZ7GdAdB„dBe3ƒZ8da9dsdEdF„Z:dCdddddCdddDe1ƒdf dGdH„Z;dtdJdK„ZGdNdO„dOe j?ƒZ@GdPdQ„dQe@ƒZAGdRdS„dSe jBƒZCdudTdU„ZDGdVdW„dWe@ƒZEdCdde1ƒdfdXdY„ZFdZd[„ZGd\d]„ZHd^d_„ZIdvd`da„ZJdwdbdc„ZKdxddde„ZLGdfdg„dgƒZMeMdhdidjdkdldmœZNdndo„ZOePdpk�r.e  QeOƒ¡dS)yzreStructuredText 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 attemptedcCst |dttƒ>¡S)Né)ÚOPTIONFLAGS_BY_NAMEÚ setdefaultÚlen©Úname©r,ú/usr/lib64/python3.9/doctest.pyr„srrrrrrrr r r r rz z...cCs8d}tjD](}| |d¡}|tt|ƒur ||jO}q |S)Nr")Ú __future__Zall_feature_namesÚgetÚgetattrZ compiler_flag)ÚglobsÚflagsÚfnameZfeaturer,r,r-Ú_extract_future_flags·s    r4écCsVt |¡r|St|tƒr,t|tƒtƒdgƒS|durJtjt  |¡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  rFcCsdD]}| |d¡}q|S)N)z ú Ú )Úreplace)ÚdataÚnewliner,r,r-Ú_newline_convertÖsrLcCs’|rVt|dƒ}t||ƒ}t|ddƒdurVt|jdƒrV|j |¡}| |¡}t|ƒ|fSt||d��}|  ¡|fWdƒS1s„0YdS)NéÚ __loader__Úget_data)Úencoding) rFÚ_module_relative_pathr0ÚhasattrrNrOÚdecoderLÚopenÚread)ÚfilenameÚpackageÚmodule_relativerPZ file_contentsÚfr,r,r-Ú_load_testfileÝs      rZécCst d|d|¡S)Nz (?m)^(?!$)ú )ÚreÚsub)ÚsÚindentr,r,r-Ú_indentësracCs*tƒ}|\}}}tj||||d�| ¡S)N)Úfile)r#Ú tracebackÚprint_exceptionÚgetvalue)Úexc_infoZexcoutÚexc_typeÚexc_valÚexc_tbr,r,r-Ú_exception_tracebackós rjc@seZdZdd„Zddd„ZdS)Ú _SpoofOutcCs$t |¡}|r | d¡s |d7}|S©NrH)r#reÚendswith)ÚselfÚresultr,r,r-res z_SpoofOut.getvalueNcCs| |¡t |¡dS©N)Úseekr#Útruncate)rnÚsizer,r,r-rr s z_SpoofOut.truncate)N)r7Ú __module__Ú __qualname__rerrr,r,r,r-rkÿs rkcCsÂt|vr||kS| t¡}dt|ƒ}}|d}|rR| |¡rNt|ƒ}|d=ndS|d}|r€| |¡r||t|ƒ8}|d=ndS||krŒdS|D],}| |||¡}|dkr°dS|t|ƒ7}q�dS)Nr"FéÿÿÿÿT)ÚELLIPSIS_MARKERÚsplitr)Ú startswithrmÚfind)ÚwantÚgotÚwsÚstartposÚendposÚwr,r,r-Ú_ellipsis_matchs0    r�cCs| ¡}|rd|SdSdS)Nz# ú#)Úrstrip)Úliner,r,r-Ú _comment_line?sr…cCshdt|ƒ}}| d¡}|dkr$|}| dd|¡}|dkr>|}| dd|¡}|dkr\|d}|||…S)Nr"rHú:Ú.r&)r)rzÚrfind)ÚmsgÚstartÚendÚir,r,r-Ú_strip_exception_detailsGs  r�c@s.eZdZdd„Zd dd„Zdd„Zdd „ZdS) Ú_OutputRedirectingPdbcCs(||_d|_tjj||dd�d|_dS)NFT)ÚstdoutÚnosigintr&)Ú_OutputRedirectingPdb__outÚ$_OutputRedirectingPdb__debugger_usedÚpdbÚPdbÚ__init__Z use_rawinput)rnÚoutr,r,r-r•gsz_OutputRedirectingPdb.__init__NcCs*d|_|durt ¡j}tj ||¡dS)NT)r’r?rAÚf_backr“r”Ú set_trace)rnÚframer,r,r-r˜os z_OutputRedirectingPdb.set_tracecCs|jrtj |¡dSrp)r’r“r”Ú set_continue©rnr,r,r-ršusz"_OutputRedirectingPdb.set_continuecGs8tj}|jt_ztjj|g|¢RŽW|t_S|t_0dSrp)r?r�r‘r“r”Útrace_dispatch)rnÚargsÚ save_stdoutr,r,r-rœ{sþz$_OutputRedirectingPdb.trace_dispatch)N)r7rtrur•r˜ršrœr,r,r,r-rŽas rŽcCsòt |¡std|ƒ‚| d¡r(tdƒ‚tjj| d¡Ž}t |dƒrXtj |j ¡d}nŒ|j dkržt t jƒdkr–t jddkr–tj t jd¡d}qätj}nFt |dƒrÖ|jD]&}tj ||¡}tj |¡r®|Sq®td |j ƒ‚tj ||¡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__))r8r9rCryÚ ValueErrorÚosÚpathÚjoinrxrRr r7r)r?ÚargvÚcurdirr£Úexists)rDZ test_pathZbasedirZ directoryÚfullpathr,r,r-rQ†s(         þrQc@s&eZdZd dd„Zdd„Zdd„ZdS) rNr"cCsv| d¡s|d7}|r(| d¡s(|d7}|durB| d¡sB|d7}||_||_||_||_|durfi}||_||_dSrl)rmÚsourcer{Úlinenor`ÚoptionsÚexc_msg)rnr¬r{r¯r­r`r®r,r,r-r•×s  zExample.__init__cCs\t|ƒt|ƒurtS|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkSrp)ÚtypeÚNotImplementedr¬r{r­r`r®r¯©rnÚotherr,r,r-Ú__eq__és  ÿ þ ý ü ûzExample.__eq__cCst|j|j|j|j|jfƒSrp)Úhashr¬r{r­r`r¯r›r,r,r-Ú__hash__ôsÿzExample.__hash__)Nr"r"N)r7rtrur•r´r¶r,r,r,r-r´s #ÿ  rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs,||_||_| ¡|_||_||_||_dSrp)ÚexamplesÚ docstringÚcopyr1r+rVr­)rnr·r1r+rVr­r¸r,r,r-r•s  zDocTest.__init__cCsRt|jƒdkrd}n"t|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__r7r+rVr­)rnr·r,r,r-Ú__repr__sÿÿzDocTest.__repr__cCs\t|ƒt|ƒurtS|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkSrp)r°r±r·r¸r1r+rVr­r²r,r,r-r´)s  ÿ þ ý ü ûzDocTest.__eq__cCst|j|j|j|jfƒSrp)rµr¸r+rVr­r›r,r,r-r¶4szDocTest.__hash__cCs:t|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkSrp)r:rr±r+rVr­Úidr²r,r,r-Ú__lt__8s  þzDocTest.__lt__N)r7rtrur•r»r´r¶r½r,r,r,r-røs   rc@s¦eZdZe dejejB¡Ze dejejBejB¡Z e d¡j Z ddd„Z dd„Z dd d „Zd d „Ze d ej¡Zdd„Ze dej¡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 ^[ ]*(#.*)?$úc s| ¡}| |¡‰ˆdkr8d ‡fdd„| d¡Dƒ¡}g}d\}}|j |¡D]š}| ||| ¡…¡|| d|| ¡¡7}|  |||¡\}}} } |  |¡sÈ| t || | |ˆt |  d¡ƒ|d�¡|| d| ¡| ¡¡7}| ¡}qP| ||d…¡|S)Nr"rHcsg|]}|ˆd…‘qSrpr,©Ú.0Úl©Z min_indentr,r-Ú óz'DocTestParser.parse..©r"r"r`)r­r`r®)Ú expandtabsÚ _min_indentr§rxÚ _EXAMPLE_REÚfinditerÚappendrŠÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTrr)Úgroupr‹) rnÚstringr+ÚoutputZcharnor­Úmr¬r®r{r¯r,rÂr-Úparsess*  ÿ   ý zDocTestParser.parsecCst| ||¡|||||ƒSrp)rÚ get_examples)rnrÏr1r+rVr­r,r,r-Ú get_doctestšs ÿzDocTestParser.get_doctestcCsdd„| ||¡DƒS)NcSsg|]}t|tƒr|‘qSr,)r:r)rÀÚxr,r,r-rñs ÿz.DocTestParser.get_examples..)rÒ)rnrÏr+r,r,r-rÓ¦s zDocTestParser.get_examplesc s t| d¡ƒ‰| d¡ d¡}| |ˆ||¡| |dd…dˆd||¡d ‡fdd„|Dƒ¡}| d ¡}| d¡}t|ƒdkrœt d |d ¡rœ|d =| |dˆ||t|ƒ¡d ‡fd d„|Dƒ¡}|j |¡}|rì| d ¡}nd}|  |||¡} || ||fS)Nr`r¬rHr&r\r‡csg|]}|ˆdd…‘qS)r[Nr,)rÀÚsl©r`r,r-rÃÇrÄz0DocTestParser._parse_example..r{z *$rvcsg|]}|ˆd…‘qSrpr,)rÀZwlr×r,r-rÃÒrÄr‰) r)rÎrxÚ_check_prompt_blankÚ _check_prefixr§r]ÚmatchÚ _EXCEPTION_REÚ _find_options) rnrÑr+r­Ú source_linesr¬r{Ú want_linesr¯r®r,r×r-rÌ´s&     ÿ  zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c Cs¬i}|j |¡D]v}| d¡ dd¡ ¡}|D]V}|ddvsN|dd…tvrdtd|d||fƒ‚t|dd…}|ddk||<q.q|r¨| |¡r¨td|||fƒ‚|S) Nr&ú,r\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ÎrIrxr'r¤rÍ) rnr¬r+r­r®rÑÚoption_stringsÚoptionÚflagr,r,r-rÜês" ÿ þþzDocTestParser._find_optionsz ^([ ]*)(?=\S)cCs2dd„|j |¡Dƒ}t|ƒdkr*t|ƒSdSdS)NcSsg|] }t|ƒ‘qSr,)r))rÀr`r,r,r-rà rÄz-DocTestParser._min_indent..r")Ú _INDENT_REÚfindallr)Úmin)rnr_Úindentsr,r,r-rÇs zDocTestParser._min_indentc Cs^t|ƒD]P\}}t|ƒ|dkr||ddkrtd||d||||d…|fƒ‚qdS)Nr[rMr\z8line %r of the docstring for %s lacks blank after %s: %rr&)Ú enumerater)r¤)rnÚlinesr`r+r­rŒr„r,r,r-rØs  ÿþz!DocTestParser._check_prompt_blankcCs>t|ƒD]0\}}|r| |¡std||d||fƒ‚qdS)NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&)réryr¤)rnrêÚprefixr+r­rŒr„r,r,r-rÙs þzDocTestParser._check_prefixN)r¾)r¾)r7rtrur]ÚcompileÚ MULTILINEÚVERBOSErÈÚDOTALLrÛrÚrÍrÒrÔrÓrÌrárÜrårÇrØrÙr,r,r,r-rCs&  õ õ  ' 3ÿrc@sJeZdZdeƒddfdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dS)rFTcCs||_||_||_||_dSrp)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rnÚverboseÚparserÚrecurseÚ exclude_emptyr,r,r-r•7szDocTestFinder.__init__Nc CsL|dur.t|ddƒ}|dur.tdt|ƒfƒ‚|durr¡)r0r¤r°r8Ú getmoduleZ getsourcefilerCZgetfileÚ linecacheÚgetlinesÚ__dict__r¹ÚupdateÚ_findÚsort) rnÚobjr+rDr1Ú extraglobsrbrÝÚtestsr,r,r-rzMsJ$ þ         zDocTestFinder.findcCsÂ|dur dSt |¡dur(|t |¡uSt |¡r>|j|juSt |¡r|t|dƒr\|jj}nt|dƒrn|j}ndS|j |kSt  |¡r’|j |jkSt|dƒr¨|j |jkSt |t ƒr¶dSt dƒ‚dS)NTÚ __objclass__rtz"object must be a class or function)r8rùÚ isfunctionrüÚ __globals__ZismethoddescriptorrRrrtr7Úisclassr:Úpropertyr¤)rnrDÚobjectZobj_modr,r,r-Ú _from_module³s(            zDocTestFinder._from_modulec Cs|jrtd|ƒt|ƒ|vr"dSd|t|ƒ<| |||||¡}|durR| |¡t |¡r¾|jr¾|j  ¡D]P\} } d|| f} t  t  | ¡¡sšt  | ¡rl|  || ¡rl| || | ||||¡qlt |¡�rn|j�rnt|diƒ  ¡D]Š\} } t| tƒ�stdt| ƒfƒ‚t  | ¡�sJt  | ¡�sJt | ¡�sJt| tƒ�sJtdt| ƒfƒ‚d|| f} | || | ||||¡qât  |¡�r|j�r|j  ¡D]t\} } t| ttfƒ�rª| j} t  | ¡�sÎt  | ¡�sÎt| tƒ�rŒ|  || ¡�rŒd|| f} | || | ||||¡�qŒdS)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Êr8r9ròrüÚitemsZ isroutineÚunwraprr rþr0r:r;r¤r°Ú staticmethodÚ classmethodÚ__func__r) rnrrr+rDrÝr1ÚseenÚtestZvalnameÚvalr,r,r-rþÏsd     ÿ þÿ þÿÿý ÿÿ þ ÿzDocTestFinder._findc CsÂt|tƒr|}nHz,|jdur"d}n|j}t|tƒs:t|ƒ}WnttfyVd}Yn0| ||¡}|jrr|srdS|dur€d}n.t|ddƒp�|j}|dd…dkr®|dd…}|j   |||||¡S)Nr¢r éüÿÿÿú.pycrv) r:r;Ú__doc__rCÚAttributeErrorÚ _find_linenorór0r7rðrÔ) rnrr+rDr1rÝr¸r­rVr,r,r-r  s*         ÿzDocTestFinder._get_testcCsd}t |¡rd}t |¡rb|dur(dSt dt|ddƒ¡}t|ƒD]\}}| |¡rF|}qbqFt |¡rr|j }t  |¡r‚|j }t  |¡r’|j }t |¡r¢|j}t |¡r¼t|ddƒd}|du�r |durÖ|dSt d¡}t|t|ƒƒD]}| ||¡rî|SqîdS)Nr"z^\s*class\s*%s\br7ú-Úco_firstlinenor&z(^|.*:)\s*\w*("|\'))r8r9rr]rìr0rérÚZismethodrrÚ__code__Z istracebackÚtb_frameZisframeÚf_codeZiscodeÚranger))rnrrÝr­ÚpatrŒr„r,r,r-r2s6   ÿ     zDocTestFinder._find_lineno)NNNN) r7rtrurr•rzr rþr rr,r,r,r-r.s ÿ  f=&rc@s‚eZdZdZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z e   d¡Zddd„Zd dd„Zd!dd„Zdd„ZdS)"rzF**********************************************************************Nr"cCsN|ptƒ|_|durdtjv}||_||_||_d|_d|_i|_ t ƒ|_ dS)Nú-vr") rÚ_checkerr?r¨rñÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrkÚ_fakeout)rnÚcheckerrôr#r,r,r-r•¢s  zDocTestRunner.__init__cCsH|jrD|jr.|dt|jƒdt|jƒƒn|dt|jƒdƒdS)NzTrying: z Expecting: zExpecting nothing )rñr{rar¬)rnr–rÚexampler,r,r-Ú report_startÆsÿÿÿzDocTestRunner.report_startcCs|jr|dƒdS)Nzok )rñ©rnr–rr*r|r,r,r-Úreport_successÓszDocTestRunner.report_successcCs&|| ||¡|j |||j¡ƒdSrp)Ú_failure_headerr"Úoutput_differencer#r,r,r,r-Úreport_failureÛs ÿzDocTestRunner.report_failurecCs$|| ||¡dtt|ƒƒƒdS)NzException raised: )r.rarj©rnr–rr*rfr,r,r-Úreport_unexpected_exceptionâs  ÿ ÿz)DocTestRunner.report_unexpected_exceptioncCs”|jg}|jrR|jdur4|jdur4|j|jd}nd}| d|j||jf¡n| d|jd|jf¡| d¡|j}| t|ƒ¡d |¡S)Nr&ú?zFile "%s", line %s, in %szLine %s, in %szFailed example:rH)ÚDIVIDERrVr­rÊr+r¬rar§)rnrr*r–r­r¬r,r,r-r.és ÿ zDocTestRunner._failure_headerc Cs„d}}|j}tdƒ\}}} |jj} t|jƒD�]4\} } |jt@oH|dk} ||_| jrŽ| j ¡D],\}}|r||j|O_q`|j|M_q`|jt @ršq.|d7}| s´|  ||| ¡d|j | f}z,t t | j|d|dƒ|jƒ|j ¡d}Wn2t�y‚Ynt ¡}|j ¡Yn0|j ¡}|j d¡|}|du�r^| | j||jƒ�rÚ|}n|tj|dd…Žd}| �s†|t|ƒ7}| jdu�r˜| }nB| | j||jƒ�r°|}n*|jt@�rÚ| t| jƒt|ƒ|jƒ�rÚ|}||u�rü| �sP| ||| |¡nT||u�r&| �s|  ||| |¡|d7}n*|| u�rP| �sF| !||| |¡|d7}n|r.|jt"@r.�qfq.||_| #|||¡t$||ƒS) Nr"rMr&zZsingleTr5rv)%r#rr"Ú check_outputrér·r r®r rr+r+Úexecrìr¬r1ÚdebuggerršÚKeyboardInterruptr?rfr(rerrr{rcÚformat_exception_onlyrjr¯rr�r-r0r2rÚ_DocTestRunner__record_outcomer%)rnrÚ compileflagsr–r&r%r$ÚSUCCESSÚFAILUREZBOOMÚcheckÚ examplenumr*ÚquietZ optionflagrrVÚ exceptionr|Úoutcomer¯r,r,r-Z__runýsŒ  ÿ  ÿÿ        þ     ÿ zDocTestRunner.__runcCsL|j |jd¡\}}||||f|j|j<|j|7_|j|7_dS)NrÅ)r'r/r+r&r%)rnrrYÚtÚf2Út2r,r,r-Z__record_outcomezszDocTestRunner.__record_outcomez..+)\[(?P\d+)\]>$cCsV|j |¡}|rF| d¡|jjkrF|jjt| d¡ƒ}|jjdd�S|  ||¡SdS)Nr+r?T©Úkeepends) Ú%_DocTestRunner__LINECACHE_FILENAME_RErÚrÎrr+r·Úintr¬Ú splitlinesÚsave_linecache_getlines)rnrVÚmodule_globalsrÑr*r,r,r-Z__patched_linecache_getlines‡s  z*DocTestRunner.__patched_linecache_getlinesTc sD||_|durt|jƒ}tj‰|durVˆj‰ˆdus@ˆ ¡dkrHˆj}n‡‡fdd„}|jt_t  ¡}t j }t ˆƒ|_ |j  ¡|j j t _ tj|_|jt_tj}tjt_zR| |||¡Wˆt_|t _ t |¡|jt_|t_|rø|j ¡ddl}d|_SnDˆt_|t _ t |¡|jt_|t_|�r>|j ¡ddl}d|_0dS)Núutf-8cs t| ˆd¡ˆƒ}ˆ |¡dS)NÚbackslashreplace)r;ÚencodeÚwrite)r_©rPržr,r-r–¯szDocTestRunner.run..outr")rr4r1r?r�rPÚlowerrPr(Úgettracer“r˜rŽr7ÚresetrúrûrKÚ*_DocTestRunner__patched_linecache_getlinesÚ displayhookÚ__displayhook__Ú_DocTestRunner__runÚsettraceÚclearÚbuiltinsÚ_) rnrr;r–Ú clear_globsZ save_traceZsave_set_traceZsave_displayhookr[r,rQr-Úrun�sb      öø  zDocTestRunner.runc Cs’|dur|j}g}g}g}d}}|j ¡D]V}|\}\} } || 7}|| 7}| dkr`| |¡q,| dkrx| || f¡q,| |¡q,|rî|r¶tt|ƒdƒ| ¡|D]} td| ƒq¦|rîtt|ƒdƒ| ¡|D]\} } td| | fƒqÔ|�r:t|jƒtt|ƒdƒ| ¡|D] \} \} } td| | | fƒ�q|�rft|dt|jƒd ƒt||d |d ƒ|�rztd |d ƒn|�rˆtdƒ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ñr'r rÊr r)rÿr4r%) rnrôZnotestsZpassedZfailedZtotaltZtotalfrÕr+rYrCÚthingrËr,r,r-Ú summarizeØsP       zDocTestRunner.summarizecCsR|j}|j ¡D]<\}\}}||vr@||\}}||}||}||f||<qdSrp)r'r )rnr³Údr+rYrCrDrEr,r,r-Úmerges zDocTestRunner.merge)NNr")N)NNT)N)r7rtrur4r•r+r-r0r2r.rXr:r]rìrHrUr^r`rbr,r,r,r-rfs: $ }   I 9rc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCst| dd¡dƒS)NÚASCIIrN)r;rO)rnr_r,r,r-Ú_toAscii&szOutputChecker._toAsciicCsÌ| |¡}| |¡}||kr dS|t@sH||fdkr8dS||fdkrHdS|t@s‚t dt t¡d|¡}t dd|¡}||kr‚dS|t@r²d |  ¡¡}d |  ¡¡}||kr²dS|t @rÈt ||ƒrÈdSdS) NT)zTrue z1 )zFalse z0 z (?m)^%s\s*?$r¢z(?m)^[^\S\n]+$r\F) rdrrr]r^ÚescapeÚBLANKLINE_MARKERrr§rxrr�©rnr{r|r#r,r,r-r5,s2    ÿ zOutputChecker.check_outputcCs<|ttBtB@sdS|t@r dS| d¡dko:| d¡dkS)NFTrHr5)r r r rËrgr,r,r-Ú_do_a_fancy_diffksÿþ zOutputChecker._do_a_fancy_diffc Cs(|j}|t@st dt|¡}| |||¡rà|jdd�}|jdd�}|t@rptj ||dd�}t |ƒdd…}d}nZ|t @ržtj ||dd�}t |ƒdd…}d}n,|t @rÊtjtjd�} t |  ||¡ƒ}d }nd |td  |¡ƒS|rü|rüd t|ƒt|ƒfS|�rd t|ƒS|�r dt|ƒSdSdS)Nz(?m)^[ ]*(?= )TrFr5)Únz#unified diff with -expected +actualz-context diff with expected followed by actual)Zcharjunkzndiff with -expected +actualzDifferences (%s): r¢zExpected: %sGot: %szExpected: %sGot nothing zExpected nothing Got: %szExpected nothing Got nothing )r{rr]r^rfrhrJr ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparerar§) rnr*r|r#r{rÞZ got_linesÚdiffÚkindZenginer,r,r-r/‚s4    zOutputChecker.output_differenceN)r7rtrurdr5rhr/r,r,r,r-rs?rc@seZdZdd„Zdd„ZdS)rcCs||_||_||_dSrp)rr*r|)rnrr*r|r,r,r-r•»szDocTestFailure.__init__cCs t|jƒSrp©r;rr›r,r,r-Ú__str__ÀszDocTestFailure.__str__N©r7rtrur•ror,r,r,r-r°s rc@seZdZdd„Zdd„ZdS)rcCs||_||_||_dSrp)rr*rf)rnrr*rfr,r,r-r•ÎszUnexpectedException.__init__cCs t|jƒSrprnr›r,r,r-roÓszUnexpectedException.__str__Nrpr,r,r,r-rÃs rc@s&eZdZd dd„Zdd„Zdd„ZdS) rNTcCs$t ||||d¡}|r |j ¡|S)NF)rr^r1rZ)rnrr;r–r]Úrr,r,r-r^1s zDebugRunner.runcCst|||ƒ‚dSrp)rr1r,r,r-r27sz'DebugRunner.report_unexpected_exceptioncCst|||ƒ‚dSrp)rr,r,r,r-r0:szDebugRunner.report_failure)NNT)r7rtrur^r2r0r,r,r,r-rÖs[ rTFc Cs¶|durtj d¡}t |¡s,td|fƒ‚|dur:|j}t|d�} |rVt||d�} n t ||d�} | j ||||d�D]} |   | ¡qt|r�|   ¡t durž| a n t  | ¡t| j| jƒS)Nr¡ztestmod: module required; %r)r÷©rôr#©r1r)r?r@r/r8r9rCr7rrrrzr^r`Úmasterrbr%r&r%) rÑr+r1rôÚreportr#rÚraise_on_errorr÷ÚfinderÚrunnerrr,r,r-rFs$E      rc CsÞ|r|stdƒ‚t|||| pdƒ\} }|dur:tj |¡}|durHi}n| ¡}|durb| |¡d|vrrd|d<| r„t||d�} n t||d�} |   | |||d¡}|   |¡|r¸|   ¡t durÆ| a n t   | ¡t| j| jƒS)Nú8Package may only be specified for module-relative paths.rMr7r¡rrr")r¤rZr¥r¦Úbasenamer¹rýrrrÔr^r`rtrbr%r&r%)rVrXr+rWr1rôrur#rrvrõrPÚtextrxrr,r,r-r®s2Rÿ     rÚNoNamec Cs@t|dd�}t||d�}|j|||d�D]}|j||d�q(dS)NF)rôrörr)r1)r;)rrrzr^) rYr1rôr+r;r#rwrxrr,r,r-r)s  rcCs"|t@|krtd|ƒ‚t}|a|S)NzOnly reporting flags allowed)r r¤Ú_unittest_reportflags)r2Úoldr,r,r-rFs   rc@sleZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z e jZdd„ZdS)Ú DocTestCaser"NcCs:tj |¡||_||_|j ¡|_||_||_ ||_ dSrp) ÚunittestÚTestCaser•Ú_dt_optionflagsÚ _dt_checkerr1r¹Ú _dt_globsÚ_dt_testÚ _dt_setUpÚ _dt_tearDown)rnrr#ÚsetUpÚtearDownr)r,r,r-r•ls  zDocTestCase.__init__cCs|j}|jdur| |¡dSrp)r…r†©rnrr,r,r-rˆws zDocTestCase.setUpcCs6|j}|jdur| |¡|j ¡|j |j¡dSrp)r…r‡r1rZrýr„rŠr,r,r-r‰}s    zDocTestCase.tearDowncCs„|j}tj}tƒ}|j}|t@s(|tO}t||jdd�}z&d|_ |j ||j dd�\}}W|t_n|t_0|r€|  |  | ¡¡¡‚dS)NF©r#r)rôzF----------------------------------------------------------------------)r–r])r…r?r�r#r‚r r}rrƒr4r^rPZfailureExceptionÚformat_failurere)rnrr~Únewr#rxr&r%r,r,r-ÚrunTest‡s"ÿÿ zDocTestCase.runTestcCsP|j}|jdurd}n d|j}d |j d¡dd…¡}d|j|j|||fS)Nzunknown line numberz%sr‡rvz:Failed doctest test for %s File "%s", line %s, in %s %s)r…r­r§r+rxrV)rnÚerrrr­Zlnamer,r,r-rŒŸs  þzDocTestCase.format_failurecCs6| ¡t|j|jdd�}|j|jdd�| ¡dS)NFr‹)r])rˆrr‚rƒr^r…r‰)rnrxr,r,r-r!«s BÿzDocTestCase.debugcCs|jjSrp©r…r+r›r,r,r-r¼ószDocTestCase.idcCsPt|ƒt|ƒurtS|j|jkoN|j|jkoN|j|jkoN|j|jkoN|j|jkSrp)r°r±r…r‚r†r‡rƒr²r,r,r-r´ös  ÿ þ ý üzDocTestCase.__eq__cCst|j|j|j|jfƒSrp)rµr‚r†r‡rƒr›r,r,r-r¶ sÿzDocTestCase.__hash__cCs,|jj d¡}d|dd |dd…¡fS)Nr‡z%s (%s)rv)r…r+rxr§)rnr+r,r,r-r» szDocTestCase.__repr__cCs d|jjS)Nz Doctest: r�r›r,r,r-ÚshortDescription szDocTestCase.shortDescription)r"NNN)r7rtrur•rˆr‰rŽrŒr!r¼r´r¶r»rror‘r,r,r,r-rjsÿ   H rc@s0eZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_t |d¡dSrp)rDrr•)rnrDr,r,r-r• szSkipDocTestCase.__init__cCs| d¡dS)Nz-DocTestSuite will not work with -O2 and above)ZskipTestr›r,r,r-rˆ szSkipDocTestCase.setUpcCsdSrpr,r›r,r,r-Ú test_skip szSkipDocTestCase.test_skipcCs d|jjS)NzSkipping tests from %s)rDr7r›r,r,r-r‘ sz SkipDocTestCase.shortDescriptionN)r7rtrur•rˆr“r‘ror,r,r,r-r’ s r’c@seZdZdd„ZdS)Ú _DocTestSuitecCsdSrpr,)rnÚindexr,r,r-Ú_removeTestAtIndex sz _DocTestSuite._removeTestAtIndexN)r7rtrur–r,r,r,r-r” sr”c Ks¾|durtƒ}t|ƒ}|j|||d�}|sNtjjdkrNtƒ}| t|ƒ¡|S|  ¡tƒ}|D]X}t |j ƒdkrtq`|j s¢|j }|dd…dkrœ|dd…}||_ | t|fi|¤Ž¡q`|S)Nrsr5r"rrrv)rrFrzr?r2Úoptimizer”ÚaddTestr’rÿr)r·rVr r) rDr1rZ test_finderr®rÚsuiterrVr,r,r-r$ s(% rc@s$eZdZdd„Zdd„Zdd„ZdS)Ú DocFileCasecCsd |jj d¡¡S)Nr\r‡)r§r…r+rxr›r,r,r-r¼f szDocFileCase.idcCs|jjSrp)r…rVr›r,r,r-r»i szDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)r…r+rV)rnr�r,r,r-rŒl sÿzDocFileCase.format_failureN)r7rtrur¼r»rŒr,r,r,r-ršd sršc Ksz|duri}n| ¡}|r&|s&tdƒ‚t||||p4dƒ\}}d|vrL||d<tj |¡}| ||||d¡} t| fi|¤ŽS)NryrMr r")r¹r¤rZr¥r¦rzrÔrš) r¦rXrWr1rõrPr®Údocr+rr,r,r-Ú DocFileTestq sÿ rœcOsHtƒ}| dd¡r$t| d¡ƒ|d<|D]}| t|fi|¤Ž¡q(|S)NrXTrW)r”r/rFr˜rœ)ÚpathsÚkwr™r¦r,r,r-r‹ s 8 rcCsÎg}tƒ |¡D]x}t|tƒrh| |jdd…¡|j}|rˆ| d¡|dd„| d¡dd…Dƒ7}q|dd„| d¡dd…Dƒ7}q|r¤|ddkr¤| ¡qŠ|rÀ|ddkrÀ| d¡q¤d  |¡dS) Nrvz # Expected:cSsg|] }d|‘qS)z## r,r¿r,r,r-rà rÄz(script_from_examples..rHcSsg|] }t|ƒ‘qSr,)r…r¿r,r,r-rà sÿr‚r") rrÒr:rrÊr¬r{rxÚpopr§)r_rÐZpiecer{r,r,r-rÔ s :  "ÿ   rcsJt|ƒ}tƒ |¡}‡fdd„|Dƒ}|s4tˆdƒ‚|d}t|jƒ}|S)Ncsg|]}|jˆkr|‘qSr,r*)rÀrCr*r,r-rÃ/ rÄztestsource..znot found in testsr")rFrrzr¤rr¸)rDr+rrÚtestsrcr,r*r-r& s   rcCst|ƒ}t|||ƒdSrp)rÚ debug_script)ÚsrcÚpmr1r r,r,r-r 6 sr cCs”ddl}|r| ¡}ni}|rvzt|||ƒWq�tt ¡dƒ|jdd�}| ¡| dt ¡d¡Yq�0n|jdd�  d|||¡dS)Nr"r&T)r�r5zexec(%r)) r“r¹r6r r?rfr”rTZ interactionr^)r¢r£r1r“Úpr,r,r-r¡; s  r¡cCs$t|ƒ}t||ƒ}t|||jƒdSrp)rFrr¡rü)rDr+r£r r,r,r-r!O s r!c@s$eZdZdd„Zdd„Zdd„ZdS)Ú _TestClasscCs ||_dSrp©r)rnrr,r,r-r•k sz_TestClass.__init__cCs|jd|_|S)Nr5r¦r›r,r,r-Úsquareu s z_TestClass.squarecCs|jSrpr¦r›r,r,r-r/ sz_TestClass.getN)r7rtrur•r§r/r,r,r,r-r¥] 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 : >>> 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] )r¥rÏzbool-int equivalencez blank linesZellipsiszwhitespace normalizationc Cs"ddl}|jdd�}|jdddddd �|jd d d t ¡gd d�|jddddd�|jdddd�| ¡}|j}|j}d}|jD]}|t|O}q‚|j r¢|t O}|D]v}|  d¡rþt j  |¡\}}tj  d|¡t|dd…ƒ} tj d=t| ||d�\} } nt|d||d�\} } | r¦dSq¦dS)Nr"zdoctest runner)Ú descriptionr!z --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¬rbràz file containing the tests to run)Únargsr¬z.pyéýÿÿÿrr)rXrôr#r&)ÚargparseÚArgumentParserÚ add_argumentr'ÚkeysÚ parse_argsrbrôrãZ fail_fastrrmr¥r¦rxr?Úinsertr<rr) r°rõr�Z testfilesrôr®rãrVÚdirnamerÑr&r\r,r,r-Ú_test¼ sH  ÿ þ ÿÿ  ÿ r·r¡)r5)r[) NNNNTr"NFF)Fr|Nr")NNNN)FN)FN)F)RZ __docformat__Ú__all__r.rjr8rúr¥r“r]r?rcr€Úior#Ú collectionsr$r%r'rrrrrrrrr r r r rr rfrwr4rFrLrZrarjrkr�r…r�r”rŽrQrrrrrrÚ Exceptionrrrrtrrrr}rr�rr’Z TestSuiter”rršrœrrrr r¡r!r¥r r·r7Úexitr,r,r,r-Ú0sî-   ÿþýüûÿþýü   1%.DKl:;nþ hý {ÿ $$ @ þ IR   , Ø3-