ó
    Ð]jê'  ã                   óî   • S SK r S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  SrS\4S jrS rS r\" / S9S 5       rS rS rS\4S jrS\4S jrS rS rg)é    N)ÚPath)Úall_suffixes)Úinference_state_method_cache)ÚContextualizedNode)Ú	is_stringÚget_str_or_none)Úget_cached_code_lines)ÚFileIO)Úsettings)Údebugé
   Ústr_pathc                 óÄ   • [        U5      nUR                  5       (       a  U$ U R                  5       nUc  g UR                  nUR	                  U5      R                  5       $ ©N)r   Úis_absoluteÚ
py__file__ÚparentÚjoinpathÚabsolute)Úmodule_contextr   ÚpathÚmodule_pathÚbase_dirs        ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/jedi/inference/sys_path.pyÚ	_abs_pathr      s]   € Ü�‹>€DØ×Ñ×ÑØˆà ×+Ñ+Ó-€KØÑð à×!Ñ!€HØ×Ñ˜TÓ"×+Ñ+Ó-Ð-ó    c              #   óö  #   • [        UR                  SSS2   UR                  SSS2   5       GH2  u  p# US;   d   eUR                  S;   a  [        UR                  5      S:”  d   eUR                  nUS   R                  S:X  a  US   R                  S:X  d   eUS   nUR                  S   S	:X  a  UR                  S   R                  S
:X  d   e [        U R                  U5      U5      nUR                  5       R                  U5       HN  nUR                  5        H7  n[        U5      (       d  M  [        XR                  5       5      n	U	c  M3  U	v •  M9     MP     GM5     g! [
         a     GMF  f = f7f)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       sl  é € ô " )×"4Ñ"4±S°q°SÑ"9¸9×;MÑ;MÈaÈdÐQRÈdÑ;S×TÑˆð	Ø˜{Ó*Ð*Ð*Ø—=‘=Ð$:Ó:Ü�H×%Ñ%Ó&¨Ó*ð+ð +à×!Ñ!ˆAØ�Q‘4—9‘9 Ó&¨1¨Q©4¯:©:¸Ó+>Ð>Ð>Ø˜‘dˆGØ×#Ñ# AÑ&¨#Ó-°'×2BÑ2BÀ1Ñ2E×2KÑ2KÈvÓ2UÐUÐUð
ô   × =Ñ =¸iÓ HÈ)ÓTˆØŸ(™(›*×,Ñ,¨RÖ0ˆJØ#×)Ñ)Ö+�Ü˜U×#Ó#Ü(¨×9MÑ9MÓ9OÓP�HØÓ+Ø&œó	 ,ô 1ò1 Uøô( ó 	Ûð	üs6   ‚3E9¶BE'ÃAE9Ä7E9ÅE9Å'
E6Å1E9Å5E6Å6E9c              #   ó  #   • UR                   S:X  aO  UR                  S   S:X  a<  UR                   S:X  a,  UR                  S   S:X  a  [        UR                  5      S:X  d  gUR                  S   R                  nUS;  a  gUR                  S   nUS	:X  a(  [        UR                  5      S
;   a  UR                  S   nU R	                  U5      R                  U5       H'  n[        U5      nUc  M  [        X5      nUc  M#  Uv •  M)     g7f)zDextract 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‰M˜YÓ&¨8×+<Ñ+<¸QÑ+?À3Ó+FØ—‘ Ó*¨x×/@Ñ/@ÀÑ/CÀsÓ/JÜ�H×%Ñ%Ó&¨!Ó+Øà×Ñ˜QÑ×%Ñ%€DØÐ'Ó'ØØ
×
Ñ
˜AÑ
€CØˆxÓœC §¡Ó-°Ó7Ø�l‰l˜1‰oˆà×.Ñ.¨sÓ3×>Ñ>¸sÖCˆÜ˜EÓ"ˆØ‰9ÙÜ˜^Ó/ˆØÓØŒNò Dùs   ‚C=DÄ	D)Údefaultc           	      ó®  • S nU R                   c  / $ / n U R                   R                  5       S   nU" U5       H…  u  pEUR                  n[        UR                  5      S:¼  a*  UR                  [        U /UR                  SS Q76 5        MT  Uc  MY  UR                  S:X  d  Mk  UR                  [        X5      5        M‡     U$ ! [         a     U$ f = f)z.
Detect sys.path modifications within module.
c              3   ó„  #   • U  H¶  nUR                   R                   nUc  M  UR                  S;   d  M0  UR                  nUS   R                  S:X  d  MQ  US   R                  S:X  d  Mf  US   R                  S:X  d  M{  US   R                  S   nUR                  S:X  d  MŸ  UR                  S:X  d  M±  X4v •  M¸     g 7f)Nr!   r   r$   r%   r   r5   r   )r   r)   r(   r+   )Únamesr$   r"   r4   Úns        r   Úget_sys_path_powersÚ9check_sys_path_modifications.<locals>.get_sys_path_powersi   s™   é € ÛˆDØ—K‘K×&Ñ&ˆEØÓ  U§Z¡ZÐ3IÕ%IØ—N‘N�Ø�Q‘4—9‘9 Õ&¨1¨Q©4¯:©:¸Õ+>Ø˜a™DŸI™I¨Õ2Ø˜!™Ÿ™ aÑ(�AØ—v‘v Õ'¨A¯G©G°vÕ,=Ø"˜kÔ)ò ùs-   ‚C £C µC ÁC Á+C Â  C Â$C Â6
C r   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_modificationsrS   d   sÜ   € ò
	*ð ×ÑÑ'Øˆ	à€EðPØ'×1Ñ1×@Ñ@ÓBÀ6ÑJˆñ /¨~Ö>‰KˆDØŸ™ˆIÜ�5—>‘>Ó" aÓ'Ø—‘Ü2Ø&ðØ).¯©¸¸!Ð)<òöð
 Ó&¨9¯>©>¸[Õ+HØ—‘Ô3°NÓNÖOñ ?ð €Løô ó Øð €Lðús   –C Ã
CÃCc                 ó°   • [        5       n[        U5       H<  n[        X5       H*  nUR                  U5        [	        U5      [
        :¼  d  M)    M:     M>     U$ 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^   Š   sS   € Ü›EÐä :¸;Ö GÐÜ3°OÖZˆDØ!×%Ñ% dÔ+ÜÐ(Ó)Ô-KÕKÚó [ñ !Hð !Ð r   c           
   #   óN  #   • [        [        U5      5      n U R                  US[        R                  S9nSSKJ	n  U" XUS [        U R                  U5      S9R                  5       n[        U5       S h  v•N   g ! [
         a    [        R                  " SU5         g f = f N,7f)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.valuerc   r	   ÚgrammarÚ
as_contextrS   )rZ   r]   r`   Úmodule_noderc   r   s         r   rW   rW   –   s¬   é € Ü”SÐ-Ó.Ó/€GðØ%×+Ñ+ØØÜ×/Ñ/ð ,ð 
ˆõ 1Ù ØØØÜ(¨×)@Ñ)@ÐBVÓWñ	÷
 �jƒlð ô ,¨NÓ;×;Ñ;øô ó Ü�ŠÐ@ÐBVÔWÙðúñ <ùs3   ‚B%˜A< ·?B%Á6B#Á7B%Á<!B ÂB%ÂB Â B%r   c                 óž   • U R                    H,  n UR                  U5      R                  5       (       a  Us  $ M.     g ! [         a     M>  f = fr   )Úparentsr   Úis_fileÚOSError)r   Úfilenamer   s      r   Ú_get_parent_dir_with_filert   ¬   sP   € Ø—,”,ˆð	Ø�‰˜xÓ(×0Ñ0×2Ñ2Ø’ñ 3ñ ð øô ó 	Úð	ús   ‘%>¾
AÁAÚsearch_pathc              #   ó  #   • [        U S5      nU(       d  gUR                  S5      nUR                  5       (       d  g[        R                  " U5       HZ  n UR                  U5      n[        US5       nUR                  5       nUR                  S5      (       a
  SU;   a  Uv •  SSS5        M\     g! , (       d  f       Mn  = f! [        [        4 a*  n[        R                  " [        U5      5         SnAM¦  SnAff = f7f)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)rt   r   ÚexistsÚosÚlistdirÚopenÚreadlineÚ
startswithÚUnicodeDecodeErrorri   r   rj   rf   )ru   Úproject_rootÚbin_pathrs   ÚfilepathÚfÚ	firstlineÚes           r   rV   rV   ¶   sÐ   é € ô -¨[¸.ÓI€LÞØØ×$Ñ$ UÓ+€HØ�?‰?×ÑØä—J’J˜xÖ(ˆð
	Ø×(Ñ(¨Ó2ˆHÜ�h Ô$¨ØŸJ™J›L�	Ø×'Ñ'¨×-Ñ-°(¸iÓ2GØ"’N÷ %Ñ$ò )÷ %Ö$ûô #¤GÐ,ó 	ô �MŠMœ#˜a›&Ô!Ýûð		üsT   ‚ADÁCÁ51B3Â&CÂ.DÂ3
C	Â=CÃ DÃCÃC?ÃC:Ã4DÃ:C?Ã?Dc                 óŒ   • [        5       S/-    H1  nU R                  U:X  d  M  U R                  U R                  5      n   U $    U $ )Nz.pyi)r   ÚsuffixÚ	with_nameÚstem)r   rˆ   s     r   Úremove_python_path_suffixr‹   Ó   sB   € Ü“. F 8Ô+ˆØ�;‰;˜&Õ Ø—>‘> $§)¡)Ó,ˆDØØ€Kñ	 ,ð €Kr   c                 ó   ^ ^• [        T5      mTR                  R                  S5      (       a  gTR                  S:H  nU(       a  TR                  mUU 4S jn[	        U" 5       5      nU(       d  g[        US S9S   U4$ )a3  
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   óÒ  >#   • T HÜ  n [        T5      R                  U 5      (       d  M$  [        T5      [        U 5      S  nUR                  [        R                  R
                  5      (       d  UR                  S5      (       a  USS  nU(       d  M�  UR                  [        R                  R
                  5      n[        U5      (       d    g [        S U 5       5      v •  MÞ     g 7f)NÚ/r   c              3   óR   #   • U  H  n[         R                  " S SU5      v •  M     g7f)z-stubs$Ú N)ÚreÚsub)Ú.0Úss     r   Ú	<genexpr>ÚMtransform_path_to_dotted.<locals>.iter_potential_solutions.<locals>.<genexpr>  s    é € ÐIÂ5¸a¤§¢ z°2°q× 9Ð 9Â5ùs   ‚%')	rf   r   r*   r{   r   ÚsepÚsplitÚallÚtuple)rD   Úrestr™   r   Úsys_paths      €€r   Úiter_potential_solutionsÚ:transform_path_to_dotted.<locals>.iter_potential_solutionsò   s§   øé € ÛˆAÜ�;Ó×*Ñ*¨1×-Ó-ä˜;Ó'¬¨A«¨Ð0�à—?‘?¤2§7¡7§;¡;×/Ñ/°4·?±?À3×3GÑ3Gà  ˜8�Dç�4Ø ŸJ™J¤r§w¡w§{¡{Ó3�EÜ˜uŸ:™:ñ ô  ÑIÁ5ÓIÓIÔIò% ùs   ƒ#C'ªA%C'ÂAC'c                 ó   • [        U 5      $ r   )r*   )rD   s    r   Ú<lambda>Ú*transform_path_to_dotted.<locals>.<lambda>  s   € ´S¸´Vr   )Úkeyr   )r‹   r$   r   r   r›   Úsorted)r�   r   Ú
is_packagerž   Úpotential_solutionss   ``   r   Útransform_path_to_dottedr§   Û   s�   ù€ ô ,¨KÓ8€KØ×Ñ×"Ñ" 3×'Ñ'Øð ×!Ñ! ZÑ/€JÞØ!×(Ñ(ˆöJô*  Ñ 8Ó :Ó;ÐÞØô Ð%Ñ+;Ñ<¸QÑ?ÀÐKÐKr   ) r{   r’   Úpathlibr   Úimportlib.machineryr   Újedi.inference.cacher   Újedi.inference.base_valuer   Újedi.inference.helpersr   r   Újedi.parser_utilsr	   Újedi.file_ior
   Újedir   r   rY   rf   r   r9   rE   rS   r^   rW   rt   rV   r‹   r§   © r   r   Ú<module>r±      sŠ   ðÛ 	Û 	Ý Ý ,å =Ý 8ß =Ý 3Ý Ý Ý à!#Ð ð.¨ô .ò('òVñ2  bÑ)ñ"ó *ð"òJ	!ò<ð, Dô ð¨Dô ò:ó5Lr   