§
    ŒŸ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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ dZdefd„Zd„ Zd„ Z eg ¬¦  «        d„ ¦   «         Zd„ Zd„ Zdefd„Zdefd„Zd„ Zd„ ZdS )é    N)ÚPath)Úall_suffixes)Úinference_state_method_cache)ÚContextualizedNode)Ú	is_stringÚget_str_or_none)Úget_cached_code_lines)ÚFileIO)Úsettings)Údebugé
   Ústr_pathc                 óØ   — t          |¦  «        }|                     ¦   «         r|S |                      ¦   «         }|€d S |j        }|                     |¦  «                             ¦   «         S ©N)r   Úis_absoluteÚ
py__file__ÚparentÚjoinpathÚabsolute)Úmodule_contextr   ÚpathÚmodule_pathÚbase_dirs        úd/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/inference/sys_path.pyÚ	_abs_pathr      sl   € Ý�‰>Œ>€DØ×ÒÑÔð Øˆà ×+Ò+Ñ-Ô-€KØÐð ˆtàÔ!€HØ×Ò˜TÑ"Ô"×+Ò+Ñ-Ô-Ð-ó    c              #   óÖ  K  — t          |j        ddd…         |j        ddd…         ¦  «        D �]8\  }}	 |dv sJ ‚|j        dv rt          |j        ¦  «        dk    sJ ‚|j        }|d         j        dk    r|d         j        dk    sJ ‚|d         }|j        d         d	k    r|j        d         j        d
k    sJ ‚n# t
          $ r Y Œ™w xY wt          |                      |¦  «        |¦  «        }|                     ¦   «          	                    |¦  «        D ]P}|                     ¦   «         D ]9}t          |¦  «        r(t          | |                     ¦   «         ¦  «        }	|	�|	V — Œ:ŒQ�Œ:dS )a¾  
    Extracts the assigned strings from an assignment that looks as follows::

        sys.path[0:0] = ['module/path', 'another/module/path']

    This function is in general pretty tolerant (and therefore 'buggy').
    However, it's not a big issue usually to add more paths to Jedi's sys_path,
    because it will only affect Jedi in very random situations and by adding
    more paths than necessary, it usually benefits the general user.
    Né   é   )ú=z+=©ÚpowerÚ	atom_exprr   ÚnameÚsysú.r   )ÚzipÚchildrenÚtypeÚlenÚvalueÚAssertionErrorr   Úcreate_contextÚinferÚiterater   r   Úget_safe_value)
r   Ú	expr_stmtÚassigneeÚoperatorÚcÚtrailerÚcnÚ
lazy_valuer+   Úabs_paths
             r   Ú_paths_from_assignmentr9       s¾  è è € õ " )Ô"4°S°S°q°SÔ"9¸9Ô;MÈaÈdÐQRÈdÔ;SÑTÔTð 'ñ 'Ñˆ�(ð	Ø˜{Ð*Ð*Ð*Ð*Ø”=Ð$:Ð:Ð:Ý�HÔ%Ñ&Ô&¨Ò*Ð*Ð*Ð*ØÔ!ˆAØ�Q”4”9 Ò&Ð&¨1¨Q¬4¬:¸Ò+>Ð+>Ð+>Ð+>Ø˜”dˆGØÔ# AÔ&¨#Ò-Ð-°'Ô2BÀ1Ô2EÔ2KÈvÒ2UÐ2UÐ2UÐ2Uð
øõ ð 	ð 	ð 	ØˆHð	øøøõ   × =Ò =¸iÑ HÔ HÈ)ÑTÔTˆØŸ(š(™*œ*×,Ò,¨RÑ0Ô0ð 	'ð 	'ˆJØ#×)Ò)Ñ+Ô+ð 'ð '�Ý˜UÑ#Ô#ð 'Ý(¨¸×9MÒ9MÑ9OÔ9OÑPÔP�HØÐ+Ø&˜˜˜øð	'ñ	'ð1'ð 's   ¶BB<Â<
C	ÃC	c              #   óð  K  — |j         dk    rE|j        d         dk    r4|j         dk    r)|j        d         dk    rt          |j        ¦  «        dk    sdS |j        d         j        }|dvrdS |j        d         }|d	k    r#t          |j        ¦  «        d
v r|j        d         }|                      |¦  «                             |¦  «        D ]*}t          |¦  «        }|€Œt          | |¦  «        }|�|V — Œ+dS )zE extract the path from either "sys.path.append" or "sys.path.insert" r5   r   r&   ú(é   Nr   )ÚinsertÚappendr=   )r<   é   r   )r)   r(   r*   r+   r-   Ú
infer_noder   r   )r   Útrailer1Útrailer2r$   Úargr+   Úpr8   s           r   Ú_paths_from_list_modificationsrE   K   s"  è è € ð ŒM˜YÒ&Ð&¨8Ô+<¸QÔ+?À3Ò+FÐ+FØ” Ò*Ð*¨xÔ/@ÀÔ/CÀsÒ/JÐ/JÝ�HÔ%Ñ&Ô&¨!Ò+Ð+ØˆàÔ˜QÔÔ%€DØÐ'Ð'Ð'ØˆØ
Ô
˜AÔ
€CØˆxÒÐ�C ¤Ñ-Ô-°Ð7Ð7ØŒl˜1Œoˆà×.Ò.¨sÑ3Ô3×>Ò>¸sÑCÔCð ð ˆÝ˜EÑ"Ô"ˆØˆ9ØÝ˜^¨QÑ/Ô/ˆØÐØˆNˆNˆNøðð r   )Údefaultc           	      ó   — d„ }| j         €g S g }	 | j                              ¦   «         d         } ||¦  «        D ]‚\  }}|j        }t          |j        ¦  «        dk    r.|                     t          | g|j        dd…         ¢R Ž ¦  «         ŒR|�.|j        dk    r#|                     t          | |¦  «        ¦  «         Œƒn# t          $ r Y nw xY w|S )z6
    Detect sys.path modifications within module.
    c              3   ó  K  — | D ]‚}|j         j         }|�r|j        dv ri|j        }|d         j        dk    rQ|d         j        dk    r@|d         j        dk    r/|d         j        d         }|j        dk    r|j        dk    r||fV — Œƒd S )Nr!   r   r$   r%   r   r5   r   )r   r)   r(   r+   )Únamesr$   r"   r4   Úns        r   Úget_sys_path_powersz9check_sys_path_modifications.<locals>.get_sys_path_powersi   s¯   è è € Øð 	*ð 	*ˆDØ”KÔ&ˆEØÐ  U¤ZÐ3IÐ%IÐ%IØ”N�Ø�Q”4”9 Ò&Ð&¨1¨Q¬4¬:¸Ò+>Ð+>Ø˜aœDœI¨Ò2Ð2Ø˜!œœ aÔ(�AØ”v Ò'Ð'¨A¬G°vÒ,=Ð,=Ø" E˜kÐ)Ð)Ð)øð	*ð 	*r   Nr   r?   r   r1   )
Ú	tree_nodeÚget_used_namesr   r*   r(   ÚextendrE   r)   r9   ÚKeyError)r   rK   ÚaddedÚpossible_namesr$   r"   r1   s          r   Úcheck_sys_path_modificationsrR   d   s'  € ð
	*ð 	*ð 	*ð ÔÐ'Øˆ	à€EðPØ'Ô1×@Ò@ÑBÔBÀ6ÔJˆð /Ð.¨~Ñ>Ô>ð 		Pð 		P‰KˆD�%ØœˆIÝ�5”>Ñ"Ô" aÒ'Ð'Ø—’Ý2Ø&ðØ).¬¸¸!¸Ô)<ðð ð ñô ð ð ð
 Ð&¨9¬>¸[Ò+HÐ+HØ—’Õ3°NÀIÑNÔNÑOÔOÐOøð		Pøõ ð ð ð Øˆðøøøð €Ls   �B> Â>
CÃ
Cc                 óÊ   — t          ¦   «         }t          |¦  «        D ]D}t          | |¦  «        D ]1}|                     |¦  «         t	          |¦  «        t
          k    r nŒ2ŒE|S r   )ÚsetÚ_get_buildout_script_pathsÚ_get_paths_from_buildout_scriptÚaddr*   Ú_BUILDOUT_PATH_INSERTION_LIMIT)Úinference_stateÚscript_pathÚbuildout_script_pathsÚbuildout_script_pathr   s        r   Údiscover_buildout_pathsr]   Š   s{   € Ý™EœEÐå :¸;Ñ GÔ Gð ð ÐÝ3°OÐEYÑZÔZð 	ð 	ˆDØ!×%Ò% dÑ+Ô+Ð+ÝÐ(Ñ)Ô)Õ-KÒKÐKØ�ð Løð !Ð r   c           
   #   óv  K  — t          t          |¦  «        ¦  «        }	 |                      |dt          j        ¬¦  «        }n&# t
          $ r t          j        d|¦  «         Y d S w xY wddlm	}  || ||d t          | j        |¦  «        ¬¦  «                             ¦   «         }t          |¦  «        E d {V —† d S )NT)Úfile_ioÚcacheÚ
cache_pathz(Error trying to read buildout_script: %sr   )ÚModuleValue)r_   Ústring_namesÚ
code_lines)r
   ÚstrÚparser   Úcache_directoryÚIOErrorr   ÚwarningÚjedi.inference.valuerb   r	   ÚgrammarÚ
as_contextrR   )rY   r\   r_   Úmodule_noderb   r   s         r   rV   rV   –   sý   è è € Ý•SÐ-Ñ.Ô.Ñ/Ô/€GðØ%×+Ò+ØØÝÔ/ð ,ñ 
ô 
ˆˆøõ
 ð ð ð ÝŒÐ@ÐBVÑWÔWÐWØˆˆðøøøð 1Ð0Ð0Ð0Ð0Ð0Ø �[Ø˜ØØÝ(¨Ô)@ÐBVÑWÔWð	ñ ô ÷
 ‚j�l„lð õ ,¨NÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;s    "A ÁA&Á%A&r   c                 ó’   — | j         D ]>}	 |                     |¦  «                             ¦   «         r|c S Œ/# t          $ r Y Œ;w xY wd S r   )Úparentsr   Úis_fileÚOSError)r   Úfilenamer   s      r   Ú_get_parent_dir_with_filers   ¬   sk   € Ø”,ð ð ˆð	Ø�Š˜xÑ(Ô(×0Ò0Ñ2Ô2ð Ø���ðøåð 	ð 	ð 	ØˆHð	øøøàˆ4s   ‹(7·
AÁAÚsearch_pathc              #   ó  K  — t          | d¦  «        }|sdS |                     d¦  «        }|                     ¦   «         sdS t          j        |¦  «        D ]°}	 |                     |¦  «        }t          |d¦  «        5 }|                     ¦   «         }|                     d¦  «        rd|v r|V — ddd¦  «         n# 1 swxY w Y   Œr# t          t          f$ r+}t          j        t          |¦  «        ¦  «         Y d}~Œ©d}~ww xY wdS )zü
    if there is a 'buildout.cfg' file in one of the parent directories of the
    given module it will return a list of all files in the buildout bin
    directory that look like python files.

    :param search_path: absolute path to the module.
    zbuildout.cfgNÚbinÚrz#!Úpython)rs   r   ÚexistsÚosÚlistdirÚopenÚreadlineÚ
startswithÚUnicodeDecodeErrorrh   r   ri   re   )rt   Úproject_rootÚbin_pathrr   ÚfilepathÚfÚ	firstlineÚes           r   rU   rU   ¶   sk  è è € õ -¨[¸.ÑIÔI€LØð ØˆØ×$Ò$ UÑ+Ô+€HØ�?Š?ÑÔð Øˆå”J˜xÑ(Ô(ð ð ˆð
	Ø×(Ò(¨Ñ2Ô2ˆHÝ�h Ñ$Ô$ð #¨ØŸJšJ™LœL�	Ø×'Ò'¨Ñ-Ô-ð #°(¸iÐ2GÐ2GØ"�N�N�Nð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #øøõ #¥GÐ,ð 	ð 	ð 	õ ŒM�#˜a™&œ&Ñ!Ô!Ð!ØˆHˆHˆHˆHøøøøð		øøøðð s<   Á%CÁ>2B<Â0CÂ<C 	Ã CÃC 	ÃCÃDÃ!C?Ã?Dc                 ó~   — t          ¦   «         dgz   D ])}| j        |k    r|                      | j        ¦  «        }  nŒ*| S )Nz.pyi)r   ÚsuffixÚ	with_nameÚstem)r   r‡   s     r   Úremove_python_path_suffixrŠ   Ó   sM   € Ý‘.”. F 8Ñ+ð ð ˆØŒ;˜&Ò Ð Ø—>’> $¤)Ñ,Ô,ˆDØˆEð !ð €Kr   c                 óú   ‡ ‡— t          ‰¦  «        Š‰j                             d¦  «        rdS ‰j        dk    }|r‰j        Šˆˆ fd„}t	           |¦   «         ¦  «        }|sdS t          |d„ ¬¦  «        d         |fS )aK  
    Returns the dotted path inside a sys.path as a list of names. e.g.

    >>> transform_path_to_dotted([str(Path("/foo").absolute())], Path('/foo/bar/baz.py').absolute())
    (('bar', 'baz'), False)

    Returns (None, False) if the path doesn't really resolve to anything.
    The second return part is if it is a package.
    r&   )NFÚ__init__c               3   óÎ  •K  — ‰D ]Þ} t          ‰¦  «                             | ¦  «        rºt          ‰¦  «        t          | ¦  «        d …         }|                     t          j        j        ¦  «        s|                     d¦  «        r
|dd …         }|rQ|                     t          j        j        ¦  «        }t          |¦  «        s d S t          d„ |D ¦   «         ¦  «        V — Œßd S )Nú/r   c              3   óB   K  — | ]}t          j        d d|¦  «        V — ŒdS )z-stubs$Ú N)ÚreÚsub)Ú.0Úss     r   ú	<genexpr>zMtransform_path_to_dotted.<locals>.iter_potential_solutions.<locals>.<genexpr>  s0   è è € ÐIÐI¸a¥¤ z°2°qÑ 9Ô 9ÐIÐIÐIÐIÐIÐIr   )	re   r~   r*   rz   r   ÚsepÚsplitÚallÚtuple)rD   Úrestr—   r   Úsys_paths      €€r   Úiter_potential_solutionsz:transform_path_to_dotted.<locals>.iter_potential_solutionsò   sò   øè è € Øð 	Jð 	JˆAÝ�;ÑÔ×*Ò*¨1Ñ-Ô-ð Jå˜;Ñ'Ô'­¨A©¬¨¨Ô0�à—?’?¥2¤7¤;Ñ/Ô/ð $°4·?²?À3Ñ3GÔ3Gð $à   œ8�Dàð 	JØ ŸJšJ¥r¤w¤{Ñ3Ô3�EÝ˜u™:œ:ð ð ˜˜õ  ÐIÐIÀ5ÐIÑIÔIÑIÔIÐIÐIÐIøð%	Jð 	Jr   c                 ó    — t          | ¦  «        S r   )r*   )rD   s    r   ú<lambda>z*transform_path_to_dotted.<locals>.<lambda>  s   € µS¸±V´V€ r   )Úkeyr   )rŠ   r$   r~   r   r™   Úsorted)r›   r   Ú
is_packagerœ   Úpotential_solutionss   ``   r   Útransform_path_to_dottedr£   Û   s¿   øø€ õ ,¨KÑ8Ô8€KØÔ×"Ò" 3Ñ'Ô'ð Øˆ{ð Ô! ZÒ/€JØð )Ø!Ô(ˆðJð Jð Jð Jð Jð Jõ*  Ð 8Ð 8Ñ :Ô :Ñ;Ô;ÐØð Øˆ{õ Ð%Ð+;Ð+;Ð<Ñ<Ô<¸QÔ?ÀÐKÐKr   ) rz   r‘   Úpathlibr   Úimportlib.machineryr   Újedi.inference.cacher   Újedi.inference.base_valuer   Újedi.inference.helpersr   r   Újedi.parser_utilsr	   Újedi.file_ior
   Újedir   r   rX   re   r   r9   rE   rR   r]   rV   rs   rU   rŠ   r£   © r   r   ú<module>r­      s«  ðØ 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à =Ð =Ð =Ð =Ð =Ð =Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à!#Ð ð.¨ð .ð .ð .ð .ð('ð ('ð ('ðVð ð ð2 Ð bÐ)Ñ)Ô)ð"ð "ñ *Ô)ð"ðJ	!ð 	!ð 	!ð<ð <ð <ð, Dð ð ð ð ð¨Dð ð ð ð ð:ð ð ð5Lð 5Lð 5Lð 5Lð 5Lr   