§
    ŒŸjt&  ã                   óx  — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZ ddlmZ g d¢Z ej        d	ej        ¦  «         ej        d
ej        ¦  «        gZ ej        d¦  «        Zdad„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z e	¦   «         d„ ¦   «         Z e	¦   «         ed„ ¦   «         ¦   «         Z dS )a©  
Docstrings are another source of information for functions and classes.
:mod:`jedi.inference.dynamic_params` tries to find all executions of functions,
while the docstring parsing is much easier. There are three different types of
docstrings that |jedi| understands:

- `Sphinx <http://sphinx-doc.org/markup/desc.html#info-field-lists>`_
- `Epydoc <http://epydoc.sourceforge.net/manual-fields.html>`_
- `Numpydoc <https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt>`_

For example, the sphinx annotation ``:type foo: str`` clearly states that the
type of ``foo`` is ``str``.

As an addition to parameter searching, this module also provides return
annotations.
é    N)ÚparseÚParserSyntaxError)Údebug)Úinference_state_method_cache)Úiterator_to_value_setÚValueSetÚ	NO_VALUES)ÚLazyKnownValues)z\s*:type\s+%s:\s*([^\n]+)z\s*:param\s+(\w+)\s+%s:[^\n]*z\s*@type\s+%s:\s*([^\n]+)z\s*:rtype:\s*([^\n]+)z\s*@rtype:\s*([^\n]+)z:[^`]+:`([^`]+)`c                  óp   — t          t          t          t          f¦  «        rt          ‚ddlm}  | at          S )Nr   ©ÚNumpyDocString)Ú
isinstanceÚ_numpy_doc_string_cacheÚImportErrorÚSyntaxErrorÚnumpydoc.docscraper   r   s    úf/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/inference/docstrings.pyÚ_get_numpy_doc_string_clsr   /   s>   € åÕ)­K½Ð+EÑFÔFð &Ý%Ð%Ø1Ð1Ð1Ð1Ð1Ð1Ø,ÐÝ"Ð"ó    c                 ó¼  — t          j        ¦   «         5  t          j        d¦  «         	  t          ¦   «         | ¦  «        j        d         }n# t
          $ r g cY cddd¦  «         S w xY w	 ddd¦  «         n# 1 swxY w Y   |D ]V\  }}}||k    rJt          j        d|¦  «        }|r|                     d¦  «        }t          t          |¦  «        ¦  «        c S ŒWg S )zASearch `docstr` (in numpydoc format) for type(-s) of `param_str`.ÚignoreÚ
ParametersNz"([^,]+(,[^,]+)*?)(,[ ]*optional)?$é   )ÚwarningsÚcatch_warningsÚsimplefilterr   Ú_parsed_dataÚ	ExceptionÚreÚmatchÚgroupÚlistÚ_expand_typestr)ÚdocstrÚ	param_strÚparamsÚp_nameÚp_typeÚp_descrÚms          r   Ú_search_param_in_numpydocstrr+   8   sa  € å	Ô	 Ñ	"Ô	"ð ð ÝÔ˜hÑ'Ô'Ð'ð	ð 1Õ.Ñ0Ô0°Ñ8Ô8ÔEÀlÔSˆFˆFøÝð 	ð 	ð 	ØˆIˆIðð ð ð ñ ô ð ð ð	øøøð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð $*ð 1ð 1Ñˆ�˜Ø�YÒÐÝ”Ð>ÀÑGÔGˆAØð $ØŸš ™œ�Ý�¨Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0ð	 ð
 €Is4   ”A8ª"AÁA8ÁA(ÁA8Á'A(Á(A8Á8A<Á?A<c              #   ó˜  K  — t          j        ¦   «         5  t          j        d¦  «         	  t          ¦   «         | ¦  «        }n# t          $ r Y ddd¦  «         dS w xY w	 ddd¦  «         n# 1 swxY w Y   	 |j        d         }||j        d         z  }n# t          $ r Y dS w xY w|D ]\  }}}|s|}t          |¦  «        E d{V —† Œ dS )zP
    Search `docstr` (in numpydoc format) for type(-s) of function returns.
    r   NÚReturnsÚYields)r   r   r   r   r   r   r#   )r$   ÚdocÚreturnsÚr_nameÚr_typeÚr_descrs         r   Ú_search_return_in_numpydocstrr4   K   s  è è € õ 
Ô	 Ñ	"Ô	"ð ð ÝÔ˜hÑ'Ô'Ð'ð	Ø-Õ+Ñ-Ô-¨fÑ5Ô5ˆCˆCøÝð 	ð 	ð 	Øðð ð ñ ô ð ð ð ð	øøøð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðð Ô" 9Ô-ˆØ�3Ô# HÔ-Ñ-ˆˆøÝð ð ð Øˆˆðøøøà#*ð +ð +Ñˆ�˜àð 	ØˆFÝ" 6Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð	+ð +sF   –A-¬AÁA-Á
AÁA-ÁAÁA-Á-A1Á4A1Á9B Â
B%Â$B%c              #   óŽ  K  — t          j        d| ¦  «        rI|                      d¦  «        D ]1}|                     d¦  «        d                              ¦   «         V — Œ2dS t          j        d| ¦  «        r|                      d¦  «        d         V — dS |                      d¦  «        r—t          | d¬¦  «        j        d         }|j        d	k    rlt          |j        d
         dg ¦  «        D ]Q}|j        dk    rd|j	        v rdV — ŒdV — Œ |j        dk    r$d|j
                             ¦   «         v rdV — ŒKdV — ŒPdS dS | V — dS )z@
    Attempts to interpret the possible types in `type_str`
    z\bor\bÚorÚofr   z\bof\bÚ{z3.13)ÚversionÚatomr   ÚchildrenÚnumberú.ÚfloatÚintÚstringÚbÚbytesÚstrN)r   ÚsearchÚsplitÚstripÚ
startswithr   r;   ÚtypeÚgetattrÚvalueÚstring_prefixÚlower)Útype_strÚtÚnodeÚleafs       r   r#   r#   c   s�  è è € õ
 
„y�˜HÑ%Ô%ð Ø—’ Ñ%Ô%ð 	+ð 	+ˆAØ—'’'˜$‘-”- Ô"×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*ð	+ð 	+õ 
Œ�9˜hÑ	'Ô	'ð Ø�nŠn˜TÑ"Ô" 1Ô%Ð%Ð%Ð%Ð%Ð%à	×	Ò	˜SÑ	!Ô	!ð Ý�X vÐ.Ñ.Ô.Ô7¸Ô:ˆØŒ9˜ÒÐÝ ¤¨aÔ 0°*¸bÑAÔAð 
$ð 
$�Ø”9 Ò(Ð(Ø˜dœjÐ(Ð(Ø%˜˜˜˜à#˜˜˜˜Ø”Y (Ò*Ð*Ø˜dÔ0×6Ò6Ñ8Ô8Ð8Ð8Ø%˜˜˜˜à#˜˜˜øð Ðð
$ð 
$ð ˆˆˆˆˆr   c                 óÌ   ‡— ˆfd„t           D ¦   «         }|D ]>}|                     | ¦  «        }|r%t          |                     d¦  «        ¦  «        gc S Œ?t	          | ‰¦  «        S )aä  
    Search `docstr` for type(-s) of `param_str`.

    >>> _search_param_in_docstr(':type param: int', 'param')
    ['int']
    >>> _search_param_in_docstr('@type param: int', 'param')
    ['int']
    >>> _search_param_in_docstr(
    ...   ':type param: :class:`threading.Thread`', 'param')
    ['threading.Thread']
    >>> bool(_search_param_in_docstr('no document', 'param'))
    False
    >>> _search_param_in_docstr(':param int param: some description', 'param')
    ['int']

    c                 ób   •— g | ]+}t          j        |t          j        ‰¦  «        z  ¦  «        ‘Œ,S © )r   ÚcompileÚescape)Ú.0Úpr%   s     €r   ú
<listcomp>z+_search_param_in_docstr.<locals>.<listcomp>–   sB   ø€ ð 3ð 3ð 3Øõ ”
˜1�rœy¨Ñ3Ô3Ñ3Ñ4Ô4ð 3ð 3ð 3r   r   )ÚDOCSTRING_PARAM_PATTERNSrD   Ú_strip_rst_roler!   r+   )r$   r%   ÚpatternsÚpatternr    s    `   r   Ú_search_param_in_docstrr]   „   s‹   ø€ ð$3ð 3ð 3ð 3Ý1ð3ñ 3ô 3€Hàð 5ð 5ˆØ—’˜vÑ&Ô&ˆØð 	5Ý# E§K¢K°¡N¤NÑ3Ô3Ð4Ð4Ð4Ð4ð	5õ (¨°	Ñ:Ô:Ð:r   c                 óh   — t                                | ¦  «        }|r|                     d¦  «        S | S )a   
    Strip off the part looks like a ReST role in `type_str`.

    >>> _strip_rst_role(':class:`ClassName`')  # strip off :class:
    'ClassName'
    >>> _strip_rst_role(':py:obj:`module.Object`')  # works with domain
    'module.Object'
    >>> _strip_rst_role('ClassName')  # do nothing when not ReST role
    'ClassName'

    See also:
    http://sphinx-doc.org/domains.html#cross-referencing-python-objects

    r   )ÚREST_ROLE_PATTERNr    r!   )rM   r    s     r   rZ   rZ       s4   € õ ×#Ò# HÑ-Ô-€EØð Ø�{Š{˜1‰~Œ~Ðàˆr   c                 ó  — |€g S t          j        d|¦  «        }d                     d„ |D ¦   «         ¦  «        }|› d|› �}t          j        d|d¬¦  «         | j        j        }	 |                     |d¬¦  «        }n# t          $ r g cY S w xY w	 |j	        d	         }n# t          t          f$ r g cY S w xY w|j        d
vrg S ddlm}  || | j        |g ¬¦  «        }t          t!          |                     ¦   «         |¦  «        ¦  «        S )Nz((?:\w+\.)*\w+)\.ú
c              3   ó    K  — | ]	}d |› �V — Œ
dS )zimport NrS   )rV   rW   s     r   ú	<genexpr>z._infer_for_statement_string.<locals>.<genexpr>½   s(   è è € ÐAÐA¨!˜ !˜˜ÐAÐAÐAÐAÐAÐAr   zParse docstring code %sÚBLUE©ÚcolorF)Úerror_recoveryéþÿÿÿ)Únamer:   Ú	atom_exprr   )ÚDocstringModule)Úin_module_contextÚinference_stateÚmodule_nodeÚ
code_lines)r   ÚfindallÚjoinr   Údbgrm   Úgrammarr   r   r;   ÚAttributeErrorÚ
IndexErrorrH   Újedi.inference.docstring_utilsrk   r"   Ú_execute_types_in_stmtÚ
as_context)	Úmodule_contextr@   Úpotential_importsÚimportsrs   ÚmoduleÚstmtrk   r*   s	            r   Ú_infer_for_statement_stringr~   ¶   se  € Ø€~Øˆ	åœ
Ð#7¸Ñ@Ô@Ðð �iŠiÐAÐAÐ/@ÐAÑAÔAÑAÔA€GØÐ#Ð#˜6Ð#Ð#€Få	„IÐ'¨°vÐ>Ñ>Ô>Ð>ØÔ,Ô4€GðØ—’˜v°e�Ñ<Ô<ˆˆøÝð ð ð Øˆ	ˆ	ˆ	ðøøøðàŒ˜rÔ"ˆˆøÝ�JÐ'ð ð ð Øˆ	ˆ	ˆ	ðøøøð „yÐ5Ð5Ð5Øˆ	ð ?Ð>Ð>Ð>Ð>Ð>ØˆØ(Ø&Ô6ØØð		ñ 	ô 	€Aõ Õ& q§|¢|¡~¤~°tÑ<Ô<Ñ=Ô=Ð=s$   Á$A< Á<BÂ
BÂB ÂB3Â2B3c                 ón   ‡ — ‰                       |¦  «        }t          j        ˆ fd„|D ¦   «         ¦  «        S )zÒ
    Executing all types or general elements that we find in a statement. This
    doesn't include tuple, list and dict literals, because the stuff they
    contain is executed. (Used as type information).
    c              3   óB   •K  — | ]}t          ‰j        |¦  «        V — Œd S ©N)Ú_execute_array_valuesrm   )rV   Údry   s     €r   rc   z)_execute_types_in_stmt.<locals>.<genexpr>â   sD   øè è € ð ð àõ 	˜nÔ<¸aÑ@Ô@ðð ð ð ð ð r   )Ú
infer_noder   Ú	from_sets)ry   r}   Údefinitionss   `  r   rw   rw   Û   sS   ø€ ð !×+Ò+¨DÑ1Ô1€KÝÔð ð ð ð àðñ ô ñ ô ð r   c                 ó†  ‡ — ddl m}m}m} t	          ||¦  «        r’|j        dv r‰g }|                     ¦   «         D ]V}t          j        ˆ fd„| 	                    ¦   «         D ¦   «         ¦  «        }| 
                    t          |¦  «        ¦  «         ŒW|j        dk    r|n|} |‰ |¦  «        hS |                     d¦  «        S )z—
    Tuples indicate that there's not just one return value, but the listed
    ones.  `(str, int)` means that it returns a tuple with both types.
    r   )ÚSequenceLiteralValueÚ	FakeTupleÚFakeList)Útupler"   c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S r�   )r‚   )rV   Útyprm   s     €r   rc   z(_execute_array_values.<locals>.<genexpr>ñ   sA   øè è € ð )ð )àõ & o°sÑ;Ô;ð)ð )ð )ð )ð )ð )r   r‹   N)Újedi.inference.value.iterablerˆ   r‰   rŠ   r   Ú
array_typeÚ
py__iter__r   r…   ÚinferÚappendr
   Úexecute_annotation)	rm   Úarrayrˆ   r‰   rŠ   ÚvaluesÚ
lazy_valueÚobjectsÚclss	   `        r   r‚   r‚   è   s  ø€ ð
 XÐWÐWÐWÐWÐWÐWÐWÐWÐWÝ�%Ð-Ñ.Ô.ð .°5Ô3CÐGXÐ3XÐ3XØˆØ×*Ò*Ñ,Ô,ð 	4ð 	4ˆJÝÔ(ð )ð )ð )ð )à%×+Ò+Ñ-Ô-ð)ñ )ô )ñ ô ˆGð �MŠM�/¨'Ñ2Ô2Ñ3Ô3Ð3Ð3Ø Ô+¨wÒ6Ð6ˆiˆi¸HˆØ��O VÑ,Ô,Ð-Ð-à×'Ò'¨Ñ-Ô-Ð-r   c                 ó”  ‡‡— ˆˆfd„}|                       ¦   «         Š‰                     ¦   «         }|j        dk    rt          S  ||                      ¦   «         ¦  «        }|                      ¦   «         r=|                      ¦   «         dk    r%| || j                             ¦   «         ¦  «        z  }t          j	        d|d¬¦  «         |S )Nc                 ój   •— t          ˆfd„t          | ‰j        j        ¦  «        D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}t          ‰|¦  «        D ]}|V — ŒŒd S r�   )r~   )rV   r%   rW   ry   s      €r   rc   z7infer_param.<locals>.infer_docstring.<locals>.<genexpr>ÿ   sX   øè è € ð 
ð 
àÝ0°ÀÑKÔKð
ð 
ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
r   )r   r]   ri   rJ   )Ú	docstringry   Úparams    €€r   Úinfer_docstringz$infer_param.<locals>.infer_docstringþ   sJ   ø€ Ýð 
ð 
ð 
ð 
å4°YÀÄ
Ô@PÑQÔQð
ñ 
ô 
ñ 
ô 
ð 	
r   ÚlambdefÚ__init__z#Found param types for docstring: %srd   re   )
Úget_root_contextÚget_parent_functionrH   r	   Ú	py__doc__Úis_bound_methodÚ
py__name__Úclass_contextr   rr   )Úfunction_valuer�   rž   ÚfuncÚtypesry   s    `   @r   Úinfer_paramrª   ü   sà   øø€ ð
ð 
ð 
ð 
ð 
ð 
ð $×4Ò4Ñ6Ô6€NØ×$Ò$Ñ&Ô&€DØ„y�IÒÐÝÐàˆO˜N×4Ò4Ñ6Ô6Ñ7Ô7€EØ×%Ò%Ñ'Ô'ð KØ×)Ò)Ñ+Ô+¨zÒ9Ð9Ø�� Ô!=×!GÒ!GÑ!IÔ!IÑJÔJÑJˆå	„IÐ3°UÀ&ÐIÑIÔIÐIØ€Lr   c              #   ó    K  — d„ } ||                       ¦   «         ¦  «        D ]*}t          |                      ¦   «         |¦  «        E d {V —† Œ+d S )Nc              3   ó¾   K  — t           D ]=}|                     | ¦  «        }|r$t          |                     d¦  «        ¦  «        V — Œ>t	          | ¦  «        E d {V —† d S )Nr   )ÚDOCSTRING_RETURN_PATTERNSrD   rZ   r!   r4   )ÚcoderW   r    s      r   Úsearch_return_in_docstrz3infer_return_types.<locals>.search_return_in_docstr  sq   è è € Ý*ð 	6ð 	6ˆAØ—H’H˜T‘N”NˆEØð 6Ý% e§k¢k°!¡n¤nÑ5Ô5Ð5Ð5Ð5øå0°Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6r   )r£   r~   r¡   )r§   r¯   rM   s      r   Úinfer_return_typesr°     s}   è è € ð7ð 7ð 7ð ,Ð+¨N×,DÒ,DÑ,FÔ,FÑGÔGð \ð \ˆÝ.¨~×/NÒ/NÑ/PÔ/PÐRZÑ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ð\ð \r   )!Ú__doc__r   r   Úparsor   r   Újedir   Újedi.inference.cacher   Újedi.inference.base_valuer   r   r	   Újedi.inference.lazy_valuer
   rY   rT   ÚMr­   r_   r   r   r+   r4   r#   r]   rZ   r~   rw   r‚   rª   r°   rS   r   r   ú<module>r¸      sñ  ððð ð" 
€	€	€	Ø €€€à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð Ð ð €B„JÐ'¨¬Ñ.Ô.Ø€B„JÐ'¨¬Ñ.Ô.ðÐ ð
 �B”JÐ2Ñ3Ô3Ð ð Ð ð#ð #ð #ðð ð ð&+ð +ð +ð0ð ð ðB;ð ;ð ;ð8ð ð ð,">ð ">ð ">ðJ
ð 
ð 
ð.ð .ð .ð( ÐÑÔðð ñ  Ôðð* ÐÑÔØð
\ð 
\ñ Ôñ  Ôð
\ð 
\ð 
\r   