§
    ŒŸj+  ã                   ó>  — 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lm	Z	 d dl
mZ d dlmZ h d£Zd	Zd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 d"d„Zd„ Zd„ Zd„ Zd„ Zd!d„Z ee¦  «        Zd„ Zd„ Zd„ Z d„ Z!d„ Z" e"d„ ¦  «        Z# e"d„ ¦  «        Z$ e"d „ ¦  «        Z%dS )#é    N)Úliteral_eval)Úcleandoc©ÚWeakKeyDictionary)Útree)Úparser_cache)Úsplit_lines>   ÚatomÚexprÚtermÚtestÚpowerÚfactorÚfuncdefÚor_testÚand_exprÚand_testÚclassdefÚnot_testÚxor_exprÚ	atom_exprÚ
arith_exprÚ
comparisonÚ
shift_exprÚimport_fromÚimport_name)	ÚtryÚexceptÚfinallyÚelseÚifÚelifÚwithÚforÚwhileFc                 óF  — g }| j         }|dk    rD|                      ¦   «         }|du r+| j        j         dk    r|dk    r|                     | ¦  «         nÍ|dk    r4|                     | ¦  «         | j        D ]}|t          |d¬¦  «        z  }Œn“|dk    r7| j        d	         d
k    r%| j        d         } | dk    r|t          | ¦  «        z  }nV	 | j        }| j         t          v r|s|                     | ¦  «         |D ]}|t          ||¦  «        z  }Œn# t          $ r Y nw xY w|S )z
    For static analysis.
    ÚnameFÚparamú=Ú	expr_stmtT)Ú
last_addedÚ	decoratoréþÿÿÿú)éýÿÿÿú()ÚtypeÚget_next_leafÚparentÚappendÚchildrenÚget_executable_nodesÚ_EXECUTE_NODESÚAttributeError)Únoder+   ÚresultÚtypÚ	next_leafÚchildr5   s          ú^/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/parser_utils.pyr6   r6      s„  € ð €FØ
Œ)€CØ
ˆf‚}€}Ø×&Ò&Ñ(Ô(ˆ	Ø˜ÐÐ 4¤;Ô#3°wÒ#>Ð#>À9ÐPSÒCSÐCSØ�MŠM˜$ÑÔÐøØ	�Ò	Ð	ð 	�Š�dÑÔÐØ”]ð 	Cð 	CˆEØÕ*¨5¸TÐBÑBÔBÑBˆFˆFð	Cà	�Ò	Ð	àŒ=˜Ô Ò#Ð#Ø”= Ô$ˆDØ�sŠ{ˆ{ØÕ.¨tÑ4Ô4Ñ4�øð		BØ”}ˆHð Œy�NÐ*Ð*°:Ð*Ø—’˜dÑ#Ô#Ð#à!ð Bð B�ØÕ.¨u°jÑAÔAÑA��ðBøõ ð 	ð 	ð 	ØˆDð	øøøð €Ms   ÃD Ä
DÄDc              #   ó¶   K  — | V — | j         d         }	 |j        dk    r|j         d         V — n|j        dk    r|V — n|j        dk    sd S |j         d         }ŒF)NéÿÿÿÿTÚcomp_foré   Úsync_comp_forÚcomp_if©r5   r1   )rA   Úlasts     r>   Úget_sync_comp_forsrG   :   s   è è € Ø
€N€N€NØÔ˜RÔ €Dð!ØŒ9˜
Ò"Ð"Ø”- Ô"Ð"Ð"Ð"Ð"ØŒY˜/Ò)Ð)ØˆJˆJˆJˆJØ”˜iÒ'Ð'ØˆEØŒ}˜RÔ ˆð!ó    c                 ó.   — | j         d         j        dk    S )z¢
    Returns True if only one name is returned: ``for x in y``.
    Returns False if the for loop is more complicated: ``for x, z in y``.

    :returns: bool
    rB   r'   rE   )Úfor_stmts    r>   Úfor_stmt_defines_one_namerK   G   s   € ð Ô˜QÔÔ$¨Ò.Ð.rH   c                 óø   — |j         }| j         |cxk     r| j        k    sn t          d¦  «        ‚d }t          | j        ¦  «        D ]3\  }}||j         k     r|c S |                     ¦   «         }|t          v r|}Œ4d S )Nz!The node is not part of the flow.)Ú	start_posÚend_posÚ
ValueErrorÚ	enumerater5   Úget_first_leafÚ_FLOW_KEYWORDS)Ú	flow_noder9   rM   ÚkeywordÚir=   Ú
first_leafs          r>   Úget_flow_branch_keywordrW   Q   s�   € Ø”€IØÔ )Ð@Ð@Ò@Ð@¨yÔ/@Ò@Ð@Ð@Ð@ÝÐ<Ñ=Ô=Ð=à€GÝ˜iÔ0Ñ1Ô1ð !ð !‰ˆˆ5Ø�u”Ò&Ð&ØˆNˆNˆNØ×)Ò)Ñ+Ô+ˆ
Ø�Ð'Ð'Ø ˆGøØˆ4rH   c                 ót   — |                       ¦   «         }|�!t          t          |j        ¦  «        ¦  «        S dS )z3 Returns a cleaned version of the docstring token. NÚ )Úget_doc_noder   Úsafe_literal_evalÚvalue)Ú
scope_noder9   s     r>   Úclean_scope_docstringr^   `   s9   € à×"Ò"Ñ$Ô$€DØÐõ
 Õ)¨$¬*Ñ5Ô5Ñ6Ô6Ð6Øˆ2rH   c                 óÞ   — | j         dk    ra| j        } |                      ¦   «         }|�D|j         dk    r9|j        d         }|j         dk    r!t	          t          |j        ¦  «        ¦  «        S dS )Nr*   Úsimple_stmtr   ÚstringrY   )r1   r3   Úget_next_siblingr5   r   r[   r\   )Ú	tree_nodeÚmaybe_strings     r>   Úfind_statement_documentationre   l   sv   € Ø„~˜Ò$Ð$ØÔ$ˆ	Ø ×1Ò1Ñ3Ô3ˆØÐ#ØÔ  MÒ1Ð1Ø+Ô4°QÔ7�ØÔ$¨Ò0Ð0Ý#Õ$5°lÔ6HÑ$IÔ$IÑJÔJÐJØˆ2rH   c                 ó|   — | d d…                               ¦   «         }|d         dk    s|dv rdS t          | ¦  «        S )Né   r   Úf)ÚfrÚrfrY   )Úlowerr   )r\   Ú	first_twos     r>   r[   r[   x   sG   € Ø�b�q�b”	—’Ñ!Ô!€IØ�„|�sÒÐ˜i¨<Ð7Ð7ð ˆrå˜ÑÔÐrH   éH   c                 óÄ  — |€| j         dk    rd}n| j        j        }|                      ¦   «         }|r
|dd…         }dd                     d„ |D ¦   «         ¦  «                             ¦   «         z   dz   }t          j        d	d
|¦  «        }| j        r|sd| j         	                    ¦   «         z   }nd}||z   |z   }d                     t          j        ||¦  «        ¦  «        S )zí
    Generate a string signature of a function.

    :param width: Fold lines if a line is longer than this value.
    :type width: int
    :arg func_name: Override function name when given.
    :type func_name: str

    :rtype: str
    NÚlambdefz<lambda>rB   r0   rY   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S ©N)Úget_code)Ú.0r(   s     r>   ú	<genexpr>z get_signature.<locals>.<genexpr>—   s,   è è € Ð;Ð;¨5�e—n’nÑ&Ô&Ð;Ð;Ð;Ð;Ð;Ð;rH   r.   z\s+ú z ->ú
)r1   r'   r\   Ú
get_paramsÚjoinÚstripÚreÚsubÚ
annotationrr   ÚtextwrapÚwrap)	r   ÚwidthÚcall_stringÚomit_first_paramÚomit_return_annotationÚparamsÚpÚrtypeÚcodes	            r>   Úget_signaturer‡   ‚   sö   € ð ÐØŒ<˜9Ò$Ð$Ø$ˆKˆKà!œ,Ô,ˆKØ×ÒÑ!Ô!€FØð Ø˜˜˜”ˆØˆb�gŠgÐ;Ð;°FÐ;Ñ;Ô;Ñ;Ô;×AÒAÑCÔCÑCÀcÑI€Aå
Œˆv�s˜AÑÔ€AØÔð Ð"8ð Ø˜Ô*×3Ò3Ñ5Ô5Ñ5ˆˆàˆØ˜‰?˜UÑ"€Dà�9Š9•X”] 4¨Ñ/Ô/Ñ0Ô0Ð0rH   c                 ó‚   — 	 | j         }|D ]}t          ||¦  «         ŒdS # t          $ r | xj        |z  c_        Y dS w xY w)z$
    Move the `Node` start_pos.
    N)r5   Úmover8   Úline)r9   Úline_offsetr5   Úcs       r>   r‰   r‰   £   so   € ð!Ø”=ˆð ð 	!ð 	!ˆAÝ��KÑ Ô Ð Ð ð	!ð 	!øõ ð !ð !ð !Øˆ	Œ	�[Ñ ˆ	Œ	ˆ	ˆ	ˆ	ð!øøøs   ‚   >½>c                 ó¨  — 	 | j         dk    r%| j        d                              ¦   «         j        }n�| j         dk    r%| j        d                              ¦   «         j        }nm| j         dk    r7| j        d                              ¦   «                              ¦   «         j        }n+|                      ¦   «                              ¦   «         j        }n# t          $ r Y dS t          $ r Y dS w xY wd|vrdS ||                     d¦  «        d…         }d	|v r|d|                     d	¦  «        …         }d
|v r|d|                     d
¦  «        …         }|S )zl
    returns (as string) any comment that appears on the same line,
    after the node, including the #
    rJ   é   Ú	with_stmté   r   é   Nú#úrv   )	r1   r5   rQ   Úprefixr2   Úget_last_leafr8   rO   Úindex)r9   Ú
whitespaceÚcomments      r>   Úget_following_comment_same_liner™   °   sn  € ð
ØŒ9˜
Ò"Ð"Øœ qÔ)×8Ò8Ñ:Ô:ÔAˆJˆJØŒY˜+Ò%Ð%Øœ qÔ)×8Ò8Ñ:Ô:ÔAˆJˆJØŒY˜)Ò#Ð#àœ qÔ)×8Ò8Ñ:Ô:×HÒHÑJÔJÔQˆJˆJà×+Ò+Ñ-Ô-×;Ò;Ñ=Ô=ÔDˆJøøÝð ð ð ØˆtˆtÝð ð ð ð ˆtˆtðøøøð �*ÐÐØˆtØ˜×)Ò)¨#Ñ.Ô.Ð/Ð/Ô0€GØˆw€€ØÐ.˜7Ÿ=š=¨Ñ.Ô.Ð.Ô/ˆØˆw€€ØÐ.˜7Ÿ=š=¨Ñ.Ô.Ð.Ô/ˆØ€Ns   ‚CC Ã
C*Ã	C*Ã)C*c                 óP   — | j         }|dk    r| j        d         j         dk    S |dv S )NrA   rB   rC   )Ú
file_inputr   r   ro   rC   )r1   r5   )r9   Úts     r>   Úis_scoper�   Ï   s3   € ØŒ	€AØˆJ‚€àŒ}˜QÔÔ$¨Ò7Ð7àÐQÐQÐQrH   c                 ó4   ‡ ‡— t          ¦   «         Šdˆˆ fd„	}|S )NFc                 óº   •— | € ‰||¦  «        S 	 ‰|          }n# t           $ r
 i x}‰| <   Y nw xY w	 ||         S # t           $ r  ‰||¦  «        x}||<   |cY S w xY wrq   )ÚKeyError)Úparso_cache_noder9   Úinclude_flowsÚ
for_moduler:   ÚcacheÚfuncs        €€r>   Úwrapperz(_get_parent_scope_cache.<locals>.wrapperÛ   s­   ø€ ØÐ#Ø�4˜˜mÑ,Ô,Ð,ð	6ØÐ/Ô0ˆJˆJøÝð 	6ð 	6ð 	6Ø35Ð5ˆJ˜Ð/Ñ0Ð0Ð0ð	6øøøð	Ø˜dÔ#Ð#øÝð 	ð 	ð 	Ø(,¨¨T°=Ñ(AÔ(AÐAˆF�Z Ñ%ØˆMˆMˆMð	øøøs   ‘ š.­.²: ºAÁA©Fr   )r¥   r¦   r¤   s   ` @r>   Ú_get_parent_scope_cacher¨   Ø   s9   øø€ ÝÑÔ€Eðð ð ð ð ð ð ð €NrH   c                 ó  ‡ — ‰ j         }|€dS 	 t          |¦  «        r�|j        dv r…|j                             d¦  «        }|j        |         j        ‰ j        k    rP‰ j         j        dk    r‰ j         j        ‰ k    rn/‰ j         j        dk    r‰ j         j        d         ‰ k    rn|j         }Œž|S |rTt          |t          j	        ¦  «        r:|j        dk    r-t          ˆ fd	„|                     ¦   «         D ¦   «         ¦  «        s|S |j         }Œý)
z'
    Returns the underlying scope.
    NT)r   r   ro   ú:r(   Útfpdefr   Úif_stmtc              3   óV   •K  — | ]#}|j         ‰j         cxk    o
|j        k     nc V — Œ$d S rq   )rM   rN   )rs   Únr9   s     €r>   rt   z#get_parent_scope.<locals>.<genexpr>  sY   øè è € ð =ð =Ø !ð œK¨4¬>ÐEÐEÒEÐE¸A¼IÒEÐEÐEÐEð =ð =ð =ð =ð =ð =rH   )r3   r�   r1   r5   r–   rM   r'   Ú
isinstancer   ÚFlowÚanyÚget_test_nodes)r9   r¢   Úscoper–   s   `   r>   Úget_parent_scoper´   ì   s=  ø€ ð ŒK€EØ€}ØˆtðÝ�E‰?Œ?ð 	ØŒzÐ?Ð?Ð?Øœ×,Ò,¨SÑ1Ô1�Ø”> %Ô(Ô2°d´nÒDÐDØ”{Ô'¨7Ò2Ð2°t´{Ô7GÈ4Ò7OÐ7OØØœÔ)¨XÒ5Ð5¸$¼+Ô:NÈqÔ:QÐUYÒ:YÐ:YØà %¤˜Ø ØˆLØð 	�z¨%µ´Ñ;Ô;ð 	ð ”J )Ò+Ð+Ýð =ð =ð =ð =Ø%*×%9Ò%9Ñ%;Ô%;ð=ñ =ô =ñ =ô =ð ,ð �à”ˆð+rH   c                 ó,   — t          | |¦  «        j        S )z‘
    Basically access the cached code lines in parso. This is not the nicest way
    to do this, but we avoid splitting all the lines again.
    )Úget_parso_cache_nodeÚlines©ÚgrammarÚpaths     r>   Úget_cached_code_linesr»     s   € õ
   ¨Ñ.Ô.Ô4Ð4rH   c                 ó2   — t           | j                 |         S )zß
    This is of course not public. But as long as I control parso, this
    shouldn't be a problem. ~ Dave

    The reason for this is mostly caching. This is obviously also a sign of a
    broken caching architecture.
    )r   Ú_hashedr¸   s     r>   r¶   r¶     s   € õ ˜œÔ(¨Ô.Ð.rH   c                 óþ   — t          | j        d¬¦  «        d|d         | j        z
  dz   …         }|d         }| j        |d         k    r
|| j        z  }|sdS |d         d|…         |d<   d                     |¦  «        S )z3
    Cuts of the value of the leaf at position
    T)ÚkeependsNr   rB   rY   r@   )r	   r\   rŠ   Úcolumnrx   )ÚleafÚpositionr·   rÀ   s       r>   Úcut_value_at_positionrÃ   "  sŒ   € õ ˜œ
¨TÐ2Ñ2Ô2Ð3O°H¸Q´KÀ$Ä)Ñ4KÈaÑ4OÐ3OÔP€EØ�aŒ[€FØ„y�H˜Q”KÒÐØ�$”+ÑˆØð ØˆrØ�b”	˜'˜6˜'Ô"€Eˆ"�IØ�7Š7�5‰>Œ>ÐrH   c                 óh  — | j         dk    rEt          | j        ¦  «        dk    r+| j        d         dk    rt          | j        d         ¦  «        S dS | j         dk    rM| j        }|d         dk    rdS t          |d         ¦  «        sdS t	          d	„ |dd
…         D ¦   «         ¦  «        S | j         dk    S )zP
    Checks if a path looks like `name` or `name.foo.bar` and not `name()`.
    r
   r�   r   r0   rB   Fr   Úawaitc              3   ó8   K  — | ]}|j         d          dk    V — ŒdS )r   ú.N)r5   )rs   rŒ   s     r>   rt   z!expr_is_dotted.<locals>.<genexpr>?  s-   è è € Ð>Ð>¨A�1”:˜a”= CÒ'Ð>Ð>Ð>Ð>Ð>Ð>rH   Nr'   )r1   Úlenr5   Úexpr_is_dottedÚall)r9   r5   s     r>   rÉ   rÉ   0  sÄ   € ð „y�FÒÐÝˆtŒ}ÑÔ Ò"Ð" t¤}°QÔ'7¸3Ò'>Ð'>Ý! $¤-°Ô"2Ñ3Ô3Ð3ØˆuØ„y�KÒÐØ”=ˆØ�AŒ;˜'Ò!Ð!Ø�5Ý˜h qœkÑ*Ô*ð 	Ø�5åÐ>Ð>°¸!¸"¸"´Ð>Ñ>Ô>Ñ>Ô>Ð>ØŒ9˜ÒÐrH   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó�   •— |                       ¦   «         D ]/}|j        d         } ‰|                     ¦   «         ¦  «        r dS Œ0dS )zý
        This is a heuristic. It will not hold ALL the times, but it will be
        correct pretty much for anyone that doesn't try to beat it.
        staticmethod/classmethod are builtins and unless overwritten, this will
        be correct.
        rB   TF)Úget_decoratorsr5   rr   )Úfunction_noder,   Údotted_nameÚdecorator_checkers      €r>   r¦   z&_function_is_x_method.<locals>.wrapperD  s]   ø€ ð '×5Ò5Ñ7Ô7ð 	ð 	ˆIØ#Ô,¨QÔ/ˆKØ Ð  ×!5Ò!5Ñ!7Ô!7Ñ8Ô8ð Ø�t�tðàˆurH   © )rÐ   r¦   s   ` r>   Ú_function_is_x_methodrÒ   C  s#   ø€ ðð ð ð ð ð €NrH   c                 ó   — | dk    S )NÚstaticmethodrÑ   ©Úms    r>   ú<lambda>r×   S  s   € ¸1ÀÒ;N€ rH   c                 ó   — | dk    S )NÚclassmethodrÑ   rÕ   s    r>   r×   r×   T  s   € ¸!¸}Ò:L€ rH   c                 óD   — | dk    p| dk    p|                       d¦  «        S )NÚpropertyÚcached_propertyz.setter)ÚendswithrÕ   s    r>   r×   r×   V  s/   € ˆa�:Šoð ØÐÒðà	�
Š
�9ÑÔð rH   r§   )rm   NFF)&rz   r}   Úastr   Úinspectr   Úweakrefr   Úparso.pythonr   Úparso.cacher   Úparsor	   r7   rR   r6   rG   rK   rW   r^   re   r[   r‡   r‰   r™   r�   r¨   r´   Úget_cached_parent_scoper»   r¶   rÃ   rÉ   rÒ   Úfunction_is_staticmethodÚfunction_is_classmethodÚfunction_is_propertyrÑ   rH   r>   ú<module>rè      s,  ðØ 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ðBð Bð B€ð
€ð
"ð "ð "ð "ðJ
!ð 
!ð 
!ð/ð /ð /ðð ð ð	ð 	ð 	ð	ð 	ð 	ðð ð ð 26ØAFð1ð 1ð 1ð 1ðB
!ð 
!ð 
!ðð ð ð>Rð Rð Rðð ð ð(ð ð ð ð@ 2Ð1Ð2BÑCÔCÐ ð5ð 5ð 5ð/ð /ð /ðð ð ðð ð ð&ð ð ð  1Ð0Ð1NÐ1NÑOÔOÐ Ø/Ð/Ð0LÐ0LÑMÔMÐ Ø,Ð,ðð ñô Ð Ð Ð rH   