
    ,hhf                       S r / SQrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJrJr  SSKJr  SSKrSSKJrJr   " S S\" SS	5      5      r0 rS
 r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\\-  \-  \-  \-  \-  r\" S5      r\" S5      r \" S5      r!\" S5      r"\" S5      r#\\ -  \!-  \"-  \#-  r$Sr%Sr&S r'S[S jr(S r)S r*S\S jr+S r, " S S\5      r-S  r.S! r/S" r0 " S# S$\Rb                  5      r2S% r3 " S& S'5      r4 " S( S)5      r5 " S* S+5      r6 " S, S-5      r7 " S. S/5      r8S0\9\:-  S1\;4S2 jr< " S3 S45      r= " S5 S6\>5      r? " S7 S8\>5      r@ " S9 S:\85      rASqB   S]S= jrCS;SSSSS;SSS<\6" 5       S4S> jrD  S^S? jrESqFS@ rG " SA SB\R                  5      rI " SC SD\I5      rJ " SE SF\R                  5      rLS_SG jrM " SH SI\I5      rNS;SS\6" 5       S4SJ jrOSK rPSL rQSM rRS`SN jrSS`SO jrTSaSP jrU " SQ SR5      rV\VSSSTSUSVSWSX.rWSY rX\YSZ:X  a  \
R                  " \X" 5       5        gg)bzreStructuredText 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)
ANSIColorscan_colorizec                   <   ^  \ rS rSrSS.U 4S jjrU 4S jrSrU =r$ )TestResultsp   r#   skippedc                4   > [         TU ]  XU5      nX4l        U$ N)super__new__r-   )clsfailed	attemptedr-   results	__class__s        0/opt/python-3.13.8/usr/lib/python3.13/doctest.pyr1   TestResults.__new__q   s    '/#y9!    c                    > U R                   (       a*  SU R                   SU R                   SU R                    S3$ [        TU ]  5       $ )NzTestResults(failed=z, attempted=z
, skipped=))r-   r3   r4   r0   __repr__)selfr6   s    r7   r<   TestResults.__repr__v   sN    <<)$++ 7!!% 0 1#||nA/ 0 7#%%r9    )__name__
__module____qualname____firstlineno__r1   r<   __static_attributes____classcell__)r6   s   @r7   r*   r*   p   s    34  
& &r9   r*   zfailed attemptedc                 N    [         R                  U S[        [         5      -  5      $ )N   )OPTIONFLAGS_BY_NAME
setdefaultlen)names    r7   r   r      s     ))$S9L5M0MNNr9   r   r   r   r   r   r   r
   r   r   r   r   z<BLANKLINE>z...c                     Sn[         R                   H8  nU R                  US 5      nU[        [         U5      L d  M*  XR                  -  nM:     U$ Nr#   )
__future__all_feature_namesgetgetattrcompiler_flag)globsflagsfnamefeatures       r7   _extract_future_flagsrW      sM    
 E--))E4(gj%00***E . Lr9   c                    [         R                  " U 5      (       a  U $ [        U [        5      (       a  [	        U [        5       [        5       S/5      $ U c)    [        R                  [        R                  " U5         $ [        S5      e! [         a7    [        R                  [        R                  " U5      R                  S      s $ f = f! [         a     g f = f)N*r@   z"Expected a module, string, or None)inspectismodule
isinstancestr
__import__globalslocalssysmodules_getframemodulenameAttributeError	_getframe	f_globalsKeyError	TypeError)moduledepths     r7   _normalize_modulerk      s     	FC	 	 &')VXu==		O{{3#:#:5#ABB <== " O{{3==#7#A#A*#MNNO 		s*   &B	 	>C
C 	C

C 
CCc                 :    [        S S5      R                  U S5      $ NT)r%   decode)datas    r7   _newline_convertrp      s    $T4077dCCr9   c                    U(       a~  [        US5      n[        X5      n [        USS 5      =nc   UR                  R                  n[        US5      (       a/  UR                  U 5      nUR                  U5      n[        U5      U 4$ [        XS9 nUR                  5       U 4sS S S 5        $ ! [
         a     Nqf = f! , (       d  f       g = f)N   
__loader__get_data)encoding)rk   _module_relative_pathrQ   __spec__loaderrd   hasattrrt   rn   rp   openread)filenamepackagemodule_relativeru   rx   file_contentsfs          r7   _load_testfiler      s    #GQ/(;g|T::FC ))00 6:&&"OOH5M)00:M $M2H<<	h	*avvx! 
+	* "  
+	*s   B+ B;+
B87B8;
C	c                 8    [         R                  " SUS-  U 5      $ )Nz
(?m)^(?!$) )resub)sindents     r7   _indentr     s     66,s
A..r9   c                 j    [        5       nU u  p#n[        R                  " X#XAS9  UR                  5       $ )N)file)r$   	tracebackprint_exceptiongetvalue)exc_infoexcoutexc_typeexc_valexc_tbs        r7   _exception_tracebackr     s2     ZF (HvhE??r9   c                   $    \ rS rSrS rSS jrSrg)	_SpoofOuti  c                 v    [         R                  " U 5      nU(       a  UR                  S5      (       d  US-  nU$ N
)r$   r   endswith)r=   results     r7   r   _SpoofOut.getvalue  s3    ""4( &//$//dNFr9   Nc                 R    U R                  U5        [        R                  " U 5        g r/   )seekr$   truncate)r=   sizes     r7   r   _SpoofOut.truncate#  s    		$$r9   r?   r/   )r@   rA   rB   rC   r   r   rD   r?   r9   r7   r   r     s     r9   r   c                    [         U ;  a  X:H  $ U R                  [         5      nS[        U5      pCUS   nU(       a&  UR                  U5      (       a  [        U5      nUS	 OgUS   nU(       a)  UR	                  U5      (       a  U[        U5      -  nUS	 OgX4:  a  gU H+  nUR                  XSU5      nUS:  a    gU[        U5      -  nM-     g)Nr#   FT)ELLIPSIS_MARKERsplitrJ   
startswithr   find)wantgotwsstartposendposws         r7   _ellipsis_matchr   (  s     d"{ 
O	$B #c(f
1A>>!1vH1
2A<<??c!fF2 
  88A0a<CF  r9   c                 <    U R                  5       n U (       a  SU -   $ g)Nz# #)rstrip)lines    r7   _comment_liner   Y  s    ;;=DDyr9   c                     S[        U 5      p!U R                  S5      nUS:  a  UnU R                  SSU5      nUS:  a  UnU R                  SSU5      nUS:  a  US-   nXU $ )Nr#   r   :.rG   )rJ   r   rfind)msgstartendis       r7   _strip_exception_detailsr   a  sr     CH3AAvaAAv		#q#AAv!c?r9   c                   0    \ rS rSrS rSS jrS rS rSrg)	_OutputRedirectingPdbi{  c                 h    Xl         SU l        [        R                  R	                  XSS9  SU l        g )NFT)stdoutnosigintrG   )_OutputRedirectingPdb__out$_OutputRedirectingPdb__debugger_usedpdbPdb__init__use_rawinput)r=   outs     r7   r   _OutputRedirectingPdb.__init__  s.    
$D9r9   Nc                     SU l         Uc  [        R                  " 5       R                  n[        R
                  R                  X5        g rm   )r   ra   re   f_backr   r   	set_trace)r=   frames     r7   r   _OutputRedirectingPdb.set_trace  s2    #=MMO**E$&r9   c                 f    U R                   (       a   [        R                  R                  U 5        g g r/   )r   r   r   set_continuer=   s    r7   r   "_OutputRedirectingPdb.set_continue  s$     GG  &  r9   c                     [         R                  nU R                  [         l         [        R                  R
                  " U /UQ76 U[         l        $ ! U[         l        f = fr/   )ra   r   r   r   r   trace_dispatch)r=   argssave_stdouts      r7   r   $_OutputRedirectingPdb.trace_dispatch  sA    jjZZ
	%77))$66$CJCJs    A A )__debugger_used__outr   r/   )	r@   rA   rB   rC   r   r   r   r   rD   r?   r9   r7   r   r   {  s    ''%r9   r   c                    [         R                  " U 5      (       d  [        SU -  5      eUR                  S5      (       a  [	        S5      e[
        R                  R                  " UR                  S5      6 n[        U S5      (       a.  [
        R                  R                  U R                  5      S   nGOU R                  S:X  ay  [        [        R                  5      S:  aK  [        R                  S   S:w  a4  [
        R                  R                  [        R                  S   5      S   nO[
        R                  nO[        U S5      (       aZ  U R                    HJ  n[
        R                  R                  X15      n[
        R                  R#                  U5      (       d  MH  Us  $    [	        S	U R                  -  5      e[
        R                  R                  X!5      $ )
NzExpected 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__))rZ   r[   rh   r   
ValueErrorospathjoinr   ry   r   r@   rJ   ra   argvcurdirr   exists)ri   	test_pathbasedir	directoryfullpaths        r7   rv   rv     sT   F##/&899C  LMM ys35I vz""''--03	J	&sxx=?sxx{b0ggmmCHHQK03GiiG6:&&#__	77<<	=77>>(++#O -  3!??+ , 	,
 77<<++r9   c                   .    \ rS rSr  SS jrS rS rSrg)r   i  Nc                    UR                  S5      (       d  US-  nU(       a  UR                  S5      (       d  US-  nUb  UR                  S5      (       d  US-  nXl        X l        X@l        XPl        Uc  0 nX`l        X0l        g r   )r   sourcer   linenor   optionsexc_msg)r=   r   r   r   r   r   r   s          r7   r   Example.__init__  s|     t$$dNFd++DLDw'7'7'='=tOG	?bGr9   c                    [        U 5      [        U5      La  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R
                  UR
                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r/   )typeNotImplementedr   r   r   r   r   r   r=   others     r7   __eq__Example.__eq__  s    :T%[(!!{{ell* -yyEJJ&-{{ell*- {{ell*- ||u}},	-
 ||u}},	-r9   c                     [        U R                  U R                  U R                  U R                  U R
                  45      $ r/   )hashr   r   r   r   r   r   s    r7   __hash__Example.__hash__  s3    T[[$))T[[$++\\# $ 	$r9   )r   r   r   r   r   r   )Nr#   r#   N)r@   rA   rB   rC   r   r   r   rD   r?   r9   r7   r   r     s    F EF$	-$r9   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	r   i  c                 j    Xl         X`l        UR                  5       U l        X0l        X@l        XPl        g r/   )examples	docstringcopyrS   rK   r|   r   )r=   r   rS   rK   r|   r   r   s          r7   r   DocTest.__init__*  s*     !"ZZ\
	 r9   c                 4   [        U R                  5      S:X  a  SnO4[        U R                  5      S:X  a  SnOS[        U R                  5      -  nSU R                  R                  < SU R                  < SU R
                  < S	U R                  < S
U< S3$ )Nr#   zno examplesrG   z	1 examplez%d examples<r   z from r    (z)>)rJ   r   r6   r@   rK   r|   r   )r=   r   s     r7   r<   DocTest.__repr__8  sp    t}}"$H1$"H$s4=='99H((DMM4;;B 	Cr9   c                    [        U 5      [        U5      La  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R
                  UR
                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r/   )r   r   r   r   rS   rK   r|   r   r   s     r7   r   DocTest.__eq__C  s    :T%[(!!}}. +~~0+zzU[[(+ yyEJJ&+ }}.	+
 {{ell*	+r9   c                 p    [        U R                  U R                  U R                  U R                  45      $ r/   )r   r   rK   r|   r   r   s    r7   r   DocTest.__hash__N  s&    T^^TYYt{{KLLr9   c                 2   [        U[        5      (       d  [        $ U R                  b  U R                  OSnUR                  b  UR                  OSnU R                  U R
                  U[        U 5      4UR                  UR
                  U[        U5      4:  $ )Nr   )r\   r   r   r   rK   r|   id)r=   r   self_lno	other_lnos       r7   __lt__DocTest.__lt__R  sy    %))!!"&++"94;;r$)LL$<ELL"	DMM8RX>U^^Y5	BC 	Dr9   )r   r   r|   rS   r   rK   N)
r@   rA   rB   rC   r   r<   r   r   r  rD   r?   r9   r7   r   r     s    0	C	+MDr9   r   c                      \ rS rSr\R
                  " S\R                  \R                  -  5      r\R
                  " S\R                  \R                  -  \R                  -  5      r
\R
                  " S5      R                  rSS jrS rSS jrS r\R
                  " S	\R                  5      rS
 r\R
                  " S\R                  5      rS rS rS rSrg)r   i_  a  
        # Source consists of a PS1 line followed by zero or more PS2 lines.
        (?P<source>
            (?:^(?P<indent> [ ]*) >>>    .*)    # PS1 line
            (?:\n           [ ]*  \.\.\. .*)*)  # PS2 lines
        \n?
        # Want consists of any non-blank lines that do not start with PS1.
        (?P<want> (?:(?![ ]*$)    # 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<hdr> Traceback\ \(
            (?: most\ recent\ call\ last
            |   innermost\ last
            ) \) :
        )
        \s* $                # toss trailing whitespace on the header.
        (?P<stack> .*?)      # don't blink: absorb stuff until...
        ^ (?P<msg> \w+ .*)   #     a line *starts* with alphanum.
        z^[ ]*(#.*)?$c                    UR                  5       nU R                  U5      nUS:  a3  SR                  UR                  S5       Vs/ s H  oDUS  PM	     sn5      n/ nSu  pgU R                  R                  U5       H  nUR                  XUR                  5        5        XqR                  SXhR                  5       5      -  nU R                  XU5      u  ppU R                  U	5      (       d7  UR                  [        XUUU[        UR                  S5      5      -   U
S95        XqR                  SUR                  5       UR                  5       5      -  nUR                  5       nM     UR                  XS  5        U$ s  snf )Nr#   r   )r#   r#   r   )r   r   r   )
expandtabs_min_indentr   r   _EXAMPLE_REfinditerappendr   count_parse_example_IS_BLANK_OR_COMMENTr   rJ   groupr   )r=   stringrK   
min_indentloutputcharnor   mr   r   r   r   s                r7   parseDocTestParser.parse  sX    ""$%%f-
>YYT8JK8J1*+8JKLF!!**62AMM&	23ll4;;F ((&9 -Vd ,,V44wvW+1+5c!''(:K6L+L,3 5 7
 ll4AEEG<<FUUWF# 3& 	fWo&3  Ls   E>c                 <    [        U R                  X5      UX4XQ5      $ r/   )r   get_examples)r=   r  rS   rK   r|   r   s         r7   get_doctestDocTestParser.get_doctest  s%     t((6v7 	7r9   c                 ~    U R                  X5       Vs/ s H  n[        U[        5      (       d  M  UPM     sn$ s  snf r/   )r!  r\   r   )r=   r  rK   xs       r7   r$  DocTestParser.get_examples  s<      ::f3 +3aa) 3 + 	+ +s   ::c           	          [        UR                  S5      5      nUR                  S5      R                  S5      nU R                  XTX#5        U R	                  USS  SU-  S-   X#5        SR                  U Vs/ s H
  ofUS-   S  PM     sn5      nUR                  S5      nUR                  S5      n	[        U	5      S:  a"  [        R                  " S	U	S
   5      (       a  U	S
	 U R	                  U	SU-  UU[        U5      -   5        SR                  U	 V
s/ s H  oUS  PM	     sn
5      nU R                  R                  U5      nU(       a  UR                  S5      nOS nU R                  XrU5      nX|X4$ s  snf s  sn
f )Nr   r   r   rG   r   r      r   z *$r   r   )
rJ   r  r   _check_prompt_blank_check_prefixr   r   match_EXCEPTION_RE_find_options)r=   r   rK   r   r   source_linesslr   r   
want_lineswlr   r   s                r7   r  DocTestParser._parse_example  sj    QWWX&' wwx(..t4  tD<+SZ#-=tLLALbvaxyMLAB
 wwvZZ%
z?Q288FJrN#C#C2:s6z4!C$55	7yy
;
"VW+
;< $$T*ggenGG $$V6:--/ B <s   8E6E;z#\s*doctest:\s*([^\n\'"]*)$c           
         0 nU R                   R                  U5       H  nUR                  S5      R                  SS5      R	                  5       nU HI  nUS   S;  d  USS  [
        ;  a  [        SUS-   < SU< SU< 35      e[
        USS     nUS   S	:H  XH'   MK     M     U(       a-  U R                  U5      (       a  [        SU< SU< S
U< 35      eU$ )NrG   ,r   r#   z+-line z of the doctest for z has an invalid option: +z4 has an option directive on a line with no example: )_OPTION_DIRECTIVE_REr  r  replacer   rH   r   r  )	r=   r   rK   r   r   r   option_stringsoptionflags	            r7   r0  DocTestParser._find_options  s     **33F;AWWQZ//S9??AN(1IT)12J&99$&,Qhf&> ? ? +6!":6!'c!1 ) < t0088$dF4 5 5 r9   z^([ ]*)(?=\S)c                     U R                   R                  U5       Vs/ s H  n[        U5      PM     nn[        U5      S:  a  [        U5      $ gs  snf rM   )
_INDENT_REfindallrJ   min)r=   r   r   indentss       r7   r  DocTestParser._min_indent$  sJ    -1__-D-DQ-GH-G63v;-GHw<!w<	 Is   Ac                     [        U5       HI  u  pV[        U5      US-   :  d  M  XbS-      S:w  d  M&  [        SXE-   S-   < SU< SXbUS-    < SU< 35      e   g )	Nr+  rr   r   r8  rG    of the docstring for z lacks blank after z: )	enumeraterJ   r   )r=   linesr   rK   r   r   r   s          r7   r,  !DocTestParser._check_prompt_blank,  s_     !'GA4yF1H$Qh3)> "((1*d"&fQh"7"? @ @ (r9   c           	          [        U5       H@  u  pVU(       d  M  UR                  U5      (       a  M&  [        SXE-   S-   < SU< SU< 35      e   g )Nr8  rG   rG  z& has inconsistent leading whitespace: )rH  r   r   )r=   rI  prefixrK   r   r   r   s          r7   r-  DocTestParser._check_prefix:  sG    
 !'GAtDOOF33 "((1*dD": ; ; (r9   r?   N)z<string>)r@   rA   rB   rC   r   compile	MULTILINEVERBOSEr  DOTALLr/  r.  r  r!  r%  r$  r  r:  r0  rA  r  r,  r-  rD   r?   r9   r7   r   r   _  s     **  \\BJJ&(K, JJ   ZZ",,&24M ::o6<<%N
7+*.f ::&D&(ll48 ,bll;J@	;r9   r   c                   X    \ rS rSrS\" 5       SS4S jrSS jrS rS rS	 r	S
 r
S rSrg)r   iJ  FTc                 4    X l         Xl        X0l        X@l        g r/   )_parser_verbose_recurse_exclude_empty)r=   verboseparserrecurseexclude_emptys        r7   r   DocTestFinder.__init__S  s    " +r9   Nc           	         Uc(  [        USS 5      nUc  [        S[        U5      < 35      eUSL a  S nOUc  [        R                  " U5      n [        R
                  " U5      nU(       d'  [        R                  " U5      nUS   USS  -   S:X  d  S nUc  S nOCUb!  [        R                  " XcR                  5      nO[        R                  " U5      nU(       d  S nUc!  Uc  0 nO+UR                  R                  5       nOUR                  5       nUb  UR                  U5        SU;  a  SUS'   / nU R                  XX#Xt0 5        UR                  5         U$ ! [         a    S n Nf = f)Nr@   zHDocTestFinder.find: name must be given when obj.__name__ doesn't exist: Fr#   z<]>r   )rQ   r   r   rZ   	getmodulegetsourcefilegetfile	linecachegetlines__dict__rh   r   update_findsort)	r=   objrK   ri   rS   
extraglobsr   r1  testss	            r7   r   DocTestFinder.findi  sp   H <3
D1D| "&s)". / / U?F^&&s+F
	(((-D  s+AwtBCy(E1$4|#% $-#5#5dOO#LL $-#5#5d#;L##'L =~,,.JJLE!LL$U" *E* 

5t\"E
 	

Y  	 L	 s   E E%$E%c                    Uc  g[         R                  " U5      b  U[         R                  " U5      L $ [         R                  " U5      (       a  UR                  UR                  L $ [         R
                  " U5      (       d  [         R                  " U5      (       aV  [        US5      (       a  UR                  R                  nO[        US5      (       a  UR                  nOgUR                  U:H  $ [         R                  " U5      (       a  UR                  UR                  :H  $ [        US5      (       a  UR                  UR                  :H  $ [        U[        5      (       a  g[        S5      e)NT__objclass__rA   z"object must be a class or function)rZ   r_  
isfunctionrd  __globals__ismethoddescriptorismethodwrapperry   rm  rA   r@   isclassr\   propertyr   )r=   ri   objectobj_mods       r7   _from_moduleDocTestFinder._from_module  s%   
 >v&2W..v666''??f&8&888((00%%f--v~.. --88.. ++??g--__V$$??f&7&777V\**??f&7&777))ABBr9   c                     Un [         R                  " U5      n[         R                  " U5      $ ! [         a     N"f = fr/   )rZ   unwrapr   	isroutine)r=   rh  maybe_routines      r7   _is_routineDocTestFinder._is_routine  sC     	#NN=9M   //  		s   0 
==c           
      ^   U R                   (       a  [        SU-  5        [        U5      U;   a  g SU[        U5      '   U R                  X#XFU5      nUb  UR	                  U5        [
        R                  " U5      (       a  U R                  (       a  UR                  R                  5        Hm  u  pU< SU	< 3n	U R                  U
5      (       d  [
        R                  " U
5      (       d  MA  U R                  XJ5      (       d  MY  U R                  XXUXg5        Mo     [
        R                  " U5      (       a  U R                  (       a  [        US0 5      R                  5        H  u  p[        U	[         5      (       d  [#        S[%        U	5      < 35      e[
        R&                  " U
5      (       dc  [
        R                  " U
5      (       dH  [
        R                  " U
5      (       d-  [        U
[         5      (       d  [#        S[%        U
5      < 35      eU< SU	< 3n	U R                  XXUXg5        M     [
        R                  " U5      (       a  U R                  (       a  UR                  R                  5        H  u  p[        U
[(        [*        45      (       a  U
R,                  n
[
        R&                  " U
5      (       d2  [
        R                  " U
5      (       d  [        U
[.        5      (       d  My  U R                  XJ5      (       d  M  U< SU	< 3n	U R                  XXUXg5        M     g g g )NzFinding tests in %srG   r   __test__z3DocTestFinder.find: __test__ keys must be strings: z^DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: z
.__test__.)rU  printr  	_get_testr  rZ   r[   rV  rd  itemsr|  rr  rv  rf  rQ   r\   r]   r   r   rz  staticmethodclassmethod__func__rs  )r=   rj  rh  rK   ri   r1  rS   seentestvalnamevals              r7   rf  DocTestFinder._find  sh   
 =='$./ c7d?RW ~~cELL C  T]] # 2 2 4%)73 %%c**gooc.B.B%%f22JJu7L$, !5 C  T]] 'Z < B B D!'3//$&*7m&6 7 7  ))#..'//#2F2F((--C1E1E$ '+3i&2 3 3 /3G<

5w ( !E  ??3DMM # 2 2 4cL+#>??,,C &&s++ws/C/C h//''44)-w7GJJu7L$, !5 %2r9   c                    [        U[        5      (       a  UnO= UR                  c  SnO,UR                  n[        U[        5      (       d  [        U5      nU R                  X5      nU R                  (       a  U(       d  g Uc  S nO.[        USS 5      =(       d    UR                  nUSS  S:X  a  US S nU R                  R                  XdUX5      $ ! [        [        4 a    Sn Nf = f)Nr   r   .pycr   )r\   r]   __doc__rh   rd   _find_linenorW  rQ   r@   rT  r%  )	r=   rh  rK   ri   rS   r1  r   r   r|   s	            r7   r  DocTestFinder._get_test4  s     c3I;;& "I #I%i55$'	N	
 ""35 y >H vz48KFOOH}&#CR=||''	$(0: 	:% ~. 	s   C ,C C&%C&c           
         S n[        USS 5      n[        R                  " U5      (       a  Ub  Sn[        R                  " U5      (       am  Ubj  Uc  g [        R
                  " S[        R                  " [        USS5      5      -  5      n[        U5       H  u  pgUR                  U5      (       d  M  Un  O   [        R                  " U5      (       a  UR                  n[        U[        5      (       a  UR                  n[        U[        R                  5      (       a  UR                   n[        R"                  " U5      (       a5  [        USS 5      (       a#  [        R$                  " U5      n UR&                  n[        R*                  " U5      (       a  UR,                  n[        R.                  " U5      (       a  UR0                  n[        R2                  " U5      (       a  UR4                  S-
  nUbV  Uc  US-   $ [        R
                  " S5      n[7        U[9        U5      5       H  nUR                  X#   5      (       d  M  Us  $    g ! [(         a     g f = f)Nr  r#   z^\s*class\s*%s\br@   -rG   z(^|.*:)\s*\w*("|\'))rQ   rZ   r[   rr  r   rN  escaperH  r.  ismethodr  r\   rs  fget	functoolscached_propertyfuncrz  ry  __code__rd   istracebacktb_frameisframef_codeiscodeco_firstlinenorangerJ   )r=   rh  r1  r   r   patr   r   s           r7   r  DocTestFinder._find_linenoZ  s    CD1	 C  Y%:F
 ??3I$9#**0YYwsJ'DEF GC$\299T??F 3 C  #c8$$((Cc94455((CS!!gc9d&C&C..%Cll s##3<<S??3szz>>#''!+F #ax**34CL(9:99\122!M ;
 1 "  	s   /I 
II)rW  rT  rV  rU  NNNN)r@   rA   rB   rC   r   r   r   rv  r|  rf  r  r  rD   r?   r9   r7   r   r   J  s8      %]_T,,dLC:	0;,z$:L=r9   r   c                       \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS r\R                  " S5      rSS jrSS jrSS jrS rSrg)r   i  zF**********************************************************************Nc                     U=(       d
    [        5       U l        Uc  S[        R                  ;   nX l        X0l        X0l        SU l        SU l        SU l	        0 U l
        [        5       U l        g )N-vr#   )r   _checkerra   r   rU  optionflagsoriginal_optionflagstriesfailuresskips_statsr   _fakeout)r=   checkerrX  r  s       r7   r   DocTestRunner.__init__  s_    "  2=??chh&G&$/! 

 "r9   c                     U R                   (       ak  UR                  (       a8  U" S[        UR                  5      -   S-   [        UR                  5      -   5        g U" S[        UR                  5      -   S-   5        g g )NzTrying:
zExpecting:
zExpecting nothing
)rU  r   r   r   )r=   r   r  examples       r7   report_startDocTestRunner.report_start  sj    
 ==||K''.."99"#%,W\\%:; < K''.."99)* + r9   c                 8    U R                   (       a	  U" S5        g g )Nzok
)rU  r=   r   r  r  r   s        r7   report_successDocTestRunner.report_success  s    
 ==K r9   c                     U" U R                  X#5      U R                  R                  X4U R                  5      -   5        g r/   )_failure_headerr  output_differencer  r  s        r7   report_failureDocTestRunner.report_failure  s:     	D  /MM++G$:J:JKL 	Mr9   c                 b    U" U R                  X#5      S-   [        [        U5      5      -   5        g )NzException raised:
)r  r   r   r=   r   r  r  r   s        r7   report_unexpected_exception)DocTestRunner.report_unexpected_exception   s6     	D  /!"$+,@,J$KL 	Mr9   c                 v   [        5       (       a   [        R                  [        R                  4OSu  p4U U R                   U 3/nUR
                  (       ak  UR                  b*  UR                  b  UR                  UR                  -   S-   nOSnUR                  SUR
                  < SU< SUR                  < 35        O0UR                  SUR                  S-   < SUR                  < 35        UR                  S5        UR                  nUR                  [        U5      5        S	R                  U5      $ )
N)r   r   rG   ?zFile "", line , in zLine zFailed example:r   )r(   r'   REDRESETDIVIDERr|   r   r  rK   r   r   r   )r=   r  r  redresetr   r   r   s           r7   r  DocTestRunner._failure_header'  s    2>..Z^^Z--.h 	 t||nUG,-=={{&7>>+Ew~~59JJvtyy: ; JJ7>>!+;TYYGH

$%

76?#yy~r9   c           
        ^ S=n=pVU R                   n[        S5      u  pn
U R                  R                  n[	        UR
                  5       GHJ  u  pUS-  nU R                   [        -  =(       a    US:  nXpl         UR                  (       aX  UR                  R                  5        H:  u  nnU(       a  U =R                   U-  sl         M$  U =R                   U) -  sl         M<     U R                   [        -  (       a  US-  nM  U(       d  U R                  X1U5        SUR                  U4-  n [        [        UR                  USUS5      UR                  5        U R                   R#                  5         S nU R*                  R-                  5       nU R*                  R/                  S5        U	nUc'  U" UR0                  UU R                   5      (       a  UnGO0[2        R4                  " US S 6 n[7        US   [8        5      (       aW  US   R:                   S3US   R<                   S	US   R:                   S34m[?        U4S
 j[	        U5       5       5      nUUS  nSRA                  U5      nU(       d  U[C        U5      -  nURD                  c  U
nOuU" URD                  UU R                   5      (       a  UnOOU R                   [F        -  (       a7  U" [I        URD                  5      [I        U5      U R                   5      (       a  UnUUL a  U(       d  U RK                  X1UU5        OIUU	L a   U(       d  U RM                  X1UU5        US-  nO$UU
L a  U(       d  U RO                  X1UU5        US-  nU(       d  GM0  U R                   [P        -  (       d  GMK    O   Xpl         U RS                  XXV5        [U        XEUS9$ ! [$         a    e   [&        R(                  " 5       nU R                   R#                  5          GN= f)Nr#   rr   rG   z<doctest %s[%d]>singleT   r   r   c              3   \   >#    U  H!  u  pUR                  T5      (       d  M  Uv   M#     g 7fr/   )r   ).0indexr   exception_line_prefixess      r7   	<genexpr>&DocTestRunner.__run.<locals>.<genexpr>  s)      )+BKE??+BC +Bs   ,	,r   r,   )+r  r  r  check_outputrH  r   r   r   r  r   r  rK   execrN  r   rS   debuggerr   KeyboardInterruptra   r   r  r   r   r   r   format_exception_only
issubclassSyntaxErrorrB   rA   nextr   r   r   r   r   r  r  r  r   _DocTestRunner__record_outcomer*   )r=   r  compileflagsr   r  r4   r  r  SUCCESSFAILUREBOOMcheck
examplenumr  quiet
optionflagr  r|   	exceptionr   outcomeformatted_exexc_msg_indexr   r  s                           @r7   __runDocTestRunner.__run>  s    ()((9  $//!&q$** $-T]]#;JNI %%(AA "\   4)0)>)>)@%Z((J6(((ZK7(	 *A $&
 !!#W5
 *TYY
,CCH

-WW^^Xx)4126**>**, 	 --((*CMM""1%G  sD,<,<==%G  )>>	"1NilK88 %Q<445Q7$Q<2231Yq\5N5N4OqQ/+ %) )+4\+B) %M
 $0#?L'',//	::C ??*"G 7??GT5E5EFF%G %%(??5gooF5g>!--/ / #* '!''7C@G#''7C@AD44S5>@A xD,,y88a $<f 0 	di?8>>_ % -LLN	**,s   /A	N==;O;c                    U R                   R                  UR                  S5      u  pVnX%-   X6-   XG-   4U R                   UR                  '   U =R                  U-  sl        U =R                  U-  sl        U =R
                  U-  sl        g )N)r#   r#   r#   )r  rP   rK   r  r  r  )r=   r  r  r  r  	failures2tries2skips2s           r7   __record_outcomeDocTestRunner.__record_outcome  sq    
 %)KKOODIIy$I!	6"*"6"'."'."2DII 	!

e


e
r9   z.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$c                 N   U R                   R                  U5      nU(       as  UR                  S5      U R                  R                  :X  aJ  U R                  R
                  [        UR                  S5      5         nUR                  R                  SS9$ U R                  X5      $ )NrK   r  Tkeepends)
%_DocTestRunner__LINECACHE_FILENAME_REr.  r  r  rK   r   intr   
splitlinessave_linecache_getlines)r=   r|   module_globalsr   r  s        r7   __patched_linecache_getlines*DocTestRunner.__patched_linecache_getlines  s}    ((..x8DIINN2ii((QWW\-B)CDG>>,,d,;;//IIr9   c                   ^^ Xl         Uc  [        UR                  5      n[        R                  mUc7  TR
                  mTb  TR                  5       S:X  a  TR                  nOUU4S jnU R                  [        l        [        R                  " 5       n[        R                  n[        T5      U l        U R                  R                  5         U R                  R                  [        l        [        R                   U l        U R$                  [        l        [        R&                  n[        R(                  [        l        [*        R,                  nS [*        l        S S S.n	U	 H%  n
[.        R0                  R3                  U
S 5      X'   M'      U R5                  XU5      T[        l        U[        l        [        R6                  " U5        U R"                  [        l        U[        l        U[*        l        U	R9                  5        H  u  pUc  M
  U[.        R0                  U
'   M     U(       a&  UR                  R;                  5         SS KnS Ul        $ $ ! T[        l        U[        l        [        R6                  " U5        U R"                  [        l        U[        l        U[*        l        U	R9                  5        H  u  pUc  M
  U[.        R0                  U
'   M     U(       a&  UR                  R;                  5         SS KnS Ul        f f = f)Nutf-8c                 `   > [        U R                  TS5      T5      n TR                  U 5        g )Nbackslashreplace)r]   encodewrite)r   ru   r   s    r7   r   DocTestRunner.run.<locals>.out  s)    AHHX/ABHMA%%a(r9   c                      gNFr?   )r   kwargss     r7   <lambda>#DocTestRunner.run.<locals>.<lambda>  s    r9   )PYTHON_COLORSFORCE_COLORr#   ) r  rW   rS   ra   r   ru   lowerr  r  gettracer   r   r   r  r  rb  rc  r  *_DocTestRunner__patched_linecache_getlinesdisplayhook__displayhook__	_colorizer(   r   environpop_DocTestRunner__runsettracer  clearbuiltins_)r=   r  r  r   clear_globs
save_tracesave_set_tracesave_displayhooksaved_can_colorizecolor_variableskeyvaluer  ru   r   s                @@r7   runDocTestRunner.run  s>   ( 	0<Ljj;"++H8>>#3w#>!'') ]]
 \\^
-k:// (1'9'9$!>>	 ??--&33!>	,0F"C#%::>>#t#<O  #	"::d#6$CJ*CMLL$!%!=!=I.CO%7I"-335
$&+BJJsO 6 

  "!
  %CJ*CMLL$!%!=!=I.CO%7I"-335
$&+BJJsO 6 

  "!
 s   I A.LALc                    Uc  U R                   n/ / / pCnS=n=pgU R                  R                  5        H\  u  nu  pnXZ-  nXi-  nX{-  nU
S:X  a  UR                  U5        M.  U	S:X  a  UR                  X45        MH  UR                  XX445        M^     [        R
                  " 5       nUR                  nUR                  nUR                  nUR                  nUR                  nUR                  nU(       a  U(       a>  [        [        U5       S35        UR                  5         U H  n[        SU 35        M     U(       aS  [        U [        U5       SU 35        [        U5       H)  u  nnUS:X  a  SOSn[        SU US	 S
U SU U 35        M+     U(       a`  [        U U R                    U 35        [        [        U5       S35        [        U5       H  u  nu  pn[        SU	S	 SU
S	 SU 35        M!     U(       a[  US:X  a  SOSn[        U S
U S[        U R                  5       S35        U(       a
  SU U SU 3OSn[        U XV-
   SU U S35        U(       aD  US:X  a  SOSnU SU SU U 3nU(       a  US:X  a  SOSnU SU U SU U 3n[        U S35        OU(       a  [        U SU 35        [#        XeUS9$ )Nr#   z had no tests:z    z passed all tests:rG   r   r   r   3dz testz in z had failures:z of r   z and z failedz passedz***Test Failed*** z failurez skipped testzTest passed.r,   )rU  r  r  r  r  
get_colors
BOLD_GREENBOLD_REDGREENr  r  YELLOWr  _n_itemsrg  sortedr  r*   )r=   rX  notestspassedr3   total_triestotal_failurestotal_skipsrK   r  r  r  ansi
bold_greenbold_redgreenr  r  yellowr  r   and_fr   s                          r7   	summarizeDocTestRunner.summarize4  s     ?mmG"$b"5666n.2kk.?.?.A*D*8E K&N Kzt$Qtm,t%=>? /B ##%__
==

hh

'*+>:;#DD-( $  011CE7KL#)&>KD%#qjcAAeWU2JeA3d4&HI $2 SE$,,w/0Xf%&n5628...x(2d5*D?@ 3A !Q&CA[Mqcht{{.C-DAFG " u^,GE7;')  UGK89waPQ$)sAJ00@E7SC%*BU6(;-}QCwOSE)ZLUG45>LLr9   c                     U R                   nUR                   R                  5        H'  u  nu  pEnX2;   a  X#   u  pxn	XG-   nXX-   nXi-   nXEU4X#'   M)     g r/   )r  r  )
r=   r   drK   r  r  r  r  r  r  s
             r7   mergeDocTestRunner.merge  s`    KK.3ll.@.@.B*D*8Ey,-G)	6#/.AG /Cr9   )r  r  r  rU  r  r  r  r  r  r  r  r  )NNr#   r/   NNT)r@   rA   rB   rC   r  r   r  r  r  r  r  r  r  r   rN  r  r  r  r5  r9  rD   r?   r9   r7   r   r     si    @ G$J+MM.K?Z !jj *F GJL"bKM`/r9   r   r  returnc                 :    [        U 5      nUS:X  a  SOSnU SU 3$ )NrG   r   r   z item)rJ   )r  nr   s      r7   r(  r(    s*     	E
A1f#ASaS>r9   c                   ,    \ rS rSrS rS rS rS rSrg)r   i  c                 :    [        UR                  SS5      S5      $ )NASCIIr  )r]   r   )r=   r   s     r7   _toAsciiOutputChecker._toAscii  s     188G%78'BBr9   c                 0   U R                  U5      nU R                  U5      nX!:X  a  gU[        -  (       d  X!4S:X  a  gX!4S:X  a  gU[        -  (       dQ  [        R                  " S[        R
                  " [        5      -  SU5      n[        R                  " SSU5      nX!:X  a  gU[        -  (       aD  SR                  UR                  5       5      nSR                  UR                  5       5      nX!:X  a  gU[        -  (       a  [        X5      (       a  gg)	NT)zTrue
z1
)zFalse
z0
z(?m)^%s\s*?$r   z(?m)^[^\S\n]+$r   F)rB  r   r   r   r   r  BLANKLINE_MARKERr   r   r   r   r   r=   r   r   r  s       r7   r  OutputChecker.check_output  s      mmC }}T" ; 44z..z// 3366/BII6F,GGd$D &&*B4C{
 --((399;'C88DJJL)D{ !t)) r9   c                     U[         [        -  [        -  -  (       d  gU[        -  (       a  gUR                  S5      S:  =(       a    UR                  S5      S:  $ )NFTr   r  )r
   r   r   r  rF  s       r7   _do_a_fancy_diffOutputChecker._do_a_fancy_diff  sV    l*+*+ ,  % zz$!#;		$!(;;r9   c                 *   UR                   nU[        -  (       d  [        R                  " S[        U5      nU R                  XBU5      (       a  UR                  SS9nUR                  SS9nU[        -  (       a&  [        R                  " XVSS9n[        U5      SS  nSnOU[        -  (       a&  [        R                  " XVSS9n[        U5      SS  nSnOLU[        -  (       a>  [        R                  " [        R                  S9n	[        U	R!                  XV5      5      nS	nS
W-  [#        SR%                  W5      5      -   $ U(       a#  U(       a  S[#        U5      < S[#        U5      < 3$ U(       a  S[#        U5      -  $ U(       a  S[#        U5      -  $ g)Nz(?m)^[ ]*(?=
)Tr  r  )r>  z#unified diff with -expected +actualz-context diff with expected followed by actual)charjunkzndiff with -expected +actualzDifferences (%s):
r   z
Expected:
zGot:
zExpected:
%sGot nothing
zExpected nothing
Got:
%szExpected nothing
Got nothing
)r   r   r   r   rE  rI  r  r
   difflibunified_difflistr   context_diffr   DifferIS_CHARACTER_JUNKcomparer   r   )
r=   r  r   r  r   r3  	got_linesdiffkindengines
             r7   r  OutputChecker.output_difference  sQ    || 33&&*,<cBC   K88$7J5I\)++JQGDz!"~<|+++JQGDz!"~F|+ 1J1JKFNN:AB5 )4/'"''$-2HHH C.5dmWS\JJ/'$-??/'#,>>4r9   r?   N)	r@   rA   rB   rC   rB  r  rI  r  rD   r?   r9   r7   r   r     s    C<~<.,5r9   r   c                        \ rS rSrS rS rSrg)r   i*  c                 (    Xl         X l        X0l        g r/   )r  r  r   )r=   r  r  r   s       r7   r   DocTestFailure.__init__5  s    	r9   c                 ,    [        U R                  5      $ r/   r]   r  r   s    r7   __str__DocTestFailure.__str__:      499~r9   )r  r   r  Nr@   rA   rB   rC   r   r^  rD   r?   r9   r7   r   r   *  s    
r9   r   c                        \ rS rSrS rS rSrg)r   i=  c                 (    Xl         X l        X0l        g r/   )r  r  r   )r=   r  r  r   s       r7   r   UnexpectedException.__init__H  s    	 r9   c                 ,    [        U R                  5      $ r/   r]  r   s    r7   r^  UnexpectedException.__str__M  r`  r9   )r  r   r  Nra  r?   r9   r7   r   r   =  s    !
r9   r   c                   *    \ rS rSrSS jrS rS rSrg)r   iP  Nc                 v    [         R                  XX#S5      nU(       a  UR                  R                  5         U$ r  )r   r  rS   r  )r=   r  r  r   r  rs         r7   r  DebugRunner.run  s.    d,UCJJr9   c                     [        X#U5      er/   )r   r  s        r7   r  'DebugRunner.report_unexpected_exception  s    !$::r9   c                     [        X#U5      er/   )r   r  s        r7   r  DebugRunner.report_failure  s    TC00r9   r?   r;  )r@   rA   rB   rC   r  r  r  rD   r?   r9   r7   r   r   P  s    v;1r9   r   TFc	                    U c  [         R                  R                  S5      n [        R                  " U 5      (       d  [        SU < 35      eUc  U R                  n[        US9n	U(       a
  [        X5S9n
O	[        X5S9n
U	R                  XX&S9 H  nU
R                  U5        M     U(       a  U
R                  5         [        c  U
qO[        R                  U
5        [        U
R                   U
R"                  U
R$                  S9$ )Nr   ztestmod: module required; )r[  rX  r  rS   ri  r,   )ra   rb   rP   rZ   r[   rh   r@   r   r   r   r   r  r5  masterr9  r*   r  r  r  )r   rK   rS   rX  reportr  ri  raise_on_errorr[  finderrunnerr  s               r7   r   r     s    J 	y KKOOJ' A!=>> |zz 7FWFwHA5H

4 I ~VvfllKKr9   c                 L   U(       a  U(       d  [        S5      e[        XUU=(       d    S5      u  pUc  [        R                  R	                  U 5      nUc  0 nOUR                  5       nUb  UR                  U5        SU;  a  SUS'   U	(       a
  [        XWS9nO	[        XWS9nU
R                  XX S5      nUR                  U5        U(       a  UR                  5         [        c  UqO[        R                  U5        [        UR                  UR                   UR"                  S9$ )N8Package may only be specified for module-relative paths.r  r@   r   rp  r#   r,   )r   r   r   r   basenamer   re  r   r   r%  r  r5  rr  r9  r*   r  r  r  )r|   r~   rK   r}   rS   rX  rs  r  ri  rt  rY  ru   textrv  r  s                  r7   r   r   )  s   d  + , 	, $H$,$79ND |ww) }

Z &jWFwH d41=D
JJt~VvfllKKr9   c                 v    [        USS9n[        X%S9nUR                  XUS9 H  nUR                  XS9  M     g )NF)rX  rZ  rp  )rS   )r  )r   r   r   r  )	r   rS   rX  rK   r  r  ru  rv  r  s	            r7   r   r     s?    $ 7E:F7DFA51

4
3 2r9   c                 H    U [         -  U :w  a  [        SU 5      e[        nU qU$ )NzOnly reporting flags allowed)r   r   _unittest_reportflags)rT   olds     r7   r   r     s/    : 	E)7??
C!Jr9   c                   v    \ rS rSr  SS jrS rS rS rS rS r	S	 r
S
 rS rS r\R                  rS rSrg)DocTestCasei  Nc                 ~    [         R                  R                  U 5        X l        XPl        Xl        X0l        X@l        g r/   )unittestTestCaser   _dt_optionflags_dt_checker_dt_test	_dt_setUp_dt_tearDown)r=   r  r  setUptearDownr  s         r7   r   DocTestCase.__init__  s4     	""4(*"$r9   c                     U R                   nUR                  R                  5       U l        U R                  b  U R	                  U5        g g r/   )r  rS   r   	_dt_globsr  r=   r  s     r7   r  DocTestCase.setUp  s8    }}*>>%NN4  &r9   c                     U R                   nU R                  b  U R                  U5        UR                  R                  5         UR                  R	                  U R
                  5        g r/   )r  r  rS   r  re  r  r  s     r7   r  DocTestCase.tearDown  sM    }}(d# 	



$..)r9   c                    U R                   n[        R                  n[        5       nU R                  nU[
        -  (       d	  U[        -  n[        UU R                  SS9n SUl	        UR                  XR                  SS9nUR                  UR                  :X  a  [        R                  " S5      e U[        l        UR                   (       a.  U R#                  U R%                  UR'                  5       5      5      eg ! U[        l        f = f)NFr  r  rX  zF----------------------------------------------------------------------)r   r  zall examples were skipped)r  ra   r   r$   r  r   r}  r   r  r  r  r  r-   r4   r  SkipTestr3   failureExceptionformat_failurer   )r=   r  r~  newr  rv  r5   s          r7   runTestDocTestCase.runTest	  s    }}jjj**o- 00K;'+'7'7H	#FNjj99%jHG'"3"33''(CDD 4 CJ>>''(;(;CLLN(KLL  CJs    AC= =D
c           
         U R                   nUR                  c  SnOSUR                  -  nSR                  UR                  R	                  S5      SS  5      nSUR                  < SUR
                  < SU< SU< S	U< 3
$ )
Nzunknown line numberz%sr   r   Failed doctest test for 	
  File "r  r  z

)r  r   r   rK   r   r|   )r=   errr  r   lnames        r7   r  DocTestCase.format_failure	  sj    }};;*FDKK'F-bc23 99dmmVUCA 	r9   c                     U R                  5         [        U R                  U R                  SS9nUR	                  U R
                  SS9  U R                  5         g )NFr  )r  )r  r   r  r  r  r  r  )r=   rv  s     r7   r"   DocTestCase.debug(	  sI    D 	

)=)=%)%5%5uF

4==e
4r9   c                 .    U R                   R                  $ r/   r  rK   r   s    r7   r  DocTestCase.idp	  s    }}!!!r9   c                 n   [        U 5      [        U5      La  [        $ U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R
                  UR
                  :H  =(       a    U R                  UR                  :H  $ r/   )r   r   r  r  r  r  r  r   s     r7   r   DocTestCase.__eq__s	  s    :T%[(!!}}. 5##u'<'<<5~~05   E$6$665 5#4#44		5r9   c                 p    [        U R                  U R                  U R                  U R                  45      $ r/   )r   r  r  r  r  r   s    r7   r   DocTestCase.__hash__}	  s3    T))4>>4;L;L%%' ( 	(r9   c                     U R                   R                  R                  S5      nUS   < SSR                  US S 5      < S3$ )Nr   r   r  r;   )r  rK   r   r   )r=   rK   s     r7   r<   DocTestCase.__repr__	  s:    }}!!'', HchhtCRy&9::r9   c                 4    SU R                   R                  -   $ )Nz	Doctest: r  r   s    r7   shortDescriptionDocTestCase.shortDescription	  s    T]]////r9   )r  r  r  r  r  r  )r#   NNN)r@   rA   rB   rC   r   r  r  r  r  r"   r  r   r   r<   rt  r^  r  rD   r?   r9   r7   r  r    sM    AE%!*M2
FP"5(; nnG0r9   r  c                   0    \ rS rSrS rS rS rS r\rSr	g)SkipDocTestCasei	  c                 <    Xl         [        R                  U S 5        g r/   )ri   r  r   )r=   ri   s     r7   r   SkipDocTestCase.__init__	  s    T4(r9   c                 &    U R                  S5        g )Nz-DocTestSuite will not work with -O2 and above)skipTestr   s    r7   r  SkipDocTestCase.setUp	  s    EFr9   c                     g r/   r?   r   s    r7   	test_skipSkipDocTestCase.test_skip	      r9   c                 4    SU R                   R                  -  $ )NzSkipping tests from %s)ri   r@   r   s    r7   r   SkipDocTestCase.shortDescription	  s    '$++*>*>>>r9   )ri   N)
r@   rA   rB   rC   r   r  r  r  r^  rD   r?   r9   r7   r  r  	  s    )G? Gr9   r  c                       \ rS rSrS rSrg)_DocTestSuitei	  c                     g r/   r?   )r=   r  s     r7   _removeTestAtIndex _DocTestSuite._removeTestAtIndex	  r  r9   r?   N)r@   rA   rB   rC   r  rD   r?   r9   r7   r  r  	  s    r9   r  c                     Uc
  [        5       n[        U 5      n UR                  XUS9nU(       dD  [        R                  R
                  S:  a&  [        5       nUR                  [        U 5      5        U$ UR                  5         [        5       nU Hj  n[        UR                  5      S:X  a  M  UR                  (       d   U R                  nUSS  S:X  a  US S nXl        UR                  [        U40 UD65        Ml     U$ )Nrq  r  r#   r  r  r   )r   rk   r   ra   rT   optimizer  addTestr  rg  rJ   r   r|   r   r  )	ri   rS   ri  test_finderr   rj  suiter  r|   s	            r7   r   r   	  s    J #ov&FVZHESYY''!+of-.	JJLOEt}}"}}H}&#CR=$Mk$2'23  Lr9   c                   &    \ rS rSrS rS rS rSrg)DocFileCasei	  c                 j    SR                  U R                  R                  R                  S5      5      $ )Nr  r   )r   r  rK   r   r   s    r7   r  DocFileCase.id	  s&    xx**00566r9   c                 .    U R                   R                  $ r/   )r  r|   r   s    r7   r<   DocFileCase.__repr__	  s    }}%%%r9   c                 n    SU R                   R                  < SU R                   R                  < SU< 3$ )Nr  r  z", line 0

)r  rK   r|   )r=   r  s     r7   r  DocFileCase.format_failure	  s(    ==%%t}}'='=sD 	r9   r?   N)r@   rA   rB   rC   r  r<   r  rD   r?   r9   r7   r  r  	  s    7&r9   r  c                     Uc  0 nOUR                  5       nU(       a  U(       d  [        S5      e[        XUU=(       d    S5      u  ppSU;  a  XS'   [        R                  R                  U 5      nUR                  XsXS5      n	[        U	40 UD6$ )Nrx  r  r   r#   )r   r   r   r   r   ry  r%  r  )
r   r~   r}   rS   rY  ru   r   docrK   r  s
             r7   DocFileTestr  	  s     }

 + , 	, to'274IC  j 77D!D c$a8Dt'w''r9   c                      [        5       nUR                  SS5      (       a  [        UR                  S5      5      US'   U  H  nUR                  [	        U40 UD65        M      U$ )Nr~   Tr}   )r  rP   rk   r  r  )pathskwr  r   s       r7   r   r   
  s^    p OE
 
vv&&)"&&*;<9k$-"-.  Lr9   c                    / n[        5       R                  U 5       H  n[        U[        5      (       ap  UR	                  UR
                  S S 5        UR                  nU(       a=  UR	                  S5        XR                  S5      S S  Vs/ s H  nSU-   PM
     sn-  nM  M  UUR                  S5      S S  Vs/ s H  n[        U5      PM     sn-  nM     U(       a+  US   S:X  a"  UR                  5         U(       a  US   S:X  a  M"  U(       a,  US   S:X  a#  UR                  S5        U(       a  US   S:X  a  M#  SR                  U5      S-   $ s  snf s  snf )Nr   z# Expected:r   z## r   r#   )r   r!  r\   r   r  r   r   r   r   r  r   )r   r  piecer   r  s        r7   r   r   Q
  s>   t F&&q)eW%%MM%,,s+,::Dm,JJt,<Sb,AB,Aq57,ABB 
  %D 1#2 68 61 %Q' 68 8F * VBZ3&

 VBZ3&
VAY#%

1 VAY#% 99Vt## C8s   E;Ec                     [        U 5      n [        5       R                  U 5      nU Vs/ s H  o3R                  U:X  d  M  UPM     nnU(       d  [	        US5      eUS   n[        UR                  5      nU$ s  snf )Nznot found in testsr#   )rk   r   r   rK   r   r   r   )ri   rK   rj  tr  testsrcs         r7   r    r    
  sn     v&FO  (E/u!$AuD/3447D"4>>2GN 0s   A7 A7c                 2    [        U 5      n[        X1U5        g r/   )r   debug_script)srcpmrS   r  s       r7   r!   r!   
  s    "3'Ge$r9   c                    SS K nU(       a  UR                  5       nO0 nU(       a   [        XU5        g UR                  " SS9R                  SU -  X"5        g !   [        [        R
                  " 5       S   5        UR                  " SS9nUR                  5         UR                  S [        R
                  " 5       S   5         g = f)Nr#   rG   T)r   r  zexec(%r))
r   r   r  r  ra   r   r   r  interactionr  )r  r  rS   r   ps        r7   r  r  
  s    

		3U# 	"":#3UB	3#,,.#$&AGGIMM$q 12s   A A+Cc                 \    [        U 5      n [        X5      n[        X2U R                  5        g r/   )rk   r    r  rd  )ri   rK   r  r  s       r7   r"   r"   
  s&     v&F&Gfoo.r9   c                   &    \ rS rSrS rS rS rSrg)
_TestClassi
  c                     Xl         g r/   r  )r=   r  s     r7   r   _TestClass.__init__
  s	     r9   c                 .    U R                   S-  U l         U $ )Nr  r  r   s    r7   square_TestClass.square
  s     88q=r9   c                     U R                   $ r/   r  r   s    r7   rP   _TestClass.get
  s     xxr9   r  N)r@   rA   rB   rC   r   r  rP   rD   r?   r9   r7   r  r  
  s    r9   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 <BLANKLINE>:
                    >>> print('foo\n\nbar\n')
                    foo
                    <BLANKLINE>
                    bar
                    <BLANKLINE>
            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  zbool-int equivalencezblank linesellipsiszwhitespace normalizationc            	         SS K n U R                  SS9nUR                  SSSSSS	9  UR                  S
SS[        R	                  5       / SS9  UR                  SSSSS9  UR                  SSSS9  UR                  5       nUR                  nUR                  nSnUR                   H  nU[        U   -  nM     UR                  (       a	  U[        -  nU H  nUR                  S5      (       am  [        R                  R                  U5      u  p[        R                  R!                  SU5        [#        US S 5      n	[        R                  S	 [%        XUS9u  pO['        USXES9u  pU
(       d  M    g   g)Nr#   zdoctest 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  r   r9  z file containing the tests to run)nargsr  z.pyrp  )r~   rX  r  rG   )argparseArgumentParseradd_argumentrH   keys
parse_argsr   rX  r=  	fail_fastr   r   r   r   r   ra   insertr^   r   r   )r  rY  r   	testfilesrX  r   r=  r|   dirnamer   r  r  s               r7   _testr  9  s   $$1A$BF
k,F  H
j 3 8 8 :BE  G
 mLF  H c?  AD		I llGG++&v.. ~~9U## !#h 7GHHOOAw'8CR=)A!!'JKHa"8U-4KKH8  r9   r   )r  )r+  )	NNNNTr#   NFF)FNoNameNr#   r  )FN)F)[__docformat____all__rN   rM  r  rZ   rb  r   r   r   ra   r   r  ior$   r%   collectionsr&   r  r'   r(   r*   rH   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rE  r   rW   rk   rp   r   r   r   r   r   r   r   r   r   rv   r   r   r   r   r   rO  dictr]   r(  r   	Exceptionr   r   r   rr  r   r   r   r}  r   r  r  r  	TestSuiter  r   r  r  r   r   r    r!   r  r"   r  r  r  r@   exitr?   r9   r7   <module>r     sZ  ` &+Z      	 
 	 
   2 "  .&*],>? &L  O --EF +,CD *+AB z*6"-.GH *)*()  	
 ,,  #>2">2">2/0KL ,	   -- 	 ! &
>2D"$/	   /b4"%CGG "%J ,\B$ B$HGD GDZd; d;VM Mf
o/ o/dD4K C P5 P5dY &) &e1- e1\ 
373705fLR (,$dU=?yLx :B:;46  !Hb0(## b0Hk "H&& >@+  '+D=?(4CRP$d %
C(	/* *X %%( )Q0f*Z zHHUW r9   