<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]d             !   @   s$  d  Z  d d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! g! 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 Z d" d$ l m Z d" d% l m Z e d& d'  Z i  Z d( d   Z e d  Z e d  Z e d  Z e d  Z e d  Z e d  Z e e Be Be Be Be BZ e d	  Z e d
  Z e d  Z e d  Z e d  Z e e Be Be Be BZ  d) Z! d* Z" d+ d,   Z# d- d. d/  Z$ d0 d1   Z% d2 d3 d4  Z& d5 d6   Z' Gd7 d8   d8 e  Z( d9 d:   Z) d; d<   Z* d= d>   Z+ Gd? d@   d@ e j,  Z- dA dB   Z. GdC d   d  Z/ GdD d   d  Z0 GdE d   d  Z1 GdF d   d  Z2 GdG d   d  Z3 GdH d   d  Z4 GdI d   d e5  Z6 GdJ d   d e5  Z7 GdK d   d e3  Z8 d# a9 d# d# d# d# dL d" d# dM dM dN d 	 Z: dL d# d# d# d# dL d" d# dM e1   d# dO d  Z; dM dP d# d" dQ d  Z< d" a= dR d   Z> GdS dT   dT e j?  Z@ GdU dV   dV e@  ZA GdW dX   dX e jB  ZC d# d# d# d# dY d  ZD GdZ d[   d[ e@  ZE dL d# d# e1   d# d\ d]  ZF d^ d   ZG d_ d   ZH d` d   ZI dM d# da d   ZJ dM d# db dc  ZK dM dd d!  ZL Gde df   df  ZM df eM dg dh di dj dk dl dm dn do dp i ZN dq dr   ZO eP ds k r e
 jQ eO    d# S)tz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)
namedtupleTestResultszfailed attemptedc             C   s   t  j |  d t t   > S)N   )OPTIONFLAGS_BY_NAME
setdefaultlen)name r+   ,/opt/alt/python35/lib64/python3.5/doctest.pyr      s    z<BLANKLINE>z...c             C   sR   d } xE t  j D]: } |  j | d   } | t t  |  k r | | j O} q W| S)Nr"   )
__future__Zall_feature_namesgetgetattrZcompiler_flag)globsflagsZfnameZfeaturer+   r+   r,   _extract_future_flags   s    r2      c             C   su   t  j |   r |  St |  t  r> t |  t   t   d g  S|  d  k re t j t j	 |  j
 d St d   d  S)N*__name__z"Expected a module, string, or None)inspectismodule
isinstancestr
__import__globalslocalssysmodules	_getframe	f_globals	TypeError)moduledepthr+   r+   r,   _normalize_module   s    
rD   c          	   C   s   | r t  | d  } t | |   }  t | d d   d  k	 r t | j d  r | j j |   } | j |  } | j t j	 d  |  f St
 |  d |  } | j   |  f SWd  QRXd  S)N   
__loader__get_data
encoding)rD   _module_relative_pathr/   hasattrrF   rG   decodereplaceoslinesepopenread)filenamepackagemodule_relativerI   Zfile_contentsfr+   r+   r,   _load_testfile   s    rV      c             C   s   t  j d | d |   S)Nz
(?m)^(?!$) )resub)sindentr+   r+   r,   _indent   s    r]   c             C   s;   t    } |  \ } } } t j | | | d | | j   S)Nfile)r#   	tracebackprint_exceptiongetvalue)exc_infoZexcoutexc_typeexc_valexc_tbr+   r+   r,   _exception_traceback   s    	rf   c               @   s+   e  Z d  Z d d   Z d d d  Z d S)	_SpoofOutc             C   s3   t  j |   } | r/ | j d  r/ | d 7} | S)NrH   )r#   ra   endswith)selfresultr+   r+   r,   ra      s    
z_SpoofOut.getvalueNc             C   s   |  j  |  t j |   d  S)N)seekr#   truncate)ri   sizer+   r+   r,   rl     s    z_SpoofOut.truncate)r5   
__module____qualname__ra   rl   r+   r+   r+   r,   rg      s   	rg   c             C   s  t  |  k r |  | k S|  j t   } d t |  } } | d } | rq | j |  rm t |  } | d =n d S| d } | r | j |  r | t |  8} | d =n d S| | k r d SxC | D]; } | j | | |  } | d k  r d S| t |  7} q Wd S)Nr"   Fr&   Trp   )ELLIPSIS_MARKERsplitr)   
startswithrh   find)wantgotZwsstartposendposwr+   r+   r,   _ellipsis_match  s0    




rz   c             C   s"   |  j    }  |  r d |  Sd Sd  S)Nz# #)rstrip)liner+   r+   r,   _comment_line9  s    r~   c             C   s   d t  |   } } |  j d  } | d k r4 | } |  j d d |  } | d k r[ | } |  j d d |  } | d k r | d } |  | |  S)Nr"   rH   :.r&   )r)   rt   rfind)msgstartendir+   r+   r,   _strip_exception_detailsA  s    
r   c               @   sC   e  Z d  Z d d   Z d d d  Z d d   Z d d	   Z d S)
_OutputRedirectingPdbc             C   s;   | |  _  d |  _ t j j |  d | d d d |  _ d  S)NFstdoutnosigintTr&   )_OutputRedirectingPdb__out$_OutputRedirectingPdb__debugger_usedpdbPdb__init__Zuse_rawinput)ri   outr+   r+   r,   r   a  s    		z_OutputRedirectingPdb.__init__Nc             C   s;   d |  _  | d  k r$ t j   j } t j j |  |  d  S)NT)r   r=   r?   f_backr   r   	set_trace)ri   framer+   r+   r,   r   i  s    	z_OutputRedirectingPdb.set_tracec             C   s   |  j  r t j j |   d  S)N)r   r   r   set_continue)ri   r+   r+   r,   r   o  s    	z"_OutputRedirectingPdb.set_continuec             G   s=   t  j } |  j t  _ z t j j |  |  SWd  | t  _ Xd  S)N)r=   r   r   r   r   trace_dispatch)ri   argssave_stdoutr+   r+   r,   r   u  s
    	z$_OutputRedirectingPdb.trace_dispatch)r5   rn   ro   r   r   r   r   r+   r+   r+   r,   r   [  s   r   c             C   s   t  j |   s t d |    | j d  r: t d   t |  d  re t j j |  j	  d } nv |  j
 d k r t t j  d k r t j d d k r t j j t j d  d } q t j } n t d |  j
   t j j | | j d   S)	NzExpected a module: %r/z1Module-relative files may not have absolute paths__file__r"   __main__ zBCan't resolve paths relative to the module %r (it has no __file__))r6   r7   rA   rs   
ValueErrorrK   rN   pathrr   r   r5   r)   r=   argvcurdirjoin)rB   r   Zbasedirr+   r+   r,   rJ     s    ( rJ   c               @   s@   e  Z d  Z d d d d d d  Z d d   Z d d   Z d S)	r   Nr"   c             C   s   | j  d  s | d 7} | r9 | j  d  r9 | d 7} | d  k	 r_ | j  d  r_ | d 7} | |  _ | |  _ | |  _ | |  _ | d  k r i  } | |  _ | |  _ d  S)NrH   )rh   sourceru   linenor\   optionsexc_msg)ri   r   ru   r   r   r\   r   r+   r+   r,   r     s    


				 	zExample.__init__c             C   s   t  |   t  |  k	 r t S|  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k S)N)typeNotImplementedr   ru   r   r\   r   r   )ri   otherr+   r+   r,   __eq__  s    zExample.__eq__c             C   s(   t  |  j |  j |  j |  j |  j f  S)N)hashr   ru   r   r\   r   )ri   r+   r+   r,   __hash__  s    zExample.__hash__)r5   rn   ro   r   r   r   r+   r+   r+   r,   r     s   #	c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)r   c             C   s@   | |  _  | |  _ | j   |  _ | |  _ | |  _ | |  _ d  S)N)examples	docstringcopyr0   r*   rR   r   )ri   r   r0   r*   rR   r   r   r+   r+   r,   r     s    				zDocTest.__init__c             C   su   t  |  j  d k r d } n1 t  |  j  d k r< d } n d t  |  j  } d |  j j |  j |  j |  j | f S)Nr"   zno examplesr&   z	1 examplez%d examplesz<%s %s from %s:%s (%s)>)r)   r   	__class__r5   r*   rR   r   )ri   r   r+   r+   r,   __repr__  s    			zDocTest.__repr__c             C   s   t  |   t  |  k	 r t S|  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k S)N)r   r   r   r   r0   r*   rR   r   )ri   r   r+   r+   r,   r     s    zDocTest.__eq__c             C   s"   t  |  j |  j |  j |  j f  S)N)r   r   r*   rR   r   )ri   r+   r+   r,   r   %  s    zDocTest.__hash__c             C   sS   t  | t  s t S|  j |  j |  j t |   f | j | j | j t |  f k  S)N)r8   r   r   r*   rR   r   id)ri   r   r+   r+   r,   __lt__)  s    zDocTest.__lt__N)r5   rn   ro   r   r   r   r   r   r+   r+   r+   r,   r     s
   c               @   s   e  Z d  Z e j d e j e j B Z e j d e j e j Be j B Z	 e j d  j
 Z d d d  Z d d   Z d d	 d
  Z d d   Z e j d e j  Z d d   Z e j d e j  Z d d   Z d d   Z d 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^[ ]*(#.*)?$z<string>c                sw  | j    } |  j |      d k rR d j   f d d   | j d  D  } g  } d \ } } x |  j j |  D] } | j | | | j     | | j d | | j    7} |  j	 | | |  \ } } }	 }
 |  j
 |  s'| j t | |	 |
 d | d   t | j d   d |  | | j d | j   | j    7} | j   } qw W| j | | d    | S)	Nr"   rH   c                s    g  |  ] } |   d    q S)Nr+   ).0l)
min_indentr+   r,   
<listcomp>p  s   	 z'DocTestParser.parse.<locals>.<listcomp>r   r\   r   )r"   r"   )
expandtabs_min_indentr   rr   _EXAMPLE_REfinditerappendr   count_parse_example_IS_BLANK_OR_COMMENTr   r)   groupr   )ri   stringr*   outputZcharnor   mr   r   ru   r   r+   )r   r,   parsed  s&    +!
%zDocTestParser.parsec             C   s%   t  |  j | |  | | | | |  S)N)r   get_examples)ri   r   r0   r*   rR   r   r+   r+   r,   get_doctest  s    	zDocTestParser.get_doctestc             C   s   d d   |  j  | |  D S)Nc             S   s%   g  |  ] } t  | t  r |  q Sr+   )r8   r   )r   xr+   r+   r,   r     s   	 z.DocTestParser.get_examples.<locals>.<listcomp>)r   )ri   r   r*   r+   r+   r,   r     s    zDocTestParser.get_examplesc       
         su  t  | j d     | j d  j d  } |  j |   | |  |  j | d d   d   d | |  d j   f d d   | D  } | j d	  } | j d  } t  |  d k r t j d
 | d  r | d =|  j | d   | | t  |   d j   f d d   | D  } |  j j |  } | rJ| j d  } n d  } |  j	 | | |  }	 | |	 | | f S)Nr\   r   rH   r&   rX   r   c                s$   g  |  ] } |   d  d   q S)rW   Nr+   )r   sl)r\   r+   r,   r     s   	 z0DocTestParser._parse_example.<locals>.<listcomp>ru   z *$c                s    g  |  ] } |   d    q S)Nr+   )r   Zwl)r\   r+   r,   r     s   	 r   rp   rp   )
r)   r   rr   _check_prompt_blank_check_prefixr   rY   match_EXCEPTION_RE_find_options)
ri   r   r*   r   source_linesr   ru   
want_linesr   r   r+   )r\   r,   r     s$    ("("zDocTestParser._parse_examplez#\s*doctest:\s*([^\n\'"]*)$c       	      C   s   i  } x |  j  j |  D] } | j d  j d d  j   } xy | D]q } | d d k ss | d d   t k r t d | d | | f   t | d d   } | d d k | | <qG Wq W| r |  j |  r t d | | | f   | S)	Nr&   ,rX   r"   z+-z7line %r of the doctest for %s has an invalid option: %r+zSline %r of the doctest for %s has an option directive on a line with no example: %r)_OPTION_DIRECTIVE_REr   r   rM   rr   r'   r   r   )	ri   r   r*   r   r   r   option_stringsoptionflagr+   r+   r,   r     s    !zDocTestParser._find_optionsz^([ ]*)(?=\S)c             C   sC   d d   |  j  j |  D } t |  d k r; t |  Sd Sd  S)Nc             S   s   g  |  ] } t  |   q Sr+   )r)   )r   r\   r+   r+   r,   r     s   	 z-DocTestParser._min_indent.<locals>.<listcomp>r"   )
_INDENT_REfindallr)   min)ri   r[   indentsr+   r+   r,   r     s    
zDocTestParser._min_indentc          	   C   s}   xv t  |  D]h \ } } t |  | d k r | | d d k r t d | | d | | | | d  | f   q Wd  S)NrW   rE   rX   z8line %r of the docstring for %s lacks blank after %s: %rr&   )	enumerater)   r   )ri   linesr\   r*   r   r   r}   r+   r+   r,   r     s
    *z!DocTestParser._check_prompt_blankc             C   sX   xQ t  |  D]C \ } } | r | j |  r t d | | d | | f   q Wd  S)NzGline %r of the docstring for %s has inconsistent leading whitespace: %rr&   )r   rs   r   )ri   r   prefixr*   r   r   r}   r+   r+   r,   r     s    zDocTestParser._check_prefixN)r5   rn   ro   rY   compile	MULTILINEVERBOSEr   DOTALLr   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r   4  s    	'3	c               @   ss   e  Z d  Z d e   d d d d  Z d d d d d d  Z d d	   Z d
 d   Z d d   Z d d   Z	 d S)r   FTc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)_parser_verbose_recurse_exclude_empty)ri   verboseparserrecurseexclude_emptyr+   r+   r,   r   (  s    			zDocTestFinder.__init__Nc       	      C   s  | d  k rC t  | d d   } | d  k rC t d t |  f   | d k rX d  } n | d  k rs t j |  } y t j |  } Wn t k
 r d  } Yn X| s t j |  } | d | d d   d k s d  } | d  k r d  } n? | d  k	 rt j	 | | j
  } n t j	 |  } | s.d  } | d  k ra| d  k rOi  } qm| j
 j   } n | j   } | d  k	 r| j |  d | k rd | d <g  } |  j | | | | | | i   | j   | S)	Nr5   zJDocTestFinder.find: name must be given when obj.__name__ doesn't exist: %rFr"   r3   z<]>r   )r/   r   r   r6   	getmoduleZgetsourcefilerA   Zgetfile	linecachegetlines__dict__r   update_findsort)	ri   objr*   rB   r0   
extraglobsr^   r   testsr+   r+   r,   rt   >  sJ    $	 		

zDocTestFinder.findc             C   s  | d  k r d St  j |  d  k	 r8 | t  j |  k St  j |  rW | j | j k St  j |  r t | d  r | j j } n t | d  r | j } n d S| j	 | k St  j
 |  r | j	 | j k St | d  r | j	 | j k St | t  rd St d   d  S)NT__objclass__rn   z"object must be a class or function)r6   r   
isfunctionr   __globals__ZismethoddescriptorrK   r   rn   r5   isclassr8   propertyr   )ri   rB   objectZobj_modr+   r+   r,   _from_module  s(    zDocTestFinder._from_modulec          	   C   s  |  j  r t d |  t |  | k r- d  Sd | t |  <|  j | | | | |  } | d  k	 rq | j |  t j |  r|  j rx | j j	   D]t \ }	 }
 d | |	 f }	 t j
 t j |
   s t j |
  r |  j | |
  r |  j | |
 |	 | | | |  q Wt j |  r|  j rx t | d i   j	   D] \ }	 }
 t |	 t  svt d t |	  f   t j
 |
  pt j |
  pt j |
  pt |
 t  st d t |
  f   d | |	 f }	 |  j | |
 |	 | | | |  qBWt j |  r|  j rx | j j	   D] \ }	 }
 t |
 t  rPt | |	  }
 t |
 t  rqt | |	  j }
 t j
 |
  st j |
  st |
 t  r&|  j | |
  r&d | |	 f }	 |  j | |
 |	 | | | |  q&Wd  S)NzFinding tests in %sr&   z%s.%s__test__z5DocTestFinder.find: __test__ keys must be strings: %rz`DocTestFinder.find: __test__ values must be strings, functions, methods, classes, or modules: %rz%s.__test__.%s)r   printr   	_get_testr   r6   r7   r   r   itemsZ	isroutineZunwrapr   r   r   r/   r8   r9   r   r   staticmethodclassmethod__func__r   )ri   r   r   r*   rB   r   r0   seentestZvalnamevalr+   r+   r,   r     sP    	%zDocTestFinder._findc       	      C   s  t  | t  r | } na y@ | j d  k r3 d } n$ | j } t  | t  sW t |  } Wn t t f k
 rx d } Yn X|  j | |  } |  j r | r d  S| d  k r d  } n; t | d | j  } | d d   d k r | d  d  } |  j	 j
 | | | | |  S)Nr   r   rW   z.pycr&   rp   )r8   r9   __doc__rA   AttributeError_find_linenor   r/   r5   r   r   )	ri   r   r*   rB   r0   r   r   r   rR   r+   r+   r,   r     s(    				zDocTestFinder._get_testc             C   s{  d  } t  j |  r d } t  j |  r | d  k r: d  St j d t | d d   } x0 t |  D]" \ } } | j |  rf | } Pqf Wt  j |  r | j	 } t  j
 |  r | j } t  j |  r | j } t  j |  r | j } t  j |  rt | d d   d } | d  k	 rw| d  k r1| d St j d  } x4 t | t |   D] } | j | |  rV| SqVWd  S)Nr"   z^\s*class\s*%s\br5   -co_firstlinenor&   z(^|.*:)\s*\w*("|'))r6   r7   r   rY   r   r/   r   r   Zismethodr   r   __code__Zistracebacktb_frameZisframef_codeZiscoderanger)   )ri   r   r   r   patr   r}   r+   r+   r,   r  $  s<    	 	 	 	 	zDocTestFinder._find_lineno)
r5   rn   ro   r   r   rt   r   r   r   r  r+   r+   r+   r,   r     s   		f?%c               @   s   e  Z d  Z d d Z d d d d d  Z d d   Z d	 d
   Z d d   Z d d   Z d d   Z	 d d   Z
 d d   Z e j d  Z d d d  Z d d d d d  Z d d d  Z d d   Z d S)r   r4   F   Nr"   c             C   ss   | p t    |  _ | d  k r- d t j k } | |  _ | |  _ | |  _ d |  _ d |  _ i  |  _	 t
   |  _ d  S)Nz-vr"   )r   _checkerr=   r   r   optionflagsoriginal_optionflagstriesfailures_name2ftrg   _fakeout)ri   checkerr   r  r+   r+   r,   r     s    						zDocTestRunner.__init__c             C   s\   |  j  rX | j r= | d t | j  d t | j   n | d t | j  d  d  S)NzTrying:
zExpecting:
zExpecting nothing
)r   ru   r]   r   )ri   r   r   exampler+   r+   r,   report_start  s    		(zDocTestRunner.report_startc             C   s   |  j  r | d  d  S)Nzok
)r   )ri   r   r   r  rv   r+   r+   r,   report_success  s    	zDocTestRunner.report_successc             C   s3   | |  j  | |  |  j j | | |  j   d  S)N)_failure_headerr  output_differencer  )ri   r   r   r  rv   r+   r+   r,   report_failure  s    zDocTestRunner.report_failurec             C   s.   | |  j  | |  d t t |    d  S)NzException raised:
)r  r]   rf   )ri   r   r   r  rb   r+   r+   r,   report_unexpected_exception  s    z)DocTestRunner.report_unexpected_exceptionc             C   s   |  j  g } | j rs | j d  k	 rJ | j d  k	 rJ | j | j d } n d } | j d | j | | j f  n! | j d | j d | j f  | j d  | j } | j t |   d j |  S)Nr&   ?zFile "%s", line %s, in %szLine %s, in %szFailed example:rH   )DIVIDERrR   r   r   r*   r   r]   r   )ri   r   r  r   r   r   r+   r+   r,   r    s    		!	zDocTestRunner._failure_headerc             C   sH  d } } |  j  } t d  \ } } }	 |  j j }
 xt | j  D]\ } } |  j  t @of | d k } | |  _  | j r xE | j j   D]4 \ } } | r |  j  | O_  q |  j  | M_  q W|  j  t	 @r qD | d 7} | s |  j
 | | |  d | j | f } y< t t | j | d | d  | j  |  j j   d  } Wn5 t k
 r\  Yn! t j   } |  j j   Yn X|  j j   } |  j j d  | } | d  k r|
 | j | |  j   rr| } n t j | d  d    d } | s| t |  7} | j d  k r|	 } nX |
 | j | |  j   r;| } n7 |  j  t @rr|
 t | j  t |  |  j   rr| } | | k r| s|  j | | | |  nj | | k r| s|  j  | | | |  | d 7} n5 | |	 k r| s|  j! | | | |  | d 7} n  | rD |  j  t" @rD PqD W| |  _  |  j# | | |  t$ | |  S)Nr"   rE   r&   z<doctest %s[%d]>Zsingler3   rp   )%r  r  r  check_outputr   r   r   r   r   r   r  r*   execr   r   r0   debuggerr   KeyboardInterruptr=   rb   r  ra   rl   ru   r_   format_exception_onlyrf   r   r   r   r  r  r  r   _DocTestRunner__record_outcomer%   )ri   r   compileflagsr   r  r  r  SUCCESSFAILUREZBOOMcheck
examplenumr  quietZ
optionflagr  rR   	exceptionrv   Zoutcomer   r+   r+   r,   Z__run  s    
			

					zDocTestRunner.__runc             C   s^   |  j  j | j d  \ } } | | | | f |  j  | j <|  j | 7_ |  j | 7_ d  S)Nr"   )r"   r"   )r  r.   r*   r  r  )ri   r   rU   tf2t2r+   r+   r,   Z__record_outcomel  s    zDocTestRunner.__record_outcomez.<doctest (?P<name>.+)\[(?P<examplenum>\d+)\]>$c             C   sy   |  j  j |  } | re | j d  |  j j k re |  j j t | j d   } | j j d d  S|  j	 | |  Sd  S)Nr*   r)  keependsT)
%_DocTestRunner__LINECACHE_FILENAME_REr   r   r   r*   r   intr   
splitlinessave_linecache_getlines)ri   rR   module_globalsr   r  r+   r+   r,   Z__patched_linecache_getlinesy  s
    !z*DocTestRunner.__patched_linecache_getlinesTc       	         su  | |  _  | d  k r$ t | j  } t j  | d  k r  j     d  k s`   j   d k rl  j } n    f d d   } |  j t _ t j	   } t
 j } t   |  _ |  j j   |  j j t
 _ t j |  _ |  j t _ t j } t j t _ z |  j | | |  SWd   t _ | t
 _ t j |  |  j t _ | t _ | rp| j j   d d  l } d  | _ Xd  S)Nzutf-8c                s,   t  |  j   d     }   j |   d  S)Nbackslashreplace)r9   encodewrite)r[   )rI   r   r+   r,   r     s    zDocTestRunner.run.<locals>.outr"   )r   r2   r0   r=   r   rI   lowerr7  r  gettracer   r   r   r!  resetr   r   r3  *_DocTestRunner__patched_linecache_getlinesdisplayhook__displayhook___DocTestRunner__runsettraceclearbuiltins_)	ri   r   r%  r   clear_globsZ
save_traceZsave_set_traceZsave_displayhookrA  r+   )rI   r   r,   run  s<    								zDocTestRunner.runc             C   s$  | d  k r |  j  } g  } g  } g  } d } } x |  j j   D]w } | \ } \ }	 }
 | |
 7} | |	 7} |
 d k r | j |  qA |	 d k r | j | |
 f  qA | j |  qA W| rQ| rt t |  d  | j   x | D] } t d |  q W| rQt t |  d  | j   x( | D]  \ } } t d | | f  q-W| rt |  j  t t |  d  | j   x1 | D]) \ } \ }	 }
 t d |	 |
 | f  qW| rt | d t |  j  d	  t | | 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.)	r   r  r   r   r   r)   r   r  r%   )ri   r   ZnotestsZpassedZfailedZtotaltZtotalfr   r*   rU   r,  thingr   r+   r+   r,   	summarize  sP    	






zDocTestRunner.summarizec             C   ss   |  j  } xc | j  j   D]R \ } \ } } | | k r[ | | \ } } | | } | | } | | f | | <q Wd  S)N)r  r   )ri   r   dr*   rU   r,  r-  r.  r+   r+   r,   merge  s    	"

zDocTestRunner.merge)r5   rn   ro   r  r   r  r  r  r  r  r>  r$  rY   r   r0  r;  rD  rF  rH  r+   r+   r+   r,   r   X  s   :
$}
I9c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
r   c             C   s   t  | j d d  d  S)NASCIIr5  )r9   r6  )ri   r[   r+   r+   r,   _toAscii  s    zOutputChecker._toAsciic             C   s  |  j  |  } |  j  |  } | | k r. d S| t @sd | | f d k rN d S| | f d k rd d S| t @s t j d t j t  d |  } t j d d |  } | | k r d S| t @r d	 j | j	    } d	 j | j	    } | | k r d S| t
 @rt | |  rd Sd
 S)NTTrue
1
False
0
z(?m)^%s\s*?$r   z
(?m)^\s*?$rX   F)rK  rL  )rM  rN  )rJ  r   r   rY   rZ   escapeBLANKLINE_MARKERr   r   rr   r   rz   )ri   ru   rv   r  r+   r+   r,   r    s0    



zOutputChecker.check_outputc             C   sL   | t  t Bt B@s d S| t @r$ d S| j d  d k oK | j d  d k S)NFTrH   r3   )r	   r
   r   r   )ri   ru   rv   r  r+   r+   r,   _do_a_fancy_diff]  s    
zOutputChecker._do_a_fancy_diffc       
      C   s  | j  } | t @s( t j d t |  } |  j | | |  rQ| j d d  } | j d d  } | t @r t j	 | | d d } t
 |  d d   } d } n | t @r t j | | d d } t
 |  d d   } d } n@ | t @r#t j d t j  }	 t
 |	 j | |   } d	 } n  d
 d   | D } d | t d j |   S| rw| rwd t |  t |  f S| rd t |  S| rd t |  Sd Sd  S)Nz(?m)^[ ]*(?=
)r/  Tnr3   z#unified diff with -expected +actualz-context diff with expected followed by actualZcharjunkzndiff with -expected +actualc             S   s    g  |  ] } | j    d   q S)rH   )r|   )r   r}   r+   r+   r,   r     s   	 z3OutputChecker.output_difference.<locals>.<listcomp>zDifferences (%s):
r   zExpected:
%sGot:
%szExpected:
%sGot nothing
zExpected nothing
Got:
%szExpected nothing
Got nothing
)ru   r   rY   rZ   rP  rQ  r2  r	   difflibZunified_difflistr
   Zcontext_diffr   ZDifferZIS_CHARACTER_JUNKZcomparer]   r   )
ri   r  rv   r  ru   r   Z	got_linesZdiffkindZenginer+   r+   r,   r  t  s6    	

	
	
	zOutputChecker.output_differenceN)r5   rn   ro   rJ  r  rQ  r  r+   r+   r+   r,   r     s   ?c               @   s(   e  Z d  Z d d   Z d d   Z d S)r   c             C   s   | |  _  | |  _ | |  _ d  S)N)r   r  rv   )ri   r   r  rv   r+   r+   r,   r     s    		zDocTestFailure.__init__c             C   s   t  |  j  S)N)r9   r   )ri   r+   r+   r,   __str__  s    zDocTestFailure.__str__N)r5   rn   ro   r   rV  r+   r+   r+   r,   r     s   c               @   s(   e  Z d  Z d d   Z d d   Z d S)r   c             C   s   | |  _  | |  _ | |  _ d  S)N)r   r  rb   )ri   r   r  rb   r+   r+   r,   r     s    		zUnexpectedException.__init__c             C   s   t  |  j  S)N)r9   r   )ri   r+   r+   r,   rV    s    zUnexpectedException.__str__N)r5   rn   ro   r   rV  r+   r+   r+   r,   r     s   c               @   s=   e  Z d  Z d d d d d  Z d d   Z d d   Z d S)	r   NTc             C   s2   t  j |  | | | d  } | r. | j j   | S)NF)r   rD  r0   r@  )ri   r   r%  r   rC  rr+   r+   r,   rD  %  s    zDebugRunner.runc             C   s   t  | | |   d  S)N)r   )ri   r   r   r  rb   r+   r+   r,   r  +  s    z'DebugRunner.report_unexpected_exceptionc             C   s   t  | | |   d  S)N)r   )ri   r   r   r  rv   r+   r+   r,   r  .  s    zDebugRunner.report_failure)r5   rn   ro   rD  r  r  r+   r+   r+   r,   r     s   [TFc	             C   s  |  d  k r t  j j d  }  t j |   s@ t d |  f   | d  k rU |  j } t d |  }	 | r t d | d |  }
 n t	 d | d |  }
 x3 |	 j
 |  | d | d | D] } |
 j |  q W| r |
 j   t d  k r |
 a n t j |
  t |
 j |
 j  S)Nr   ztestmod: module required; %rr   r   r  r0   r   )r=   r>   r.   r6   r7   rA   r5   r   r   r   rt   rD  rF  masterrH  r%   r  r  )r   r*   r0   r   reportr  r   raise_on_errorr   finderrunnerr   r+   r+   r,   r   :  s$    E	%
	c             C   sH  | r | r t  d   t |  | | | p. d  \ } }  | d  k rX t j j |   } | d  k rm i  } n | j   } | d  k	 r | j |  d | k r d | d <|	 r t d | d |  } n t d | d |  } |
 j	 | | | |  d  } | j
 |  | r| j   t d  k r(| a n t j |  t | j | j  S)Nz8Package may only be specified for module-relative paths.zutf-8r5   r   r   r  r"   )r   rV   rN   r   basenamer   r   r   r   r   rD  rF  rX  rH  r%   r  r  )rR   rT   r*   rS   r0   r   rY  r  r   rZ  r   rI   textr\  r   r+   r+   r,   r     s0    R	

	ZNoNamec       	      C   sd   t  d | d d  } t d | d |  } x3 | j |  | d | D] } | j | d | qC Wd  S)Nr   r   Fr  r0   r%  )r   r   rt   rD  )	rU   r0   r   r*   r%  r  r[  r\  r   r+   r+   r,   r     s    c             C   s/   |  t  @|  k r t d |    t } |  a | S)NzOnly reporting flags allowed)r   r   _unittest_reportflags)r1   oldr+   r+   r,   r   :  s
    c               @   s   e  Z d  Z d d d d d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z e Z d d   Z d S)DocTestCaser"   Nc             C   sA   t  j j |   | |  _ | |  _ | |  _ | |  _ | |  _ d  S)N)unittestTestCaser   _dt_optionflags_dt_checker_dt_test	_dt_setUp_dt_tearDown)ri   r   r  setUptearDownr  r+   r+   r,   r   `  s    				zDocTestCase.__init__c             C   s)   |  j  } |  j d  k	 r% |  j |  d  S)N)rf  rg  )ri   r   r+   r+   r,   ri  j  s    	zDocTestCase.setUpc             C   s6   |  j  } |  j d  k	 r% |  j |  | j j   d  S)N)rf  rh  r0   r@  )ri   r   r+   r+   r,   rj  p  s    	zDocTestCase.tearDownc             C   s   |  j  } t j } t   } |  j } | t @s8 | t O} t d | d |  j d d  } z5 d d | _	 | j
 | d | j d d \ } } Wd  | t _ X| r |  j |  j | j      d  S)	Nr  r  r   Fr  r  r   rC  )rf  r=   r   r#   rd  r   r_  r   re  r  rD  r7  ZfailureExceptionformat_failurera   )ri   r   r`  newr  r\  r  r  r+   r+   r,   runTestx  s    				

"
zDocTestCase.runTestc             C   sp   |  j  } | j d  k r! d } n d | j } d j | j j d  d d    } d | j | j | | | f S)Nzunknown line numberz%sr   r&   z:Failed doctest test for %s
  File "%s", line %s, in %s

%srp   )rf  r   r   r*   rr   rR   )ri   errr   r   Zlnamer+   r+   r,   rk    s    		%zDocTestCase.format_failurec             C   sO   |  j    t d |  j d |  j d d  } | j |  j d d |  j   d  S)Nr  r  r   FrC  )ri  r   rd  re  rD  rf  rj  )ri   r\  r+   r+   r,   r!     s
    B
zDocTestCase.debugc             C   s
   |  j  j S)N)rf  r*   )ri   r+   r+   r,   r     s    zDocTestCase.idc             C   st   t  |   t  |  k	 r t S|  j | j k os |  j | j k os |  j | j k os |  j | j k os |  j | j k S)N)r   r   rf  rd  rg  rh  re  )ri   r   r+   r+   r,   r     s    zDocTestCase.__eq__c             C   s"   t  |  j |  j |  j |  j f  S)N)r   rd  rg  rh  re  )ri   r+   r+   r,   r     s    zDocTestCase.__hash__c             C   s:   |  j  j j d  } d | d d j | d  d   f S)Nr   z%s (%s)r&   rp   rp   )rf  r*   rr   r   )ri   r*   r+   r+   r,   r     s    zDocTestCase.__repr__c             C   s   d |  j  j S)Nz	Doctest: )rf  r*   )ri   r+   r+   r,   shortDescription  s    zDocTestCase.shortDescription)r5   rn   ro   r   ri  rj  rm  rk  r!   r   r   r   r   rV  ro  r+   r+   r+   r,   ra  ^  s   		H
ra  c               @   sF   e  Z d  Z d d   Z d d   Z d d   Z d d   Z e Z d	 S)
SkipDocTestCasec             C   s   | |  _  t j |  d   d  S)N)rB   ra  r   )ri   rB   r+   r+   r,   r     s    	zSkipDocTestCase.__init__c             C   s   |  j  d  d  S)Nz-DocTestSuite will not work with -O2 and above)ZskipTest)ri   r+   r+   r,   ri  	  s    zSkipDocTestCase.setUpc             C   s   d  S)Nr+   )ri   r+   r+   r,   	test_skip	  s    zSkipDocTestCase.test_skipc             C   s   d |  j  j S)NzSkipping tests from %s)rB   r5   )ri   r+   r+   r,   ro  		  s    z SkipDocTestCase.shortDescriptionN)r5   rn   ro   r   ri  rq  ro  rV  r+   r+   r+   r,   rp    s
   rp  c               @   s   e  Z d  Z d d   Z d S)_DocTestSuitec             C   s   d  S)Nr+   )ri   indexr+   r+   r,   _removeTestAtIndex	  s    z _DocTestSuite._removeTestAtIndexN)r5   rn   ro   rt  r+   r+   r+   r,   rr  	  s   rr  c       	      K   s  | d  k r t    } t |   }  | j |  d | d | } | ru t j j d k ru t   } | j t |    | S| j	   t   } x} | D]u } t
 | j  d k r q | j s |  j } | d d   d k r | d  d	  } | | _ | j t | |   q W| S)
Nr0   r   r3   r"   rW   z.pycr&   r  rp   )r   rD   rt   r=   r1   optimizerr  addTestrp  r   r)   r   rR   r   ra  )	rB   r0   r   Ztest_finderr   r   suiter   rR   r+   r+   r,   r   	  s(    %		
				c               @   s:   e  Z d  Z d d   Z d d   Z e Z d d   Z d S)DocFileCasec             C   s   d j  |  j j j d   S)NrB  r   )r   rf  r*   rr   )ri   r+   r+   r,   r   W	  s    zDocFileCase.idc             C   s
   |  j  j S)N)rf  rR   )ri   r+   r+   r,   r   Z	  s    zDocFileCase.__repr__c             C   s   d |  j  j |  j  j | f S)Nz2Failed doctest test for %s
  File "%s", line 0

%s)rf  r*   rR   )ri   rn  r+   r+   r,   rk  ^	  s    zDocFileCase.format_failureN)r5   rn   ro   r   r   rV  rk  r+   r+   r+   r,   rx  U	  s   rx  c       
      K   s   | d  k r i  } n | j    } | r: | r: t d   t |  | | | pO d  \ } }  d | k rq |  | d <t j j |   } | j | | | |  d  }	 t |	 |  S)Nz8Package may only be specified for module-relative paths.zutf-8r   r"   )r   r   rV   rN   r   r]  r   rx  )
r   rT   rS   r0   r   rI   r   docr*   r   r+   r+   r,   DocFileTestc	  s    	
rz  c              O   s_   t    } | j d d  r4 t | j d   | d <x$ |  D] } | j t | |   q; W| S)NrT   TrS   )rr  r.   rD   rv  rz  )pathskwrw  r   r+   r+   r,   r   }	  s    8	c             C   s!  g  } x t    j |   D] } t | t  r | j | j d  d	   | j } | r | j d  | d d   | j d  d  d
  D 7} q | d d   | j d  d  d  D 7} q Wx$ | r | d d k r | j   q Wx' | r| d d k r| j d  q Wd j	 |  d S)Nr&   z# Expected:c             S   s   g  |  ] } d  |  q S)z## r+   )r   r   r+   r+   r,   r   	
  s   	 z(script_from_examples.<locals>.<listcomp>rH   c             S   s   g  |  ] } t  |   q Sr+   )r~   )r   r   r+   r+   r,   r   
  s   	r{   r"   rp   rp   rp   rp   )
r   r   r8   r   r   r   ru   rr   popr   )r[   r   Zpieceru   r+   r+   r,   r   	  s    :	-"c                si   t  |   }  t   j |   }   f d d   | D } | sL t   d   | d } t | j  } | S)Nc                s%   g  |  ] } | j    k r |  q Sr+   )r*   )r   r,  )r*   r+   r,   r   !
  s   	 ztestsource.<locals>.<listcomp>znot found in testsr"   )rD   r   rt   r   r   r   )rB   r*   r   r   testsrcr+   )r*   r,   r   
  s    
c             C   s    t  |   } t | | |  d  S)N)r   debug_script)srcpmr0   r~  r+   r+   r,   r    (
  s    c          
   C   s   d d  l  } | r! | j   } n i  } | r y t |  | |  Wq t t j   d  | j d d  } | j   | j d  t j   d  Yq Xn# | j d d  j	 d |  | |  d  S)Nr"   r&   r   Tr3   zexec(%r))
r   r   r   r   r=   rb   r   r:  ZinteractionrD  )r  r  r0   r   pr+   r+   r,   r  -
  s    
"r  c             C   s2   t  |   }  t |  |  } t | | |  j  d  S)N)rD   r   r  r   )rB   r*   r  r~  r+   r+   r,   r!   A
  s    c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)
_TestClassc             C   s   | |  _  d  S)N)r  )ri   r  r+   r+   r,   r   ]
  s    z_TestClass.__init__c             C   s   |  j  d |  _  |  S)Nr3   )r  )ri   r+   r+   r,   squareg
  s    z_TestClass.squarec             C   s   |  j  S)N)r  )ri   r+   r+   r,   r.   q
  s    z_TestClass.getN)r5   rn   ro   r   r  r.   r+   r+   r+   r,   r  O
  s   

r  r   z
                      Example of a string object, searched as-is.
                      >>> x = 1; y = 2
                      >>> x + y, x * y
                      (3, 2)
                      zbool-int equivalencea  
                                    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 linesz
                Blank lines can be marked with <BLANKLINE>:
                    >>> print('foo\n\nbar\n')
                    foo
                    <BLANKLINE>
                    bar
                    <BLANKLINE>
            Zellipsisz
                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]
            zwhitespace normalizationa  
                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]
            c              C   s  t  j d d  }  |  j d d d d d d d	 d
 |  j d d d d d t j   d g  d	 d |  j d d d d d	 d |  j d d d d	 d |  j   } | j } | j } d } x | j D] } | t | O} q W| j	 r | t
 O} x | D] } | j d  rxt j j |  \ } } t j j d |  t | d  d   } t j d =t | d | d | \ }	 }
 n$ t | d d d | d | \ }	 }
 |	 r d Sq Wd S)Ndescriptionzdoctest runnerz-vz	--verboseaction
store_truedefaultFhelpz'print very verbose output for all testsz-oz--optionr   choiceszqspecify a doctest option flag to apply to the test run; may be specified more than once to apply multiple optionsz-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^   nargsr   z file containing the tests to runr"   z.pyrE   r   r  rT   r&   )argparseArgumentParseradd_argumentr'   keys
parse_argsr^   r   r   Z	fail_fastr   rh   rN   r   rr   r=   insertr:   r   r   )r   r   Z	testfilesr   r   r   rR   dirnamer   r  rB  r+   r+   r,   _test
  s<    			

!r  r   )RZ__docformat____all__r-   r  rS  r6   r   rN   r   rY   r=   r_   rb  ior#   collectionsr$   r%   r'   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   rP  rq   r2   rD   rV   r]   rf   rg   rz   r~   r   r   r   rJ   r   r   r   r   r   r   	Exceptionr   r   r   rX  r   r   r   r_  r   rc  ra  rp  Z	TestSuiterr  r   rx  rz  r   r   r   r    r  r!   r  r   r  r5   exitr+   r+   r+   r,   <module>0   s  	1%%DK : n	f	x$@	IR,	+