
    -PhMh                        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 ddlmZmZmZmZmZ ddlmZ g dZ ej        d                    d	                    e                    ej        ej        z            Zg d
Zi 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+d,i d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRZdSZ ej        dT          ZdU Z  ej!        dVW          	 dddYeej"                 dZe#d[ee$ee#         f         fd\            Z%d]ee#         d[ee#         fd^Z&d_ Z' G d` da          Z(db Z)dedcZ*dS )fz
Analyze docstrings to detect errors.

Call ``validate(object_name_to_validate)`` to get a dictionary
with all the detected errors.
    N)deepcopy)AnyDictListOptionalSet   )get_doc_object)versionaddedversionchanged
deprecatedz^\s*\.\. ({})(?!::)|)
Parameters
AttributesMethodsReturnsYieldsOther ParametersRaisesWarnsWarningsSee AlsoNotes
ReferencesExamplesGL01zDocstring text (summary) should start in the line immediately after the opening quotes (not in the same line, or leaving a blank line in between)GL02zClosing quotes should be placed in the line after the last text in the docstring (do not close the quotes in the same line as the text, or leave a blank line between the last text and the quotes)GL03zDouble line break found; please use only one blank line to separate sections or paragraphs, and do not leave blank lines at the end of docstringsGL05zNTabs found at the start of line "{line_with_tabs}", please use whitespace onlyGL06zKFound unknown section "{section}". Allowed sections are: {allowed_sections}GL07zESections are in the wrong order. Correct order is: {correct_sections}GL08z$The object does not have a docstringGL09z3Deprecation warning should precede extended summaryGL10z;reST directives {directives} must be followed by two colonsSS01zgNo summary found (a short summary in a single line should be present at the beginning of the docstring)SS02z,Summary does not start with a capital letterSS03z"Summary does not end with a periodSS04z$Summary contains heading whitespacesSS05zfSummary must start with infinitive verb, not third person (e.g. use "Generate" instead of "Generates")SS06z#Summary should fit in a single lineES01No extended summary foundPR01z*Parameters {missing_params} not documentedPR02z#Unknown parameters {unknown_params}PR03zPWrong parameters order. Actual: {actual_params}. Documented: {documented_params}PR04z$Parameter "{param_name}" has no typePR05z8Parameter "{param_name}" type should not finish with "."PR06zQParameter "{param_name}" type should use "{right_type}" instead of "{wrong_type}"PR07z+Parameter "{param_name}" has no descriptionPR08zGParameter "{param_name}" description should start with a capital letterPR09z;Parameter "{param_name}" description should finish with "."PR10zaParameter "{param_name}" requires a space before the colon separating the parameter name and typeRT01zNo Returns section foundRT02zmThe first line of the Returns section should contain only the type, unless multiple values are being returnedRT03zReturn value has no descriptionRT04z;Return value description should start with a capital letterRT05z/Return value description should finish with "."YD01zNo Yields section foundSA01zSee Also section not foundSA02zNMissing period at end of description for See Also "{reference_name}" referencezKDescription should be capitalized for See Also "{reference_name}" referencez=Missing description for See Also "{reference_name}" referencezNo examples section found)SA03SA04EX01) z* z- z!(?:.* numpydoc ignore[=|:] ?)(.+)c                 T    t          | d          r| j        } t          | d          | S )zGIteratively traverse obj.__wrapped__ until first non-wrapped obj found.__wrapped__)hasattrrD   objs    Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpydoc/validate.py_unwraprI   r   s4    
#}
%
% o #}
%
% J    i  maxsizeutf-8filepathencodingreturnc                    i }	 t          | |          }n# t          t          f$ r |cY S w xY w|5  d}ddg}t          j        |j                  D ]}|j        t          j        k    r|j        |v r|j	        d         }|j        t          j
        k    rNt          j        t          |j                  }|r-|                    d                              d          }|||<   	 ddd           n# 1 swxY w Y   |S )a-  
    Extract inline comments indicating certain validation checks should be ignored.

    Parameters
    ----------
    filepath : os.PathLike
        Path to the file being inspected.

    Returns
    -------
    dict[int, list[str]]
        Mapping of line number to a list of checks to ignore.
    )rO   r	   defclassr   ,N)openOSError	TypeErrortokenizegenerate_tokensreadlinetypeNAMEstringstartCOMMENTrematchIGNORE_COMMENT_PATTERNgroupsplit)	rN   rO   numpydoc_ignore_commentsfilelast_declarationdeclarationstokenra   ruless	            rH   "extract_ignore_validation_commentsrk   ~   su   $  "(Hx000Y ( ( (''''(	 
G 
Gw'-dm<< 	G 	GEzX]**u||/K/K#(;q> zX---!7FF G!KKNN0055EAF,-=>	G
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G 
G $#s    ,,B1C//C36C3validation_checksc                     t          t                                                    }d| v rt          |           }||z
  } | |z
  }|rt	          d|           | S )a  
    Get the set of validation checks to report on.

    Parameters
    ----------
    validation_checks : set[str]
        A set of validation checks to report on. If the set is ``{"all"}``,
        all checks will be reported. If the set contains just specific checks,
        only those will be reported on. If the set contains both ``"all"`` and
        specific checks, all checks except those included in the set will be
        reported on.

    Returns
    -------
    set[str]
        The set of validation checks to report on.
    allzLUnrecognized validation code(s) in numpydoc_validation_checks config value: )set
ERROR_MSGSkeysr   
ValueError)rl   valid_error_codesblockinvalid_error_codess       rH   get_validation_checksrv      s    $ JOO--..!!!*++-5 ,.?? 
303 3
 
 	

 rJ   c                 4    | t          |          j        di |fS )a   
    Return a tuple with the error code and the message with variables replaced.

    This is syntactic sugar so instead of:
    - `('PR02', ERROR_MSGS['PR02'].format(doctest_log=log))`

    We can simply use:
    - `error('PR02', doctest_log=log)`

    Parameters
    ----------
    code : str
        Error code.
    **kwargs
        Values for the variables in the error messages

    Returns
    -------
    code : str
        Error code.
    message : str
        Error message with variables replaced.
     )rp   format)codekwargss     rH   errorr|      s%    0 D!(2262222rJ   c                      e Zd Zd Zed             Zed             Zed             Zed             Z	ed             Z
ed             Ze ej        d	          d
efd                        Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zed             Zed             Zed             Zed             Zed             Zed             Zd Zed             Z ed             Z!ed             Z"ed             Z#ed              Z$ed!             Z%ed"             Z&d#S )$	Validatorc                     || _         | j         j        | _        t          j        | j                  | _        | j        j        pd| _        t          j	        | j                  | _
        d S N )doc_objrG   inspectunwrapcode_obj__doc__raw_docpydocgetdoc	clean_doc)self
doc_objects     rH   __init__zValidator.__init__   sO    8=tx00x'-2dh//rJ   c                 X    d                     | j        j        | j        j        g          S )N.)joinrG   
__module____name__r   s    rH   namezValidator.name   s#    xx,dh.?@AAArJ   c                 "   t          |                     d          dz             D ]@}|                     d|          ^}}	 t          j        |          } n## t
          $ r Y =w xY wt          d|  d          |D ]}t          ||          }|S )a  
        Import Python object from its name as string.

        Parameters
        ----------
        name : str
            Object name to import (e.g. pandas.Series.str.upper)

        Returns
        -------
        object
            Python object that can be a class, method, function...

        Examples
        --------
        >>> Validator._load_obj("datetime.datetime")
        <class 'datetime.datetime'>
        r   r	   z No module can be imported from "")rangecountrsplit	importlibimport_moduleImportErrorgetattr)r   maxsplitmodule
func_partsrG   parts         rH   	_load_objzValidator._load_obj   s    ( djjoo122 		J 		JH"&++c8"<"<FZ-f55     
 HHHHIII 	% 	%D#t$$CC
s   A
A$#A$c                 4    t          | j                  j        S N)r[   rG   r   r   s    rH   r[   zValidator.type  s    DH~~&&rJ   c                 4    t          j        | j                  S r   )r   
isfunctionrG   r   s    rH   is_function_or_methodzValidator.is_function_or_method  s    !$(+++rJ   c                 N    t          j        t          | j                            S r   )r   isgeneratorfunctionrI   rG   r   s    rH   is_generator_functionzValidator.is_generator_function  s    *748+<+<===rJ   c                 J   	 t          | j        t                    rt          j        | j        j                  }nWt          | j        t          j                  rt          j        | j        j                  }nt          j        | j                  }|S # t          $ r Y dS w xY w)zX
        File name where the object is implemented (e.g. pandas/core/frame.py).
        N)

isinstancer   propertyr   getsourcefilefget	functoolscached_propertyfuncrW   )r   fnames     rH   source_file_namezValidator.source_file_name  s    
	$-22 =-dm.@AADM9+DEE =-dm.@AA-dm<< L  	 	 	 DD		s   BB 
B"!B"i  rK   rG   c                 *    t          j        |           S r   )r   getsourcelinesrF   s    rH   _getsourcelineszValidator._getsourcelines2  s     %c***rJ   c                    	 t          | j        t                    r |                     | j        j                  }nYt          | j        t
          j                  r |                     | j        j                  }n|                     | j                  }t          d t          d |d         D                       D                       }|d         |z   S # t          t          f$ r Y dS w xY w)zI
        Number of line where the object is defined in its file.
        c              3   $   K   | ]\  }}||V  d S r   rx   ).0ixs      rH   	<genexpr>z1Validator.source_file_def_line.<locals>.<genexpr>E  s8        Aq =	  !=== rJ   c              3   @   K   | ]}t          j        d |          V  dS )z^ *(def|class) N)r`   ra   )r   ss     rH   r   z1Validator.source_file_def_line.<locals>.<genexpr>G  s@       & &78BH.22& & & & & &rJ   r   N)r   r   r   r   r   r   r   r   next	enumeraterV   rW   )r   sourcelinesdef_lines      rH   source_file_def_linezValidator.source_file_def_line7  s   
	$-22 B"224=3EFFDM9+DEE B"224=3EFF"224=AA   % & &<GN& & &      H r?X--# 	 	 	 DD		s   CC C+*C+c                     d }| j         rCt          | j                             d                    D ]\  }}|                                r n|S N
)r   r   rd   stripr   r   rows      rH   start_blank_lineszValidator.start_blank_linesS  s[    < 	#DL$6$6t$<$<==  399;; ErJ   c                     d }| j         rPt          t          | j                             d                              D ]\  }}|                                r n|S r   )r   r   reversedrd   r   r   s      rH   end_blank_lineszValidator.end_blank_lines\  sc    < 	#HT\-?-?-E-E$F$FGG  399;; ErJ   c                     d}| j                             d          D ]/}|s|                                s dS |                                }0dS )NTr   F)r   rd   r   )r   prevr   s      rH   double_blank_lineszValidator.double_blank_linese  sX    <%%d++ 	 	C 		 tt99;;DDurJ   c                    g }| j         j                                         | j         j                                        s| j                                         }t          |          dk    rat          |d                   t          |d                   k    r5t          |d                   dhk    r|                    |d                    | j         j                                        |S )Nr	   r   -)r   _docreseteof_read_to_next_sectionlenro   append)r   sectionscontents      rH   section_titleszValidator.section_titlesn  s    (-##%% 	,h4466GGq  
OOs71:66
OOu,,
+++ (-##%% 	, rJ   c                 B    d                     | j        d                   S )NrB   Summary)r   r   r   s    rH   summaryzValidator.summary|  s    xx+,,,rJ   c                 6    t          | j        d                   S )Nr   )r   r   r   s    rH   num_summary_lineszValidator.num_summary_lines  s    48I&'''rJ   c                     | j         d         s>t          | j         d                   dk    r d                    | j         d                   S d                    | j         d                   S )NzExtended Summaryr   r	   rB   )r   r   r   r   s    rH   extended_summaryzValidator.extended_summary  s^    x*+ 	1DHY4G0H0H10L0L88DHY/000xx!34555rJ   c                     t          j                    }|D ]5}| j        |         D ]%\  }}}|                    d          D ]	}||f||<   
&6|S )N, )collectionsOrderedDictr   rd   )r   r   
parameterssectionnamestype_descr   s           rH   _doc_parameterszValidator._doc_parameters  sz     ,..
 	5 	5G&*hw&7 5 5"ud!KK-- 5 5D(-t}Jt$$55 rJ   c                 .    |                      dg          S )Nr   r   r   s    rH   doc_parameterszValidator.doc_parameters  s    ##\N333rJ   c                 .    |                      dg          S )Nr   r   r   s    rH   doc_other_parameterszValidator.doc_other_parameters  s    ##%7$8999rJ   c                 0    |                      ddg          S )Nr   r   r   r   s    rH   doc_all_parameterszValidator.doc_all_parameters  s    ##\3E$FGGGrJ   c                    d t          j        | j                  rOt          | j        d          r:| j                            d          d         | j        j        v rt                      S 	 t          j        | j                  n%# t          t          f$ r t                      cY S w xY wt          fdj        D                       }|r|d         dv r
|dd          S |S )	Nc                     |j         t          j        j        k    rd|  S |j         t          j        j        k    rd|  S | S )zD
            Add stars to *args and **kwargs parameters
            *z**)kindr   	ParameterVAR_POSITIONALVAR_KEYWORD)
param_nameinfos     rH   	add_starsz1Validator.signature_parameters.<locals>.add_stars  sL     yG-<<<':'''g/;;;(J(((!!rJ   
_accessorsr   r   c              3   F   K   | ]} |j         |                   V  d S r   )r   )r   	parameterr   sigs     rH   r   z1Validator.signature_parameters.<locals>.<genexpr>  sJ       
 
 Ii	!:;;
 
 
 
 
 
rJ   r   )r   clsr	   )r   isclassrG   rE   r   rd   r  tuple	signaturerW   rr   r   )r   paramsr   r  s     @@rH   signature_parameterszValidator.signature_parameters  s   		" 		" 		" ?48$$ 	tx.. 	$$R(DH,??? ww	#DH--CC:& 	 	 	 77NNN	
  
 
 
 
 
 ^
 
 
 
 
  	fQi?22!"":s   /B	 	B+*B+c                    g }| j         }t          d | j        D                       }t          |          t          |          z
  }|r1|                    t          dt          |                               t          |          t          |          z
  }|r1|                    t          dt          |                               |s1|s/||k    r)|s|r%|                    t          d||                     |S )Nc              3   B   K   | ]}|                     d d          V  dS )\r   N)replace)r   params     rH   r   z1Validator.parameter_mismatches.<locals>.<genexpr>  s0      XXu5==r22XXXXXXrJ   r-   )missing_paramsr.   )unknown_paramsr/   )actual_paramsdocumented_params)r
  r  r   ro   r   r|   str)r   errssignature_params
all_paramsmissingextras         rH   parameter_mismatcheszValidator.parameter_mismatches  s#   4XX@WXXXXX
&''#j//9 	DKKfS\\BBBCCCJ#&6"7"77 	BKKfSZZ@@@AAA
	
	 !J..) /2< / KK*:j     rJ   c                 @    t                               | j                  S r   )DIRECTIVE_PATTERNfindallr   r   s    rH   directives_without_two_colonsz'Validator.directives_without_two_colons  s     ((666rJ   c                 (    | j         |         d         S )Nr   )r   )r   r  s     rH   parameter_typezValidator.parameter_type  s    &u-a00rJ   c                     t          j                    }| j        d         D ]%\  }}|D ]\  }}d                    |          ||<   &|S )Nr   r   )r   r   r   r   )r   resultfuncsr   r   _s         rH   see_alsozValidator.see_also  s^    (**8J/ 	- 	-KE4  - -a!wwt}}t- rJ   c                     | j         d         S )Nr   r   r   s    rH   exampleszValidator.examples  s    x
##rJ   c                     | j         d         S )Nr   r'  r   s    rH   returnszValidator.returns  s    x	""rJ   c                     | j         d         S )Nr   r'  r   s    rH   yieldszValidator.yields  s    x!!rJ   c                     	 t          j        | j                  }n# t          $ r Y dS w xY wt	          j        |          S r   )r   	getsourcerG   rW   textwrapdedent)r   sources     rH   method_sourcezValidator.method_source  sM    	&tx00FF 	 	 	22	v&&&s    
**c                     fdt          j        | j                  j        }|rg |d                   }d |D             }t	          |          D ]+\  }}t          |t           j                  r|j        d||<   ,t          |          S dS )a  
        Check if the docstrings method can return something.

        Bare returns, returns valued None and returns from nested functions are
        disconsidered.

        Returns
        -------
        bool
            Whether the docstrings method can return something.
        c                     t          | t          j                  r| gng }t          j        |           D ]<}t          |t          j                  s  |          }|                    |           =|S r   )r   astReturniter_child_nodesFunctionDefextend)noder*  childchild_returns#get_returns_not_on_nested_functionss       rH   r=  zOValidator.method_returns_something.<locals>.get_returns_not_on_nested_functions  su     *4 < <Dtff"G-d33 2 2!%99 2$G$G$N$NMNN=111NrJ   r   c                     g | ]	}|j         
S rx   )value)r   rs     rH   
<listcomp>z6Validator.method_returns_something.<locals>.<listcomp>  s    666QW666rJ   NF)	r5  parser2  bodyr   r   Constantr?  any)r   treer*  return_valuesr   vr=  s         @rH   method_returns_somethingz"Validator.method_returns_something  s    	 	 	 	 	 y+,,1 		99$q'BBG66g666M!-00 , ,1a.. ,17?'+M!$}%%%5rJ   c                 $    d| j         | j        z   v S )N.. deprecated:: )r   r   r   s    rH   r   zValidator.deprecated   s    !dlT5J&JKKrJ   N)'r   r   __qualname__r   r   r   staticmethodr   r[   r   r   r   r   	lru_cacher   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r   r%  r(  r*  r,  r2  rI  r   rx   rJ   rH   r~   r~      sj       0 0 0 B B XB     \ D ' ' X' , , X, > > X>   X* Y&&&+S + + + '& \+   X6   X   X   X   X - - X- ( ( X( 6 6 X6
   4 4 X4 : : X: H H XH   XB   X0 7 7 X71 1 1   X $ $ X$ # # X# " " X" ' ' X'     X D L L XL L LrJ   r~   c                    d                     |           } t          D ];}d| }|| v r0| d |                     |                                       d          } <|                     d          } t                      }d                     |           s!|                    t          |fi |           n| d         d                                         r@| d         d         	                                s |                    t          |fi |           | d         
                    d          s@| d                             t                    s |                    t          |fi |           |S )Nr   z.. r   r   r   r   )r   
DIRECTIVESindexrstriprd   listr   r|   isalphaisupperendswith
startswithIGNORE_STARTS)r   code_no_desccode_no_uppercode_no_periodr{   	directivefull_directiver  s           rH   _check_descr^  %  sk   99T??D C C	*y**T!!4$**^4445<<TBBD::dD66D774== 9E,11&11222271: 	8Q
(:(:(<(< 	8KKm66v66777 Bx  %% 	9d2h.A.A-.P.P 	9KKn7777888KrJ   c                    |sZt          | t                    r5t          t          t                              |                               nt          |           n
 |d@d| i|t          j                                      j        pdg           g }j	        sIdvr"|
                    t          d                     j        j        j        j        j        |ddS j        dk    r+dj	        v r"|
                    t          d                     j        dk    r+dj	        v r"|
                    t          d                     j        r"|
                    t          d	                     j	                                        D ]M}t'          j        d
|          r6|
                    t          d|                                                     Nd j        D             }|D ]?}|
                    t          d|d                    t0                                         @fdt0          D             }|j        k    r7|
                    t          dd                    |                               j        r<j                            d          s"|
                    t          d                     j        }|r$|
                    t          d|                     j        s$|
                    t          d                     nXj        d                                         rAj        d                                         s"|
                    t          d                     j        d         dk    r"|
                    t          d                     j        j                                        k    r#|
                    t          d                     nSj        rLj                             d          d         d         d k    r"|
                    t          d!                     j!        dk    r"|
                    t          d"                     j        s|
                    d#           |j"        z  }j#        $                                D ]\  }	}
|	                    d$          s@%                    |	          sgd%|	v r>|
                    t          d&|	                     d%          d         '                     n|
                    t          d(|	'                     nĉ%                    |	          d         dk    r$|
                    t          d)|	'                     d*%                    |	          v rg d+}|D ]b\  }}|tM          t'          j         d,%                    |	                              v r&|
                    t          d-|	||.                     c|'                    tQ          |
d         d/d0d1|	'                     j        rj)        s*j*        r"|
                    t          d2                     ntW          j)                  dk    r4j)        d         j,        r"|
                    t          d3                     j)        D ]+\  }}}|'                    tQ          |d4d5d6                     ,j-        s)j.        r"|
                    t          d7                     j/        s#|
                    t          d8                     n׉j/        $                                D ]\  }}|r|0                    d          s$|
                    t          d9|:                     |d                                         r>|d                                         s$|
                    t          d;|:                     |
                    t          d<|:                     j1        s"|
                    t          d=                     fd>|D             }j        j        j        j        j        |d?S )Aa7  
    Validate the docstring.

    Parameters
    ----------
    obj_name : str
        The name of the object whose docstring will be evaluated, e.g.
        'pandas.read_csv'. The string must include the full, unabbreviated
        package/module names, i.e. 'pandas.read_csv', not 'pd.read_csv' or
        'read_csv'.
    validator_cls : Validator, optional
        The Validator class to use. By default, :class:`Validator` will be used.
    **validator_kwargs
        Keyword arguments to pass to ``validator_cls`` upon initialization.
        Note that ``obj_name`` will be passed as a named argument as well.

    Returns
    -------
    dict
        A dictionary containing all the information obtained from validating
        the docstring.

    Notes
    -----
    The errors codes are defined as:
    - First two characters: Section where the error happens:
       * GL: Global (no section, like section ordering errors)
       * SS: Short summary
       * ES: Extended summary
       * PR: Parameters
       * RT: Returns
       * YD: Yields
       * RS: Raises
       * WN: Warns
       * SA: See Also
       * NT: Notes
       * RF: References
       * EX: Examples
    - Last two characters: Numeric error code inside the section

    For example, PR02 is the second codified error in the Parameters section
    (which in this case is assigned to the error when unknown parameters are documented).

    The error codes, their corresponding error messages, and the details on how
    they are validated, are not documented more than in the source code of this
    function.
    obj_namer	   r"   r   )r[   	docstringr   rf   	file_lineerrorsexamples_errorsr   r   r   r   z^ *	r   )line_with_tabsc                 $    g | ]}|t           v|S rx   )ALLOWED_SECTIONS)r   r   s     rH   rA  zvalidate.<locals>.<listcomp>  s*       WDT5T5T5T5T5TrJ   r    r   )r   allowed_sectionsc                 &    g | ]}|j         v |S rx   )r   )r   r   r   s     rH   rA  zvalidate.<locals>.<listcomp>  s-       7c>P3P3P3P3P3PrJ   r!   )correct_sectionsrK  r#   r$   )
directivesr%   r   r&   r   r   r'   r(   rB   r   r)   r*   )r+   r,   r   :r6   )r   r0   r1   {))integerint)booleanbool)r]   r  z\Wr2   )r   
right_type
wrong_typer3   r4   r5   r7   r8   r9   r:   r;   r<   r=   r>   )reference_namer?   r@   rA   c                 (    g | ]}|d          v|S )r   rx   )r   errignore_validation_commentss     rH   rA  zvalidate.<locals>.<listcomp>  s(    LLLC3q61K#K#KC#K#K#KrJ   )r[   ra  r   rf   rb  rc  rx   )2r   r  r~   r
   r   rk   r   getr   r   r   r|   r[   r   r   r   r   r   
splitlinesr`   ra   lstripr   r   rg  r   rW  r  r   rT  rU  r   rd   r   r  r   itemsr   ro   r9  r^  r*  rI  r   r   r,  r   r%  rV  r(  )r`  validator_clsvalidator_kwargsr  lineunexpected_sectionsr   correct_orderr  r  	kind_desccommon_type_errorsrs  rr  name_or_typer   r   rel_namerel_descr   rw  s                      @@rH   validater  <  s   `  Ch$$ 	&N9+>+>x+H+HIIJJCCH%%CCmBBXB1ABB "D" "	c#
"
'a,,  D; 
333KKf&&&H.(1!
 
 	
 !!dck&9&9E&MM"""
aDCK$7$7E&MM"""
 #E&MM"""&&(( E E8GT"" 	EKKfT[[]]CCCDDD "1   ' 
 
&'DIIFV<W<WXXX	
 	
 	
 	
   /  M ***E&499]3K3KLLLMMM
~ #c2==>PQQ #E&MM"""$'$E!$ ME&-JKKKLLL; 'E&MM"""";q>!!## 	'CKN,B,B,D,D 	'KKf&&&;r?c!!KKf&&&;#+,,....KKf&&&&& 	'3;+<+<S+A+A!+DR+HC+O+OKKf&&& 1$$KKf&&& ;9:::
 	C$$D288:: Y Yy$$ 	%%e,, %<<KKfS9I9I!9L M M MNNNNKKf ? ? ?@@@@%%e,,R0C77KKf ? ? ?@@@ #,,U3333& & &"
 /A 	 	*J
!S%9K9KE9R9R)S)S%T%TTT! &+0+5+5	     	K	!fffQVWWWXXXX
  '{ 	G+ +E&MM***3;1$$Q)<$E&MM***-0[ G G)eTKfffEEFFFFz 	'c7 	'KKf&&&< 
DE&MM"""""%,"4"4"6"6 	D 	DHh D((-- HKKfX F F FGGGA;&&(( H!1D1D1F1F HKKfX F F FGGGE&BBBCCCC< #E&MM"""LLLL4LLLD ]n$-  rJ   )rM   r   )+r   r5  r   r   r   r   osr   r`   r/  rX   copyr   typingr   r   r   r   r   	docscraper
   rP  compilery   r   
IGNORECASE	MULTILINEr  rg  rp   rX  rb   rI   rN  PathLiker  ro  rk   rv   r|   r~   r^  r  rx   rJ   rH   <module>r     st    


              				  				         1 1 1 1 1 1 1 1 1 1 1 1 1 1 % % % % % %===
BJ!!#((:"6"6779U     $8
 8  	8  8  8  8 S8  2!8" A#8$ I%8&  1'8* :+8, 0-8. 2/80  3184 1586 '788 898 8: 1;8<  &=8@ 2A8B FC8D  E8H 9I8J  K8N IO8P  -Q8T &U8V  6W8Z -[8\ I]8^ =_8` %a8b (c8d  #e8 8h#K'o8 8 8
| " $$GHH    T""" !$ !$r{#!$!$ 
#tCy.!$ !$ !$ #"!$HSX #c(    D3 3 36BL BL BL BL BL BL BL BLJ
  .E E E E E ErJ   