grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026o ®û|j·šã @sF dZgd¢ZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZddlmZeddƒZiZdd „Zed ƒZed ƒZed ƒZed ƒZedƒZedƒZeeBeBeBeBeBZedƒZedƒZedƒZedƒZedƒZeeBeBeBeBZ dZ!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ƒZ0Gd3d4„d4ƒZ1Gd5d6„d6ƒZ2Gd7d8„d8ƒZ3Gd9d:„d:ƒZ4Gd;d<„d<ƒZ5Gd=d>„d>e6ƒZ7Gd?d@„d@e6ƒZ8GdAdB„dBe4ƒZ9da:   DdsdEdF„Z;dCdddddCdddDe2ƒdf dGdH„Z< I dtdJdK„Z=da>dLdM„Z?GdNdO„dOe j@ƒZAGdPdQ„dQeAƒZBGdRdS„dSe jCƒZDdudTdU„ZEGdVdW„dWeAƒZFdCdde2ƒdfdXdY„ZGdZd[„ZHd\d]„ZId^d_„ZJdvd`da„ZKdvdbdc„ZLdwddde„ZMGdfdg„dgƒZNeNdhdidjdkdldmœZOdndo„ZPeQdpk�r¡e  RePƒ¡dSdS)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ÚIncrementalNewlineDecoder)Ú namedtupleÚ TestResultszfailed attemptedcCst |dttƒ>¡S)Né)ÚOPTIONFLAGS_BY_NAMEÚ setdefaultÚlen©Úname©r-ú./opt/alt/python310/lib64/python3.10/doctest.pyr„srrrrrrrr r r r rz z...cCs: d}tjD]}| |d¡}|tt|ƒur||jO}q|S)Nr")Ú __future__Zall_feature_namesÚgetÚgetattrZ compiler_flag)ÚglobsÚflagsZfnameZfeaturer-r-r.Ú_extract_future_flags·s   €r4écCsT t |¡r|St|tƒrt|tƒtƒdgƒS|dur&tjt  |¡j dSt dƒ‚)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  rEcCstddƒ |d¡S©NT)r$Údecode)Údatar-r-r.Ú_newline_convertÖsrIcCs²|r;t|dƒ}t||ƒ}t|ddƒ}dur&z|jj}Wn ty%Ynwt|dƒr;| |¡}| |¡}t |ƒ|fSt ||d��}|  ¡|fWdƒS1sRwYdS)NéÚ __loader__Úget_data)Úencoding) rEÚ_module_relative_pathr1Ú__spec__ÚloaderÚAttributeErrorÚhasattrrLrGrIÚopenÚread)ÚfilenameÚpackageÚmodule_relativerMrPZ file_contentsÚfr-r-r.Ú_load_testfileÚs     ÿ     $ÿrYécCs t 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  rgc@seZdZdd„Zddd„ZdS)Ú _SpoofOutcCs$t |¡}|r| d¡s|d7}|S©NÚ )r#rdÚendswith)ÚselfÚresultr-r-r.rds z_SpoofOut.getvalueNcCs| |¡t |¡dS©N)Úseekr#Útruncate)rlÚsizer-r-r.rp s z_SpoofOut.truncatern)r7Ú __module__Ú __qualname__rdrpr-r-r-r.rhs rhcCsÄ t|vr ||kS| t¡}dt|ƒ}}|d}|r*| |¡r(t|ƒ}|d=ndS|d}|rA| |¡r?|t|ƒ8}|d=ndS||krGdS|D]}| |||¡}|dkrYdS|t|ƒ7}qIdS)Nr"FéÿÿÿÿT)ÚELLIPSIS_MARKERÚsplitr*Ú startswithrkÚfind)ÚwantÚgotZwsZstartposÚendposÚwr-r-r.Ú_ellipsis_matchs2    r}cCs | ¡}|r d|SdS)Nz# ú#)Úrstrip)Úliner-r-r.Ú _comment_line@s r�cCshdt|ƒ}}| d¡}|dkr|}| dd|¡}|dkr|}| dd|¡}|dkr.|d}|||…S)Nr"rjú:Ú.r')r*rxÚrfind)ÚmsgÚstartÚendÚir-r-r.Ú_strip_exception_detailsHs  r‰c@s0eZdZ dd„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)rlÚoutr-r-r.r‘hs z_OutputRedirectingPdb.__init__NcCs*d|_|dur t ¡j}tj ||¡dSrF)rŽr?rAÚf_backr�r�Ú set_trace)rlÚframer-r-r.r”ps z_OutputRedirectingPdb.set_tracecCs|jr tj |¡dSdSrn)rŽr�r�Ú set_continue©rlr-r-r.r–vsÿz"_OutputRedirectingPdb.set_continuecGs4tj}|jt_ztjj|g|¢RŽW|t_S|t_wrn)r?r‹r�r�r�Útrace_dispatch)rlÚargsÚ save_stdoutr-r-r.r˜|s z$_OutputRedirectingPdb.trace_dispatchrn)r7rrrsr‘r”r–r˜r-r-r-r.rŠbs   rŠcCsòt |¡s td|ƒ‚| d¡rtdƒ‚tjj| d¡Ž}t |dƒr,tj |j ¡d}nF|j dkrOt t jƒdkrKt jddkrKtj t jd¡d}n'tj}n#t |dƒrk|jD]}tj ||¡}tj |¡rj|SqWtd |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__))r8r9rCrwÚ ValueErrorÚosÚpathÚjoinrvrRrœr7r*r?ÚargvÚcurdirrŸÚexists)rDZ test_pathZbasedirZ directoryÚfullpathr-r-r.rN‡s*        ÿþrNc@s,eZdZ  d dd„Zdd„Zdd„ZdS) rNr"cCsv| d¡s |d7}|r| d¡s|d7}|dur!| d¡s!|d7}||_||_||_||_|dur3i}||_||_dSri)rkÚsourceryÚlinenor_ÚoptionsÚexc_msg)rlr¨ryr«r©r_rªr-r-r.r‘Øs   zExample.__init__cCó\t|ƒt|ƒur tS|j|jko-|j|jko-|j|jko-|j|jko-|j|jko-|j|jkSrn)ÚtypeÚNotImplementedr¨ryr©r_rªr«©rlÚotherr-r-r.Ú__eq__êó  ÿ þ ý ü ûzExample.__eq__cCst|j|j|j|j|jfƒSrn)Úhashr¨ryr©r_r«r—r-r-r.Ú__hash__õsÿzExample.__hash__)Nr"r"N)r7rrrsr‘r±r´r-r-r-r.rµs" ÿ rc@s6eZdZ dd„Zdd„Zdd„Zdd„Zd d „Zd S) rcCs. ||_||_| ¡|_||_||_||_dSrn)ÚexamplesÚ docstringÚcopyr2r,rUr©)rlrµr2r,rUr©r¶r-r-r.r‘s  zDocTest.__init__cCsRt|jƒdkr d}nt|jƒdkrd}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,rUr©)rlrµr-r-r.Ú__repr__sÿÿzDocTest.__repr__cCr¬rn)r­r®rµr¶r2r,rUr©r¯r-r-r.r±*r²zDocTest.__eq__cCót|j|j|j|jfƒSrn)r³r¶r,rUr©r—r-r-r.r´5szDocTest.__hash__cCs:t|tƒstS|j|j|jt|ƒf|j|j|jt|ƒfkSrn)r:rr®r,rUr©Úidr¯r-r-r.Ú__lt__9s þzDocTest.__lt__N)r7rrrsr‘r¹r±r´r¼r-r-r-r.rùs  rc@s¨eZdZ e 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 | ¡}| |¡‰ˆdkrd ‡fdd„| d¡Dƒ¡}g}d\}}|j |¡D]M}| ||| ¡…¡|| d|| ¡¡7}|  |||¡\}}} } |  |¡se| t || | |ˆt |  d¡ƒ|d�¡|| d| ¡| ¡¡7}| ¡}q)| ||d…¡|S)Nr"rjcóg|]}|ˆd…‘qSrnr-©Ú.0Úl©Z min_indentr-r.Ú €óz'DocTestParser.parse..©r"r"r_)r©r_rª)Ú expandtabsÚ _min_indentr£rvÚ _EXAMPLE_REÚfinditerÚappendr†ÚcountÚ_parse_exampleÚ_IS_BLANK_OR_COMMENTrr*Úgroupr‡) rlÚstringr,ÚoutputZcharnor©Úmr¨rªryr«r-rÂr.Úparsets,   ÿ  ý zDocTestParser.parsecCs t| ||¡|||||ƒSrn)rÚ get_examples)rlrÏr2r,rUr©r-r-r.Ú get_doctest›sÿzDocTestParser.get_doctestcCs dd„| ||¡DƒS)NcSsg|] }t|tƒr|‘qSr-)r:r)rÀÚxr-r-r.ròs ÿz.DocTestParser.get_examples..)rÒ)rlrÏr,r-r-r.rÓ§s zDocTestParser.get_examplesc s  t| d¡ƒ‰| d¡ d¡}| |ˆ||¡| |dd…dˆd||¡d ‡fdd„|Dƒ¡}| d ¡}| d¡}t|ƒdkrOt d |d ¡rO|d =| |dˆ||t|ƒ¡d ‡fd d„|Dƒ¡}|j |¡}|rw| d ¡}nd}|  |||¡} || ||fS)Nr_r¨rjr'r[rƒcsg|] }|ˆdd…‘qS)rZNr-)rÀZsl©r_r-r.rÃÈsz0DocTestParser._parse_example..ryz *$rtcr¾rnr-)rÀZwlrÖr-r.rÃÓrÄr…) r*rÎrvÚ_check_prompt_blankÚ _check_prefixr£r\ÚmatchÚ _EXCEPTION_REÚ _find_options) rlrÑr,r©Ú source_linesr¨ryÚ want_linesr«rªr-rÖr.r̵s(     ÿ   zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c Cs® i}|j |¡D];}| d¡ dd¡ ¡}|D]+}|ddvs(|dd…tvr3td|d||fƒ‚t|dd…}|ddk||<qq |rU| |¡rUtd|||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ÎÚreplacervr(r rÍ) rlr¨r,r©rªrÑZoption_stringsÚoptionÚflagr-r-r.rÛës$  þùþzDocTestParser._find_optionsz ^([ ]*)(?=\S)cCs0 dd„|j |¡Dƒ}t|ƒdkrt|ƒSdS)NcSóg|]}t|ƒ‘qSr-)r*)rÀr_r-r-r.rà óz-DocTestParser._min_indent..r")Ú _INDENT_REÚfindallr*Úmin)rlr^Úindentsr-r-r.rÇ s  zDocTestParser._min_indentc Cs` t|ƒD](\}}t|ƒ|dkr-||ddkr-td||d||||d…|fƒ‚qdS)NrZrJr[z8line %r of the docstring for %s lacks blank after %s: %rr')Ú enumerater*r )rlÚlinesr_r,r©rˆr€r-r-r.r×s  ÿþ€þz!DocTestParser._check_prompt_blankcCs@ t|ƒD]\}}|r| |¡std||d||fƒ‚qdS)NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr')rêrwr )rlrëÚprefixr,r©rˆr€r-r-r.rØsþ€þzDocTestParser._check_prefixN)r½)r7rrrsr\ÚcompileÚ MULTILINEÚVERBOSErÈÚDOTALLrÚrÙrÍrÒrÔrÓrÌràrÛrærÇr×rØr-r-r-r.rDs* õ õ  ' 3ÿ rc@sTeZdZ deƒddfdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dS)rFTcCs ||_||_||_||_dSrn)Ú_parserÚ_verboseÚ_recurseÚ_exclude_empty)rlÚverboseÚparserÚrecurseÚ exclude_emptyr-r-r.r‘8s  zDocTestFinder.__init__Nc CsJ |durt|ddƒ}|durtdt|ƒfƒ‚|durd}n |dur(t |¡}zt |¡}Wn ty:d}Yn2w|sPt |¡}|d|dd…dksPd}|durWd}n|durct  ||j ¡}nt  |¡}|sld}|dur}|durwi}n |j   ¡}n|  ¡}|durŠ|  |¡d|vr’d|d<g}|  ||||||i¡| ¡|S)Nr7zJDocTestFinder.find: name must be given when obj.__name__ doesn't exist: %rFr"éþÿÿÿz<]>r�)r1r r­r8Ú getmoduleZ getsourcefilerCZgetfileÚ linecacheÚgetlinesÚ__dict__r·ÚupdateÚ_findÚsort) rlÚobjr,rDr2Ú extraglobsrarÜÚtestsr-r-r.rxNsN# þ  ÿ    zDocTestFinder.findcCsÀ |durdSt |¡dur|t |¡uSt |¡r |j|juSt |¡r?t|dƒr/|jj}n t|dƒr8|j}ndS|j |kSt  |¡rJ|j |jkSt|dƒrU|j |jkSt |t ƒr\dSt dƒ‚)NTÚ __objclass__rrz"object must be a class or function)r8rúÚ isfunctionrýÚ __globals__ZismethoddescriptorrRrrrr7Úisclassr:Úpropertyr )rlrDÚobjectZobj_modr-r-r.Ú _from_module´s*            zDocTestFinder._from_modulecCs2 |}zt |¡}Wn tyYnwt |¡Srn)r8Zunwrapr Ú isroutine)rlrZ maybe_routiner-r-r.Ú _is_routineÐs ÿ zDocTestFinder._is_routinec Csì |jr td|ƒt|ƒ|vrdSd|t|ƒ<| |||||¡}|dur*| |¡t |¡r]|jr]|j  ¡D]%\} } d|| f} |  | ¡sKt  | ¡r\|  || ¡r\|  || | ||||¡q7t |¡r®|jr®t|diƒ  ¡D]@\} } t| tƒstdt| ƒfƒ‚t | ¡sœt  | ¡sœt | ¡sœt| tƒsœtdt| ƒfƒ‚d|| f} |  || | ||||¡qmt  |¡rð|jrò|j  ¡D]8\} } t| ttfƒrÉ| j} t | ¡sØt  | ¡sØt| tƒrï|  || ¡rïd|| f} |  || | ||||¡q»dSdSdS)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ýÚitemsr rr rÿr1r:r;r r­r Ú staticmethodÚ classmethodÚ__func__r) rlrrr,rDrÜr2ÚseenÚtestZvalnameÚvalr-r-r.rÿÛsj      ÿÿ€ þÿÿý ÿÿ þ ÿ€õzDocTestFinder._findc CsÄ t|tƒr |}n$z|jdurd}n |j}t|tƒst|ƒ}Wn ttfy,d}Ynw| ||¡}|jr:|s:dS|durAd}nt|ddƒpI|j}|dd…dkrX|dd…}|j   |||||¡S)Nržrœéüÿÿÿú.pycrt) r:r;Ú__doc__rCrQÚ _find_linenorôr1r7rñrÔ) rlrr,rDr2rÜr¶r©rUr-r-r.rs0   €ÿ    ÿzDocTestFinder._get_testcCs6 d}t|ddƒ}t |¡r|durd}t |¡r@|dur@|dur#dSt dt|ddƒ¡}t|ƒD] \}}| |¡r?|}nq2t |¡rH|j }t  |¡rVt|ddƒrV|j }t  |¡r^|j }t |¡rf|j}t |¡rst|ddƒd}|dur™|dur|dSt d¡}t|t|ƒƒD] }| ||¡r˜|Sq‹dS) Nrr"z^\s*class\s*%s\br7ú-Úco_firstlinenor'z(^|.*:)\s*\w*("|\'))r1r8r9rr\rírêrÙZismethodrrÚ__code__Z istracebackÚtb_frameZisframeÚf_codeZiscodeÚranger*)rlrrÜr©r¶Zpatrˆr€r-r-r.r>s@  ÿ þ  ÿzDocTestFinder._find_lineno©NNNN) r7rrrsrr‘rxr r rÿrrr-r-r-r.r/s ÿ f = &rc@s„eZdZ dZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z e   d¡Zddd„Zd dd„Zddd„Zdd„ZdS)!rzF**********************************************************************Nr"cCsP |ptƒ|_|durdtjv}||_||_||_d|_d|_i|_ t ƒ|_ dS)Nú-vr") rÚ_checkerr?r¤ròÚ optionflagsÚoriginal_optionflagsÚtriesÚfailuresÚ_name2ftrhÚ_fakeout)rlÚcheckerrõr$r-r-r.r‘²s   zDocTestRunner.__init__cCsP |jr&|jr|dt|jƒdt|jƒƒdS|dt|jƒdƒdSdS)NzTrying: z Expecting: zExpecting nothing )ròryr`r¨)rlr’rÚexampler-r-r.Ú report_startÖsÿ ÿ ÿûzDocTestRunner.report_startcCs |jr |dƒdSdS)Nzok )rò©rlr’rr+rzr-r-r.Úreport_successãs ÿzDocTestRunner.report_successcCs( || ||¡|j |||j¡ƒdSrn)Ú_failure_headerr#Úoutput_differencer$r-r-r-r.Úreport_failureës  ÿzDocTestRunner.report_failurecCs& || ||¡dtt|ƒƒƒdS)NzException raised: )r/r`rg©rlr’rr+rer-r-r.Úreport_unexpected_exceptionòs  ÿ  ÿz)DocTestRunner.report_unexpected_exceptioncCs”|jg}|jr)|jdur|jdur|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:rj)ÚDIVIDERrUr©rÊr,r¨r`r£)rlrr+r’r©r¨r-r-r.r/ùs ÿ  zDocTestRunner._failure_headerc Csj d}}|j}tdƒ\}}} |jj} t|jƒD�] \} } |jt@o%|dk} ||_| jrH| j ¡D]\}}|r?|j|O_q1|j|M_q1|jt @rNq|d7}| s[|  ||| ¡d|j | f}zt t | j|d|dƒ|jƒ|j ¡d}Wnty€‚t ¡}|j ¡Y|j ¡}|j d¡|}|dur©| | j||jƒr¨|}n9tj|dd…Žd}| s¼|t|ƒ7}| jdurÄ| }n| | j||jƒrÏ|}n|jt@râ| t| jƒt|ƒ|jƒrâ|}||urñ| sð| ||| |¡n)||u�r| �s|  ||| |¡|d7}n|| u�r| �s| !||| |¡|d7}|�r%|jt"@�r%nq||_| #|||¡t$||ƒS) Nr"rJr'zZsingleTr5rt)%r$r r#Ú check_outputrêrµr rªrrr,r,Úexecrír¨r2Údebuggerr–ÚKeyboardInterruptr?rer)rdrpryrbÚformat_exception_onlyrgr«rr‰r.r1r3rÚ_DocTestRunner__record_outcomer&)rlrÚ compileflagsr’r'r&r%ÚSUCCESSÚFAILUREZBOOMZcheckÚ examplenumr+ÚquietZ optionflagrrUZ exceptionrzZoutcomer«r-r-r.Z__run s”  ÿ  ÿÿ     €    þ€    ÿ€ zDocTestRunner.__runcCsN |j |jd¡\}}||||f|j|j<|j|7_|j|7_dS)NrÅ)r(r0r,r'r&)rlrrXÚtÚf2Út2r-r-r.Z__record_outcomeŠs zDocTestRunner.__record_outcomez..+)\[(?P\d+)\]>$cCsR|j |¡}|r#| d¡|jjkr#|jjt| d¡ƒ}|jjdd�S|  ||¡S)Nr,r?T©Úkeepends) Ú%_DocTestRunner__LINECACHE_FILENAME_RErÙrÎrr,rµÚintr¨Ú splitlinesÚsave_linecache_getlines)rlrUÚmodule_globalsrÑr+r-r-r.Z__patched_linecache_getlines—s  z*DocTestRunner.__patched_linecache_getlinesTc s@ ||_|dur t|jƒ}tj‰|dur,ˆj‰ˆdus!ˆ ¡dkr%ˆj}n‡‡fdd„}|jt_t  ¡}t j }t ˆƒ|_ |j  ¡|j j t _ tj|_|jt_tj}tjt_z)| |||¡Wˆt_|t _ t |¡|jt_|t_|r~|j ¡ddl}d|_SSˆt_|t _ t |¡|jt_|t_|rŸ|j ¡ddl}d|_w)Núutf-8cs t| ˆd¡ˆƒ}ˆ |¡dS)NÚbackslashreplace)r;ÚencodeÚwrite)r^©rMršr-r.r’¿szDocTestRunner.run..outr")rr4r2r?r‹rMÚlowerrNr)Úgettracer�r”rŠr8ÚresetrûrürIÚ*_DocTestRunner__patched_linecache_getlinesÚ displayhookÚ__displayhook__Ú_DocTestRunner__runÚsettraceÚclearÚbuiltinsÚ_) rlrr<r’Ú clear_globsZ save_traceZsave_set_traceZsave_displayhookrYr-rOr.ÚrunŸsR      ýû  zDocTestRunner.runc CsŠ |dur|j}g}g}g}d}}|j ¡D]+}|\}\} } || 7}|| 7}| dkr1| |¡q| dkr=| || f¡q| |¡q|rx|r\tt|ƒdƒ| ¡|D]} td| ƒqT|rxtt|ƒdƒ| ¡|D] \} } td| | fƒqk|rœt|jƒtt|ƒdƒ| ¡|D]\} \} } td| | | fƒqŒ|r±t|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òr(rrÊrr*rr5r&) rlrõZnotestsZpassedZfailedZtotaltZtotalfrÕr,rXrAÚthingrËr-r-r.Ú summarizeèsR        zDocTestRunner.summarizecCsR|j}|j ¡D]\}\}}||vr ||\}}||}||}||f||<qdSrn)r(r)rlr°Údr,rXrArBrCr-r-r.Úmerge!s ÷zDocTestRunner.merge)NNr"rn©NNT)r7rrrsr5r‘r,r.r1r3r/rVr;r\rírFrSr\r^r`r-r-r-r.rvs 9 $ }   I 9rc@s.eZdZ dd„Zdd„Zdd„Zdd„Zd S) rcCs t| dd¡dƒS)NÚASCIIrL)r;rM)rlr^r-r-r.Ú_toAscii6szOutputChecker._toAsciicCsÎ | |¡}| |¡}||krdS|t@s%||fdkrdS||fdkr%dS|t@sBt dt t¡d|¡}t dd|¡}||krBdS|t@rZd |  ¡¡}d |  ¡¡}||krZdS|t @ret ||ƒredSdS) NT)zTrue z1 )zFalse z0 z (?m)^%s\s*?$ržz(?m)^[^\S\n]+$r[F) rcrrr\r]ÚescapeÚBLANKLINE_MARKERrr£rvrr}©rlryrzr$r-r-r.r6<s4    ÿ zOutputChecker.check_outputcCs<|ttBtB@s dS|t@rdS| d¡dko| d¡dkS)NFTrjr5)r r r rËrfr-r-r.Ú_do_a_fancy_diff{sÿþ zOutputChecker._do_a_fancy_diffc Cs  |j}|t@st dt|¡}| |||¡rp|jdd�}|jdd�}|t@r9tj ||dd�}t |ƒdd…}d}n,|t @rPtj ||dd�}t |ƒdd…}d}n|t @retjtjd�} t |  ||¡ƒ}d }d |td  |¡ƒS|r~|r~d t|ƒt|ƒfS|r†d t|ƒS|rŽdt|ƒSdS)Nz(?m)^[ ]*(?= )TrDr5)Ú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 )ryrr\r]rergrHr ÚdifflibZ unified_diffÚlistr Z context_diffr ZDifferZIS_CHARACTER_JUNKZcomparer`r£) rlr+rzr$ryrÝZ got_linesZdiffÚkindZenginer-r-r.r0’s6    zOutputChecker.output_differenceN)r7rrrsrcr6rgr0r-r-r-r.r.s ? rc@óeZdZ dd„Zdd„ZdS)rcCó||_||_||_dSrn)rr+rz)rlrr+rzr-r-r.r‘Ëó zDocTestFailure.__init__cCó t|jƒSrn©r;rr—r-r-r.Ú__str__Ðó zDocTestFailure.__str__N©r7rrrsr‘rqr-r-r-r.rÀó rc@rl)rcCrmrn)rr+re)rlrr+rer-r-r.r‘ÞrnzUnexpectedException.__init__cCrornrpr—r-r-r.rqãrrzUnexpectedException.__str__Nrsr-r-r-r.rÓrtrc@s(eZdZ d dd„Zdd„Zdd„ZdS) rNTcCs$t ||||d¡}|r|j ¡|S)NF)rr\r2rX)rlrr<r’r[Úrr-r-r.r\As zDebugRunner.runcCó t|||ƒ‚rn)rr2r-r-r.r3Gó z'DebugRunner.report_unexpected_exceptioncCrvrn)rr-r-r-r.r1JrwzDebugRunner.report_failurera)r7rrrsr\r3r1r-r-r-r.ræs  Z rTFc Cs¸ |dur tj d¡}t |¡std|fƒ‚|dur|j}t|d�} |r,t||d�} nt ||d�} | j ||||d�D]} |   | ¡q;|rI|   ¡t durP| a nt  | ¡t| j| jƒS)Nr�ztestmod: module required; %r)rø©rõr$©r2r)r?r@r0r8r9rCr7rrrrxr\r^Úmasterr`r&r'r&) rÑr,r2rõÚreportr$rÚraise_on_errorrøÚfinderÚrunnerrr-r-r.rVs&B      rc Csà |r |s tdƒ‚t|||| pdƒ\} }|durtj |¡}|dur%i}n| ¡}|dur2| |¡d|vr:d|d<| rCt||d�} nt||d�} |   | |||d¡}|   |¡|r]|   ¡t durd| a nt   | ¡t| j| jƒS)Nú8Package may only be specified for module-relative paths.rKr7r�rxr")r rYr¡r¢Úbasenamer·rþrrrÔr\r^rzr`r&r'r&)rUrWr,rVr2rõr{r$rr|rörMÚtextr~rr-r-r.r¾s4Nÿ     rÚNoNamec CsB t|dd�}t||d�}|j|||d�D] }|j||d�qdS)NF)rõr÷rx)r2)r<)rrrxr\) rXr2rõr,r<r$r}r~rr-r-r.r9s   ÿrcCs$ |t@|kr td|ƒ‚t}|a|S)NzOnly reporting flags allowed)r r Ú_unittest_reportflags)r3Úoldr-r-r.rVs   rc@speZdZ  ddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z e jZdd„ZdS)Ú DocTestCaser"NcCs:tj |¡||_||_|j ¡|_||_||_ ||_ dSrn) ÚunittestÚTestCaser‘Ú_dt_optionflagsÚ _dt_checkerr2r·Ú _dt_globsÚ_dt_testÚ _dt_setUpÚ _dt_tearDown)rlrr$ÚsetUpÚtearDownr*r-r-r.r‘|s   zDocTestCase.__init__cCs"|j}|jdur| |¡dSdSrn)r‹rŒ©rlrr-r-r.rއs ÿzDocTestCase.setUpcCs6|j}|jdur | |¡|j ¡|j |j¡dSrn)r‹r�r2rXrþrŠr�r-r-r.r��s    zDocTestCase.tearDowncCs„|j}tj}tƒ}|j}|t@s|tO}t||jdd�}zd|_ |j ||j dd�\}}W|t_n|t_w|r@|  |  | ¡¡¡‚dS)NF©r$r*rõzF----------------------------------------------------------------------)r’r[)r‹r?r‹r#rˆr rƒrr‰r5r\rNZfailureExceptionÚformat_failurerd)rlrr„Únewr$r~r'r&r-r-r.ÚrunTest—s$ÿ ÿÿzDocTestCase.runTestcCsP|j}|jdur d}nd|j}d |j d¡dd…¡}d|j|j|||fS)Nzunknown line numberz%srƒrtz:Failed doctest test for %s File "%s", line %s, in %s %s)r‹r©r£r,rvrU)rlÚerrrr©Zlnamer-r-r.r’¯s  þzDocTestCase.format_failurecCs8 | ¡t|j|jdd�}|j|jdd�| ¡dS)NFr‘)r[)rŽrrˆr‰r\r‹r�)rlr~r-r-r.r!»sAÿ zDocTestCase.debugcCó|jjSrn©r‹r,r—r-r-r.r» ózDocTestCase.idcCsPt|ƒt|ƒur tS|j|jko'|j|jko'|j|jko'|j|jko'|j|jkSrn)r­r®r‹rˆrŒr�r‰r¯r-r-r.r± s  ÿ þ ý üzDocTestCase.__eq__cCrºrn)r³rˆrŒr�r‰r—r-r-r.r´ sÿzDocTestCase.__hash__cCs,|jj d¡}d|dd |dd…¡fS)Nrƒz%s (%s)rt)r‹r,rvr£)rlr,r-r-r.r¹ szDocTestCase.__repr__cCs d|jjS)Nz Doctest: r—r—r-r-r.ÚshortDescription rwzDocTestCase.shortDescription)r"NNN)r7rrrsr‘rŽr�r”r’r!r»r±r´r¹r rqr™r-r-r-r.r…zs ÿ   H  r…c@s0eZdZdd„Zdd„Zdd„Zdd„ZeZd S) ÚSkipDocTestCasecCs||_t |d¡dSrn)rDr…r‘)rlrDr-r-r.r‘ szSkipDocTestCase.__init__cCs| d¡dS)Nz-DocTestSuite will not work with -O2 and above)ZskipTestr—r-r-r.rŽ" szSkipDocTestCase.setUpcCódSrnr-r—r-r-r.Ú test_skip% ózSkipDocTestCase.test_skipcCs d|jjS)NzSkipping tests from %s)rDr7r—r-r-r.r™( rwz SkipDocTestCase.shortDescriptionN)r7rrrsr‘rŽrœr™rqr-r-r-r.rš s ršc@seZdZdd„ZdS)Ú _DocTestSuitecCr›rnr-)rlÚindexr-r-r.Ú_removeTestAtIndex0 r�z _DocTestSuite._removeTestAtIndexN)r7rrrsr r-r-r-r.rž. s ržc KsÀ |durtƒ}t|ƒ}|j|||d�}|s(tjjdkr(tƒ}| t|ƒ¡|S|  ¡tƒ}|D],}t |j ƒdkr;q1|j sR|j }|dd…dkrO|dd…}||_ | t|fi|¤Ž¡q1|S)Nryr5r"rrrt)rrErxr?r3ÚoptimizeržÚaddTestršrr*rµrUrœr…) rDr2rZ test_finderrªrÚsuiterrUr-r-r.r4 s*# rc@s$eZdZdd„Zdd„Zdd„ZdS)Ú DocFileCasecCsd |jj d¡¡S)NrZrƒ)r£r‹r,rvr—r-r-r.r»v szDocFileCase.idcCr–rn)r‹rUr—r-r-r.r¹y r˜zDocFileCase.__repr__cCsd|jj|jj|fS)Nz2Failed doctest test for %s File "%s", line 0 %s)r‹r,rU)rlr•r-r-r.r’| sÿzDocFileCase.format_failureN)r7rrrsr»r¹r’r-r-r-r.r¤t s r¤c Ksz|duri}n| ¡}|r|stdƒ‚t||||pdƒ\}}d|vr&||d<tj |¡}| ||||d¡} t| fi|¤ŽS)NrrKrœr")r·r rYr¡r¢r€rÔr¤) r¢rWrVr2rörMrªÚdocr,rr-r-r.Ú DocFileTest� sÿ r¦cOsJ tƒ}| dd¡rt| d¡ƒ|d<|D] }| t|fi|¤Ž¡q|S)NrWTrV)ržr0rEr¢r¦)ÚpathsÚkwr£r¢r-r-r.r› s7 rcCsì g}tƒ |¡D]<}t|tƒr5| |jdd…¡|j}|r4| d¡|dd„| d¡dd…Dƒ7}q |dd„| d¡dd…Dƒ7}q |rZ|ddkrZ| ¡|rZ|ddksN|ro|ddkro| d¡|ro|ddksbd  |¡dS) Nrtz # Expected:cSsg|]}d|‘qS)z## r-r¿r-r-r.rÃ' råz(script_from_examples..rjcSrär-)r�r¿r-r-r.rÃ* s ÿr~r") rrÒr:rrÊr¨ryrvÚpopr£)r^rÐZpieceryr-r-r.rä s(9   € ÿÿ ÿrcsL t|ƒ}tƒ |¡}‡fdd„|Dƒ}|stˆdƒ‚|d}t|jƒ}|S)Ncsg|] }|jˆkr|‘qSr-r+)rÀrAr+r-r.rÃ? sztestsource..znot found in testsr")rErrxr rr¶)rDr,rrÚtestsrcr-r+r.r6 s   rcCs t|ƒ}t|||ƒdSrn)rÚ debug_script)ÚsrcÚpmr2rªr-r-r.r F sr cCs– ddl}|r | ¡}ni}|r>> 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}qA|j rQ|t O}|D];}|  d¡rt j  |¡\}}tj  d|¡t|dd…ƒ} tj d=t| ||d�\} } n t|d||d�\} } | rŽdSqSdS)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¶rarßz file containing the tests to run)Únargsr¶z.pyéýÿÿÿrx)rWrõr$r')ÚargparseÚArgumentParserÚ add_argumentr(ÚkeysÚ parse_argsrarõrâZ fail_fastrrkr¡r¢rvr?Úinsertr<rr) rºrör™Z testfilesrõrªrârUÚdirnamerÑr'rZr-r-r.Ú_testÌ sJ  ÿ þ ÿÿ   ÿÿrÁr�)r5)rZ) NNNNTr"NFF)Fr‚Nr"r!)FN)F)SZ __docformat__Ú__all__r/rir8rûr¡r�r\r?rbr†Úior#r$Ú collectionsr%r&r(rrrrrrrrr r r r rr rerur4rErIrYr`rgrhr}r�r‰r�rŠrNrrrrrrÚ Exceptionrrrrzrrrrƒrr‡r…ršZ TestSuiteržrr¤r¦rrrr r«r!r¯r rÁr7Úexitr-r-r-r.Úsô'-  ÿþýüûÿþýü   1%.DKlI;n þh ý{ ÿ$$ @  þIR   , Ø3 -ÿ