grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/20263 Õì2aÇ—ã!@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 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#dpd.d/„Z$d0d1„Z%dqd3d4„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#a9drdNd„Z:dLd#d#d#d#dLd"d#dMe1ƒd#f dOd„Z;dsdQd„ZGdSdT„dTe j?ƒZ@GdUdV„dVe@ƒZAGdWdX„dXe jBƒZCdtdYd„ZDGdZd[„d[e@ƒZEdLd#d#e1ƒd#fd\d]„ZFd^d„ZGd_d„ZHd`d„ZIdudad „ZJdvdbdc„ZKdwddd!„ZLGdedf„dfƒZMeMdgdhdidjdkdlœZNdmdn„ZOePdok�rle jQeOƒƒd#S)xzreStructuredText 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/python36/lib64/python3.6/doctest.pyr…sz z...cCs<d}x2tjD](}|j|dƒ}|tt|ƒkr ||jO}q W|S)Nr")Ú __future__Zall_feature_namesÚgetÚgetattrZ compiler_flag)ÚglobsÚflagsZfnameZfeaturer+r+r,Ú_extract_future_flags¸s   r2écCsVtj|ƒr|St|tƒr,t|tƒtƒdgƒS|dkrJtjtj |ƒ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 ƒ|fSQRXdS)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×s     rVé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_typeZexc_valZexc_tbr+r+r,Ú_exception_tracebackís rdc@seZdZdd„Zddd„ZdS)Ú _SpoofOutcCs&tj|ƒ}|r"|jdƒ r"|d7}|S)NrH)r#raÚendswith)ÚselfÚresultr+r+r,raús z_SpoofOut.getvalueNcCs|j|ƒtj|ƒdS)N)Úseekr#Útruncate)rgÚsizer+r+r,rjs z_SpoofOut.truncate)N)r5Ú __module__Ú __qualname__rarjr+r+r+r,reùs recCsÄt|kr||kS|jtƒ}dt|ƒ}}|d}|rR|j|ƒrNt|ƒ}|d=ndS|d}|r€|j|ƒr||t|ƒ8}|d=ndS||krŒdSx2|D]*}|j|||ƒ}|dkr°dS|t|ƒ7}q’WdS)Nr"Fr&Téÿÿÿÿrn)ÚELLIPSIS_MARKERÚsplitr)Ú startswithrfÚfind)ÚwantÚgotZwsÚstartposÚendposÚwr+r+r,Ú_ellipsis_matchs0     rxcCs|jƒ}|rd|SdSdS)Nz# ú#)Úrstrip)Úliner+r+r,Ú _comment_line9sr|cCshdt|ƒ}}|jdƒ}|dkr$|}|jdd|ƒ}|dkr>|}|jdd|ƒ}|dkr\|d}|||…S)Nr"rHú:Ú.r&)r)rrÚrfind)ÚmsgÚstartÚendÚir+r+r,Ú_strip_exception_detailsAs  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)rgÚoutr+r+r,rŒasz_OutputRedirectingPdb.__init__NcCs*d|_|dkrtjƒj}tjj||ƒdS)NT)r‰r=r?Úf_backrŠr‹Ú set_trace)rgÚframer+r+r,r�is z_OutputRedirectingPdb.set_tracecCs|jrtjj|ƒdS)N)r‰rŠr‹Ú set_continue)rgr+r+r,r‘osz"_OutputRedirectingPdb.set_continuec Gs.tj}|jt_ztjj|f|žŽS|t_XdS)N)r=r†rˆrŠr‹Útrace_dispatch)rgÚargsÚ save_stdoutr+r+r,r’us z$_OutputRedirectingPdb.trace_dispatch)N)r5rlrmrŒr�r‘r’r+r+r+r,r…[s r…cCsòtj|ƒstd|ƒ‚|jdƒr(tdƒ‚tjj|jdƒŽ}t |dƒrXtjj|j ƒd}nŒ|j dkržt t jƒdkr–t jddkr–tjjt jdƒd}qätj}nFt |dƒrÖx,|jD]"}tjj||ƒ}tjj|ƒr°|Sq°Wtd |j ƒ‚tjj||ƒ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__))r6r7rArqÚ ValueErrorrNÚpathÚjoinrprKr–r5r)r=ÚargvÚcurdirr™Úexists)rBZ test_pathZbasedirZ directoryZfullpathr+r+r,rJ€s&         rJc@s&eZdZd dd„Zdd„Zdd„ZdS) rNr"cCsz|jdƒs|d7}|r*|jdƒ r*|d7}|dk rF|jdƒ rF|d7}||_||_||_||_|dkrji}||_||_dS)NrH)rfÚsourcersÚlinenor\ÚoptionsÚexc_msg)rgr rsr£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|jkS)N)ÚtypeÚNotImplementedr rsr¡r\r¢r£)rgÚotherr+r+r,Ú__eq__ãs     zExample.__eq__cCst|j|j|j|j|jfƒS)N)Úhashr rsr¡r\r£)rgr+r+r,Ú__hash__îszExample.__hash__)Nr"r"N)r5rlrmrŒr§r©r+r+r+r,r®s#  c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs,||_||_|jƒ|_||_||_||_dS)N)ÚexamplesÚ docstringÚcopyr0r*rRr¡)rgrªr0r*rRr¡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__r5r*rRr¡)rgrªr+r+r,Ú__repr__szDocTest.__repr__cCs\t|ƒt|ƒk rtS|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkoZ|j|jkS)N)r¤r¥rªr«r0r*rRr¡)rgr¦r+r+r,r§#s     zDocTest.__eq__cCst|j|j|j|jfƒS)N)r¨r«r*rRr¡)rgr+r+r,r©.szDocTest.__hash__cCs:t|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkS)N)r8rr¥r*rRr¡Úid)rgr¦r+r+r,Ú__lt__2s zDocTest.__lt__N)r5rlrmrŒ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 ^[ ]*(#.*)?$úc s|jƒ}|j|ƒ‰ˆdkr8dj‡fdd„|jdƒDƒƒ}g}d\}}xª|jj|ƒD]š}|j|||jƒ…ƒ||jd||jƒƒ7}|j |||ƒ\}}} } |j |ƒsÊ|jt || | |ˆt |j dƒƒ|d�ƒ||jd|jƒ|jƒƒ7}|jƒ}qRW|j||d…ƒ|S)Nr"rHcsg|]}|ˆd…‘qS)Nr+)Ú.0Úl)Ú min_indentr+r,ú ysz'DocTestParser.parse..r\)r¡r\r¢)r"r")Ú expandtabsÚ _min_indentrœrpÚ _EXAMPLE_REÚfinditerÚappendr�ÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTrr)Úgroupr‚) rgÚstringr*ÚoutputZcharnor¡Úmr r¢rsr£r+)r´r,Úparsems&     zDocTestParser.parsecCst|j||ƒ|||||ƒS)N)rÚ get_examples)rgr¿r0r*rRr¡r+r+r,Ú get_doctest”s zDocTestParser.get_doctestcCsdd„|j||ƒDƒS)NcSsg|]}t|tƒr|‘qSr+)r8r)r²Úxr+r+r,rµ«sz.DocTestParser.get_examples..)rÂ)rgr¿r*r+r+r,ràs zDocTestParser.get_examplesc s t|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|ƒ}|rì|jd ƒ}nd}|j |||ƒ} || ||fS)Nr\r rHr&rXr~csg|]}|ˆdd…‘qS)rWNr+)r²Úsl)r\r+r,rµÁsz0DocTestParser._parse_example..rsz *$csg|]}|ˆd…‘qS)Nr+)r²Zwl)r\r+r,rµÌsr€rnrn) r)r¾rpÚ_check_prompt_blankÚ _check_prefixrœrYÚmatchÚ _EXCEPTION_REÚ _find_options) rgrÁr*r¡Ú source_linesr rsÚ want_linesr£r¢r+)r\r,r¼®s$      zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c Cs´i}xŠ|jj|ƒD]z}|jdƒjddƒjƒ}x^|D]V}|ddksR|dd…tkrhtd|d||fƒ‚t|dd…}|ddk||<q2WqW|r°|j|ƒr°td|||fƒ‚|S) Nr&ú,rXr"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¾rMrpr'ršr½) rgr r*r¡r¢rÁÚoption_stringsÚoptionÚflagr+r+r,rËäs  zDocTestParser._find_optionsz ^([ ]*)(?=\S)cCs2dd„|jj|ƒDƒ}t|ƒdkr*t|ƒSdSdS)NcSsg|] }t|ƒ‘qSr+)r))r²r\r+r+r,rµsz-DocTestParser._min_indent..r")Ú _INDENT_REÚfindallr)Úmin)rgr[Úindentsr+r+r,r·s zDocTestParser._min_indentc Csbx\t|ƒD]P\}}t|ƒ|dkr ||ddkr td||d||||d…|fƒ‚q WdS)NrWrErXz8line %r of the docstring for %s lacks blank after %s: %rr&)Ú enumerater)rš)rgÚlinesr\r*r¡rƒr{r+r+r,rÇ s   z!DocTestParser._check_prompt_blankcCsDx>t|ƒD]2\}}|r |j|ƒ r td||d||fƒ‚q WdS)NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&)rØrqrš)rgrÙÚprefixr*r¡rƒr{r+r+r,rÈszDocTestParser._check_prefixN)r±)r±)r5rlrmrYÚcompileÚ MULTILINEÚVERBOSEr¸ÚDOTALLrÊrÉr½rÂrÄrÃr¼rÐrËrÔr·rÇrÈr+r+r+r,r=s       ' 3c@sJeZdZdeƒddfdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dS)rFTcCs||_||_||_||_dS)N)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rgÚverboseÚparserÚrecurseÚ exclude_emptyr+r+r,rŒ1szDocTestFinder.__init__Nc CsP|dkr.t|ddƒ}|dkr.tdt|ƒfƒ‚|dkrr—éþÿÿÿ)r/ršr¤r6Ú getmoduleZ getsourcefilerAZgetfileÚ linecacheÚgetlinesÚ__dict__r¬ÚupdateÚ_findÚsort) rgÚobjr*rBr0Ú extraglobsr^rÌÚtestsr+r+r,rrGsJ$          zDocTestFinder.findcCsÂ|dkr dStj|ƒdk r(|tj|ƒkStj|ƒr>|j|jkStj|ƒr|t|dƒr\|jj}nt|dƒrn|j}ndS|j |kStj |ƒr’|j |jkSt|dƒr¨|j |jkSt |t ƒr¶dSt dƒ‚dS)NTÚ __objclass__rlz"object must be a class or function)r6rèÚ isfunctionrëÚ __globals__ZismethoddescriptorrKròrlr5Úisclassr8Úpropertyrš)rgrBÚobjectZobj_modr+r+r,Ú _from_module­s(            zDocTestFinder._from_modulec Cs(|jrtd|ƒt|ƒ|kr"dSd|t|ƒ<|j|||||ƒ}|dk rR|j|ƒtj|ƒrÂ|jrÂx^|jj ƒD]P\} } d|| f} tj tj | ƒƒsœtj | ƒrn|j || ƒrn|j|| | ||||ƒqnWtj|ƒoÐ|j�rtxžt|diƒj ƒD]Š\} } t| tƒ�s tdt| ƒfƒ‚tj | ƒ�p8tj | ƒ�p8tj| ƒ�p8t| tƒ�sNtdt| ƒfƒ‚d|| f} |j|| | ||||ƒqæWtj |ƒ�r$|j�r$xš|jj ƒD]Œ\} } t| tƒ�r²t|| ƒ} t| tƒ�rÊt|| ƒ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ö) rgrñrïr*rBrÌr0ÚseenÚtestZvalnameÚvalr+r+r,ríÉsP                 zDocTestFinder._findc CsÂt|tƒr|}nJy,|jdkr"d}n|j}t|tƒs:t|ƒ}Wnttfk rXd}YnX|j||ƒ}|jrv| rvdS|dkr„d}n*t|d|jƒ}|dd…dkr®|dd…}|j j |||||ƒS)Nr˜r–rWz.pycr&éüÿÿÿrn) r8r9Ú__doc__rAÚAttributeErrorÚ _find_linenorâr/r5rßrÄ) rgrïr*rBr0rÌr«r¡rRr+r+r,rûs(         zDocTestFinder._get_testcCsd}tj|ƒrd}tj|ƒrd|dkr(dStjdt|ddƒƒ}x$t|ƒD]\}}|j|ƒrH|}PqHWtj|ƒrt|j }tj |ƒr„|j }tj |ƒr”|j }tj|ƒr¤|j}tj|ƒr¾t|ddƒd}|dk �r |dkrØ|dStjdƒ}x(t|t|ƒƒD]}|j||ƒrò|SqòWdS)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))rgrïrÌr¡Zpatrƒr{r+r+r,r-s<          zDocTestFinder._find_lineno)NNNN) r5rlrmrrŒrrrørírûrr+r+r+r,r(s  f?%c@s†eZdZddZddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z e j dƒZd dd„Zd!dd„Zd"dd„Zdd„ZdS)#rr4éFNr"cCsN|ptƒ|_|dkrdtjk}||_||_||_d|_d|_i|_ t ƒ|_ dS)Nz-vr") rÚ_checkerr=r�ràÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftreÚ_fakeout)rgÚ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àrsr]r )rgr�rÚexampler+r+r,Ú report_startÁs  zDocTestRunner.report_startcCs|jr|dƒdS)Nzok )rà)rgr�rrrtr+r+r,Úreport_successÎszDocTestRunner.report_successcCs&||j||ƒ|jj|||jƒƒdS)N)Ú_failure_headerrÚoutput_differencer)rgr�rrrtr+r+r,Úreport_failureÖs zDocTestRunner.report_failurecCs$||j||ƒdtt|ƒƒƒdS)NzException raised: )rr]rd)rgr�rrrbr+r+r,Úreport_unexpected_exceptionÝsz)DocTestRunner.report_unexpected_exceptioncCs”|jg}|jrR|jdk r4|jdk r4|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œ)rgrrr�r¡r r+r+r,räs zDocTestRunner._failure_headercCsŒd}}|j}tdƒ\}}} |jj} �xFt|jƒD�]6\} } |jt@oL|dk} ||_| jr–x:| jjƒD],\}}|r‚|j|O_qf|j|M_qfW|jt @r¢q2|d7}| s¼|j ||| ƒd|j | f}y,t t | j|d|dƒ|jƒ|jjƒd}Wn4tk �r‚Yntjƒ}|jjƒYnX|jjƒ}|jjdƒ|}|dk�rh| | 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| �sZ|j||| |ƒnT||k�r0| �s&|j ||| |ƒ|d7}n*|| k�rZ| �sP|j!||| |ƒ|d7}n|r2|jt"@r2Pq2W||_|j#|||ƒt$||ƒS)Nr"rEr&zZsingler3rn)%rr rÚ check_outputrØrªr r¢rürrr*ÚexecrÛr r0Údebuggerr‘ÚKeyboardInterruptr=rbrrarjrsr_Úformat_exception_onlyrdr£rr„rrrrÚ_DocTestRunner__record_outcomer%)rgrÚ compileflagsr�rrrÚSUCCESSÚFAILUREZBOOMZcheckÚ examplenumrÚquietZ optionflagrrRZ exceptionrtZoutcomer£r+r+r,Z__runøs€                   zDocTestRunner.__runcCsL|jj|jdƒ\}}||||f|j|j<|j|7_|j|7_dS)Nr")r"r")rr.r*rr)rgrrUÚtÚf2Út2r+r+r,Z__record_outcomeuszDocTestRunner.__record_outcomez..+)\[(?P\d+)\]>$cCsV|jj|ƒ}|rF|jdƒ|jjkrF|jjt|jdƒƒ}|jjdd�S|j ||ƒSdS)Nr*r(T)Úkeepends) Ú%_DocTestRunner__LINECACHE_FILENAME_RErÉr¾rr*rªÚintr Ú splitlinesÚsave_linecache_getlines)rgrRÚmodule_globalsrÁrr+r+r,Z__patched_linecache_getlines‚s  z*DocTestRunner.__patched_linecache_getlinesTc sþ||_|dkrt|jƒ}tj‰|dkrVˆj‰ˆdks@ˆjƒdkrHˆj}n‡‡fdd„}|jt_tj ƒ}t j }t ˆƒ|_ |j jƒ|j j t _ tj|_|jt_tj}tjt_z|j|||ƒSˆt_|t _ tj|ƒ|jt_|t_|rø|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Úlowerr5rÚgettracerŠr�r…r!Úresetrérêr1Ú*_DocTestRunner__patched_linecache_getlinesÚ displayhookÚ__displayhook__Ú_DocTestRunner__runÚsettraceÚclearÚbuiltinsÚ_) rgrr%r�Ú clear_globsZ save_traceZsave_set_traceZsave_displayhookr?r+)rIr”r,ÚrunŠs<      zDocTestRunner.runc Cs¢|dkr|j}g}g}g}d}}xd|jjƒD]V}|\}\} } || 7}|| 7}| dkrb|j|ƒq.| dkrz|j|| fƒq.|j|ƒq.W|rú|r¾tt|ƒdƒ|jƒx|D]} td| ƒq¬W|rútt|ƒdƒ|jƒx |D]\} } td| | fƒqÞW|�rJt|jƒtt|ƒdƒ|jƒx(|D] \} \} } td| | | fƒ�q&W|�rvt|dt|jƒd ƒt||d |d ƒ|�rŠtd |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àrrürºrúr)rîrr%) rgrãZnotestsZpassedZfailedZtotaltZtotalfrÅr*rUr*Úthingr»r+r+r,Ú summarizeÓsP     zDocTestRunner.summarizecCsV|j}xJ|jjƒD]<\}\}}||krB||\}}||}||}||f||<qWdS)N)rrü)rgr¦Údr*rUr*r+r,r+r+r,Úmerge s zDocTestRunner.merge)NNr")N)NNT)N)r5rlrmrrŒrrrrrr<r$rYrÛr.r9rBrDrFr+r+r+r,ras: $ }   I 9c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCst|jddƒdƒS)NÚASCIIr3)r9r4)rgr[r+r+r,Ú_toAscii!szOutputChecker._toAsciicCsÌ|j|ƒ}|j|ƒ}||kr dS|t@sH||fd kr8dS||fd krHdS|t@s‚tjdtjtƒd|ƒ}tjdd|ƒ}||kr‚dS|t@r²d j|j ƒƒ}d j|j ƒƒ}||kr²dS|t @rÈt ||ƒrÈdSd S) NTúTrue ú1 úFalse ú0 z (?m)^%s\s*?$r˜z (?m)^\s*?$rXF)rIrJ)rKrL) rHrrrYrZÚescapeÚBLANKLINE_MARKERrrœrprrx)rgrsrtrr+r+r,r's0     zOutputChecker.check_outputcCs<|ttBtB@sdS|t@r dS|jdƒdko:|jdƒdkS)NFTrHr3)r r r r»)rgrsrtrr+r+r,Ú_do_a_fancy_difffs zOutputChecker._do_a_fancy_diffc Cs8|j}|t@stjdt|ƒ}|j|||ƒrî|jdd�}|jdd�}|t@rptj ||dd�}t |ƒdd…}d}nZ|t @ržtj ||dd�}t |ƒdd…}d}n,|t @rÊtjtjd�} t | j||ƒƒ}d }nd d „|Dƒ}d |td j|ƒƒS|oô|�r dt|ƒt|ƒfS|�rdt|ƒS|�r0dt|ƒSdSdS)Nz(?m)^[ ]*(?= )T)r-r3)Únz#unified diff with -expected +actualz-context diff with expected followed by actual)Zcharjunkzndiff with -expected +actualcSsg|]}|jƒd‘qS)rH)rz)r²r{r+r+r,rµŸsz3OutputChecker.output_difference..zDifferences (%s): r˜zExpected: %sGot: %szExpected: %sGot nothing zExpected nothing Got: %szExpected nothing Got nothing )rsrrYrZrNrOr0r ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparer]rœ) rgrrtrrsrÍZ got_linesZdiffÚkindZenginer+r+r,r}s6     zOutputChecker.output_differenceN)r5rlrmrHrrOrr+r+r+r,rs?c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrt)rgrrrtr+r+r,rŒ¸szDocTestFailure.__init__cCs t|jƒS)N)r9r)rgr+r+r,Ú__str__½szDocTestFailure.__str__N)r5rlrmrŒrTr+r+r+r,r­s c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrb)rgrrrbr+r+r,rŒËszUnexpectedException.__init__cCs t|jƒS)N)r9r)rgr+r+r,rTÐszUnexpectedException.__str__N)r5rlrmrŒrTr+r+r+r,rÀs c@s&eZdZd dd„Zdd„Zdd„ZdS) rNTcCs$tj||||dƒ}|r |jjƒ|S)NF)rrBr0r>)rgrr%r�rAÚrr+r+r,rB.s zDebugRunner.runcCst|||ƒ‚dS)N)r)rgr�rrrbr+r+r,r4sz'DebugRunner.report_unexpected_exceptioncCst|||ƒ‚dS)N)r)rgr�rrrtr+r+r,r7szDebugRunner.report_failure)NNT)r5rlrmrBrrr+r+r+r,rÓs[ TFc Csº|dkrtjjdƒ}tj|ƒs,td|fƒ‚|dkr:|j}t|d�} |rVt||d�} n t ||d�} x$| j ||||d�D]} | j | ƒqvW|r”| j ƒt dkr¢| a n t j| ƒt| j| jƒS)Nr—ztestmod: module required; %r)ræ)rãr)r0rð)r=r>r.r6r7rAr5rrrrrrBrDÚmasterrFr%rr) rÁr*r0rãÚreportrrðÚraise_on_errorræÚfinderÚrunnerrr+r+r,rCs$E     c Csà|r| rtdƒ‚t|||| p dƒ\} }|dkr)rgrr+r+r,riys  zDocTestCase.tearDownc Cs‚|j}tj}tƒ}|j}|t@s(|tO}t||jdd�}z$dd|_ |j ||j dd�\}}Wd|t_X|r~|j |j |jƒƒƒ‚dS)NF)rrrãrr )r�rA)rer=r†r#rcr r^rrdrrBr5ZfailureExceptionÚformat_failurera)rgrr_ÚnewrrZrrr+r+r,ÚrunTest�s  zDocTestCase.runTestcCsP|j}|jdkrd}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 %srn)rer¡rœr*rprR)rgÚerrrr¡Zlnamer+r+r,rj™s  zDocTestCase.format_failurecCs6|jƒt|j|jdd�}|j|jdd�|jƒdS)NF)rrrã)rA)rhrrcrdrBreri)rgrZr+r+r,r!¥s B zDocTestCase.debugcCs|jjS)N)rer*)rgr+r+r,r¯íszDocTestCase.idcCsPt|ƒt|ƒk rtS|j|jkoN|j|jkoN|j|jkoN|j|jkoN|j|jkS)N)r¤r¥rercrfrgrd)rgr¦r+r+r,r§ðs    zDocTestCase.__eq__cCst|j|j|j|jfƒS)N)r¨rcrfrgrd)rgr+r+r,r©úszDocTestCase.__hash__cCs,|jjjdƒ}d|ddj|dd…ƒfS)Nr~z%s (%s)r&rnrn)rer*rprœ)rgr*r+r+r,r®þszDocTestCase.__repr__cCs d|jjS)Nz Doctest: )rer*)rgr+r+r,ÚshortDescription szDocTestCase.shortDescription)r"NNN)r5rlrmrŒrhrirlrjr!r¯r§r©r®rTrnr+r+r+r,r`gs  H r`c@s0eZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_tj|dƒdS)N)rBr`rŒ)rgrBr+r+r,rŒ szSkipDocTestCase.__init__cCs|jdƒdS)Nz-DocTestSuite will not work with -O2 and above)ZskipTest)rgr+r+r,rh szSkipDocTestCase.setUpcCsdS)Nr+)rgr+r+r,Ú test_skip szSkipDocTestCase.test_skipcCs d|jjS)NzSkipping tests from %s)rBr5)rgr+r+r,rn sz SkipDocTestCase.shortDescriptionN)r5rlrmrŒrhrprnrTr+r+r+r,ro s roc@seZdZdd„ZdS)Ú _DocTestSuitecCsdS)Nr+)rgÚindexr+r+r,Ú_removeTestAtIndex sz _DocTestSuite._removeTestAtIndexN)r5rlrmrsr+r+r+r,rq srqc KsÀ|dkrtƒ}t|ƒ}|j|||d�}| rPtjjdkrPtƒ}|jt|ƒƒ|S|j ƒtƒ}x\|D]T}t |j ƒdkrxqd|j s¦|j }|dd…dkr |dd…}||_ |jt|f|ŽƒqdW|S) N)r0rðr3r"rWz.pycr&rrn)rrDrrr=r1ÚoptimizerqÚaddTestrorîr)rªrRr–r`) rBr0rðZ test_finderr¢rñÚsuiterrRr+r+r,r s(%  c@s(eZdZdd„Zdd„ZeZdd„ZdS)Ú DocFileCasecCsdj|jjjdƒƒS)Nr@r~)rœrer*rp)rgr+r+r,r¯` szDocFileCase.idcCs|jjS)N)rerR)rgr+r+r,r®c szDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)rer*rR)rgrmr+r+r,rjg szDocFileCase.format_failureN)r5rlrmr¯r®rTrjr+r+r+r,rw^ srwc Ksx|dkri}n|jƒ}|r(| r(tdƒ‚t||||p6dƒ\}}d|krN||d<tjj|ƒ}|j||||dƒ} t| f|ŽS)Nz8Package may only be specified for module-relative paths.zutf-8r–r")r¬ršrVrNr›r[rÄrw) r›rTrSr0rärIr¢Údocr*rr+r+r,Ú DocFileTestl s  rycOsHtƒ}|jddƒr$t|jdƒƒ|d<x|D]}|jt|f|Žƒq*W|S)NrTTrS)rqr.rDrury)ÚpathsÚkwrvr›r+r+r,r† s 8  cCsÚg}xˆtƒj|ƒD]x}t|tƒrj|j|jdd …ƒ|j}|rŠ|jdƒ|dd„|jdƒdd …Dƒ7}q|dd„|jdƒdd …Dƒ7}qWx|rª|d dkrª|jƒq�Wx|rÊ|ddkrÊ|jdƒq®Wdj |ƒdS) Nr&z # Expected:cSsg|] }d|‘qS)z## r+)r²r³r+r+r,rµ sz(script_from_examples..rHcSsg|] }t|ƒ‘qSr+)r|)r²r³r+r+r,rµ sryr"rnrnrnrn) rrÂr8rrºr rsrpÚpoprœ)r[rÀZpiecersr+r+r,rÏ s:  " csJt|ƒ}tƒj|ƒ}‡fdd„|Dƒ}|s4tˆdƒ‚|d}t|jƒ}|S)Ncsg|]}|jˆkr|‘qSr+)r*)r²r*)r*r+r,rµ* sztestsource..znot found in testsr")rDrrrršrr«)rBr*rñrÚtestsrcr+)r*r,r! s   cCst|ƒ}t|||ƒdS)N)rÚ debug_script)ÚsrcÚpmr0r}r+r+r,r 1 sc Cs”ddl}|r|jƒ}ni}|rvyt|||ƒWq�ttjƒdƒ|jdd�}|jƒ|jdtjƒdƒYq�Xn|jdd�j d|||ƒdS)Nr"r&T)r‡r3zexec(%r)) rŠr¬r rúr=rbr‹r8Z interactionrB)rr€r0rŠÚpr+r+r,r~6 s  r~cCs$t|ƒ}t||ƒ}t|||jƒdS)N)rDrr~rë)rBr*r€r}r+r+r,r!J s c@s$eZdZdd„Zdd„Zdd„ZdS)Ú _TestClasscCs ||_dS)N)r)rgrr+r+r,rŒf sz_TestClass.__init__cCs|jd|_|S)Nr3)r)rgr+r+r,Úsquarep s z_TestClass.squarecCs|jS)N)r)rgr+r+r,r.z sz_TestClass.getN)r5rlrmrŒrƒr.r+r+r+r,r‚X 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 tjdd�}|jdddddd�|jd d d tjƒgd d �|jddddd�|jdddd�|jƒ}|j}|j}d}x|jD]}|t|O}q|W|j rž|t O}x||D]t}|j dƒrüt j j|ƒ\}}tj jd|ƒt|dd…ƒ}tj d=t|||d�\} } nt|d||d�\} } | r¤dSq¤WdS)Nzdoctest runner)Ú descriptionz-vz --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ˆr"z.pyrE)rãr)rTrãrr&éýÿÿÿ)ÚargparseÚArgumentParserÚ add_argumentr'ÚkeysÚ parse_argsr^rãrÒZ fail_fastrrfrNr›rpr=Úinsertr:rr) rär“Z testfilesrãr¢rÒrRÚdirnamerÁrr@r+r+r,Ú_test· s<       r“r—)r3)rW) NNNNTr"NFF)Fr]Nr")NNNN)FN)FN)F)RZ __docformat__Ú__all__r-rŒrQr6rérNrŠrYr=r_raÚior#Ú collectionsr$r%r'rrrrrrrrr r r r rr rNror2rDrVr]rdrerxr|r„r‹r…rJrrrrrrÚ ExceptionrrrrVrrrr^rrbr`roZ TestSuiterqrrwryrrrr r~r!r‚rùr“r5Úexitr+r+r+r,Ú0s      1%.DKl;;n f x $! @ IR   ,  +