grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026U iÛf_˜ã!@spdZddddddddd 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 m Z d"d%lmZed&d'ƒZiZd(d„ZedƒZedƒZedƒZedƒZedƒZedƒZeeBeBeBeBeBZed ƒZed ƒZed ƒZed ƒZedƒZeeBeBeBeBZd)Z d*Z!d+d,„Z"drd.d/„Z#d0d1„Z$d2d3„Z%dsd5d6„Z&d7d8„Z'Gd9d:„d:e ƒZ(d;d<„Z)d=d>„Z*d?d@„Z+GdAdB„dBej,ƒZ-dCdD„Z.GdEd„dƒZ/GdFd„dƒZ0GdGd„dƒZ1GdHd„dƒZ2GdId„dƒZ3GdJd„dƒZ4GdKd„de5ƒZ6GdLd„de5ƒZ7GdMd„de3ƒZ8d#a9dtdPd„Z:dNd#d#d#d#dNd"d#dOe1ƒd#f dQd„Z;dudSd„ZGdUdV„dVe j?ƒZ@GdWdX„dXe@ƒZAGdYdZ„dZe jBƒZCdvd[d„ZDGd\d]„d]e@ƒZEdNd#d#e1ƒd#fd^d_„ZFd`d„ZGdad„ZHdbd„ZIdwdcd „ZJdxddde„ZKdydfd!„ZLGdgdh„dhƒZMeMdidjdkdldmdnœZNdodp„ZOePdqk�rle  QeOƒ¡d#S)zzreStructuredText 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,ú,/opt/alt/python38/lib64/python3.8/doctest.pyr„sz z...cCs8d}tjD](}| |d¡}|tt|ƒkr ||jO}q |S)Nr")Ú __future__Zall_feature_namesÚgetÚgetattrZ compiler_flag)ÚglobsÚflagsZfnameZfeaturer,r,r-Ú_extract_future_flags·s    r3écCsVt |¡r|St|tƒr,t|tƒtƒdgƒS|dkrJtjt  |¡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)ÚmoduleZdepthr,r,r-Ú_normalize_moduleÃs  rDcCsdD]}| |d¡}q|S)N)z ú Ú )Úreplace)ÚdataÚnewliner,r,r-Ú_newline_convertÖsrJc Cs†|rVt|dƒ}t||ƒ}t|ddƒdk rVt|jdƒrV|j |¡}| |¡}t|ƒ|fSt||d��}|  ¡|fW5QR£SQRXdS)NéÚ __loader__Úget_data)Úencoding) rDÚ_module_relative_pathr0ÚhasattrrLrMÚdecoderJÚopenÚread)ÚfilenameÚpackageÚmodule_relativerNZ file_contentsÚfr,r,r-Ú_load_testfileÝs      rXécCst d|d|¡S)Nz (?m)^(?!$)ú )ÚreÚsub)ÚsÚindentr,r,r-Ú_indentësr_cCs*tƒ}|\}}}tj||||d�| ¡S)N)Úfile)r#Ú tracebackÚprint_exceptionÚgetvalue)Úexc_infoZexcoutÚexc_typeZexc_valZexc_tbr,r,r-Ú_exception_tracebackós rfc@seZdZdd„Zddd„ZdS)Ú _SpoofOutcCs$t |¡}|r | d¡s |d7}|S©NrF)r#rcÚendswith)ÚselfÚresultr,r,r-rcs z_SpoofOut.getvalueNcCs| |¡t |¡dS©N)Úseekr#Útruncate)rjÚsizer,r,r-rn s z_SpoofOut.truncate)N)r6Ú __module__Ú __qualname__rcrnr,r,r,r-rgÿs rgcCsÂt|kr||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)Ú startswithriÚfind)ÚwantÚgotZwsÚ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"rFú:Ú.r&)r)rvÚ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)rjÚoutr,r,r-r�gsz_OutputRedirectingPdb.__init__NcCs*d|_|dkrt ¡j}tj ||¡dS)NT)r�r>r@Úf_backrŽr�Ú set_trace)rjÚframer,r,r-r“os z_OutputRedirectingPdb.set_tracecCs|jrtj |¡dSrl)r�rŽr�Ú set_continue©rjr,r,r-r•usz"_OutputRedirectingPdb.set_continuecGs2tj}|jt_ztjj|f|žŽW¢S|t_XdSrl)r>rŠrŒrŽr�Útrace_dispatch)rjÚargsÚ save_stdoutr,r,r-r—{s z$_OutputRedirectingPdb.trace_dispatch)N)r6rprqr�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__))r7r8rBruÚ ValueErrorÚosÚpathÚjoinrtrPr›r6r)r>ÚargvÚcurdirržÚexists)rCZ test_pathZbasedirZ directoryÚfullpathr,r,r-rO†s(         þrOc@s&eZdZd dd„Zdd„Zdd„ZdS) rNr"cCsv| d¡s|d7}|r(| d¡s(|d7}|dk rB| d¡sB|d7}||_||_||_||_|dkrfi}||_||_dSrh)riÚsourcerwÚlinenor^ÚoptionsÚexc_msg)rjr§rwrªr¨r^r©r,r,r-r�×s zExample.__init__cCs\t|ƒt|ƒk rtS|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkSrl)ÚtypeÚNotImplementedr§rwr¨r^r©rª©rjÚotherr,r,r-Ú__eq__és  ÿ þ ý ü ûzExample.__eq__cCst|j|j|j|j|jfƒSrl)Úhashr§rwr¨r^rªr–r,r,r-Ú__hash__ôsÿzExample.__hash__)Nr"r"N)r6rprqr�r¯r±r,r,r,r-r´s #ÿ  c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs,||_||_| ¡|_||_||_||_dSrl)ÚexamplesÚ docstringÚcopyr1r+rTr¨)rjr²r1r+rTr¨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__r6r+rTr¨)rjr²r,r,r-Ú__repr__sÿÿzDocTest.__repr__cCs\t|ƒt|ƒk rtS|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkSrl)r«r¬r²r³r1r+rTr¨r­r,r,r-r¯)s  ÿ þ ý ü ûzDocTest.__eq__cCst|j|j|j|jfƒSrl)r°r³r+rTr¨r–r,r,r-r±4szDocTest.__hash__cCs:t|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkSrl)r9rr¬r+rTr¨Úidr­r,r,r-Ú__lt__8s  þzDocTest.__lt__N)r6rprqr�r¶r¯r±r¸r,r,r,r-røs   c@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"rFcsg|]}|ˆd…‘qSrlr,©Ú.0Úl©Z min_indentr,r-Ú sz'DocTestParser.parse..©r"r"r^)r¨r^r©)Ú expandtabsÚ _min_indentr¢rtÚ _EXAMPLE_REÚfinditerÚappendr…ÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTrr)Úgroupr†) rjÚstringr+ÚoutputZcharnor¨Úmr§r©rwrªr,r½r-Úparsess*  ÿ   ý zDocTestParser.parsecCst| ||¡|||||ƒSrl)rÚ get_examples)rjrÉr1r+rTr¨r,r,r-Ú get_doctestšs ÿzDocTestParser.get_doctestcCsdd„| ||¡DƒS)NcSsg|]}t|tƒr|‘qSr,)r9r)r»Úxr,r,r-r¾±s ÿz.DocTestParser.get_examples..)rÌ)rjrÉ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§rFr&rZr‚csg|]}|ˆdd…‘qS)rYNr,)r»Zsl©r^r,r-r¾Çsz0DocTestParser._parse_example..rwz *$rrcsg|]}|ˆd…‘qSrlr,)r»ZwlrÐr,r-r¾Òsr„) r)rÈrtÚ_check_prompt_blankÚ _check_prefixr¢r[ÚmatchÚ _EXCEPTION_REÚ _find_options) rjrËr+r¨Ú source_linesr§rwÚ 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}|ddksN|dd…tkrdtd|d||fƒ‚t|dd…}|ddk||<q.q|r¨| |¡r¨td|||fƒ‚|S) Nr&ú,rZr"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ÈrGrtr'rŸrÇ) rjr§r+r¨r©rËZoption_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¾ sz-DocTestParser._min_indent..r")Ú _INDENT_REÚfindallr)Úmin)rjr]Úindentsr,r,r-rÁs zDocTestParser._min_indentc Cs^t|ƒD]P\}}t|ƒ|dkr||ddkrtd||d||||d…|fƒ‚qdS)NrYrKrZz8line %r of the docstring for %s lacks blank after %s: %rr&)Ú enumerater)rŸ)rjÚlinesr^r+r¨r‡rr,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árurŸ)rjrâÚprefixr+r¨r‡rr,r,r-rÒs þzDocTestParser._check_prefixN)r¹)r¹)r6rprqr[ÚcompileÚ MULTILINEÚVERBOSErÂÚDOTALLrÔrÓrÇrÌrÎrÍrÆrÚrÕrÝrÁrÑrÒr,r,r,r-rCs&  õ õ  ' 3ÿc@sJeZdZdeƒddfdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dS)rFTcCs||_||_||_||_dSrl)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rjÚverboseÚparserÚrecurseÚ exclude_emptyr,r,r-r�7szDocTestFinder.__init__Nc CsN|dkr.t|ddƒ}|dkr.tdt|ƒfƒ‚|dkrrœ)r0rŸr«r7Ú getmoduleZ getsourcefilerBZgetfileÚ linecacheÚgetlinesÚ__dict__r´ÚupdateÚ_findÚsort) rjÚobjr+rCr1Ú extraglobsr`rÖÚtestsr,r,r-rvMsL$ þ        zDocTestFinder.findcCsÂ|dkr dSt |¡dk r(|t |¡kSt |¡r>|j|jkSt |¡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__rpz"object must be a class or function)r7rñÚ isfunctionrôÚ __globals__ZismethoddescriptorrPrûrpr6Úisclassr9ÚpropertyrŸ)rjrCÚobjectZobj_modr,r,r-Ú _from_module³s(            zDocTestFinder._from_modulec Cs|jrtd|ƒt|ƒ|kr"dSd|t|ƒ<| |||||¡}|dk rR| |¡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ƒ�rªt|| ƒ} t| tƒ�rÂt|| ƒ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Är7r8rêrôÚitemsZ isroutineZunwraprþrrör0r9r:rŸr«Ú staticmethodÚ classmethodÚ__func__rÿ) rjrúrør+rCrÖr1ÚseenÚtestZvalnameÚvalr,r,r-röÏsn     ÿ þÿ þÿÿý ÿ    ÿ þ ÿzDocTestFinder._findc CsÄt|tƒr|}nJz,|jdkr"d}n|j}t|tƒs:t|ƒ}Wnttfk rXd}YnX| ||¡}|jrt|stdS|dkr‚d}n.t|ddƒp’|j}|dd…dkr°|dd…}|j   |||||¡S)Nr�r›éüÿÿÿú.pycrr) r9r:Ú__doc__rBÚAttributeErrorÚ _find_linenorër0r6rèrÎ) rjrør+rCr1rÖr³r¨rTr,r,r-rs,         ÿzDocTestFinder._get_testcCsd}t |¡rd}t |¡rb|dkr(dSt dt|ddƒ¡}t|ƒD]\}}| |¡rF|}qbqFt |¡rr|j }t  |¡r‚|j }t  |¡r’|j }t |¡r¢|j}t |¡r¼t|ddƒd}|dk �r |dkrÖ|dSt d¡}t|t|ƒƒD]}| ||¡rî|SqîdS)Nr"z^\s*class\s*%s\br6ú-Úco_firstlinenor&z(^|.*:)\s*\w*("|\'))r7r8rþr[rär0rárÓZismethodrrüÚ__code__Z istracebackÚtb_frameZisframeÚf_codeZiscodeÚranger))rjrørÖr¨Zpatr‡rr,r,r-r4s>   ÿ         zDocTestFinder._find_lineno)NNNN) r6rprqrr�rvrrörrr,r,r,r-r.s ÿ  f?&c@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ƒ|_|dkrdtjk}||_||_||_d|_d|_i|_ t ƒ|_ dS)Nú-vr") rÚ_checkerr>r£réÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrgÚ_fakeout)rjÚcheckerrìrr,r,r-r�¤s  zDocTestRunner.__init__cCsH|jrD|jr.|dt|jƒdt|jƒƒn|dt|jƒdƒdS)NzTrying: z Expecting: zExpecting nothing )rérwr_r§)rjr‘r Úexampler,r,r-Ú report_startÈsÿÿÿzDocTestRunner.report_startcCs|jr|dƒdS)Nzok )ré©rjr‘r r rxr,r,r-Úreport_successÕszDocTestRunner.report_successcCs&|| ||¡|j |||j¡ƒdSrl)Ú_failure_headerrÚoutput_differencerr"r,r,r-Úreport_failureÝs ÿzDocTestRunner.report_failurecCs$|| ||¡dtt|ƒƒƒdS)NzException raised: )r$r_rf©rjr‘r r rdr,r,r-Úreport_unexpected_exceptionäs  ÿ ÿz)DocTestRunner.report_unexpected_exceptioncCs”|jg}|jrR|jdk r4|jdk r4|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:rF)ÚDIVIDERrTr¨rÄr+r§r_r¢)rjr r r‘r¨r§r,r,r-r$ës ÿ zDocTestRunner._failure_headerc Cs†d}}|j}tdƒ\}}} |jj} t|jƒD�]6\} } |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}Wn4tk �r‚Ynt ¡}|j ¡YnX|j ¡}|j d¡|}|dk�r`| | j||jƒ�rÜ|}n|tj|dd…Žd}| �sˆ|t|ƒ7}| jdk�rš| }nB| | j||jƒ�r²|}n*|jt@�rÜ| t| jƒt|ƒ|jƒ�rÜ|}||k�rþ| �sR| ||| |¡nT||k�r(| �s|  ||| |¡|d7}n*|| k�rR| �sH| !||| |¡|d7}n|r.|jt"@r.�qhq.||_| #|||¡t$||ƒS)Nr"rKr&zZsingler4rr)%rrrÚ check_outputrár²r r©rrr!r+Úexecrär§r1Údebuggerr•ÚKeyboardInterruptr>rdrrcrnrwraÚformat_exception_onlyrfrªrrˆr#r&r(rÚ_DocTestRunner__record_outcomer%)rjr Ú compileflagsr‘rrrÚSUCCESSÚFAILUREZBOOMZcheckÚ examplenumr ÚquietZ optionflagr rTZ exceptionrxZoutcomerªr,r,r-Z__runÿsŽ  ÿ  ÿÿ        þ     ÿ zDocTestRunner.__runcCsL|j |jd¡\}}||||f|j|j<|j|7_|j|7_dS)Nr¿)rr/r+rr)rjr rWÚtÚf2Út2r,r,r-Z__record_outcome|szDocTestRunner.__record_outcomez..+)\[(?P\d+)\]>$cCsV|j |¡}|rF| d¡|jjkrF|jjt| d¡ƒ}|jjdd�S|  ||¡SdS)Nr+r4T©Úkeepends) Ú%_DocTestRunner__LINECACHE_FILENAME_RErÓrÈr r+r²Úintr§Ú splitlinesÚsave_linecache_getlines)rjrTÚmodule_globalsrËr r,r,r-Z__patched_linecache_getlines‰s  z*DocTestRunner.__patched_linecache_getlinesTc s||_|dkrt|jƒ}tj‰|dkrVˆj‰ˆdks@ˆ ¡dkrHˆj}n‡‡fdd„}|jt_t  ¡}t j }t ˆƒ|_ |j  ¡|j j t _ tj|_|jt_tj}tjt_z| |||¡W¢Sˆt_|t _ t |¡|jt_|t_|�rþ|j ¡ddl}d|_XdS)Núutf-8cs t| ˆd¡ˆƒ}ˆ |¡dS)NÚbackslashreplace)r:ÚencodeÚwrite)r]©rNr™r,r-r‘±szDocTestRunner.run..outr")r r3r1r>rŠrNÚlowerrCrÚgettracerŽr“r‰r-Úresetròrór>Ú*_DocTestRunner__patched_linecache_getlinesÚ displayhookÚ__displayhook__ÚsettraceÚclearÚbuiltinsÚ_Ú_DocTestRunner__run) rjr r1r‘Ú clear_globsZ save_traceZsave_set_traceZsave_displayhookrMr,rDr-Úrun‘s<      zDocTestRunner.runc Cs’|dkr|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érrrÄrr)r÷r*r%) rjrìZnotestsZpassedZfailedZtotaltZtotalfrÏr+rWr6ÚthingrÅr,r,r-Ú summarizeÚsP       zDocTestRunner.summarizecCsR|j}|j ¡D]<\}\}}||kr@||\}}||}||}||f||<qdSrl)rr)rjr®Údr+rWr6r7r8r,r,r-Úmerges zDocTestRunner.merge)NNr")N)NNT)N)r6rprqr*r�r!r#r&r(r$rOr0r[rär;rHrQrSrUr,r,r,r-rhs: $ }   I 9c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCst| dd¡dƒS)NÚASCIIrA)r:rB)rjr]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]+$rZF) rWrrr[r\ÚescapeÚBLANKLINE_MARKERrr¢rtrr|©rjrwrxrr,r,r-r+.s4    ÿ zOutputChecker.check_outputcCs<|ttBtB@sdS|t@r dS| d¡dko:| d¡dkS)NFTrFr4)r r r rÅrZr,r,r-Ú_do_a_fancy_diffmsÿþ 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)^[ ]*(?= )Tr9r4)Ú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 )rwrr[r\rYr[r=r ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparer_r¢) rjr rxrrwr×Z got_linesZdiffZkindZenginer,r,r-r%„s4    zOutputChecker.output_differenceN)r6rprqrWr+r[r%r,r,r,r-r s?c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dSrl)r r rx)rjr r rxr,r,r-r�½szDocTestFailure.__init__cCs t|jƒSrl©r:r r–r,r,r-Ú__str__ÂszDocTestFailure.__str__N©r6rprqr�r`r,r,r,r-r²s c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dSrl)r r rd)rjr r rdr,r,r-r�ÐszUnexpectedException.__init__cCs t|jƒSrlr_r–r,r,r-r`ÕszUnexpectedException.__str__Nrar,r,r,r-rÅs c@s&eZdZd dd„Zdd„Zdd„ZdS) rNTcCs$t ||||d¡}|r |j ¡|S)NF)rrQr1rL)rjr r1r‘rPÚrr,r,r-rQ3s zDebugRunner.runcCst|||ƒ‚dSrl)rr'r,r,r-r(9sz'DebugRunner.report_unexpected_exceptioncCst|||ƒ‚dSrl)rr"r,r,r-r&<szDebugRunner.report_failure)NNT)r6rprqrQr(r&r,r,r,r-rØs[ TFc Cs¶|dkrtj d¡}t |¡s,td|fƒ‚|dkr:|j}t|d�} |rVt||d�} n t ||d�} | j ||||d�D]} |   | ¡qt|r�|   ¡t dkrž| a n t  | ¡t| j| jƒS)Nrœztestmod: module required; %r)rï©rìr©r1rù)r>r?r/r7r8rBr6rrrrvrQrSÚmasterrUr%rr) rËr+r1rìÚreportrrùÚraise_on_errorrïÚfinderÚrunnerr r,r,r-rHs$E      c CsÞ|r|stdƒ‚t|||| pdƒ\} }|dkr:tj |¡}|dkrHi}n| ¡}|dk rb| |¡d|krrd|d<| r„t||d�} n t||d�} |   | |||d¡}|   |¡|r¸|   ¡t dkrÆ| a n t   | ¡t| j| jƒS)Nú8Package may only be specified for module-relative paths.r@r6rœrcr")rŸrXr r¡Úbasenamer´rõrrrÎrQrSrerUr%rr)rTrVr+rUr1rìrfrrùrgrírNÚtextrir r,r,r-r°s2Rÿ     ÚNoNamec Cs@t|dd�}t||d�}|j|||d�D]}|j||d�q(dS)NF)rìrîrc)r1)r1)rrrvrQ) rWr1rìr+r1rrhrir r,r,r-r+s  cCs"|t@|krtd|ƒ‚t}|a|S)NzOnly reporting flags allowed)r rŸÚ_unittest_reportflags)r2Úoldr,r,r-rHs   c@sleZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z e jZdd„ZdS)Ú DocTestCaser"NcCs.tj |¡||_||_||_||_||_dSrl)ÚunittestÚTestCaser�Ú_dt_optionflagsÚ _dt_checkerÚ_dt_testÚ _dt_setUpÚ _dt_tearDown)rjr rÚsetUpÚtearDownrr,r,r-r�ns  zDocTestCase.__init__cCs|j}|jdk r| |¡dSrl)rurv©rjr r,r,r-rxxs zDocTestCase.setUpcCs(|j}|jdk r| |¡|j ¡dSrl)rurwr1rLrzr,r,r-ry~s  zDocTestCase.tearDowncCs~|j}tj}tƒ}|j}|t@s(|tO}t||jdd�}z d|_ |j ||j dd�\}}W5|t_X|rz|  |  | ¡¡¡‚dS)NF©rrrìzF----------------------------------------------------------------------)r‘rP)rur>rŠr#rsr rnrrtr*rQrCZfailureExceptionÚformat_failurerc)rjr roÚnewrrirrr,r,r-ÚrunTest†s(ÿÿzDocTestCase.runTestcCsP|j}|jdkrd}n d|j}d |j d¡dd…¡}d|j|j|||fS)Nzunknown line numberz%sr‚rrz:Failed doctest test for %s File "%s", line %s, in %s %s)rur¨r¢r+rtrT)rjÚerrr r¨Zlnamer,r,r-r|žs  þzDocTestCase.format_failurecCs6| ¡t|j|jdd�}|j|jdd�| ¡dS)NFr{)rP)rxrrsrtrQrury)rjrir,r,r-r!ªsBÿzDocTestCase.debugcCs|jjSrl©rur+r–r,r,r-r·òszDocTestCase.idcCsPt|ƒt|ƒk rtS|j|jkoN|j|jkoN|j|jkoN|j|jkoN|j|jkSrl)r«r¬rursrvrwrtr­r,r,r-r¯õs  ÿ þ ý üzDocTestCase.__eq__cCst|j|j|j|jfƒSrl)r°rsrvrwrtr–r,r,r-r±ÿsÿzDocTestCase.__hash__cCs,|jj d¡}d|dd |dd…¡fS)Nr‚z%s (%s)rr)rur+rtr¢)rjr+r,r,r-r¶ szDocTestCase.__repr__cCs d|jjS)Nz Doctest: r€r–r,r,r-ÚshortDescription szDocTestCase.shortDescription)r"NNN)r6rprqr�rxryr~r|r!r·r¯r±r¶rr`r�r,r,r,r-rplsÿ  H rpc@s0eZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_t |d¡dSrl)rCrpr�)rjrCr,r,r-r� szSkipDocTestCase.__init__cCs| d¡dS)Nz-DocTestSuite will not work with -O2 and above)ZskipTestr–r,r,r-rx szSkipDocTestCase.setUpcCsdSrlr,r–r,r,r-Ú test_skip szSkipDocTestCase.test_skipcCs d|jjS)NzSkipping tests from %s)rCr6r–r,r,r-r� sz SkipDocTestCase.shortDescriptionN)r6rprqr�rxrƒr�r`r,r,r,r-r‚ s r‚c@seZdZdd„ZdS)Ú _DocTestSuitecCsdSrlr,)rjÚindexr,r,r-Ú_removeTestAtIndex sz _DocTestSuite._removeTestAtIndexN)r6rprqr†r,r,r,r-r„ sr„c Ksº|dkrtƒ}t|ƒ}|j|||d�}|sNtjjdkrNtƒ}| t|ƒ¡|S|  ¡tƒ}|D]T}t |j ƒdkrtq`|j s¢|j }|dd…dkrœ|dd…}||_ | t|f|Ž¡q`|S)Nrdr4r"r r rr)rrDrvr>r2Úoptimizer„ÚaddTestr‚r÷r)r²rTr›rp) rCr1rùZ test_finderr©rúÚsuiter rTr,r,r-r# s(% c@s$eZdZdd„Zdd„Zdd„ZdS)Ú DocFileCasecCsd |jj d¡¡S)NrNr‚)r¢rur+rtr–r,r,r-r·e szDocFileCase.idcCs|jjSrl)rurTr–r,r,r-r¶h szDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)rur+rT)rjrr,r,r-r|k sÿzDocFileCase.format_failureN)r6rprqr·r¶r|r,r,r,r-rŠc srŠc Ksv|dkri}n| ¡}|r&|s&tdƒ‚t||||p4dƒ\}}d|krL||d<tj |¡}| ||||d¡} t| f|ŽS)Nrjr@r›r")r´rŸrXr r¡rkrÎrŠ) r¡rVrUr1rírNr©Údocr+r r,r,r-Ú DocFileTestp sÿ rŒcOsDtƒ}| dd¡r$t| d¡ƒ|d<|D]}| t|f|Ž¡q(|S)NrVTrU)r„r/rDrˆrŒ)ÚpathsÚkwr‰r¡r,r,r-rŠ s 8 cCsÎ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) Nrrz # Expected:cSsg|] }d|‘qS)z## r,rºr,r,r-r¾ sz(script_from_examples..rFcSsg|] }t|ƒ‘qSr,)r€rºr,r,r-r¾ sÿr}r") rrÌr9rrÄr§rwrtÚpopr¢)r]rÊZpiecerwr,r,r-rÓ s :  "ÿ   csJt|ƒ}tƒ |¡}‡fdd„|Dƒ}|s4tˆdƒ‚|d}t|jƒ}|S)Ncsg|]}|jˆkr|‘qSr,r*)r»r6r*r,r-r¾. s ztestsource..znot found in testsr")rDrrvrŸrr³)rCr+rúr Útestsrcr,r*r-r% s   cCst|ƒ}t|||ƒdSrl)rÚ debug_script)ÚsrcÚpmr1r�r,r,r-r 5 scCs”ddl}|r| ¡}ni}|rvzt|||ƒWq�tt ¡dƒ|jdd�}| ¡| dt ¡d¡Yq�Xn|jdd�  d|||¡dS)Nr"r&T)r‹r4zexec(%r)) rŽr´r,rr>rdr�rGZ interactionrQ)r’r“r1rŽÚpr,r,r-r‘: s  r‘cCs$t|ƒ}t||ƒ}t|||jƒdSrl)rDrr‘rô)rCr+r“r�r,r,r-r!N s c@s$eZdZdd„Zdd„Zdd„ZdS)Ú _TestClasscCs ||_dSrl©r )rjr r,r,r-r�j sz_TestClass.__init__cCs|jd|_|S)Nr4r–r–r,r,r-Úsquaret s z_TestClass.squarecCs|jSrlr–r–r,r,r-r/~ sz_TestClass.getN)r6rprqr�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)Z descriptionrz --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›z.pyéýÿÿÿrc)rVrìrr&)ÚargparseÚArgumentParserÚ add_argumentr'ÚkeysÚ parse_argsr`rìrÛZ fail_fastrrir r¡rtr>Úinsertr;rr) rŸrír˜Z testfilesrìr©rÛrTÚdirnamerËrrNr,r,r-Ú_test» sL  ÿ þ ÿÿ  ÿ r¦rœ)r4)rY) NNNNTr"NFF)FrmNr")NNNN)FN)FN)F)RZ __docformat__Ú__all__r.r]r7ròr rŽr[r>rarqÚior#Ú collectionsr$r%r'rrrrrrrrr r r r rr rYrsr3rDrJrXr_rfrgr|r€rˆr�r‰rOrrrrrrÚ Exceptionrrrrerrrrnrrrrpr‚Z TestSuiter„rrŠrŒrrrr r‘r!r•rr¦r6Úexitr,r,r,r-Ú0sDÖ-   ÿþýüûÿþýü   1%.DKl<;nþ hý {ÿ $! @ þ IR   , Ø3-