
    =Og9                       	 d Z g dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZ ddlmZ  edd          Zi Zd Z ed	          Z ed
          Z ed          Z ed          Z ed          Z ed          Zeez  ez  ez  ez  ez  Z ed          Z ed          Z ed          Z ed          Z ed          Zeez  ez  ez  ez  Z dZ!dZ"d Z#dYdZ$d Z%d Z&dZdZ'd Z( G d de          Z)d  Z*d! Z+d" Z, G d# d$ej-                  Z.d% Z/ G d& d'          Z0 G d( d)          Z1 G d* d+          Z2 G d, d-          Z3 G d. d/          Z4 G d0 d1          Z5 G d2 d3e6          Z7 G d4 d5e6          Z8 G d6 d7e4          Z9da:	 	 	 d[d:Z;d8ddddd8ddd9 e2            dfd;Z<	 	 d\d=Z=da>d> Z? G d? d@ej@                  ZA G dA dBeA          ZB G dC dDejC                  ZDd]dEZE G dF dGeA          ZFd8dd e2            dfdHZGdI ZHdJ ZIdK ZJd^dLZKd^dMZLd_dNZM G dO dP          ZNeNdQdRdSdTdUdVZOdW ZPeQdXk    r e	jR         eP                       dS dS )`z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TestResultszfailed attemptedc                 b    t                               | dt          t                     z            S )N   )OPTIONFLAGS_BY_NAME
setdefaultlennames     /usr/lib64/python3.11/doctest.pyr   r      s&    ))$S9L5M5M0MNNN    r   r   r   r   r   r   r
   r   r   r   r   z<BLANKLINE>z...c                     	 d}t           j        D ]9}|                     |d           }|t          t           |          u r
||j        z  }:|S )Nr#   )
__future__all_feature_namesgetgetattrcompiler_flag)globsflagsfnamefeatures       r/   _extract_future_flagsr;      s[     E- + +))E4((gj%0000W**ELr0      c                 0   	 t          j        |           r| S t          | t                    r+t	          | t                      t                      dg          S | /t          j        t          j	        |          j
        d                  S t          d          )N*__name__z"Expected a module, string, or None)inspectismodule
isinstancestr
__import__globalslocalssysmodules	_getframe	f_globals	TypeError)moduledepths     r/   _normalize_modulerN      s      >	FC	 	  >&'))VXXu===	{3=//9*EFF<===r0   c                 J    t          d d                              | d          S NT)r%   decode)datas    r/   _newline_convertrS      s"    $T40077dCCCr0   c                    |rt          |d          }t          ||           } t          |dd           x}	 |j        j        }n# t
          $ r Y nw xY wt          |d          r;|                    |           }|                    |          }t          |          | fS t          | |          5 }|                                | fcd d d            S # 1 swxY w Y   d S )N   
__loader__get_data)encoding)rN   _module_relative_pathr5   __spec__loaderAttributeErrorhasattrrW   rQ   rS   openread)filenamepackagemodule_relativerX   r[   file_contentsfs          r/   _load_testfilere      s@    =#GQ//((;;g|T:::FC )0!   6:&& 	="OOH55M)00::M $M22H<<	h	*	*	* "avvxx!" " " " " " " " " " " " " " " " " "s#   A 
AA0CCC   c                 6    	 t          j        d|dz  |           S )Nz
(?m)^(?!$) )resub)sindents     r/   _indentrm      s!    
 6,s
A...r0   c                     	 t                      }| \  }}}t          j        ||||           |                                S )N)file)r$   	tracebackprint_exceptiongetvalue)exc_infoexcoutexc_typeexc_valexc_tbs        r/   _exception_tracebackrx      sH    
 ZZF (HgvhfEEEE??r0   c                       e Zd Zd ZddZdS )	_SpoofOutc                 f    t          j        |           }|r|                    d          s|dz  }|S N
)r$   rr   endswith)selfresults     r/   rr   z_SpoofOut.getvalue  s=    "4((  	&//$// 	dNFr0   Nc                 X    |                      |           t          j        |            d S N)seekr$   truncate)r   sizes     r/   r   z_SpoofOut.truncate
  s(    		$$r0   r   )r?   
__module____qualname__rr   r    r0   r/   rz   rz      s7                     r0   rz   c                    	 t           | vr| |k    S |                     t                     }dt          |          }}|d         }|r*|                    |          rt          |          }|d= ndS |d         }|r-|                    |          r|t          |          z  }|d= ndS ||k    rdS |D ]4}|                    |||          }|dk     r dS |t          |          z  }5dS )Nr#   FT)ELLIPSIS_MARKERsplitr,   
startswithr~   find)wantgotwsstartposendposws         r/   _ellipsis_matchr     s"   
 d""s{ 
O	$	$B #c((fH
1A >>! 	1vvH15
2A <<?? 	c!ffF25& u
    88Ax00a<<55CFF4r0   c                 >    	 |                                  } | rd| z   S dS )Nz# #)rstrip)lines    r/   _comment_liner   @  s)    /;;==D Dysr0   c                     dt          |           }}|                     d          }|dk    r|}|                     dd|          }|dk    r|}|                     dd|          }|dk    r|dz   }| ||         S )Nr#   r}   :.r)   )r,   r   rfind)msgstartendis       r/   _strip_exception_detailsr   H  s     CHH3EAAvvaAAvv		#q#AAvv!ucz?r0   c                   *    e Zd Z	 d ZddZd Zd ZdS )_OutputRedirectingPdbc                 t    || _         d| _        t          j                            | |d           d| _        d S )NFT)stdoutnosigintr)   )_OutputRedirectingPdb__out$_OutputRedirectingPdb__debugger_usedpdbPdb__init__use_rawinput)r   outs     r/   r   z_OutputRedirectingPdb.__init__h  s<    
$cD999r0   Nc                     d| _         |t          j                    j        }t          j                            | |           d S rP   )r   rG   rI   f_backr   r   	set_trace)r   frames     r/   r   z_OutputRedirectingPdb.set_tracep  s;    #=MOO*E$&&&&&r0   c                 V    | j         r!t          j                            |            d S d S r   )r   r   r   set_continuer   s    r/   r   z"_OutputRedirectingPdb.set_continuev  s5      	'G  &&&&&	' 	'r0   c                     t           j        }| j        t           _        	 t          j        j        | g|R  |t           _        S # |t           _        w xY wr   )rG   r   r   r   r   trace_dispatch)r   argssave_stdouts      r/   r   z$_OutputRedirectingPdb.trace_dispatch|  sK    jZ
	%7)$6666$CJJCJ$$$$s   A Ar   )r?   r   r   r   r   r   r   r   r0   r/   r   r   b  sZ        
  ' ' ' '' ' '% % % % %r0   r   c                    t          j        |           st          d| z            |                    d          rt	          d          t          j        j        |                    d           }t          | d          r+t
          j                            | j
                  d         }n| j        dk    rvt          t          j                  dk    rLt          j        d         dk    r6t
          j                            t          j        d                   d         }nt
          j        }ntt          | d          rM| j        D ]E}t
          j                            ||          }t
          j                            |          r|c S Ft	          d	| j        z            t
          j                            ||          S )
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__))r@   rA   rK   r   
ValueErrorospathjoinr   r]   r   r?   r,   rG   argvcurdirr   exists)rL   	test_pathbasedir	directoryfullpaths        r/   rY   rY     s   F## :/&8999C   NLMMM ys335I vz"" ,'--003	J	&	&sx==??sx{b00gmmCHQK003GGiGG6:&& 	$#_ $ $	7<<	9==7>>(++ $#OOO$  3!?+ , , 	,
 7<<+++r0   c                   (    e Zd Z	 	 	 ddZd Zd ZdS )r   Nr#   c                    |                     d          s|dz  }|r|                     d          s|dz  }||                     d          s|dz  }|| _        || _        || _        || _        |i }|| _        || _        d S r|   )r~   sourcer   linenorl   optionsexc_msg)r   r   r   r   r   rl   r   s          r/   r   zExample.__init__  s     t$$ 	dNF 	d++ 	DLDw'7'7'='=tOG	?bGr0   c                    t          |           t          |          urt          S | j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )typeNotImplementedr   r   r   rl   r   r   r   others     r/   __eq__zExample.__eq__  s    ::T%[[((!!{el* -yEJ&-{el*- {el*- |u},	-
 |u},	-r0   c                 \    t          | j        | j        | j        | j        | j        f          S r   )hashr   r   r   rl   r   r   s    r/   __hash__zExample.__hash__  s.    T[$)T[$+\# $ $ 	$r0   )Nr#   r#   N)r?   r   r   r   r   r   r   r0   r/   r   r     sV        !D EF   $	- 	- 	-$ $ $ $ $r0   r   c                   .    e Zd Z	 d Zd Zd Zd Zd ZdS )r   c                     	 || _         || _        |                                | _        || _        || _        || _        d S r   )examples	docstringcopyr7   r.   r`   r   )r   r   r7   r.   r`   r   r   s          r/   r   zDocTest.__init__  s?    	 !"ZZ\\
	 r0   c                     t          | j                  dk    rd}n2t          | j                  dk    rd}ndt          | j                  z  }d| j        j        d| j        d| j        d	| j        d
|dS )Nr#   zno examplesr)   z	1 examplez%d examples<rh   z from r    (z)>)r,   r   	__class__r?   r.   r`   r   )r   r   s     r/   __repr__zDocTest.__repr__  s    t}""$HH1$$"HH$s4='9'99H(((DMMM4;;;B 	Cr0   c                    t          |           t          |          urt          S | j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r   r   r   r   r7   r.   r`   r   r   s     r/   r   zDocTest.__eq__*  s    ::T%[[((!!}. +~0+zU[(+ yEJ&+ }.	+
 {el*	+r0   c                 P    t          | j        | j        | j        | j        f          S r   )r   r   r.   r`   r   r   s    r/   r   zDocTest.__hash__5  s!    T^TYt{KLLLr0   c                     t          |t                    st          S | j        | j        nd}|j        |j        nd}| j        | j        |t          |           f|j        |j        |t          |          fk     S )Nr   )rB   r   r   r   r.   r`   id)r   r   self_lno	other_lnos       r/   __lt__zDocTest.__lt__9  sv    %)) 	"!!"&+"94;;r$)L$<ELL"	DM8RXX>U^Y5		BC 	Dr0   N)r?   r   r   r   r   r   r   r   r   r0   r/   r   r     so        .  	C 	C 	C	+ 	+ 	+M M MD D D D Dr0   r   c                   N   e Zd Z	  ej        dej        ej        z            Z ej        dej        ej        z  ej        z            Z	 ej        d          j
        ZddZd ZddZd Z ej        d	ej                  Zd
 Z ej        dej                  Zd Zd Zd ZdS )r   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^[ ]*(#.*)?$<string>c                    	 |                                 }|                     |          dk    r4d                    fd|                    d          D                       }g }d\  }}| j                            |          D ],}|                    |||                                                    ||                    d||                                          z  }| 	                    |||          \  }}}	}
| 
                    |          sK|                    t          ||	|
|t          |                    d                    z   |                     ||                    d|                                |                                          z  }|                                }.|                    ||d                     |S )Nr#   r}   c                 $    g | ]}|d          S r   r   ).0l
min_indents     r/   
<listcomp>z'DocTestParser.parse.<locals>.<listcomp>  s!    KKK1*++KKKr0   r#   r#   rl   )r   rl   r   )
expandtabs_min_indentr   r   _EXAMPLE_REfinditerappendr   count_parse_example_IS_BLANK_OR_COMMENTr   r,   groupr   )r   stringr.   outputcharnor   mr   r   r   r   r   s              @r/   parsezDocTestParser.parsev  s   	 ""$$%%f--
>>YYKKKKT8J8JKKKLLF!**622 	 	AMM&		!12333fll4;;;F ((D&99 -VWdG ,,V44 7wvtW+1+5c!''(:K:K6L6L+L,3 5  5  5 7 7 7
 fll4AEEGG<<<FUUWWFFfVWWo&&&r0   c                 T    	 t          |                     ||          |||||          S r   )r   get_examples)r   r   r7   r.   r`   r   s         r/   get_doctestzDocTestParser.get_doctest  s8    	 t((66Xvv7 7 	7r0   c                 D    	 d |                      ||          D             S )Nc                 <    g | ]}t          |t                    |S r   )rB   r   )r   xs     r/   r   z.DocTestParser.get_examples.<locals>.<listcomp>  s6     + + +aa))+ + + +r0   )r  )r   r   r.   s      r/   r  zDocTestParser.get_examples  s5    		+ +4::fd33 + + + 	+r0   c           	      H  
 	 t          |                    d                    
|                    d                              d          }|                     |
||           |                     |dd          d
z  dz   ||           d                    
fd|D                       }|                    d          }|                    d          }t          |          dk    rt          j        d	|d
                   r|d
= |                     |d
z  ||t          |          z              d                    
fd|D                       }| j                            |          }|r|                    d          }nd }| 	                    |||          }	||	||fS )Nrl   r   r}   r)   rh   r   c                 *    g | ]}|d z   d         S )rf   Nr   )r   slrl   s     r/   r   z0DocTestParser._parse_example.<locals>.<listcomp>  s%    AAAbBvaxyyMAAAr0   r   z *$r   c                 $    g | ]}|d          S r   r   )r   wlrl   s     r/   r   z0DocTestParser._parse_example.<locals>.<listcomp>  s!    ;;;""VWW+;;;r0   r   )
r,   r   r   _check_prompt_blank_check_prefixr   ri   match_EXCEPTION_RE_find_options)r   r  r.   r   source_linesr   r   
want_linesr   r   rl   s             @r/   r   zDocTestParser._parse_example  s   		 QWWX&&'' wwx((..t44  vtVDDD<+SZ#-=tVLLLAAAALAAABB
 wwvZZ%%
z??Q28FJrN#C#C2:s6z4!C$5$55	7 	7 	7yy;;;;
;;;<< $$T** 	ggennGGG $$VT6::wg--r0   z#\s*doctest:\s*([^\n\'"]*)$c           
         	 i }| j                             |          D ]}|                    d                              dd                                          }|D ]\}|d         dvs|dd          t
          vrt          d|dz   d|d|          t
          |dd                   }|d         d	k    ||<   ]|r-|                     |          rt          d|d|d
|          |S )Nr)   ,rh   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   r*   r   r   )	r   r   r.   r   r   r  option_stringsoptionflags	            r/   r  zDocTestParser._find_options  s6   	 *33F;; 		3 		3AWWQZZ//S99??AAN( 3 31IT))122J&999$*&,Qhhhff&> ? ? ? +6!"":6!'c!13  	5t0088 	5*$ffdddFF4 5 5 5 r0   z^([ ]*)(?=\S)c                     	 d | j                             |          D             }t          |          dk    rt          |          S dS )Nc                 ,    g | ]}t          |          S r   )r,   )r   rl   s     r/   r   z-DocTestParser._min_indent.<locals>.<listcomp>  s    HHH63v;;HHHr0   r#   )
_INDENT_REfindallr,   min)r   rk   indentss      r/   r   zDocTestParser._min_indent  sJ    EHHT_-D-DQ-G-GHHHw<<!w<<1r0   c                     	 t          |          D ]V\  }}t          |          |dz   k    r;||dz            dk    r,t          d||z   dz   d|d|||dz            d|          Wd S )	Nrf   rU   rh   r  r)    of the docstring for z lacks blank after z: )	enumerater,   r   )r   linesrl   r.   r   r   r   s          r/   r  z!DocTestParser._check_prompt_blank  s    	 !'' 	@ 	@GAt4yyF1H$$fQh3)>)> j"((1***ddd"&vfQh"7"7"7"? @ @ @	@ 	@r0   c           	          	 t          |          D ]:\  }}|r3|                    |          st          d||z   dz   d|d|          ;d S )Nr  r)   r%  z& has inconsistent leading whitespace: )r&  r   r   )r   r'  prefixr.   r   r   r   s          r/   r  zDocTestParser._check_prefix!  s|    	 !'' 	; 	;GAt ;DOOF33 ; j"((1***dddDD": ; ; ;	; 	;r0   N)r   )r?   r   r   ri   compile	MULTILINEVERBOSEr   DOTALLr  r  r   r  r  r  r   r  r  r   r   r  r  r   r0   r/   r   r   F  sD        "*  \BJ&( (K, BJ   Z",&24 4M &2:o66<% % % %N
7 
7 
7+ + + +*. *. *.f &2:&D&(l4 4  8 ,bl;;J  @ @ @	; 	; 	; 	; 	;r0   r   c                   V    e Zd Z	 d e            ddfdZddZd Zd Zd Zd	 Z	d
 Z
dS )r   FTc                 @    	 || _         || _        || _        || _        d S r   )_parser_verbose_recurse_exclude_empty)r   verboseparserrecurseexclude_emptys        r/   r   zDocTestFinder.__init__:  s,    	 +r0   Nc           	         	 |2t          |dd           }|t          dt          |                    |du rd }n|t          j        |          }	 t          j        |          }|s-t          j        |          }|d         |dd          z   dk    sd }|d }nH|t          j        ||j	                  }nt          j        |          }|sd }n# t          $ r d }Y nw xY w||i }n.|j	                                        }n|                                }||                    |           d|vrd|d<   g }|                     ||||||i            |                                 |S )Nr?   zHDocTestFinder.find: name must be given when obj.__name__ doesn't exist: Fr#   z<]>r   )r5   r   r   r@   	getmodulegetsourcefilegetfile	linecachegetlines__dict__rK   r   update_findsort)	r   objr.   rL   r7   
extraglobsro   r  testss	            r/   r   zDocTestFinder.findP  s   !	F <3
D11D| j"&s)))". / / / U??FF^&s++F
	((--D  ? s++AwtBCCy(E11$4|#% $-#5dFO#L#LLL $-#5d#;#;L# (#'L+  	  	  	 LLL	 0 =~,,..JJLLE!LL$$$U"" *E* 

5#tV\5"EEE
 	

s   C C! C!c                 L   	 |dS t          j        |          |t          j        |          u S t          j        |          r|j        |j        u S t          j        |          st          j        |          rBt          |d          r|j        j	        }nt          |d          r|j	        }ndS |j
        |k    S t          j        |          r|j
        |j	        k    S t          |d          r|j
        |j	        k    S t          |t                    rdS t          d          )NT__objclass__r   z"object must be a class or function)r@   r:  
isfunctionr?  __globals__ismethoddescriptorismethodwrapperr]   rG  r   r?   isclassrB   propertyr   )r   rL   objectobj_mods       r/   _from_modulezDocTestFinder._from_module  s@   	 >4v&&2W.v6666'' 	C?f&888(00 	C%f--	Cv~..  -8..  +t?g--_V$$ 	C?f&777V\** 	C?f&777)) 	C4ABBBr0   c                 |    	 |}	 t          j        |          }n# t          $ r Y nw xY wt          j        |          S r   )r@   unwrapr   	isroutine)r   rC  maybe_routines      r/   _is_routinezDocTestFinder._is_routine  sU    	 	#N=99MM 	 	 	D	 ///s    
''c           
         	 | j         rt          d|z             t          |          |v rd S d|t          |          <   |                     |||||          }||                    |           t          j        |          r| j        r|j        	                                D ]f\  }	}
|d|	}	| 
                    |
          st          j        |
          r1|                     ||
          r|                     ||
|	||||           gt          j        |          r| j        rt          |di           	                                D ]\  }	}
t          |	t                     st#          dt%          |	                    t          j        |
          s\t          j        |
          sHt          j        |
          s4t          |
t                     st#          dt%          |
                    |d|	}	|                     ||
|	||||           t          j        |          r| j        r|j        	                                D ]\  }	}
t          |
t(          t*          f          r|
j        }
t          j        |
          s)t          j        |
          st          |
t.                    r8|                     ||
          r"|d|	}	|                     ||
|	||||           d S d S d S )NzFinding tests in %sr)   r   __test__z3DocTestFinder.find: __test__ keys must be strings: z^DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: z
.__test__.)r1  printr   	_get_testr   r@   rA   r2  r?  itemsrU  rL  rP  rA  r5   rB   rC   r   r   rS  staticmethodclassmethod__func__rM  )r   rE  rC  r.   rL   r  r7   seentestvalnamevals              r/   rA  zDocTestFinder._find  sc   	 = 	0'$./// c77d??FRWW ~~c4EELL C   	,T] 	, # 2 2 4 4 , ,%)TT773 %%c** ,goc.B.B ,%%fc22,JJuc7FL$d, , , C   	(T] 	( 'Z < < B B D D ( (!'3// 7$*&*7mmm&6 7 7 7  )#.. 3'/#2F2F 3(--31;C1E1E3$* '+3iii&2 3 3 3 /3ddGG<

5#w $( ( ( ( ?3 	,DM 	, # 2 2 4 4 , ,cL+#>?? ',C &s++ ,ws/C/C , h//,''44, *.ww7GJJuc7FL$d, , ,	, 	, 	, 	,, ,r0   c                    	 t          |t                    r|}nP	 |j        d}n+|j        }t          |t                    st          |          }n# t          t          f$ r d}Y nw xY w|                     ||          }| j        r|sd S |d }n0t          |dd           p|j        }|dd          dk    r
|d d         }| j	        
                    |||||          S )Nr   r   .pycr   )rB   rC   __doc__rK   r\   _find_linenor3  r5   r?   r0  r  )	r   rC  r.   rL   r7   r  r   r   r`   s	            r/   rY  zDocTestFinder._get_test  s!   	 c3 	II;& "II #I%i55 3$'	NN	~.   			 ""355  	y 	4 >HH vz488KFOH}&&#CRC=|''	5$(0&: : 	:s   5A A'&A'c           
         	 d }t          |dd           }t          j        |          r|d}t          j        |          rl|j|d S t	          j        dt	          j        t          |dd                    z            }t          |          D ]\  }}|                    |          r|} nt          j	        |          r|j
        }t          |t                    r|j        }t          j        |          r*t          |dd           rt          j        |          j        }t          j        |          r|j        }t          j        |          r|j        }t          j        |          r
|j        dz
  }|Z||dz   S t	          j        d          }t/          |t1          |                    D ]!}|                    ||                   r|c S "d S )Nre  r#   z^\s*class\s*%s\br?   -r)   z(^|.*:)\s*\w*("|\'))r5   r@   rA   rL  ri   r*  escaper&  r  ismethodr]  rB   rM  fgetrH  rR  __code__istracebacktb_frameisframef_codeiscodeco_firstlinenoranger,   )r   rC  r  r   r   patr   r   s           r/   rf  zDocTestFinder._find_linenoA  s   	
 CD11	 C   	Y%:F
 ?3 	I$9#t*0YwsJ'D'DEEF G GC$\22  499T?? FE
 C  4#c8$$ 	(Cc"" 	/wsIt'D'D 	/.%%.Cs##73<S?31sz># 	,'!+F #ax*344CL(9(9:: " "99\&122 "!MMM" tr0   NNNN)r?   r   r   r   r   r   rP  rU  rA  rY  rf  r   r0   r/   r   r   1  s          %]]__T, , , ,,d d d dLC C C:	0 	0 	0;, ;, ;,z$: $: $:L4 4 4 4 4r0   r   c                       e Zd Z	 dZddZd Zd Zd Zd Zd	 Z	d
 Z
d Z ej        d          ZddZddZddZd ZdS )r   zF**********************************************************************Nr#   c                     	 |pt                      | _        |dt          j        v }|| _        || _        || _        d| _        d| _        i | _	        t                      | _        d S )N-vr#   )r   _checkerrG   r   r1  optionflagsoriginal_optionflagstriesfailures_name2ftrz   _fakeout)r   checkerr4  rz  s       r/   r   zDocTestRunner.__init__  si    	   2=???ch&G&$/! 
 "r0   c                     	 | j         rf|j        r: |dt          |j                  z   dz   t          |j                  z              d S  |dt          |j                  z   dz              d S d S )NzTrying:
zExpecting:
zExpecting nothing
)r1  r   rm   r   )r   r   r_  examples       r/   report_startzDocTestRunner.report_start  s    	 = 	+| +K''."9"99"#%,W\%:%:; < < < < < K''."9"99)* + + + + +	+ 	+r0   c                 0    	 | j         r |d           d S d S )Nzok
)r1  r   r   r_  r  r   s        r/   report_successzDocTestRunner.report_success  s.    	 = 	CKKKKK	 	r0   c                     	  ||                      ||          | j                            ||| j                  z              d S r   )_failure_headerry  output_differencerz  r  s        r/   report_failurezDocTestRunner.report_failure  s^    	 	D  w//M++GS$:JKKL 	M 	M 	M 	M 	Mr0   c                     	  ||                      ||          dz   t          t          |                    z              d S )NzException raised:
)r  rm   rx   r   r   r_  r  rs   s        r/   report_unexpected_exceptionz)DocTestRunner.report_unexpected_exception  s`    	 	D  w//!"$+,@,J,J$K$KL 	M 	M 	M 	M 	Mr0   c                    | j         g}|j        rL|j        |j        |j        |j        z   dz   }nd}|                    d|j        d|d|j                   n(|                    d|j        dz   d|j                   |                    d           |j        }|                    t          |                     d                    |          S )	Nr)   ?zFile "", line , in zLine zFailed example:r}   )DIVIDERr`   r   r   r.   r   rm   r   )r   r_  r  r   r   r   s         r/   r  zDocTestRunner._failure_header  s    |n= 	I{&7>+Ew~59JJJvvvtyy: ; ; ; ; JJJ7>!+;+;+;TYYGHHH

$%%%

76??###yy~~r0   c           
         	 dx}}| j         }t          d          \  }}}	| j        j        }
t	          |j                  D ]\  }}| j         t          z  o|dk    }|| _         |j        rC|j                                        D ])\  }}|r| xj         |z  c_         | xj         | z  c_         *| j         t          z  r||dz  }|s| 
                    |||           d|j        |fz  }	 t          t          |j        |d|d          |j                   | j                                         d }n=# t$          $ r   t'          j                    }| j                                         Y nxY w| j                                        }| j                            d           |}| |
|j        || j                   r|}n t3          j        |d d          }t7          |d         t8                    r`|d         j         d|d         j         d	|d         j         dft?          fd
t	          |          D                       }||d          }d                     |          }|s|tC          |          z  }|j"        |	}n\ |
|j"        || j                   r|}nB| j         tF          z  r3 |
tI          |j"                  tI          |          | j                   r|}||u r|s| %                    ||||           nG||u r |s| &                    ||||           |dz  }n#||	u r|s| '                    ||||           |dz  }|r| j         tP          z  r n|| _         | )                    |||           tU          ||          S )Nr#   rU   r)   z<doctest %s[%d]>singleTr<   r   r   c              3   L   K   | ]\  }}|                               |V  d S r   )r   )r   indexr   exception_line_prefixess      r/   	<genexpr>z&DocTestRunner.__run.<locals>.<genexpr>k  sN       ) )'E4??+BCC)) ) ) ) ) )r0   r   )+rz  rs  ry  check_outputr&  r   r   r   rZ  r   r  r.   execr*  r   r7   debuggerr   KeyboardInterruptrG   rs   r  rr   r   r   rp   format_exception_only
issubclassSyntaxErrorr   r   nextr   rx   r   r   r   r  r  r  r   _DocTestRunner__record_outcomer'   )r   r_  compileflagsr   r}  r|  r{  SUCCESSFAILUREBOOMcheck
examplenumr  quiet
optionflagra  r`   	exceptionr   outcomeformatted_exexc_msg_indexr   r  s                          @r/   __runzDocTestRunner.__run  s   	 5  $/!&q$* $-T]#;#; o	 o	J %(AA "\   4D 8)0)>)>)@)@ 8 8%Z 8((J6(((((ZK7((( $&  QJE 6!!#tW555
 *TY
,CCH

-WW^Xx)41 126*> > >**,,, 		$   -LNN	**,,,,,-((**CM""1%%%G  5sD,<== &%G  )>	"1"NilK88 @ %Q<4777$Q<2QQYq\5NQQQ/+ %) ) ) ) )+4\+B+B) ) ) % %M
 $0#?L'',// ;/	:::C ?*"GG U7?GT5EFF *%GG %(?? *u5goFF5g>>!-/ / * #* '!! A''T7C@@@G## A''T7C@@@AD @44S$5>@ @ @A  D,y8  0 	dHe4448U+++s   (AD//8E)c                     	 | j                             |j        d          \  }}||z   ||z   f| j         |j        <   | xj        |z  c_        | xj        |z  c_        d S )Nr   )r~  r4   r.   r}  r|  )r   r_  rd   tf2t2s         r/   __record_outcomezDocTestRunner.__record_outcome  sc    	 ""49e44B$%bD!B$<di 

a



r0   z.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$c                 F   | j                             |          }|rp|                    d          | j        j        k    rM| j        j        t          |                    d                             }|j                            d          S | 	                    ||          S )Nr.   r  Tkeepends)
%_DocTestRunner__LINECACHE_FILENAME_REr  r   r_  r.   r   intr   
splitlinessave_linecache_getlines)r   r`   module_globalsr  r  s        r/   __patched_linecache_getlinesz*DocTestRunner.__patched_linecache_getlines  s    (..x88 	JDIN22i(QWW\-B-B)C)CDG>,,d,;;;//.IIIr0   Tc                 "  	
 	 || _         |t          |j                  }t          j        
|/
j        			                                dk    r
j        }n	
fd}| j        t          _        t          j	                    }t          j        }t          
          | _        | j                                         | j        j        t          _        t          j        | _        | j        t          _        t          j        }t          j        t          _        	 |                     |||          
t          _        |t          _        t          j        |           | j        t          _        |t          _        |r%|j                                         dd l}d |_        S S # 
t          _        |t          _        t          j        |           | j        t          _        |t          _        |r$|j                                         dd l}d |_        w xY w)Nutf-8c                 z    t          |                     d                    }                     |            d S )Nbackslashreplace)rC   encodewrite)rk   rX   r   s    r/   r   zDocTestRunner.run.<locals>.out  s;    AHHX/ABBHMMA%%a(((((r0   r#   )r_  r;   r7   rG   r   rX   lowerr  r  gettracer   r   r   r  resetr=  r>  r  *_DocTestRunner__patched_linecache_getlinesdisplayhook__displayhook___DocTestRunner__runsettraceclearbuiltins_)r   r_  r  r   clear_globs
save_tracesave_set_tracesave_displayhookr  rX   r   s            @@r/   runzDocTestRunner.run  s   	& 	0<<Lj;"+H8>>#3#3w#>#>!') ) ) ) ) ) ]
 \^^
-k::/ (1'9$!>	 ?-	"::dL#66$CJ*CML$$$!%!=I.CO "
  """!

" %CJ*CML$$$!%!=I.CO "
  """!
!!!!s   F A1Hc                    	 || j         }g }g }g }dx}}| j                                        D ]c}|\  }\  }	}
||
z  }||	z  }|
dk    r|                    |           0|	dk    r|                    ||
f           N|                    |           d|r|rFt	          t          |          d           |                                 |D ]}t	          d|           |rMt	          t          |          d           |                                 |D ]\  }}t	          d||fz             |ret	          | j                   t	          t          |          d           |                                 |D ]\  }\  }	}
t	          d|	|
|fz             |r9t	          |dt          | j                  d	           t	          ||z
  d
|d           |rt	          d|d           n|rt	          d           t          ||          S )Nr#   zitems had no tests:z   zitems passed all tests:z %3d tests in %szitems had failures:z %3d of %3d in %sztests inzitems.z
passed andzfailed.z***Test Failed***z	failures.zTest passed.)	r1  r~  rZ  r   rX  r,   rB  r  r'   )r   r4  notestspassedfailedtotalttotalfr  r.   rd   r  thingr   s                r/   	summarizezDocTestRunner.summarize  sb   		 ?mG$$&& 
	! 
	!ALD&1aaKFaKFAvvt$$$$aay****a     
	? (c'll$9:::$ ( (E%'''' ?c&kk#<===$* ? ?LE5,u~=>>>> 	;$,#f++4555KKMMM!' ; ;v1)Q5M9:::: 	D&*c$-&8&8(CCC&6/<CCC 	"%v{;;;; 	".!!!66***r0   c                     | j         }|j                                         D ](\  }\  }}||v r||         \  }}||z   }||z   }||f||<   )d S r   )r~  rZ  )r   r   dr.   rd   r  r  r  s           r/   mergezDocTestRunner.merge7  sq    M!N0022 		 		LD&1aqyy
 4BFFdAdGG		 		r0   )NNr#   r   NNT)r?   r   r   r  r   r  r  r  r  r  r  r  ri   r*  r  r  r  r  r  r   r0   r/   r   r   {  s       6r G$ $ $ $H+ + +  M M MM M M  (L, L, L,\   )bj *F G GJ J J JD" D" D" D"R4+ 4+ 4+ 4+r    r0   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r   c                 L    	 t          |                    dd          d          S )NASCIIr  )rC   r  )r   rk   s     r/   _toAsciizOutputChecker._toAsciiL  s(    	 188G%788'BBBr0   c                 P   	 |                      |          }|                      |          }||k    rdS |t          z  s||fdk    rdS ||fdk    rdS |t          z  sNt          j        dt          j        t                    z  d|          }t          j        dd|          }||k    rdS |t          z  rVd                    |	                                          }d                    |	                                          }||k    rdS |t          z  rt          ||          rdS dS )	NT)zTrue
z1
)zFalse
z0
z(?m)^%s\s*?$r   z(?m)^[^\S\n]+$rh   F)r  r   r   ri   rj   ri  BLANKLINE_MARKERr   r   r   r   r   r   r   r   rz  s       r/   r  zOutputChecker.check_outputR  sN   	 mmC  }}T"" $;;4 44 	Dz...tDz///t 33 	6/BI6F,G,GGd$ $D &*B44Cd{{t
 -- 	((399;;''C88DJJLL))Dd{{t ! 	tS)) t ur0   c                     |t           t          z  t          z  z  sdS |t          z  rdS |                    d          dk    o|                    d          dk    S )NFTr}   r<   )r
   r   r   r   r  s       r/   _do_a_fancy_diffzOutputChecker._do_a_fancy_diff  si    l*+*+ , 	 5 % 	4 zz$!#;		$!(;;r0   c                 \   	 |j         }|t          z  st          j        dt          |          }|                     |||          r|                    d          }|                    d          }|t          z  r1t          j	        ||d          }t          |          dd          }d}n|t          z  r1t          j        ||d          }t          |          dd          }d}nN|t          z  rDt          j        t          j                  }	t          |	                    ||                    }d	}d
|z  t#          d                    |                    z   S |r$|r"dt#          |          dt#          |          S |rdt#          |          z  S |rdt#          |          z  S dS )Nz(?m)^[ ]*(?=
)Tr  r<   )nz#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   ri   rj   r  r  r  r
   difflibunified_difflistr   context_diffr   DifferIS_CHARACTER_JUNKcomparerm   r   )
r   r  r   rz  r   r  	got_linesdiffkindengines
             r/   r  zOutputChecker.output_difference  s   	 | 33 	C&*,<cBBC   sK88 	I$77J55I\) ,+J	QGGGDzz!""~<|+ 	,+J	QGGGDzz!""~F|+ , 1JKKKFNN:yAABB5 )4/'"''$--2H2HHH  	5C 	5 	5.5dmmmmWS\\\JJ 	5/'$--?? 	5/'#,,>>44r0   N)r?   r   r   r  r  r  r  r   r0   r/   r   r   D  sY        C C C< < <~< < <.,5 ,5 ,5 ,5 ,5r0   r   c                       e Zd Z	 d Zd ZdS )r   c                 0    || _         || _        || _        d S r   )r_  r  r   )r   r_  r  r   s       r/   r   zDocTestFailure.__init__  s    	r0   c                 *    t          | j                  S r   rC   r_  r   s    r/   __str__zDocTestFailure.__str__      49~~r0   Nr?   r   r   r   r  r   r0   r/   r   r     s7        	  
    r0   r   c                       e Zd Z	 d Zd ZdS )r   c                 0    || _         || _        || _        d S r   )r_  r  rs   )r   r_  r  rs   s       r/   r   zUnexpectedException.__init__  s    	 r0   c                 *    t          | j                  S r   r  r   s    r/   r  zUnexpectedException.__str__  r  r0   Nr  r   r0   r/   r   r     s7        	! ! !
    r0   r   c                   $    e Zd Z	 ddZd Zd ZdS )r   NTc                 x    t                               | |||d          }|r|j                                         |S )NF)r   r  r7   r  )r   r_  r  r   r  rs         r/   r  zDebugRunner.runW  s>    dD,UCC 	Jr0   c                 $    t          |||          r   )r   r  s        r/   r  z'DebugRunner.report_unexpected_exception]  s    !$:::r0   c                 $    t          |||          r   )r   r  s        r/   r  zDebugRunner.report_failure`  s    T7C000r0   r  )r?   r   r   r  r  r  r   r0   r/   r   r     sM        Xt   ; ; ;1 1 1 1 1r0   r   TFc	                    	 | t           j                            d          } t          j        |           st          d|           || j        }t          |          }	|rt          ||          }
nt          ||          }
|	
                    | |||          D ]}|
                    |           |r|
                                 t          |
ant                              |
           t          |
j        |
j                  S )Nr   ztestmod: module required; )r7  r4  rz  r7   rD  )rG   rH   r4   r@   rA   rK   r?   r   r   r   r   r  r  masterr  r'   r}  r|  )r  r.   r7   r4  reportrz  rD  raise_on_errorr7  finderrunnerr_  s               r/   r   r   l  s!   >D 	y KOOJ'' A ?i!!=>>> |z 777F IW+FFFwKHHHAt5ZHH  

4 ~Vv555r0   c                 Z   	 |r|st          d          t          | |||pd          \  }} |t          j                            |           }|i }n|                                }||                    |           d|vrd|d<   |	rt          ||          }nt          ||          }|
	                    |||| d          }|
                    |           |r|                                 t          |ant                              |           t          |j        |j                  S )N8Package may only be specified for module-relative paths.r  r?   r   r  r#   )r   re   r   r   basenamer   r@  r   r   r  r  r  r  r  r'   r}  r|  )r`   rb   r.   ra   r7   r4  r	  rz  rD  r
  r5  rX   textr  r_  s                  r/   r   r     sb   K\  , , + , , 	, $Hg$,$79 9ND( |w)) }

Z   &j IW+FFFwKHHH dE41==D
JJt ~Vv555r0   NoNamec                     	 t          |d          }t          ||          }|                    | ||          D ]}|                    ||           d S )NF)r4  r6  r  )r7   )r  )r   r   r   r  )	rd   r7   r4  r.   r  rz  r  r  r_  s	            r/   r   r   O  sq      7E:::F7DDDFAt511 4 4

4l
33334 4r0   c                 V    	 | t           z  | k    rt          d|           t          }| a|S )NzOnly reporting flags allowed)r   r   _unittest_reportflags)r8   olds     r/   r   r   l  s:    8 	E))7???
C!Jr0   c                   d    e Zd Z	 	 ddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zej        Zd ZdS )DocTestCaser#   Nc                     t           j                            |            || _        || _        || _        || _        || _        d S r   )unittestTestCaser   _dt_optionflags_dt_checker_dt_test	_dt_setUp_dt_tearDown)r   r_  rz  setUptearDownr  s         r/   r   zDocTestCase.__init__  sG     	""4(((*"$r0   c                     | j         }|j                                        | _        | j        |                     |           d S d S r   )r  r7   r   	_dt_globsr  r   r_  s     r/   r   zDocTestCase.setUp  sD    }**>%NN4      &%r0   c                     | j         }| j        |                     |           |j                                         |j                            | j                   d S r   )r  r  r7   r  r@  r#  r$  s     r/   r!  zDocTestCase.tearDown  sZ    }(d### 	

$.)))))r0   c                    | j         }t          j        }t                      }| j        }|t
          z  s
|t          z  }t          || j        d          }	 d|_	        |
                    ||j        d          \  }}|t          _        n# |t          _        w xY w|r:|                     |                     |                                                    d S )NFrz  r  r4  zF----------------------------------------------------------------------)r   r  )r  rG   r   r$   r  r   r  r   r  r  r  r  failureExceptionformat_failurerr   )r   r_  r  newrz  r  r}  r|  s           r/   runTestzDocTestCase.runTest  s    }jjj*o- 	1 00K;'+'7H H H	#FN$jj#) ) 8 8OHe CJJCJ 	M''(;(;CLLNN(K(KLLL	M 	Ms   'B	 	Bc           
          | j         }|j        d}n
d|j        z  }d                    |j                            d          dd                    }d|j        d|j        d|d|d	|
S )
Nzunknown line numberz%sr   r   Failed doctest test for 	
  File "r  r  z

)r  r   r   r.   r   r`   )r   errr_  r   lnames        r/   r)  zDocTestCase.format_failure  s|    };*FFDK'F--bcc233 999dmmmVVVUUUCCA 	r0   c                     	 |                                   t          | j        | j        d          }|                    | j        d           |                                  d S )NFr'  )r  )r   r   r  r  r  r  r!  )r   r  s     r/   r"   zDocTestCase.debug  sd    ?	B 	

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

4=e
444r0   c                     | j         j        S r   r  r.   r   s    r/   r   zDocTestCase.id	  s    }!!r0   c                     t          |           t          |          urt          S | j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r   )r   r   r  r  r  r  r  r   s     r/   r   zDocTestCase.__eq__	  s~    ::T%[[((!!}. 5#u'<<5~05  E$665 5#44		5r0   c                 P    t          | j        | j        | j        | j        f          S r   )r   r  r  r  r  r   s    r/   r   zDocTestCase.__hash__&	  s-    T)4>4;L%' ( ( 	(r0   c                     | j         j                            d          }|d         dd                    |d d                   dS )Nr   r   r   ))r  r.   r   r   )r   r.   s     r/   r   zDocTestCase.__repr__*	  sG    }!'',, HHHchhtCRCy&9&9&9&9::r0   c                      d| j         j        z   S )Nz	Doctest: r3  r   s    r/   shortDescriptionzDocTestCase.shortDescription0	  s    T]///r0   )r#   NNN)r?   r   r   r   r   r!  r+  r)  r"   r   r   r   r   rN  r  r9  r   r0   r/   r  r    s        AE% % % %! ! !* * *M M M0
 
 
F F FP" " "5 5 5( ( (; ; ; nG0 0 0 0 0r0   r  c                   *    e Zd Zd Zd Zd Zd ZeZdS )SkipDocTestCasec                 J    || _         t                              | d            d S r   )rL   r  r   )r   rL   s     r/   r   zSkipDocTestCase.__init__4	  s%    T4(((((r0   c                 0    |                      d           d S )Nz-DocTestSuite will not work with -O2 and above)skipTestr   s    r/   r   zSkipDocTestCase.setUp8	  s    EFFFFFr0   c                     d S r   r   r   s    r/   	test_skipzSkipDocTestCase.test_skip;	      r0   c                      d| j         j        z  S )NzSkipping tests from %s)rL   r?   r   s    r/   r9  z SkipDocTestCase.shortDescription>	  s    '$+*>>>r0   N)r?   r   r   r   r   r@  r9  r  r   r0   r/   r;  r;  3	  sT        ) ) )G G G  ? ? ? GGGr0   r;  c                       e Zd Zd ZdS )_DocTestSuitec                     d S r   r   )r   r  s     r/   _removeTestAtIndexz _DocTestSuite._removeTestAtIndexF	  rA  r0   N)r?   r   r   rF  r   r0   r/   rD  rD  D	  s#            r0   rD  c                 "   	 |t                      }t          |           } |                    | ||          }|sGt          j        j        dk    r2t                      }|                    t          |                      |S |	                                 t                      }|D ]h}t          |j                  dk    r|j        s&| j        }|dd          dk    r
|d d         }||_        |                    t          |fi |           i|S )Nr  r<   r#   rc  rd  r   )r   rN   r   rG   r8   optimizerD  addTestr;  rB  r,   r   r`   r   r  )	rL   r7   rD  test_finderr   rE  suiter_  r`   s	            r/   r   r   J	  s   !F #oov&&FV5ZHHE SY'!++of--...	JJLLLOOE 4 4t}""} 	%H}&&#CRC=$DMk$22'223333Lr0   c                        e Zd Zd Zd Zd ZdS )DocFileCasec                 f    d                     | j        j                            d                    S )Nr  r   )r   r  r.   r   r   s    r/   r   zDocFileCase.id	  s'    xx*0055666r0   c                     | j         j        S r   )r  r`   r   s    r/   r   zDocFileCase.__repr__	  s    }%%r0   c                 @    d| j         j        d| j         j        d|S )Nr-  r.  z", line 0

)r  r.   r`   )r   r/  s     r/   r)  zDocFileCase.format_failure	  s.     =%%%t}'='='=ssD 	r0   N)r?   r   r   r   r   r)  r   r0   r/   rM  rM  	  sA        7 7 7& & &    r0   rM  c                 $   |i }n|                                 }|r|st          d          t          | |||pd          \  }} d|vr| |d<   t          j                            |           }|                    |||| d          }	t          |	fi |S )Nr  r  r   r#   )r   r   re   r   r   r  r  rM  )
r   rb   ra   r7   r5  rX   r   docr.   r_  s
             r/   DocFileTestrS  	  s     }

 , , + , , 	, tWo'274 4IC  j 7D!!D c5$a88Dt''w'''r0   c                      	 t                      }|                    dd          r%t          |                    d                    |d<   | D ]"}|                    t	          |fi |           #|S )Nrb   Tra   )rD  r4   rN   rI  rS  )pathskwrK  r   s       r/   r   r   	  s    6n OOE
 
vv&& =)"&&*;*;<<9 / /k$--"--....Lr0   c                    	 g }t                                          |           D ]}t          |t                    rk|                    |j        d d                    |j        }|r?|                    d           |d |                    d          d d         D             z  }|d |                    d          d d         D             z  }|r.|d         dk    r"|                                 |r|d         dk    "|r/|d         dk    r#|                    d           |r|d         dk    #d	                    |          dz   S )Nr   z# Expected:c                     g | ]}d |z   S )z## r   r   r   s     r/   r   z(script_from_examples.<locals>.<listcomp>=
  s    BBBq57BBBr0   r}   c                 ,    g | ]}t          |          S r   )r   rY  s     r/   r   z(script_from_examples.<locals>.<listcomp>@
  s0     8 8 8 %Q'' 8 8 8r0   r   r#   )
r   r  rB   r   r   r   r   r   popr   )rk   r   piecer   s       r/   r   r   	  s   8r F&&q)) 8 8eW%% 	8MM%,ss+,,,:D Cm,,,BBDJJt,<,<SbS,ABBBB  8 8 %D 1 1#2# 68 8 8 8FF  VBZ3&&

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

1  VAY#%% 99Vt##r0   c                     	 t          |           } t                                          |           }fd|D             }|st          d          |d         }t	          |j                  }|S )Nc                 *    g | ]}|j         k    |S r   r-   )r   r  r.   s     r/   r   ztestsource.<locals>.<listcomp>U
  s     ///!$Ar0   znot found in testsr#   )rN   r   r   r   r   r   )rL   r.   rE  r_  testsrcs    `   r/   r    r    L
  s}     v&&FOO  ((E////u///D 534447D"4>22GNr0   c                 H    	 t          |           }t          |||           d S r   )r   debug_script)srcpmr7   r_  s       r/   r!   r!   \
  s*    >"3''G"e$$$$$r0   c                    	 dd l }|r|                                }ni }|r	 t          | ||           d S #  t          t	          j                    d                     |j        d          }|                                 |                    d t	          j                    d                    Y d S xY w |j        d          	                    d| z  ||           d S )Nr#   r)   T)r   r<   zexec(%r))
r   r   r  rX  rG   rs   r   r  interactionr  )rb  rc  r7   r   ps        r/   ra  ra  a
  s    =JJJ 

	 	C	3eU#####	3#,..#$$$&&&AGGIIIMM$q 1222222"":#3UEBBBBBs
   5 A:B2c                 r    	 t          |           } t          | |          }t          ||| j                   d S r   )rN   r    ra  r?  )rL   r.   rc  r_  s       r/   r"   r"   u
  s?     v&&F&&G"fo.....r0   c                   "    e Zd Z	 d Zd Zd ZdS )
_TestClassc                     	 || _         d S r   ra  )r   ra  s     r/   r   z_TestClass.__init__
  s    	 r0   c                 &    	 | j         dz  | _         | S )Nr<   rk  r   s    r/   squarez_TestClass.square
  s    	 8q=r0   c                     	 | j         S r   rk  r   s    r/   r4   z_TestClass.get
  s    	 xr0   N)r?   r   r   r   rm  r4   r   r0   r/   ri  ri  
  sF                r0   ri  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]
            )ri  r   zbool-int equivalencezblank linesellipsiszwhitespace normalizationc                  4   dd l } |                     d          }|                    ddddd	           |                    d
ddt                                          g d           |                    dddd           |                    ddd           |                                }|j        }|j        }d}|j        D ]}|t          |         z  }|j	        r
|t          z  }|D ]}|                    d          r|t          j                            |          \  }}t          j                            d|           t#          |d d                   }	t          j        d= t%          |	||          \  }
}nt'          |d||          \  }
}|
r dS dS )Nr#   zdoctest runner)descriptionrx  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)rs  choicesrt  ru  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))rs  ru  ro   r  z file containing the tests to run)nargsru  z.pyr  )rb   r4  rz  r)   )argparseArgumentParseradd_argumentr*   keys
parse_argsro   r4  r  	fail_fastr   r~   r   r   r   rG   insertrD   r   r   )ry  r5  r   	testfilesr4  r   r  r`   dirnamer  r}  r  s               r/   _testr  
  s	   OOO$$1A$BBF
k,F  H H H
j 3 8 8 : :BE  G G G
 mLF  H H H c?  A A AD	I lGG+ / /&v..~ 9  U## 	K !#h 7 7GXHOOAw'''8CRC=))A!!W'JJJKHaa"8U-4'K K KKHa 	11	1r0   r   )r<   )rf   )	NNNNTr#   NFF)Fr  Nr#   ru  )FN)F)S__docformat____all__r2   r  r@   r=  r   r   ri   rG   rp   r  ior$   r%   collectionsr&   r'   r*   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r  r   r;   rN   rS   re   rm   rx   rz   r   r   r   r   r   rY   r   r   r   r   r   r   	Exceptionr   r   r   r  r   r   r   r  r   r  r  r;  	TestSuiterD  r   rM  rS  r   r   r    r!   ra  r"   ri  rW  r  r?   exitr   r0   r/   <module>r     sS  %N &+ + +Z           				 



 				 



      2 2 2 2 2 2 2 2 " " " " " "j(:;;.  O O O -,-EFF ++,CDD **+ABB z**6""--.GHH *)*()  	
 ,,  #">22"">22"">22//0KLL ,,	   -- 	 ! &
 
 
> > > >&D D D" " "$/ / / /	 	 	               / / /b    4"% "% "% "% "%CG "% "% "%J ,  ,  ,\B$ B$ B$ B$ B$ B$ B$ B$HGD GD GD GD GD GD GD GDZd; d; d; d; d; d; d; d;VD D D D D D D DT
G G G G G G G GRP5 P5 P5 P5 P5 P5 P5 P5d    Y   &    )   &e1 e1 e1 e1 e1- e1 e1 e1\ 
373705f6 f6 f6 f6P (,$dU==??y6 y6 y6 y6v :B:;4 4 4 46  ! ! !Ha0 a0 a0 a0 a0(# a0 a0 a0F    k   "    H&   > > > >@    +    '+D==??( ( ( (4C C CRP$ P$ P$d   % % % %
C C C C(	/ 	/ 	/ 	/* * * * * * * *X %%( )Q0 0f* * *Z zCHUUWW r0   