
    cf                    (   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlm	Z	 d.dZ
d/dZd0dZd1dZd2dZd3dZd4dZ	 d5d6d#Z G d$ d"          Z G d% d&e          Z G d' d(e          Z G d) d*e          Z G d+ d,e          Zeeeeed-ZdS )7z'Utility methods for docstring checking.    )annotationsN)nodes)Uninferable)utilssstrreturnintc                f    t          |           t          |                     d                    z
  S )zThe number of leading spaces in a string.

    :param str s: input string

    :rtype: int
    :return: number of leading spaces
     )lenlstrip)r   s    Clib/python3.11/site-packages/pylint/extensions/_check_docs_utils.pyspace_indentationr      s'     q66C&&&&    nodenodes.FunctionDef
str | Nonec                    | j         r| j         j        ng }|D ]T}t          |t          j                  r8|j        dk    r-t          |j        t          j                  r|j        j        c S UdS )a  Get the name of the property that the given node is a setter for.

    :param node: The node to get the property name for.
    :type node: str

    :rtype: str or None
    :returns: The name of the property that the node is a setter for,
        or None if one could not be found.
    setterN)
decoratorsr   
isinstance	AttributeattrnameexprNamename)r   r   	decorators      r   get_setters_property_namer      s~     +//A&&rJ ' '	y%/22	'"h.	' 9>5:66	'
 >&&&&4r   nodes.FunctionDef | Nonec                    d}t          |           }t          j        |           }|r9|r7|                    | j                  }|D ]}t          j        |          r|} n|S )a'  Get the property node for the given setter node.

    :param node: The node to get the property for.
    :type node: nodes.FunctionDef

    :rtype: nodes.FunctionDef or None
    :returns: The node relating to the property of the given setter node,
        or None if one could not be found.
    N)r   r   node_frame_classgetattrr   decorated_with_property)r   	property_property_name
class_nodeclass_attrsattrs         r   get_setters_propertyr*   2   s     I-d33M'--J  /9/A/A$)/L/L 	 	D,T22  	 r   return_nodenodes.Returnboolc                `    | j         }|dS t          |t          j                  o|j         du  S )a  Check if a return node returns a value other than None.

    :param return_node: The return node to check.
    :type return_node: astroid.Return

    :rtype: bool
    :return: True if the return node returns a value other than None,
        False otherwise.
    NF)valuer   r   Const)r+   returnss     r   returns_somethingr2   J   s:     G u7EK00JW]d5JKKr   nodes.NodeNG!nodes.NodeNG | Uninferable | Nonec                    t          | j        t          j                  rF| j        j        }t          |t          j        t          j        f          rt          j        |          S d S N)	r   excr   Callfuncr   r   r   
safe_infer)r   r9   s     r   _get_raise_targetr;   \   sR    $(EJ'' *x}dUZ9:: 	*#D)))4r   target	list[str]c                0    d}t          j        ||           S )Nz(\s*,(?:\s*or\s)?\s*|\s+or\s+))resplit)r<   
delimiterss     r   _split_multiple_exc_typesrB   d   s    2J8J'''r   set[nodes.ClassDef]c                    g }t           j        t          j                  r t	          j         j                  }|r|g}n j         j        }|r=t          |t          j                  s#|j        }|rt          |t          j                  #|r_|j        rX	 t          j
        |j                  D ]%}|t          j        ur|                    |           &nL# t          j        $ r Y n:w xY wn4t                     }t          |t          j                  r|g}nt          |t          j                  r|                    t          j                  D ]}|j        
|                    d          |k    r%t	          j        |j                  }|rt	          j        |          rxt          |t          j                  r|                    |           t          |t          j                  r.|                    |                    d          d                    	  fd|D             S # t          j        $ r t1                      cY S w xY w)a  Gets all the possible raised exception types for the given raise node.

    .. note::

        Caught exception types are ignored.

    :param node: The raise node to find exception types for.

    :returns: A list of exception types possibly raised by :param:`node`.
    NT)future	__class__r   c                H    h | ]}t          j        |j                  |S  )r   node_ignores_exceptionr   ).0r7   r   s     r   	<setcomp>z%possible_exc_types.<locals>.<setcomp>   s>     
 
 
/ch??

 
 
r   )r   r7   r   r   r   r:   parentExceptHandlertypeastroidunpack_inferr   appendInferenceErrorr;   ClassDefFunctionDefnodes_of_classReturnr/   frameinherit_from_std_exInstancer#   set)r   
exceptionsinferredhandler	exceptionr<   retvals   `       r   possible_exc_typesra   i   s    J$(EJ'' !G#DH-- 	$"J	 G+ 	%j%2EFF 	%nG  	%j%2EFF 	%  	w| 	!(!5gl!C!C 5 5I (;; 5")))4445 )    #4((fen-- 	G JJ 122 	G,,U\:: G G9 99D9))V3 &sy11 G54S99 G!#u~66 G"))#....#C)9:: G"))#++k*B*B1*EFFF
 
 
 
!
 
 
 	

 !   uus$   ?C C.-C.(H6 6IIdefault	docstringnodes.Const | Nonedefault_type	Docstringc                    dt                              |t                    |           f}t          t          t
          t          fD ]1} ||           }|                                }||d         k    r||f}2|d         S )Nr      )DOCSTRING_TYPESgetrf   SphinxDocstringEpytextDocstringGoogleDocstringNumpyDocstringmatching_sections)rc   re   
best_matchdocstring_typeinstancero   s         r   docstringifyrs      s     _((yAA)LLMJ	 	7 	7 ">),,$6688z!}, 	7+X6Ja=r   c                      e Zd ZU  ej        dej        ej        z            ZdZde	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ddZd dZddZdS )!rf   z=
        For\s+the\s+(other)?\s*parameters\s*,\s+see
        Fr-   supports_yieldsdocrd   r	   Nonec                N    |r|j         nd}|                                | _        d S )N )r/   
expandtabsrv   )selfrv   rc   s      r   __init__zDocstring.__init__   s)    &)1r	''))r   r   c                2    d| j         j         d| j         dS )N<z:'''z'''>)rF   __name__rv   r{   s    r   __repr__zDocstring.__repr__   s"    >4>*>>>>>>r   r
   c                    dS )2Returns the number of matching docstring sections.r   rH   r   s    r   ro   zDocstring.matching_sections   s    qr   set[str]c                    t                      S r6   rZ   r   s    r   r[   zDocstring.exceptions   s    uur   c                    dS NFrH   r   s    r   
has_paramszDocstring.has_params       ur   c                    dS r   rH   r   s    r   has_returnszDocstring.has_returns   r   r   c                    dS r   rH   r   s    r   	has_rtypezDocstring.has_rtype   r   r   c                    dS r   rH   r   s    r   has_property_returnszDocstring.has_property_returns   r   r   c                    dS r   rH   r   s    r   has_property_typezDocstring.has_property_type   r   r   c                    dS r   rH   r   s    r   
has_yieldszDocstring.has_yields   r   r   c                    dS r   rH   r   s    r   has_yields_typezDocstring.has_yields_type   r   r   tuple[set[str], set[str]]c                :    t                      t                      fS r6   r   r   s    r   match_param_docszDocstring.match_param_docs   s    uucee|r   c                D    | j                             | j                  d uS r6   )re_for_parameters_seesearchrv   r   s    r   params_documented_elsewherez%Docstring.params_documented_elsewhere   s     )00::$FFr   N)rv   rd   r	   rw   r	   r   r	   r
   r	   r   r	   r-   r	   r   )r   
__module____qualname__r?   compileXSr   ru   __annotations__r|   r   ro   r[   r   r   r   r   r   r   r   r   r   rH   r   r   rf   rf      s^        &BJ	 	rt	  "O!!!!* * * *? ? ? ?                              G G G G G Gr   c                     e Zd ZdZde dZd                    ee          Zde dZde d	e d
Z e	j
        ee	j        e	j        z            Zde dZ e	j
        ee	j        e	j        z            Zde dZ e	j
        ee	j        e	j        z            Zde dZ e	j
        ee	j        e	j        z            Z e	j
        d          Z e	j
        d          Z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!S )&rk   zt
        [~!.]?               # Optional link style prefix
        \w(?:\w|\.[^\.])*    # Valid python name
        z	
        zw                     # a container type
        [\(\[] [^\n\s]+ [\)\]]        # with the contents of the container
    zv
        (?:{container_type}|{type})
        (?:(?:\s+(?:of|or)\s+|\s*,\s*|\s+\|\s+)(?:{container_type}|{type}))*
    )rN   container_typez?
        (?::\w+:)?                    # optional tag
        `z0`                   # what to reference
        a#  
        :                       # initial colon
        (?:                     # Sphinx keywords
        param|parameter|
        arg|argument|
        key|keyword
        )
        \s+                     # whitespace

        (?:                     # optional type declaration
        (|z)
        \s+
        )?

        ((\\\*{0,2}\w+)|(\w+))  # Parameter name with potential asterisks
        \s*                       # whitespace
        :                         # final colon
        zx
        :type                           # Sphinx keyword
        \s+                             # whitespace
        (z)     # Parameter name
        \s*                             # whitespace
        :                               # final colon
        zo
        :type:                      # Sphinx keyword
        \s+                         # whitespace
        z   # type declaration
        z
        :                               # initial colon
        (?:                             # Sphinx keyword
        raises?|
        except|exception
        )
        \s+                             # whitespace
        (z)     # exception type
        \s*                             # whitespace
        :                               # final colon
        z:rtype:z
:returns?:Fr	   r
   c           
     `   t          d | j                            | j                  | j                            | j                  | j                            | j                  | j                            | j                  | j                            | j                  fD                       S )r   c              3  4   K   | ]}t          |          V  d S r6   r-   rJ   is     r   	<genexpr>z4SphinxDocstring.matching_sections.<locals>.<genexpr>=  <       	
 	
 GG	
 	
 	
 	
 	
 	
r   )sumre_param_in_docstringr   rv   re_raise_in_docstringre_rtype_in_docstringre_returns_in_docstringre_property_type_in_docstringr   s    r   ro   z!SphinxDocstring.matching_sections;  s     	
 	
 *11$(;;*11$(;;*11$(;;,33DH==299$(CC	
 	
 	
 	
 	
 		
r   r   c                    t                      }t          j        | j        | j                  D ]9}|                    d          }|                    t          |                     :|S Nrh   )rZ   r?   finditerr   rv   groupupdaterB   )r{   typesmatch
raise_types       r   r[   zSphinxDocstring.exceptionsH  s_    %%[!;TXFF 	@ 	@EQJLL2:>>????r   r-   c                V    | j         sdS | j                            | j                   d uS r   )rv   r   r   r   s    r   r   zSphinxDocstring.has_paramsQ  s/    x 	5)00::$FFr   c                l    | j         sdS t          | j                            | j                             S r   )rv   r-   r   r   r   s    r   r   zSphinxDocstring.has_returnsW  s2    x 	5D077AABBBr   c                l    | j         sdS t          | j                            | j                             S r   )rv   r-   r   r   r   s    r   r   zSphinxDocstring.has_rtype]  s2    x 	5D.55dh??@@@r   c                n    | j         sdS | j                                                             d           S )NF:)rv   r   
startswithr   s    r   r   z$SphinxDocstring.has_property_returnsc  s6    x 	5 8??$$//4444r   c                l    | j         sdS t          | j                            | j                             S r   )rv   r-   r   r   r   s    r   r   z!SphinxDocstring.has_property_typek  s2    x 	5D6==dhGGHHHr   r   c                   t                      }t                      }t          j        | j        | j                  D ]n}|                    d          }|                    dd          }|                    |           |                    d          }||                    |           o|                    t          j	        | j
        | j                             ||fS )N   \ry   rh   )rZ   r?   r   r   rv   r   replaceaddr   findallre_type_in_docstring)r{   params_with_docparams_with_typer   r   
param_types         r   r   z SphinxDocstring.match_param_docsq  s    %%55[!;TXFF 	+ 	+E;;q>>D<<b))D%%%QJ + $$T***
4+Ddh O OPPP 000r   Nr   r   r   r   )r   r   r   re_typere_simple_container_typeformatre_multiple_simple_typere_xrefre_param_rawr?   r   r   r   r   re_type_rawr   re_property_type_rawr   re_raise_rawr   r   r   ru   ro   r[   r   r   r   r   r   r   rH   r   r   rk   rk      sB       G
 	     
 	%= 	 	 	 
  G
   -  L$ 'BJ|RTBD[AA "  K &2:k24"$;?? 
!  
 %/BJ/CRTBD[$Q$Q!
 "
 
 
L 'BJ|RTBD[AA&BJz22(bj77O
 
 
 
   G G G GC C C CA A A A5 5 5 5I I I I1 1 1 1 1 1r   rk   c                  6   e Zd ZdZ ej        ej                            ddd          ej	        ej
        z            Z ej        ej                            ddd          ej	        ej
        z            Z ej        ej                            ddd          ej	        ej
        z            Z ej        ej                            ddd          ej	        ej
        z            Z ej        dej	        ej
        z            Z ej        d          Zdd	Zd
S )rl   a  Epytext is similar to Sphinx.

    See the docs:
        http://epydoc.sourceforge.net/epytext.html
        http://epydoc.sourceforge.net/fields.html#fields

    It's used in PyCharm:
        https://www.jetbrains.com/help/pycharm/2016.1/creating-documentation-comments.html#d848203e314
        https://www.jetbrains.com/help/pycharm/2016.1/using-docstrings-to-specify-types.html
    r   @rh   z
        @                       # initial "at" symbol
        (?:                     # Epytext keyword
        rtype|returntype
        )
        :                       # final colon
        z
@returns?:r	   r-   c                    | j         sdS |                                 r-| j                                                             d           S dS )NFr   )rv   r   r   r   r   s    r   r   z%EpytextDocstring.has_property_returns  sQ    x 	5 !!## 	9 x((33C8888ur   Nr   )r   r   r   __doc__r?   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   r   r   rl   rl     sN       	 	 'BJ$,,S#q9924"$;  &2:#++Ca88"$+  %/BJ,44S#qAA24"$;% %! 'BJ$,,S#q9924"$;  'BJ	 	rt	 	 )bj77
 
 
 
 
 
r   rl   c                     e Zd Zej        Zej        Zde de dZd                    eee          ZdZ	 e
j        e	                    d          e
j        e
j        z  e
j        z            Z e
j        e	                    d          e
j        e
j        z  e
j        z            Z e
j        d	e d
e
j        e
j        z  e
j        z            Z e
j        e	                    d          e
j        e
j        z  e
j        z            Z e
j        de de
j        e
j        z  e
j        z            Z e
j        e	                    d          e
j        e
j        z  e
j        z            Z e
j        de de
j        e
j        z  e
j        z            Z e
j        de de
j        e
j        z  e
j        z            Z e
j        e	                    d          e
j        e
j        z  e
j        z            ZeZdZd0dZd1dZd1dZd1dZd1dZd1dZd1dZ d1dZ!d2d!Z"d3d#Z#d4d%Z$e%d5d(            Z&e%d6d*            Z'd7d.Z(d/S )8rm   z
        (?:r   zj)       # a container type
        [\(\[] [^\n]+ [\)\]]          # with the contents of the container
    z
        (?:{container_type}|{type}|{xref})
        (?:(?:\s+(?:of|or)\s+|\s*,\s*|\s+\|\s+)(?:{container_type}|{type}|{xref}))*
    )rN   xrefr   zy
        ^([ ]*)   {0} \s*:   \s*$     # Google parameter header
        (  .* )                       # section
        (?:Args|Arguments|Parameters)z&Keyword\s(?:Args|Arguments|Parameters)z}
        \s*  ((?:\\?\*{0,2})?[\w\\]+) # identifier potentially with asterisks or escaped `\`
        \s*  ( [(]
            z
            (?:,\s+optional)?
            [)] )? \s* :                # optional type declaration
        \s*  (.*)                       # beginning of optional description
    Raisesz
        \s*  (zg) \s* :  # identifier
        \s*  (.*)                        # beginning of optional description
    Returns?
        \s* (za:)?        # identifier
        \s* (.*)                          # beginning of description
    z

        ^za:           # identifier
        \s* (.*)                       # Summary line / description
    Yields?Tr	   r
   c                z   t          d | j                            | j                  | j                            | j                  | j                            | j                  | j                            | j                  | j                            |                                           fD                       S )r   c              3  4   K   | ]}t          |          V  d S r6   r   r   s     r   r   z4GoogleDocstring.matching_sections.<locals>.<genexpr>  r   r   )	r   re_param_sectionr   rv   re_raise_sectionre_returns_sectionre_yields_sectionre_property_returns_line_first_liner   s    r   ro   z!GoogleDocstring.matching_sections  s     	
 	
 %,,TX66%,,TX66'..tx88&--dh77-44T5E5E5G5GHH	
 	
 	
 	
 	
 		
r   r-   c                V    | j         sdS | j                            | j                   d uS r   )rv   r   r   r   s    r   r   zGoogleDocstring.has_params  s/    x 	5$++DH55TAAr   c                    | j         sdS |                     | j                  }|D ]9}| j                            |          }|s|                    d          }|r dS :dS NFr   Trv   _parse_sectionr   re_returns_liner   r   )r{   entriesentryr   return_descs        r   r   zGoogleDocstring.has_returns      x 	5%%d&=>> 	 	E(..u55E ++a..K tt ur   c                    | j         sdS |                     | j                  }|D ]9}| j                            |          }|s|                    d          }|r dS :dS NFrh   Tr   )r{   r   r   r   return_types        r   r   zGoogleDocstring.has_rtype/  r   r   c                   |                                  }t          | j                            |          pM| j                            |          p3| j                            |          p| j                            |                     S r6   )r   r-   r   r   r   r   r   )r{   
first_lines     r   r   z$GoogleDocstring.has_property_returns?  s     %%''
!((44 9$++J779&--j999 %,,Z88	
 
 
 	
r   c                    | j         sdS t          | j                            |                                                     S r   )rv   r-   r   r   r   r   s    r   r   z!GoogleDocstring.has_property_typeJ  s<    x 	5D1778H8H8J8JKKLLLr   c                    | j         sdS |                     | j                  }|D ]9}| j                            |          }|s|                    d          }|r dS :dS r   rv   r   r   re_yields_liner   r   )r{   r   r   r   
yield_descs        r   r   zGoogleDocstring.has_yieldsP      x 	5%%d&<== 	 	E'--e44E QJ tt ur   c                    | j         sdS |                     | j                  }|D ]9}| j                            |          }|s|                    d          }|r dS :dS r   r   )r{   r   r   r   
yield_types        r   r   zGoogleDocstring.has_yields_type`  r  r   r   c                6   t                      }|                     | j                  }|D ]m}| j                            |          }|s|                    d          }|                    d          }|r"|                    t          |                     n|S )Nrh   r   )rZ   r   r   re_raise_liner   r   r   rB   )r{   r   r   r   r   exc_typeexc_descs          r   r[   zGoogleDocstring.exceptionsp  s    %%%%d&;<< 	B 	BE&,,U33E {{1~~H{{1~~H B6x@@AAAr   r   c                   t                      }t                      }|                     | j                  }|                    |                     | j                             |D ]}| j                            |          }|s|                    d          }|                    dd          }|                    d          }|                    d          }|r|	                    |           |r|	                    |           ||fS )Nrh   r   ry   r      )
rZ   r   r   extendre_keyword_param_sectionre_param_liner   r   r   r   )	r{   r   r   r   r   r   
param_namer   
param_descs	            r   r   z GoogleDocstring.match_param_docs  s   $'EE%(UU%%d&;<<t**4+HIIJJJ 	0 	0E&,,U33E QJ#++D"55JQJQJ 1 $$Z000 0##J/// 000r   r   c                h    | j                                                             dd          d         S )N
rh   r   )rv   r   r@   r   s    r   r   zGoogleDocstring._first_line  s)    x  &&tQ//22r   section_matchre.Match[str]c                L    t          |                     d                    dz   S r   r   r   r  s    r   min_section_indentz"GoogleDocstring.min_section_indent  s#    =&&q))**Q..r   _c                    dS r   rH   )r  s    r   _is_section_headerz"GoogleDocstring._is_section_header  s	     ur   
section_rere.Pattern[str]r=   c                @   |                     | j                  }|g S |                     |          }g }g }d}|                    d                                          D ]}|                                st          |          }||k     r ne|r|}d}||k    rC|                     |          r nB|r*|                    d	                    |                     g }|                    |           |r(|                    d	                    |                     |S )NTr   Fr  )
r   rv   r  r   
splitlinesstripr   r  rQ   join)	r{   r  r  min_indentationr   r   is_firstlineindentations	            r   r   zGoogleDocstring._parse_section  sJ   "))$(33 	I11-@@!''**5577 	 	D::<< +D11K_,   !"- o- **400 E  NN499U#3#3444ELL 	-NN499U++,,,r   Nr   r   r   r   r   r  r  r	   r
   )r  r   r	   r-   )r  r  r	   r=   ))r   r   r   rk   r   r   re_container_typer   re_multiple_type_re_section_templater?   r   r   r   Mr   r  r  r   r  r   r   r   r   r   ru   ro   r   r   r   r   r   r   r   r[   r   r   staticmethodr  r  r   rH   r   r   rm   rm     s       %G%G   
 	73D 	 	 	 
 "rz##$DEE
rtbd 
  *rz##$MNN
rtbd   
 BJ	 	 	 	 	rtbd
 
M "rz##I..rtbd0B  BJ		 	 	 	rtbd M $##K00"$+2D  !bj		 	 	 	rtbd O  *rz	
	 	 	 	rtbd    #
##J//rt1C  %NO
 
 
 
B B B B        	
 	
 	
 	
M M M M            1 1 1 143 3 3 3 / / / \/    \
% % % % % %r   rm   c                  .   e Zd ZdZ ej        e                    d          ej        ej        z  ej	        z            Z
dZ ej        dej         de dej        ej        z            Z ej        e                    d          ej        ej        z  ej	        z            Z ej        dej         d	ej        ej        z  ej	        z            Z ej        e                    d
          ej        ej        z  ej	        z            Z ej        dej         dej        ej        z  ej	        z            Z ej        e                    d          ej        ej        z  ej	        z            ZeZdZddZedd            Zedd            ZdS )rn   z
        ^([ ]*)   {0}   \s*?$          # Numpy parameters header
        \s*     [-=]+   \s*?$          # underline
        (  .* )                        # section
    r   z.((['"]\w+\s*['"])|(\d+)|(True)|(False)|(None))z
        \s*  (?P<param_name>\*{0,2}\w+)(\s?(:|\n)) # identifier with potential asterisks
        \s*
        (?P<param_type>
         (
          (z)      # default type declaration
          (,\s+optional)?                           # optional 'optional' indication
         )?
         (
          {(z,?\s*)+}            # set of default values
         )?
         (?:$|\n)
        )?
        (
         \s* (?P<param_desc>.*)                     # optional description
        )?
    r   r   z^)$   # type declaration
        \s* (.*)                           # optional description
    r   z6
        \s* (?:\w+\s+:\s+)? # optional name
        (zc)$   # type declaration
        \s* (.*)                                # optional description
    r   Tr	   r   c                   t                      }t                      }|                     | j                  }|                    |                     | j                             |D ]}| j                            |          }|st          j        d|          }|r-|                    d          }|                    d          }d}	n^|                    d          }|                    d          }	|                    d          }|	t          j        d|          r|}	|s|	r|	}|	r|	                    |           |r|	                    |           ||fS )zIMatches parameter documentation section to parameter documentation rules.z\s*(\*{0,2}\w+)\s*:?\n\s*\w*$r  r   Nr  z\s*(\*{0,2}\w+)\s*:.+$)
rZ   r   r   r  r  r  r   r?   r   r   )
r{   r   r   r   r   r   re_only_descr  r  r   s
             r   r   zNumpyDocstring.match_param_docs  st   %%55%%d&;<<t**4+HIIJJJ 	0 	0E&,,U33E  8$DeLLL ,"[[66
"[[66
!

"[[66
"[[66
"[[66
  ,"(3Le*T*T ,!+J " ,j ,!+J 1 $$Z000 0##J/// 000r   r  r  r
   c                F    t          |                     d                    S r   r  r  s    r   r  z!NumpyDocstring.min_section_indent=  s    =&&q))***r   r#  r   r-   c                F    t          t          j        d|                     S )Nz\s*-+$)r-   r?   r   )r#  s    r   r  z!NumpyDocstring._is_section_headerA  s    BHY--...r   Nr   r%  )r#  r   r	   r-   )r   r   r   r(  r?   r   r   r   r   r)  r   re_default_valuerm   r'  r  r   r   r  r   r   r   r   ru   r   r*  r  r  rH   r   r   rn   rn     s9        "rz##$DEE
rtbd 
 MBJ	
 ,	 	 	 	 	" 	rt% M* "rz##I..rtbd0B  BJ	%	 	 	 	rtbd M $##K00"$+2D  !bj	

*	 	 	
 	rtbd O #
##J//rt1C  %NO(1 (1 (1 (1T + + + \+ / / / \/ / /r   rn   )sphinxepytextgooglenumpyrb   )r   r   r	   r
   )r   r   r	   r   )r   r   r	   r    )r+   r,   r	   r-   )r   r3   r	   r4   )r<   r   r	   r=   )r   r3   r	   rC   )rb   )rc   rd   re   r   r	   rf   )r   
__future__r   r?   rO   r   astroid.utilr   pylint.checkersr   r   r   r*   r2   r;   rB   ra   rs   rf   rk   rl   rm   rn   ri   rH   r   r   <module>r8     s3  
 . - " " " " " " 				        $ $ $ $ $ $ ! ! ! ! ! !' ' ' '   *   0L L L L$   ( ( ( (
6 6 6 6t 8A    $6G 6G 6G 6G 6G 6G 6G 6GrR1 R1 R1 R1 R1i R1 R1 R1j3 3 3 3 3 3 3 3lT T T T Ti T T Tnt/ t/ t/ t/ t/_ t/ t/ t/p   r   