grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B º²Z üËã!@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/python37/lib64/python3.7/doctest.pyr„sz z...cCs<d}x2tjD](}| |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é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)ÚmoduleÚdepthr+r+r,Ú_normalize_moduleÃs  rDcCsxdD]}| |d¡}qW|S)N)z ú Ú )Úreplace)ÚdataÚnewliner+r+r,Ú_newline_convertÖs rJc Csz|rVt|dƒ}t||ƒ}t|ddƒdk rVt|jdƒrV|j |¡}| |¡}t|ƒ|fSt||d��}|  ¡|fSQRXdS)NéÚ __loader__Úget_data)Úencoding) rDÚ_module_relative_pathr/Ú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)riÚsizer+r+r,rl s z_SpoofOut.truncate)N)r5Ú __module__Ú __qualname__rcrlr+r+r+r,rgÿs rgcCsÄt|kr||kS| t¡}dt|ƒ}}|d}|rR| |¡rNt|ƒ}|d=ndS|d}|r€| |¡r||t|ƒ8}|d=ndS||krŒdSx2|D]*}| |||¡}|dkr°dS|t|ƒ7}q’WdS)Nr"FéÿÿÿÿT)ÚELLIPSIS_MARKERÚsplitr)Ú startswithrhÚfind)ÚwantÚgotZwsÚstartposÚendposÚwr+r+r,Ú_ellipsis_matchs0     rzcCs| ¡}|rd|SdSdS)Nz# ú#)Úrstrip)Úliner+r+r,Ú _comment_line?sr~cCshdt|ƒ}}| d¡}|dkr$|}| dd|¡}|dkr>|}| dd|¡}|dkr\|d}|||…S)Nr"rFú:Ú.r&)r)rtÚ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)riÚoutr+r+r,rŽgsz_OutputRedirectingPdb.__init__NcCs*d|_|dkrt ¡j}tj ||¡dS)NT)r‹r=r?Úf_backrŒr�Ú set_trace)riÚframer+r+r,r‘os z_OutputRedirectingPdb.set_tracecCs|jrtj |¡dS)N)r‹rŒr�Ú set_continue)rir+r+r,r“usz"_OutputRedirectingPdb.set_continuecGs.tj}|jt_ztjj|f|žŽS|t_XdS)N)r=rˆrŠrŒr�Útrace_dispatch)riÚargsÚ save_stdoutr+r+r,r”{s z$_OutputRedirectingPdb.trace_dispatch)N)r5rnrorŽ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Öx,|jD]"}tj ||¡}tj |¡r°|Sq°Wtd |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__))r6r7rArsÚ ValueErrorÚosÚpathÚjoinrrrPr˜r5r)r=ÚargvÚcurdirr›Úexists)rBZ test_pathZbasedirZ directoryZfullpathr+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}||_||_dS)NrF)rhÚsourceruÚlinenor^ÚoptionsÚexc_msg)rir£rur¦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£rur¤r^r¥r¦)riÚotherr+r+r,Ú__eq__és     zExample.__eq__cCst|j|j|j|j|jfƒS)N)Úhashr£rur¤r^r¦)rir+r+r,Ú__hash__ôszExample.__hash__)Nr"r"N)r5rnrorŽrªr¬r+r+r+r,r´s#  c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs,||_||_| ¡|_||_||_||_dS)N)ÚexamplesÚ docstringÚcopyr0r*rTr¤)rir­r0r*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__r5r*rTr¤)rir­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*rTr¤)rir©r+r+r,rª)s     zDocTest.__eq__cCst|j|j|j|jfƒS)N)r«r®r*rTr¤)rir+r+r,r¬4szDocTest.__hash__cCs:t|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkS)N)r8rr¨r*rTr¤Úid)rir©r+r+r,Ú__lt__8s zDocTest.__lt__N)r5rnrorŽ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\}}xª|j |¡D]š}| ||| ¡…¡|| d|| ¡¡7}|  |||¡\}}} } |  |¡sÊ| t || | |ˆt |  d¡ƒ|d�¡|| d| ¡| ¡¡7}| ¡}qRW| ||d…¡|S)Nr"rFcsg|]}|ˆd…‘qS)Nr+)Ú.0Úl)Ú min_indentr+r,ú sz'DocTestParser.parse..)r"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,Úparsess&     zDocTestParser.parsecCst| ||¡|||||ƒS)N)rÚ get_examples)rirÂr0r*rTr¤r+r+r,Ú get_doctestšs zDocTestParser.get_doctestcCsdd„| ||¡DƒS)NcSsg|]}t|tƒr|‘qSr+)r8r)rµÚxr+r+r,r¸±sz.DocTestParser.get_examples..)rÅ)rirÂ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µÚsl)r^r+r,r¸Çsz0DocTestParser._parse_example..ruz *$rpcsg|]}|ˆd…‘qS)Nr+)rµZwl)r^r+r,r¸Òsr‚) r)rÁrrÚ_check_prompt_blankÚ _check_prefixrŸr[Ú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Š|j |¡D]z}| d¡ dd¡ ¡}x^|D]V}|ddksR|dd…tkrhtd|d||fƒ‚t|dd…}|ddk||<q2WqW|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ÁrGrrr'rœrÀ) rir£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¸ sz-DocTestParser._min_indent..r")Ú _INDENT_REÚfindallr)Úmin)rir]Úindentsr+r+r,rºs zDocTestParser._min_indentc Csbx\t|ƒD]P\}}t|ƒ|dkr ||ddkr td||d||||d…|fƒ‚q WdS)NrYrKrZz8line %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_blankcCsBxr™)r/rœr§r6Ú getmoduleZ getsourcefilerAZgetfileÚ linecacheÚgetlinesÚ__dict__r¯ÚupdateÚ_findÚsort) riÚobjr*rBr0Ú extraglobsr`rÏÚtestsr+r+r,rtMsJ$         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__rnz"object must be a class or function)r6rëÚ isfunctionrîÚ __globals__ZismethoddescriptorrPrõrnr5Úisclassr8Úpropertyrœ)rirBÚobjectZobj_modr+r+r,Ú _from_module³s(            zDocTestFinder._from_modulec Cs*|jrtd|ƒt|ƒ|kr"dSd|t|ƒ<| |||||¡}|dk rR| |¡t |¡rÂ|jrÂx^|j  ¡D]P\} } d|| f} t  t  | ¡¡sœt  | ¡rn|  || ¡rn| || | ||||¡qnWt |¡�rv|j�rvxžt|diƒ  ¡D]Š\} } t| tƒ�stdt| ƒfƒ‚t  | ¡�sPt  | ¡�sPt | ¡�sPt| tƒ�sPtdt| ƒfƒ‚d|| f} | || | ||||¡qèWt  |¡�r&|j�r&xš|j  ¡D]Œ\} } t| tƒ�r´t|| ƒ} t| tƒ�rÌt|| ƒj} t  | ¡�sðt  | ¡�sðt| tƒ�r–|  || ¡�r–d|| f} | || | ||||¡�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|}nJy,|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˜éüÿÿÿz.pycrp) r8r9Ú__doc__rAÚAttributeErrorÚ _find_linenorår/r5rârÇ) riròr*rBr0rÏr®r¤rTr+r+r,rþs(         zDocTestFinder._get_testcCsd}t |¡rd}t |¡rd|dkr(dSt dt|ddƒ¡}x$t|ƒD]\}}| |¡rH|}PqHWt |¡rt|j }t  |¡r„|j }t  |¡r”|j }t |¡r¤|j}t |¡r¾t|ddƒd}|dk �r |dkrØ|dSt d¡}x(t|t|ƒƒD]}| ||¡rò|SqòWdS)Nr"z^\s*class\s*%s\br5ú-Úco_firstlinenor&z(^|.*:)\s*\w*("|\'))r6r7rør[rÞr/rÛrÌZismethodrröÚ__code__Z istracebackÚtb_frameZisframeÚf_codeZiscodeÚranger))riròrÏr¤Zpatr…r}r+r+r,r 4s<          zDocTestFinder._find_lineno)NNNN) r5rnrorrŽrtrûrðrþr r+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)Nz-vr") rÚ_checkerr=r rãÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrgÚ_fakeout)riÚ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ãrur_r£)rir�rÚexampler+r+r,Ú report_startÈs  zDocTestRunner.report_startcCs|jr|dƒdS)Nzok )rã)rir�rrrvr+r+r,Úreport_successÕszDocTestRunner.report_successcCs&|| ||¡|j |||j¡ƒdS)N)Ú_failure_headerrÚoutput_differencer)rir�rrrvr+r+r,Úreport_failureÝs zDocTestRunner.report_failurecCs$|| ||¡dtt|ƒƒƒdS)NzException raised: )rr_rf)rir�rrrdr+r+r,Úreport_unexpected_exceptionäsz)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Ÿ)rirrr�r¤r£r+r+r,rës zDocTestRunner._failure_headerc CsŒd}}|j}tdƒ\}}} |jj} �xFt|jƒD�]6\} } |jt@oL|dk} ||_| jr–x:| j ¡D],\}}|r‚|j|O_qf|j|M_qfW|jt @r¢q2|d7}| s¼|  ||| ¡d|j | f}y,t t | j|d|dƒ|jƒ|j ¡d}Wn4tk �r‚Ynt ¡}|j ¡YnX|j ¡}|j d¡|}|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| ||| |¡nT||k�r0| �s&|  ||| |¡|d7}n*|| k�rZ| �sP| !||| |¡|d7}n|r2|jt"@r2Pq2W||_| #|||¡t$||ƒS)Nr"rKr&zZsingler3rp)%rrrÚ check_outputrÛr­r r¥rÿrrr*ÚexecrÞr£r0Údebuggerr“ÚKeyboardInterruptr=rdrrcrlruraÚformat_exception_onlyrfr¦rr†rrrrÚ_DocTestRunner__record_outcomer%)rirÚ compileflagsr�rrrÚSUCCESSÚFAILUREZBOOMZcheckÚ examplenumrÚquietZ optionflagrrTZ exceptionrvZoutcomer¦r+r+r,Z__runÿs€                   zDocTestRunner.__runcCsL|j |jd¡\}}||||f|j|j<|j|7_|j|7_dS)N)r"r")rr.r*rr)rirrWÚtÚf2Út2r+r+r,Z__record_outcome|szDocTestRunner.__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)rirTÚmodule_globalsrÄrr+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| |||¡Sˆt_|t _ t |¡|jt_|t_|rø|j ¡ddl}d|_XdS)Nzutf-8cs t| ˆd¡ˆƒ}ˆ |¡dS)NÚbackslashreplace)r9ÚencodeÚwrite)r])rNr–r+r,r�±szDocTestRunner.run..outr")rr2r0r=rˆrNÚ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+)rNr–r,Úrun‘s<      zDocTestRunner.runc Cs¢|dkr|j}g}g}g}d}}xd|j ¡D]V}|\}\} } || 7}|| 7}| dkrb| |¡q.| dkrz| || f¡q.| |¡q.W|rú|r¾tt|ƒdƒ| ¡x|D]} td| ƒq¬W|rútt|ƒdƒ| ¡x |D]\} } td| | fƒqÞW|�rJt|jƒtt|ƒdƒ| ¡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ñr r%) riræZnotestsZpassedZfailedZtotaltZtotalfrÈr*rWr,Úthingr¾r+r+r,Ú summarizeÚsP     zDocTestRunner.summarizecCsV|j}xJ|j ¡D]<\}\}}||krB||\}}||}||}||f||<qWdS)N)rrÿ)rir©Údr*rWr,r-r.r+r+r,Úmerges zDocTestRunner.merge)NNr")N)NNT)N)r5rnror rŽrrrrrr>r&r[rÞr0r;rDrFrHr+r+r+r,rhs: $ }   I 9c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCst| dd¡dƒS)NÚASCIIr5)r9r6)rir]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) rJrrr[r\ÚescapeÚBLANKLINE_MARKERrrŸrrrrz)rirurvrr+r+r,r!.s0     zOutputChecker.check_outputcCs<|ttBtB@sdS|t@r dS| d¡dko:| d¡dkS)NFTrFr3)r r r r¾)rirurvrr+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)^[ ]*(?= )T)r/r3)Ú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 )rurr[r\rLrMr2r ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparer_rŸ) rirrvrrurÐZ got_linesZdiffÚkindZenginer+r+r,r„s4    zOutputChecker.output_differenceN)r5rnrorJr!rMrr+r+r+r,r s?c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrv)rirrrvr+r+r,r޽szDocTestFailure.__init__cCs t|jƒS)N)r9r)rir+r+r,Ú__str__ÂszDocTestFailure.__str__N)r5rnrorŽrRr+r+r+r,r²s c@seZdZdd„Zdd„ZdS)rcCs||_||_||_dS)N)rrrd)rirrrdr+r+r,rŽÐszUnexpectedException.__init__cCs t|jƒS)N)r9r)rir+r+r,rRÕszUnexpectedException.__str__N)r5rnrorŽrRr+r+r+r,rÅs c@s&eZdZd dd„Zdd„Zdd„ZdS) rNTcCs$t ||||d¡}|r |j ¡|S)NF)rrDr0r@)rirr'r�rCÚrr+r+r,rD3s zDebugRunner.runcCst|||ƒ‚dS)N)r)rir�rrrdr+r+r,r9sz'DebugRunner.report_unexpected_exceptioncCst|||ƒ‚dS)N)r)rir�rrrvr+r+r,r<szDebugRunner.report_failure)NNT)r5rnrorDrrr+r+r+r,rØs[ TFc Csº|dkrtj d¡}t |¡s,td|fƒ‚|dkr:|j}t|d�} |rVt||d�} n t ||d�} x$| j ||||d�D]} |   | ¡qvW|r”|   ¡t dkr¢| a n t  | ¡t| j| jƒS)Nr™ztestmod: module required; %r)ré)rær)r0ró)r=r>r.r6r7rAr5rrrrtrDrFÚmasterrHr%rr) rÄr*r0ræÚreportrróÚraise_on_errorréÚfinderÚrunnerrr+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)Nz8Package may only be specified for module-relative paths.zutf-8r5r™)rærr")rœrXr�ržÚbasenamer¯rïrrrÇrDrFrTrHr%rr)rTrVr*rUr0rærUrrórVrçrNÚtextrXrr+r+r,r°s0R     ÚNoNamec CsDt|dd�}t||d�}x&|j|||d�D]}|j||d�q*WdS)NF)rærè)rær)r0)r')rrrtrD) rWr0rær*r'rrWrXrr+r+r,r+s  cCs"|t@|krtd|ƒ‚t}|a|S)NzOnly reporting flags allowed)r rœÚ_unittest_reportflags)r1Úoldr+r+r,rHs   c@sjeZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z e Z dd„ZdS)Ú DocTestCaser"NcCs.tj |¡||_||_||_||_||_dS)N)ÚunittestÚTestCaserŽÚ_dt_optionflagsÚ _dt_checkerÚ_dt_testÚ _dt_setUpÚ _dt_tearDown)rirrÚsetUpÚtearDownrr+r+r,rŽns  zDocTestCase.__init__cCs|j}|jdk r| |¡dS)N)rcrd)rirr+r+r,rfxs zDocTestCase.setUpcCs(|j}|jdk r| |¡|j ¡dS)N)rcrer0r@)rirr+r+r,rg~s  zDocTestCase.tearDowncCs~|j}tj}tƒ}|j}|t@s(|tO}t||jdd�}z d|_ |j ||j dd�\}}Wd|t_X|rz|  |  | ¡¡¡‚dS)NF)rrræzF----------------------------------------------------------------------)r�rC)rcr=rˆr#rar r\rrbr rDr7ZfailureExceptionÚformat_failurerc)rirr]ÚnewrrXrrr+r+r,ÚrunTest†s zDocTestCase.runTestcCsP|j}|jdkrd}n d|j}d |j d¡dd…¡}d|j|j|||fS)Nzunknown line numberz%sr€rpz:Failed doctest test for %s File "%s", line %s, in %s %s)rcr¤rŸr*rrrT)riÚerrrr¤Zlnamer+r+r,rhžs  zDocTestCase.format_failurecCs6| ¡t|j|jdd�}|j|jdd�| ¡dS)NF)rrræ)rC)rfrrarbrDrcrg)rirXr+r+r,r!ªs B zDocTestCase.debugcCs|jjS)N)rcr*)rir+r+r,r²òszDocTestCase.idcCsPt|ƒt|ƒk rtS|j|jkoN|j|jkoN|j|jkoN|j|jkoN|j|jkS)N)r§r¨rcrardrerb)rir©r+r+r,rªõs    zDocTestCase.__eq__cCst|j|j|j|jfƒS)N)r«rardrerb)rir+r+r,r¬ÿszDocTestCase.__hash__cCs,|jj d¡}d|dd |dd…¡fS)Nr€z%s (%s)rp)rcr*rrrŸ)rir*r+r+r,r± szDocTestCase.__repr__cCs d|jjS)Nz Doctest: )rcr*)rir+r+r,ÚshortDescription szDocTestCase.shortDescription)r"NNN)r5rnrorŽrfrgrjrhr!r²rªr¬r±rRrlr+r+r+r,r^ls  H r^c@s0eZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_t |d¡dS)N)rBr^rŽ)rirBr+r+r,rŽ szSkipDocTestCase.__init__cCs| d¡dS)Nz-DocTestSuite will not work with -O2 and above)ZskipTest)rir+r+r,rf szSkipDocTestCase.setUpcCsdS)Nr+)rir+r+r,Ú test_skip szSkipDocTestCase.test_skipcCs d|jjS)NzSkipping tests from %s)rBr5)rir+r+r,rl sz SkipDocTestCase.shortDescriptionN)r5rnrorŽrfrnrlrRr+r+r+r,rm s rmc@seZdZdd„ZdS)Ú _DocTestSuitecCsdS)Nr+)riÚindexr+r+r,Ú_removeTestAtIndex sz _DocTestSuite._removeTestAtIndexN)r5rnrorqr+r+r+r,ro sroc Ks¾|dkrtƒ}t|ƒ}|j|||d�}|sNtjjdkrNtƒ}| t|ƒ¡|S|  ¡tƒ}x\|D]T}t |j ƒdkrvqb|j s¤|j }|dd…dkrž|dd…}||_ | t|f|Ž¡qbW|S)N)r0rór3r"rz.pycrp)rrDrtr=r1ÚoptimizeroÚaddTestrmrñr)r­rTr˜r^) rBr0róZ test_finderr¥rôÚsuiterrTr+r+r,r# s(%  c@s(eZdZdd„Zdd„ZeZdd„ZdS)Ú DocFileCasecCsd |jj d¡¡S)NrBr€)rŸrcr*rr)rir+r+r,r²e szDocFileCase.idcCs|jjS)N)rcrT)rir+r+r,r±h szDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)rcr*rT)rirkr+r+r,rhl szDocFileCase.format_failureN)r5rnror²r±rRrhr+r+r+r,ruc sruc Ksv|dkri}n| ¡}|r&|s&tdƒ‚t||||p4dƒ\}}d|krL||d<tj |¡}| ||||d¡} t| f|ŽS)Nz8Package may only be specified for module-relative paths.zutf-8r˜r")r¯rœrXr�ržrYrÇru) ržrVrUr0rçrNr¥Údocr*rr+r+r,Ú DocFileTestq s rwcOsHtƒ}| dd¡r$t| d¡ƒ|d<x|D]}| t|f|Ž¡q*W|S)NrVTrU)ror.rDrsrw)ÚpathsÚkwrtržr+r+r,r‹ s 8  cCsÚg}xˆtƒ |¡D]x}t|tƒrj| |jdd…¡|j}|rŠ| d¡|dd„| d¡dd…Dƒ7}q|dd„| d¡dd…Dƒ7}qWx|rª|ddkrª| ¡q�Wx|rÊ|ddkrÊ| d¡q®Wd  |¡dS) Nrpz # Expected:cSsg|] }d|‘qS)z## r+)rµr¶r+r+r,r¸ sz(script_from_examples..rFcSsg|] }t|ƒ‘qSr+)r~)rµr¶r+r+r,r¸ sr{r") rrÅr8rr½r£rurrÚpoprŸ)r]rÃZpiecerur+r+r,rÔ s:  " csJt|ƒ}tƒ |¡}‡fdd„|Dƒ}|s4tˆdƒ‚|d}t|jƒ}|S)Ncsg|]}|jˆkr|‘qSr+)r*)rµr,)r*r+r,r¸/ sztestsource..znot found in testsr")rDrrtrœrr®)rBr*rôrÚtestsrcr+)r*r,r& s   cCst|ƒ}t|||ƒdS)N)rÚ debug_script)ÚsrcÚpmr0r{r+r+r,r 6 scCs”ddl}|r| ¡}ni}|rvyt|||ƒWq�tt ¡dƒ|jdd�}| ¡| dt ¡d¡Yq�Xn|jdd�  d|||¡dS)Nr"r&T)r‰r3zexec(%r)) rŒr¯r"rýr=rdr�r:Z interactionrD)r}r~r0rŒÚpr+r+r,r|; s  r|cCs$t|ƒ}t||ƒ}t|||jƒdS)N)rDrr|rî)rBr*r~r{r+r+r,r!O s c@s$eZdZdd„Zdd„Zdd„ZdS)Ú _TestClasscCs ||_dS)N)r)rirr+r+r,rŽk sz_TestClass.__init__cCs|jd|_|S)Nr3)r)rir+r+r,Úsquareu s z_TestClass.squarecCs|jS)N)r)rir+r+r,r. sz_TestClass.getN)r5rnrorŽ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}x|jD]}|t|O}q„W|j r¦|t O}x~|D]v}|  d¡�rt j  |¡\}}tj  d|¡t|dd…ƒ} tj d=t| ||d�\} } nt|d||d�\} } | r¬dSq¬WdS)Nr"zdoctest 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†z.pyéýÿÿÿ)rær)rVrærr&)ÚargparseÚArgumentParserÚ add_argumentr'ÚkeysÚ parse_argsr`rærÕZ fail_fastrrhr�ržrrr=Úinsertr:rr) rŠrçr•Z testfilesrær¥rÕrTÚdirnamerÄrrBr+r+r,Ú_test¼ s>       r‘r™)r3)rY) NNNNTr"NFF)Fr[Nr")NNNN)FN)FN)F)RZ __docformat__Ú__all__r-rOr6rìr�rŒr[r=rar_Úior#Ú collectionsr$r%r'rrrrrrrrr r r r rr rLrqr2rDrJrXr_rfrgrzr~r†r�r‡rOrrrrrrÚ ExceptionrrrrTrrrr\rr`r^rmZ TestSuiterorrurwrrrr r|r!r€rür‘r5Úexitr+r+r+r,Ú0s      1%.DKl<;n f x $! @ IR   ,  -