§
    ÷yIf9t  ã                  ó\  — d Z ddlmZ ddlZddlZddlm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d=d„Zd>d„Zd?d„Zd@d„ZdAd„ZdBd„ZdCd$„ZdDd(„ZdEd*„Z	 dFdGd0„Z G d1„ d/¦  «        Z G d2„ d3e¦  «        Z G d4„ d5e¦  «        Z G d6„ d7e¦  «        Z G d8„ d9e¦  «        Zeeeeed:œZdS )Hz'Utility methods for docstring checking.é    )ÚannotationsN)ÚIterable)Únodes)ÚUninferableBase)ÚutilsÚsÚstrÚreturnÚintc                óf   — t          | ¦  «        t          |                      d¦  «        ¦  «        z
  S )z…The number of leading spaces in a string.

    :param str s: input string

    :rtype: int
    :return: number of leading spaces
    ú )ÚlenÚlstrip)r   s    úW/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/_check_docs_utils.pyÚspace_indentationr      s'   € õ ˆq‰6Œ6•C˜Ÿš ™œÑ&Ô&Ñ&Ð&ó    Ú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       sz   € ð +/¬/ÐA�”Ô&Ð&¸r€JØð 'ð 'ˆ	å�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+   4   sƒ   € ð €Iå-¨dÑ3Ô3€MÝÔ'¨Ñ-Ô-€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_somethingr3   L   s7   € ð Ô€Gà€Øˆuå˜7¥E¤KÑ0Ô0ÐJ°W´]ÀdÐ5JÐKÐKr   únodes.NodeNGú%nodes.NodeNG | UninferableBase | 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   r:   s     r   Ú_get_raise_targetr<   ^   sR   € Ý�$”(�EœJÑ'Ô'ð *ØŒxŒ}ˆÝ�d�UœZ­¬Ð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_typesrC   f   s   € Ø2€JÝŒ8�J Ñ'Ô'Ð'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        ¦  «        ¯#|rf|j        r_	 t          j
        |j        ¦  «        D ],}t          |t          ¦  «        s|                     |¦  «         Œ-�nJ# t          j        $ r Y �n8w xY w�n2t          ‰ ¦  «        }t          |t          j        ¦  «        r|g}�nt          |t          j        ¦  «        rê|                     t          j        ¦  «        D ]Ê}|j        €Œ
|                     ¦   «         |k    rŒ#t	          j        |j        ¦  «        }|rŒt	          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`.
    NÚ	__class__r   c                óH   •— h | ]}t          j        ‰|j        ¦  «        °|’ŒS © )r   Únode_ignores_exceptionr   )Ú.0r8   r   s     €r   ú	<setcomp>z%possible_exc_types.<locals>.<setcomp>›   s>   ø€ ð 
ð 
ð 
àÝÔ/°°c´hÑ?Ô?ð
Øð
ð 
ð 
r   )r   r8   r   r   r   r;   ÚparentÚExceptHandlerÚtypeÚastroidÚunpack_inferr   ÚappendÚInferenceErrorr<   ÚClassDefÚFunctionDefÚnodes_of_classÚReturnr0   ÚframeÚinherit_from_std_exÚInstancer$   Úset)r   Ú
exceptionsÚinferredÚhandlerÚ	exceptionr=   ÚretÚvals   `       r   Úpossible_exc_typesra   k   s‘  ø€ ð €JÝ�$”(�EœJÑ'Ô'ð !GÝÔ# D¤HÑ-Ô-ˆØð 	$Ø"˜ˆJùØ	ŒÐ	Ø”+ˆØð 	%�j¨µ%Ô2EÑFÔFð 	%Ø”nˆGð ð 	%�j¨µ%Ô2EÑFÔFð 	%ð ð 	�w”|ð 	ðÝ!(Ô!5°g´lÑ!CÔ!Cð 5ð 5�IÝ% iµÑAÔAð 5Ø"×)Ò)¨)Ñ4Ô4Ð4øñ5øõ Ô)ð ð ð Ø‘ðøøøùõ # 4Ñ(Ô(ˆÝ�f�eœnÑ-Ô-ð 	GØ ˜ˆJ‰JÝ˜¥Ô 1Ñ2Ô2ð 	GØ×,Ò,­U¬\Ñ:Ô:ð Gð G�Ø”9Ð$ØØ—9’9‘;”; &Ò(Ð(àåÔ& s¤yÑ1Ô1�Øð G�5Ô4°SÑ9Ô9ð GÝ! #¥u¤~Ñ6Ô6ð GØ"×)Ò)¨#Ñ.Ô.Ð.Ð.Ý# C­Ô)9Ñ:Ô:ð GØ"×)Ò)¨#¯+ª+°kÑ*BÔ*BÀ1Ô*EÑFÔFÐFøðð
ð 
ð 
ð 
à!ð
ñ 
ô 
ð 	
øõ
 Ô!ð ð ð Ý‰uŒuˆˆˆðøøøs%   ÂAC" Ã"C5Ã4C5È-H; È;IÉIc                óV   — t          | t          j        ¦  «        o| j        t          k    S r7   )r   r   r1   r0   ÚEllipsis)r   s    r   Ú_is_ellipsisrd   ¤   s    € Ý�d�EœKÑ(Ô(ÐC¨T¬Z½8Ò-CÐCr   r   úIterable[nodes.NodeNG]Úcomment_annotationsúIterable[nodes.NodeNG | None]c              #  ó    K  — t          j        | |¦  «        D ]5\  }}|rt          |¦  «        s|V — Œ|rt          |¦  «        s|V — Œ1d V — Œ6d S r7   )Ú	itertoolsÚzip_longestrd   )r   rf   ÚannÚcomment_anns       r   Ú_merge_annotationsrm   ¨   s‡   è è € õ &Ô1°+Ð?RÑSÔSð ð Ñˆˆ[Øð 	•| CÑ(Ô(ð 	ØˆIˆIˆIˆIØð 	¥¨kÑ!:Ô!:ð 	ØÐÐÐÐàˆJˆJˆJˆJðð r   Ú	args_nodeúnodes.Argumentsúlist[nodes.NodeNG]c           	     óÀ   — | j         pd}| j        j        pd}| j        }|| j        pg z  }|| j        z  }t          t          |t          ||¦  «        ¦  «        ¦  «        S )a  Get a merged list of annotations.

    The annotations can come from:

    * Real type annotations.
    * A type comment on the function.
    * A type common on the individual argument.

    :param args_node: The node to get the annotations for.
    :returns: The annotations.
    rH   )r   rL   Útype_comment_argsÚtype_comment_posonlyargsÚtype_comment_kwonlyargsÚlistrm   )rn   Úplain_annotationsÚfunc_comment_annotationsrf   s       r   Ú_annotations_listrx   ´   s~   € ð "Ô-Ð3°ÐØ(Ô/ÔAÐGÀRÐØ#Ô<ÐØ˜9Ô6Ð<¸"Ñ<ÐØ˜9Ô<Ñ<ÐÝÝØÝÐ7Ð9LÑMÔMñ	
ô 	
ñô ð r   úset[str]c                ó�  — t          ¦   «         }t          | ¦  «        }d}| j        rx| j        }t	          | j        ¦  «        s&t          | j        ¦  «        }||||z   …         }||z  }t          | j        |¦  «        D ]!\  }}|r|                     |j        ¦  «         Œ"| j	        r[t          | j	        ¦  «        }t          | j	        ||||z   …         ¦  «        D ]!\  }}|r|                     |j        ¦  «         Œ"||z  }| j
        r\| j        r|                     | j
        ¦  «         n:t          |¦  «        |k    r'||         r|                     | j
        ¦  «         |dz  }| j        rx| j        }t	          | j        ¦  «        s&t          | j        ¦  «        }||||z   …         }||z  }t          | j        |¦  «        D ]!\  }}|r|                     |j        ¦  «         Œ"| j        r\| j        r|                     | j        ¦  «         n:t          |¦  «        |k    r'||         r|                     | j        ¦  «         |dz  }|S ©Nr   é   )rZ   rx   ÚposonlyargsÚposonlyargs_annotationsÚanyr   ÚzipÚaddr   ÚargsÚvarargÚvarargannotationÚ
kwonlyargsÚkwonlyargs_annotationsÚkwargÚkwargannotation)	rn   Úresultr   Úannotation_offsetr~   Únum_argsÚargÚ
annotationr†   s	            r   Úargs_with_annotationrŽ   Í   s©  € Ý‰UŒU€FÝ# IÑ.Ô.€KØÐàÔð %Ø"+Ô"CÐÝ�9Ô4Ñ5Ô5ð 	*Ý˜9Ô0Ñ1Ô1ˆHØ&1Ø!Ð$5¸Ñ$@Ð@ô'Ð#ð  Ñ)Ðå" 9Ô#8Ð:QÑRÔRð 	%ð 	%‰OˆC�Øð %Ø—
’
˜3œ8Ñ$Ô$Ð$øà„~ð 	&Ý�y”~Ñ&Ô&ˆÝ"ØŒNØÐ)Ð,=ÀÑ,HÐHÔIñ 
ô  
ð 	%ð 	%‰OˆC�ð ð %Ø—
’
˜3œ8Ñ$Ô$Ð$øà˜XÑ%ÐàÔð #ØÔ%ð 	#Ø�JŠJ�yÔ'Ñ(Ô(Ð(Ð(Ý�ÑÔÐ 1Ò1Ð1°kÐBSÔ6TÐ1Ø�JŠJ�yÔ'Ñ(Ô(Ð(Ø Ñ"ÐàÔð %Ø!*Ô!AÐÝ�9Ô3Ñ4Ô4ð 	*Ý˜9Ô/Ñ0Ô0ˆHØ%0Ø!Ð$5¸Ñ$@Ð@ô&Ð"ð  Ñ)Ðå" 9Ô#7Ð9OÑPÔPð 	%ð 	%‰OˆC�Øð %Ø—
’
˜3œ8Ñ$Ô$Ð$øà„ð #ØÔ$ð 	#Ø�JŠJ�y”Ñ'Ô'Ð'Ð'Ý�ÑÔÐ 1Ò1Ð1°kÐBSÔ6TÐ1Ø�JŠJ�y”Ñ'Ô'Ð'Ø Ñ"Ðà€Mr   Ú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 r{   )ÚDOCSTRING_TYPESÚgetr“   ÚSphinxDocstringÚEpytextDocstringÚGoogleDocstringÚNumpyDocstringÚmatching_sections)r�   r’   Ú
best_matchÚdocstring_typeÚinstancer›   s         r   ÚdocstringifyrŸ     sŠ   € ð •_×(Ò(¨µyÑAÔAÀ)ÑLÔLÐM€JåÝÝÝð	ð 	7ð 	7ˆð "�> )Ñ,Ô,ˆØ$×6Ò6Ñ8Ô8ÐØ˜z¨!œ}Ò,Ð,Ø+¨XÐ6ˆJøà�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 )!r“   z=
        For\s+the\s+(other)?\s*parameters\s*,\s+see
        Fr.   Úsupports_yieldsÚdocr‘   r
   ÚNonec                óN   — |r|j         nd}|                     ¦   «         | _        d S )NÚ )r0   Ú
expandtabsr¢   )Úselfr¢   r�   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__r¢   ©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   r›   zDocstring.matching_sections0  s   € àˆqr   ry   c                ó   — t          ¦   «         S r7   ©rZ   r¬   s    r   r[   zDocstring.exceptions4  s   € Ý‰uŒuˆr   c                ó   — dS ©NFrH   r¬   s    r   Ú
has_paramszDocstring.has_params7  ó   € Øˆ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_typeC  rµ   r   c                ó   — dS r³   rH   r¬   s    r   Ú
has_yieldszDocstring.has_yieldsF  rµ   r   c                ó   — dS r³   rH   r¬   s    r   Úhas_yields_typezDocstring.has_yields_typeI  rµ   r   útuple[set[str], set[str]]c                ó:   — t          ¦   «         t          ¦   «         fS r7   r±   r¬   s    r   Úmatch_param_docszDocstring.match_param_docsL  s   € Ý‰uŒu•c‘e”eˆ|Ðr   c                óD   — | j                              | j        ¦  «        d uS r7   )Úre_for_parameters_seeÚsearchr¢   r¬   s    r   Úparams_documented_elsewherez%Docstring.params_documented_elsewhereO  s    € ØÔ)×0Ò0°´Ñ:Ô:À$ÐFÐFr   N)r¢   r‘   r
   r£   ©r
   r	   ©r
   r   ©r
   ry   ©r
   r.   ©r
   rÂ   )r«   Ú
__module__Ú__qualname__r@   ÚcompileÚXÚSrÆ   r¡   Ú__annotations__r¨   r­   r›   r[   r´   r·   r¹   r»   r½   r¿   rÁ   rÄ   rÈ   rH   r   r   r“   r“     s^  € € € € € € Ø&˜BœJð	ð 	ŒˆrŒt‰ñ	ô Ðð "€OÐ!Ð!Ð!Ñ!ðð*ð *ð *ð *ð?ð ?ð ?ð ?ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðGð Gð Gð Gð Gð Gr   c            	      óò  — e Zd ZdZde› d�Zde› de› de› de› d�	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 )'r—   zt
        [~!.]?               # Optional link style prefix
        \w(?:\w|\.[^\.])*    # Valid python name
        z	
        zw                     # a container type
        [\(\[] [^\n\s]+ [\)\]]        # with the contents of the container
    ú
        (?:ú|ú4)
        (?:(?:\s+(?:of|or)\s+|\s*,\s*|\s+\|\s+)(?:ú))*
    z?
        (?::\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 r7   ©r.   ©rJ   Úis     r   ú	<genexpr>z4SphinxDocstring.matching_sections.<locals>.<genexpr>¡  ó<   è è € ð 	
ð 	
àõ �‰GŒGð	
ð 	
ð 	
ð 	
ð 	
ð 	
r   )ÚsumÚre_param_in_docstringrÇ   r¢   Úre_raise_in_docstringÚre_rtype_in_docstringÚre_returns_in_docstringÚre_property_type_in_docstringr¬   s    r   r›   z!SphinxDocstring.matching_sectionsŸ  s¢   € åð 	
ð 	
ð Ô*×1Ò1°$´(Ñ;Ô;ØÔ*×1Ò1°$´(Ñ;Ô;ØÔ*×1Ò1°$´(Ñ;Ô;ØÔ,×3Ò3°D´HÑ=Ô=ØÔ2×9Ò9¸$¼(ÑCÔCðð	
ñ 	
ô 	
ñ 	
ô 	
ð 		
r   ry   c                óÔ   — t          ¦   «         }t          j        | j        | j        ¦  «        D ]9}|                     d¦  «        }|                     t          |¦  «        ¦  «         Œ:|S ©Nr|   )rZ   r@   Úfinditerrâ   r¢   ÚgroupÚupdaterC   )r§   ÚtypesÚmatchÚ
raise_types       r   r[   zSphinxDocstring.exceptions¬  s_   € Ý™%œ%ˆå”[ Ô!;¸T¼XÑFÔFð 	@ð 	@ˆEØŸš Q™œˆJØ�LŠLÕ2°:Ñ>Ô>Ñ?Ô?Ð?Ð?àˆr   r.   c                óV   — | j         sdS | j                             | j         ¦  «        d uS r³   )r¢   rá   rÇ   r¬   s    r   r´   zSphinxDocstring.has_paramsµ  s/   € ØŒxð 	Ø�5àÔ)×0Ò0°´Ñ:Ô:À$ÐFÐFr   c                ól   — | j         sdS t          | j                             | j         ¦  «        ¦  «        S r³   )r¢   r.   rä   rÇ   r¬   s    r   r·   zSphinxDocstring.has_returns»  s2   € ØŒxð 	Ø�5å�DÔ0×7Ò7¸¼ÑAÔAÑBÔBÐBr   c                ól   — | j         sdS t          | j                             | j         ¦  «        ¦  «        S r³   )r¢   r.   rã   rÇ   r¬   s    r   r¹   zSphinxDocstring.has_rtypeÁ  s2   € ØŒxð 	Ø�5å�DÔ.×5Ò5°d´hÑ?Ô?Ñ@Ô@Ð@r   c                ón   — | j         sdS | j                              ¦   «                              d¦  «         S )NFú:)r¢   r   Ú
startswithr¬   s    r   r»   z$SphinxDocstring.has_property_returnsÇ  s6   € ØŒxð 	Ø�5ð ”8—?’?Ñ$Ô$×/Ò/°Ñ4Ô4Ð4Ð4r   c                ól   — | j         sdS t          | j                             | j         ¦  «        ¦  «        S r³   )r¢   r.   rå   rÇ   r¬   s    r   r½   z!SphinxDocstring.has_property_typeÏ  s2   € ØŒxð 	Ø�5å�DÔ6×=Ò=¸d¼hÑ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é   ú\r¥   r|   )rZ   r@   rè   rá   r¢   ré   Úreplacer�   rê   ÚfindallÚre_type_in_docstring)r§   Úparams_with_docÚparams_with_typerì   r   Ú
param_types         r   rÄ   z SphinxDocstring.match_param_docsÕ  sÆ   € Ý™%œ%ˆÝ™5œ5Ðå”[ Ô!;¸T¼XÑFÔFð 	+ð 	+ˆEØ—;’;˜q‘>”>ˆDà—<’<  bÑ)Ô)ˆDØ×Ò Ñ%Ô%Ð%ØŸš Q™œˆJØÐ%Ø ×$Ò$ TÑ*Ô*Ð*øà×Ò¥¤
¨4Ô+DÀdÄhÑ OÔ OÑPÔPÐPØÐ 0Ð0Ð0r   NrÊ   rË   rÌ   rÍ   )r«   rÎ   rÏ   Úre_typeÚre_simple_container_typeÚ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ä   r¡   r›   r[   r´   r·   r¹   r»   r½   rÄ   rH   r   r   r—   r—   S  s]  € € € € € ð€Gð
 Ø	ð ð  ð  Ðð
Ø$ðð Ø'.ðð à3Kðð àNUðð ð Ðð
à
ðð ð €Gð
ð ðð ð -ðð ð €Lð$ '˜BœJ |°R´T¸B¼D±[ÑAÔAÐðð "ðð ð €Kð &˜2œ: k°2´4¸"¼$±;Ñ?Ô?Ððð 
!ðð ð Ðð
 %/ B¤JÐ/CÀRÄTÈBÌDÁ[Ñ$QÔ$QÐ!ð
ð "ð
ð 
ð 
€Lð '˜BœJ |°R´T¸B¼D±[ÑAÔAÐà&˜BœJ zÑ2Ô2Ðà(˜bœj¨Ñ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   r—   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 )r˜   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ò   ú@r|   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  )r¢   r½   r   ró   r¬   s    r   r»   z%EpytextDocstring.has_property_returns  sQ   € ØŒxð 	Ø�5ð ×!Ò!Ñ#Ô#ð 	9ð ”x—’Ñ(Ô(×3Ò3°CÑ8Ô8Ð8Ð8àˆur   NrÌ   )r«   rÎ   rÏ   Ú__doc__r@   rÐ   r—   r  rø   rÑ   rÒ   rá   r  rú   r  rå   r  râ   rã   rä   r»   rH   r   r   r˜   r˜   æ  sN  € € € € € ð	ð 	ð '˜BœJØÔ$×,Ò,¨S°#°qÑ9Ô9¸2¼4À"Ä$¹;ñô Ðð &˜2œ:ØÔ#×+Ò+¨C°°aÑ8Ô8¸"¼$ÀÄ¹+ñô Ðð %/ B¤JØÔ,×4Ò4°S¸#¸qÑAÔAÀ2Ä4È"Ì$Á;ñ%ô %Ð!ð '˜BœJØÔ$×,Ò,¨S°#°qÑ9Ô9¸2¼4À"Ä$¹;ñô Ðð '˜BœJð	ð 	ŒˆrŒt‰ñ	ô 	Ðð )˜bœj¨Ñ7Ô7Ðð
ð 
ð 
ð 
ð 
ð 
r   r˜   c                  óŒ  — e Zd Zej        Zej        Zde› de› d�Zde› de› de› de› de› de› d�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 )8r™   rÕ   rÖ   zj)       # a container type
        [\(\[] [^\n]+ [\)\]]          # with the contents of the container
    r×   rØ   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 r7   rÛ   rÜ   s     r   rÞ   z4GoogleDocstring.matching_sections.<locals>.<genexpr>p  rß   r   )	rà   Úre_param_sectionrÇ   r¢   Úre_raise_sectionÚre_returns_sectionÚre_yields_sectionÚre_property_returns_lineÚ_first_liner¬   s    r   r›   z!GoogleDocstring.matching_sectionsn  s¬   € åð 	
ð 	
ð Ô%×,Ò,¨T¬XÑ6Ô6ØÔ%×,Ò,¨T¬XÑ6Ô6ØÔ'×.Ò.¨t¬xÑ8Ô8ØÔ&×-Ò-¨d¬hÑ7Ô7ØÔ-×4Ò4°T×5EÒ5EÑ5GÔ5GÑHÔHðð	
ñ 	
ô 	
ñ 	
ô 	
ð 		
r   r.   c                óV   — | j         sdS | j                             | j         ¦  «        d uS r³   )r¢   r  rÇ   r¬   s    r   r´   zGoogleDocstring.has_params{  s/   € ØŒxð 	Ø�5àÔ$×+Ò+¨D¬HÑ5Ô5¸TÐAÐAr   c                óÄ   — | j         sdS |                      | j        ¦  «        }|D ]9}| j                             |¦  «        }|sŒ|                     d¦  «        }|r dS Œ:dS ©NFrö   T©r¢   Ú_parse_sectionr  Úre_returns_linerì   ré   )r§   ÚentriesÚentryrì   Úreturn_descs        r   r·   zGoogleDocstring.has_returns�  ó�   € ØŒxð 	Ø�5à×%Ò% dÔ&=Ñ>Ô>ˆØð 	ð 	ˆEØÔ(×.Ò.¨uÑ5Ô5ˆEØð ØàŸ+š+ a™.œ.ˆKØð Ø�t�tðð ˆur   c                óÄ   — | j         sdS |                      | j        ¦  «        }|D ]9}| j                             |¦  «        }|sŒ|                     d¦  «        }|r dS Œ:dS ©NFr|   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 r7   )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³   )r¢   r.   r  rì   r  r¬   s    r   r½   z!GoogleDocstring.has_property_type¬  s<   € ØŒxð 	Ø�5å�DÔ1×7Ò7¸×8HÒ8HÑ8JÔ8JÑKÔKÑLÔLÐLr   c                óÄ   — | j         sdS |                      | j        ¦  «        }|D ]9}| j                             |¦  «        }|sŒ|                     d¦  «        }|r dS Œ:dS r  ©r¢   r  r  Úre_yields_linerì   ré   )r§   r  r  rì   Ú
yield_descs        r   r¿   zGoogleDocstring.has_yields²  ó�   € ØŒxð 	Ø�5à×%Ò% dÔ&<Ñ=Ô=ˆØð 	ð 	ˆEØÔ'×-Ò-¨eÑ4Ô4ˆEØð ØàŸš Q™œˆJØð Ø�t�tðð ˆ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   ry   c                ó6  — t          ¦   «         }|                      | j        ¦  «        }|D ]m}| j                             |¦  «        }|sŒ|                     d¦  «        }|                     d¦  «        }|r"|                     t          |¦  «        ¦  «         Œn|S )Nr|   rö   )rZ   r  r  Úre_raise_linerì   ré   rê   rC   )r§   rë   r  r  rì   Úexc_typeÚexc_descs          r   r[   zGoogleDocstring.exceptionsÒ  s›   € Ý™%œ%ˆà×%Ò% dÔ&;Ñ<Ô<ˆØð 	Bð 	BˆEØÔ&×,Ò,¨UÑ3Ô3ˆEØð Øà—{’{ 1‘~”~ˆHØ—{’{ 1‘~”~ˆHØð BØ—’Õ6°xÑ@Ô@ÑAÔAÐAøàˆr   rÂ   c                ó  — t          ¦   «         }t          ¦   «         }|                      | j        ¦  «        }|                     |                      | j        ¦  «        ¦  «         |D ]¢}| j                             |¦  «        }|sŒ|                     d¦  «        }|                     dd¦  «        }|                     d¦  «        }|                     d¦  «        }|r| 	                    |¦  «         |r| 	                    |¦  «         Œ£||fS )Nr|   r÷   r¥   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  € Ý$'¡E¤EˆÝ%(¡U¤UÐà×%Ò% dÔ&;Ñ<Ô<ˆØ�Š�t×*Ò*¨4Ô+HÑIÔIÑJÔJÐJØð 	0ð 	0ˆEØÔ&×,Ò,¨UÑ3Ô3ˆEØð ØàŸš Q™œˆJà#×+Ò+¨D°"Ñ5Ô5ˆJàŸš Q™œˆJØŸš Q™œˆJàð 1Ø ×$Ò$ ZÑ0Ô0Ð0àð 0Ø×#Ò# JÑ/Ô/Ð/øàÐ 0Ð0Ð0r   r	   c                óh   — | j                              ¦   «                              dd¦  «        d         S )Nú
r|   r   )r¢   r   rA   r¬   s    r   r  zGoogleDocstring._first_lineü  s)   € ØŒx�ŠÑ Ô ×&Ò& t¨QÑ/Ô/°Ô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   )rB  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Ç   r¢   rA  ré   Ú
splitlinesÚstripr   rD  rQ   Újoin)	r§   rE  r<  Úmin_indentationr  r  Úis_firstÚlineÚindentations	            r   r  zGoogleDocstring._parse_section	  sD  € Ø"×)Ò)¨$¬(Ñ3Ô3ˆØÐ ØˆIà×1Ò1°-Ñ@Ô@ˆàˆØˆØˆØ!×'Ò'¨Ñ*Ô*×5Ò5Ñ7Ô7ð 	ð 	ˆDØ—:’:‘<”<ð ØÝ+¨DÑ1Ô1ˆKØ˜_Ò,Ð,Ø�ð ð !Ø"-�Ø �à˜oÒ-Ð-Ø×*Ò*¨4Ñ0Ô0ð Ø�Eð ð Ø—N’N 4§9¢9¨UÑ#3Ô#3Ñ4Ô4Ð4Ø�Eà�LŠL˜ÑÔÐÐàð 	-Ø�NŠN˜4Ÿ9š9 UÑ+Ô+Ñ,Ô,Ð,àˆr   NrÊ   rÌ   rË   rÍ   rÉ   ©r<  r=  r
   r   )rB  r	   r
   r.   )rE  rF  r
   r>   ))r«   rÎ   rÏ   r—   rþ   r  Úre_container_typeÚre_multiple_typeÚ_re_section_templater@   rÐ   ÚformatrÑ   rÒ   ÚMr  r6  r7  r  r0  r  r  r  r  r*  r¡   r›   r´   r·   r¹   r»   r½   r¿   rÁ   r[   rÄ   r  ÚstaticmethodrA  rD  r  rH   r   r   r™   r™     s  € € € € € ØÔ%€GàÔ%€GðØðð Øðð ð Ðð
Øðð Ø 'ðð Ø*1ðð à3Dðð àGNðð àQXðð ð Ðð
Ðð
 "�r”zØ×#Ò#Ð$DÑEÔEØ
ŒˆrŒt‰�b”dÑñô Ðð
  *˜rœzØ×#Ò#Ð$MÑNÔNØ
ŒˆrŒt‰�b”dÑñ ô  Ðð
 �B”Jð	ð ð	ð 	ð 	ð 	ŒˆrŒt‰�b”dÑñ
ô 
€Mð "�r”zØ×#Ò# IÑ.Ô.°´°r´t±¸b¼dÑ0Bñô Ðð �B”Jð	Øð	ð 	ð 	ð 	ŒˆrŒt‰�b”dÑñô €Mð $˜œØ×#Ò# KÑ0Ô0°"´$¸¼±+ÀÄÑ2Dñô Ðð !�b”jð	Øð	ð 	ð 	ð 	ŒˆrŒt‰�b”dÑñô €Oð  *˜rœzð	Ø
ð	ð 	ð 	ð 	ŒˆrŒt‰�b”dÑñ ô  Ðð #˜œ
Ø×#Ò# JÑ/Ô/°´¸¼±¸r¼tÑ1Cñô Ðð %€Nà€Oð
ð 
ð 
ð 
ðBð Bð Bð Bðð ð ð ð ð ð ð ð 	
ð 	
ð 	
ð 	
ðMð Mð Mð Mðð ð ð ð ð ð ð ð ð ð ð ð 1ð 1ð 1ð 1ð43ð 3ð 3ð 3ð ð/ð /ð /ñ „\ð/ð ðð ð ñ „\ðð
%ð %ð %ð %ð %ð %r   r™   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 )rš   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*$r8  rý   Nr9  z\s*(\*{0,2}\w+)\s*:.+$)
rZ   r  r  r5  r6  r7  rì   r@   ré   r�   )
r§   rû   rü   r  r  rì   Úre_only_descr8  r9  rý   s
             r   rÄ   zNumpyDocstring.match_param_docsu  sp  € å™%œ%ˆÝ™5œ5Ðà×%Ò% dÔ&;Ñ<Ô<ˆØ�Š�t×*Ò*¨4Ô+HÑIÔIÑJÔJÐJØð 	0ð 	0ˆEØÔ&×,Ò,¨UÑ3Ô3ˆEØð Øõ œ8Ð$DÀeÑLÔLˆLØð ,Ø"Ÿ[š[¨Ñ6Ô6�
Ø"Ÿ[š[¨Ñ6Ô6�
Ø!�
�
à"Ÿ[š[¨Ñ6Ô6�
Ø"Ÿ[š[¨Ñ6Ô6�
Ø"Ÿ[š[¨Ñ6Ô6�
ð Ð%­"¬(Ð3LÈeÑ*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   rA  z!NumpyDocstring.min_section_indentŸ  s   € å�=×&Ò& qÑ)Ô)Ñ*Ô*Ð*r   rM  r	   r.   c                óF   — t          t          j        d| ¦  «        ¦  «        S )Nz\s*-+$)r.   r@   rì   )rM  s    r   rD  z!NumpyDocstring._is_section_header£  s   € å•B”H˜Y¨Ñ-Ô-Ñ.Ô.Ð.r   NrÍ   rO  )rM  r	   r
   r.   )r«   rÎ   rÏ   rR  r@   rÐ   rS  rÑ   rÒ   rT  r  Úre_default_valuer™   rQ  r7  r  rþ   r0  r  r  r  r*  r¡   rÄ   rU  rA  rD  rH   r   r   rš   rš   1  s9  € € € € € ðÐð "�r”zØ×#Ò#Ð$DÑEÔEØ
ŒˆrŒt‰�b”dÑñô Ðð
 MÐà�B”Jð	ð
 Ô,ð	ð 	ð ð	ð 	ð 	ð" 	ŒˆrŒt‰ñ%ô €Mð* "�r”zØ×#Ò# IÑ.Ô.°´°r´t±¸b¼dÑ0Bñô Ðð �B”Jð	ØÔ%ð	ð 	ð 	ð 	ŒˆrŒt‰�b”dÑñô €Mð $˜œØ×#Ò# KÑ0Ô0°"´$¸¼±+ÀÄÑ2Dñô Ðð !�b”jð	à
Ô
*ð	ð 	ð 	ð
 	ŒˆrŒt‰�b”dÑñô €Oð #˜œ
Ø×#Ò# JÑ/Ô/°´¸¼±¸r¼tÑ1Cñô Ðð %€Nà€Oð(1ð (1ð (1ð (1ðT ð+ð +ð +ñ „\ð+ð ð/ð /ð /ñ „\ð/ð /ð /r   rš   )ÚsphinxÚepytextÚgoogleÚnumpyr�   )r   r	   r
   r   )r   r   r
   r   )r   r   r
   r!   )r,   r-   r
   r.   )r   r4   r
   r5   )r=   r	   r
   r>   )r   r4   r
   rD   )r   r4   r
   r.   )r   re   rf   re   r
   rg   )rn   ro   r
   rp   )rn   ro   r
   ry   )r�   )r�   r‘   r’   r	   r
   r“   )r	  Ú
__future__r   ri   r@   Úcollections.abcr   rO   r   Úastroid.utilr   Úpylint.checkersr   r   r    r+   r3   r<   rC   ra   rd   rm   rx   rŽ   rŸ   r“   r—   r˜   r™   rš   r•   rH   r   r   ú<module>rd     s¦  ðð
 .Ð -à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (à !Ð !Ð !Ð !Ð !Ð !ð'ð 'ð 'ð 'ðð ð ð ð*ð ð ð ð0Lð Lð Lð Lð$ð ð ð ð(ð (ð (ð (ð
6ð 6ð 6ð 6ðrDð Dð Dð Dð	ð 	ð 	ð 	ðð ð ð ð28ð 8ð 8ð 8ðx 8Aðð ð ð ð ð$6Gð 6Gð 6Gð 6Gð 6Gñ 6Gô 6Gð 6GðrP1ð P1ð P1ð P1ð P1�iñ P1ô P1ð P1ðf3ð 3ð 3ð 3ð 3�ñ 3ô 3ð 3ðlRð Rð Rð Rð R�iñ Rô Rð Rðjt/ð t/ð t/ð t/ð t/�_ñ t/ô t/ð t/ðp ØØØØðð €ðð r   