Ë
    ¬;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y)é    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        |«      }|j                  «       r|S | j                  «       }|€y |j                  }|j	                  |«      j                  «       S ©N)r   Úis_absoluteÚ
py__file__ÚparentÚjoinpathÚabsolute)Úmodule_contextr   ÚpathÚmodule_pathÚbase_dirs        úh/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jedi/inference/sys_path.pyÚ	_abs_pathr      sZ   € Ü�‹>€DØ×ÑÔØˆà ×+Ñ+Ó-€KØÐð à×!Ñ!€HØ×Ñ˜TÓ"×+Ñ+Ó-Ð-ó    c              #   óÈ  K  — t        |j                  ddd…   |j                  ddd…   «      D �]  \  }}	 |dv sJ ‚|j                  dv rt        |j                  «      dkD  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 ‚	 t        | j                  |«      |«      }|j                  «       j                  |«      D ]D  }|j                  «       D ]/  }t        |«      sŒt        | |j                  «       «      }	|	€Œ,|	–— Œ1 ŒF �Œ! y# t
        $ r Y �Œ/w xY w­w)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       sn  è ø€ ô " )×"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   ‚4E"·BEÃAE"Ä)E"ÅE"Å	EÅE"ÅEÅE"c              #   óþ  K  — |j                   dk(  rK|j                  d   dk(  r9|j                   dk(  r*|j                  d   dk(  rt        |j                  «      dk(  sy|j                  d   j                  }|dvry|j                  d   }|d	k(  r&t        |j                  «      d
v r|j                  d   }| j	                  |«      j                  |«      D ]#  }t        |«      }|€Œt        | |«      }|€Œ |–— Œ% y­w)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‰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ØÜ˜^¨QÓ/ˆØÑØ‹Nñ Dùs   ‚C3C=Ã6C=)Údefaultc           	      óž  — d„ }| j                   €g S g }	 | j                   j                  «       d   } ||«      D ]€  \  }}|j                  }t        |j                  «      dk\  r)|j                  t        | g|j                  dd ¢­Ž «       ŒS|€ŒV|j                  dk(  sŒf|j                  t        | |«      «       Œ‚ |S # t        $ r Y |S w xY w)z6
    Detect sys.path modifications within module.
    c              3   ód  K  — | D ]§  }|j                   j                   }|€Œ|j                  dv sŒ+|j                  }|d   j                  dk(  sŒJ|d   j                  dk(  sŒ]|d   j                  dk(  sŒp|d   j                  d   }|j                  dk(  sŒ’|j                  dk(  sŒ¢||f–— Œ© y ­w)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‘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Ó,=Ø" E˜kÓ)ñ ùs-   ‚B0¡B0°B0ÁB0Á"B0Á5!B0ÂB0Â'	B0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_modificationsrR   d   sà   € ò
	*ð ×ÑÐ'Øˆ	à€EðPØ'×1Ñ1×@Ñ@ÓBÀ6ÑJˆñ /¨~Ö>‰KˆD�%ØŸ™ˆIÜ�5—>‘>Ó" aÒ'Ø—‘Ü2Ø&ðØ).¯©¸¸!Ð)<òõð
 Ñ&¨9¯>©>¸[Ó+HØ—‘Ô3°NÀIÓNÕOð ?ð €Løô ò Øð €Lðús   •B? Â?	CÃCc                 ó¦   — t        «       }t        |«      D ]8  }t        | |«      D ]'  }|j                  |«       t	        |«      t
        k\  sŒ' Œ8 Œ: |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]   Š   sV   € Ü›EÐä :¸;Ö GÐÜ3°OÐEYÖZˆDØ!×%Ñ% dÔ+ÜÐ(Ó)Ô-KÓKÙñ [ð !Hð !Ð r   c           
   #   óX  K  — t        t        |«      «      }	 | j                  |dt        j                  ¬«      }ddlm	}  || ||d t        | j                  |«      ¬«      j                  «       }t        |«      E d {  –—†  y # t
        $ r t        j                  d|«       Y y w xY w7 Œ*­w)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ðØ%×+Ñ+ØØÜ×/Ñ/ð ,ó 
ˆõ 1Ù Ø˜ØØÜ(¨×)@Ñ)@ÐBVÓWô	÷
 �jƒlð ô ,¨NÓ;×;Ñ;øô ò Ü�‰Ð@ÐBVÔWÙðúð <ús4   ‚B*˜"B ºAB*Á=B(Á>B*ÂB%Â"B*Â$B%Â%B*r   c                 óŒ   — | j                   D ]&  }	 |j                  |«      j                  «       r|c S Œ( y # t        $ r Y Œ5w xY wr   )Úparentsr   Úis_fileÚOSError)r   Úfilenamer   s      r   Ú_get_parent_dir_with_filers   ¬   sM   € Ø—,”,ˆð	Ø�‰˜xÓ(×0Ñ0Ô2Ø’ð 3ð ð øô ò 	Ùð	ús   ‘ 7·	AÁAÚsearch_pathc              #   óÎ  K  — t        | d«      }|sy|j                  d«      }|j                  «       syt        j                  |«      D ]R  }	 |j                  |«      }t        |d«      5 }|j                  «       }|j                  d«      rd|v r|–— ddd«       ŒT y# 1 sw Y   ŒxY w# t        t        f$ r(}t        j                  t        |«      «       Y d}~Œ”d}~ww xY w­w)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   ¶   sÉ   è ø€ ô -¨[¸.ÓI€LÙØØ×$Ñ$ UÓ+€HØ�?‰?ÔØä—J‘J˜xÖ(ˆð
	Ø×(Ñ(¨Ó2ˆHÜ�h Ô$¨ØŸJ™J›L�	Ø×'Ñ'¨Ô-°(¸iÑ2GØ"’N÷ %øñ )÷ %Ð$ûô #¤GÐ,ò 	ô �M‰Mœ#˜a›&Ô!Üûð		üsH   ‚A
C%ÁB+Á**BÂB+ÂC%ÂB(	Â$B+Â+C"Â:CÃC%ÃC"Ã"C%c                 ó†   — t        «       dgz   D ]/  }| j                  |k(  sŒ| j                  | j                  «      }  | S  | S )Nz.pyi)r   ÚsuffixÚ	with_nameÚstem)r   r‡   s     r   Úremove_python_path_suffixrŠ   Ó   sB   € Ü“. F 8Ô+ˆØ�;‰;˜&Ó Ø—>‘> $§)¡)Ó,ˆDØØ€Kð	 ,ð €Kr   c                 óæ   ‡ ‡— t        ‰«      Š‰j                  j                  d«      ry‰j                  dk(  }|r‰j                  Šˆˆ fd„}t	         |«       «      }|sy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        ‰«      j                  | «      sŒt        ‰«      t        | «      d  }|j                  t        j                  j
                  «      s|j                  d«      r|dd  }|sŒw|j                  t        j                  j
                  «      }t        |«      s y t        d„ |D «       «      –— ŒÂ y ­w)NÚ/r   c              3   óJ   K  — | ]  }t        j                  d d|«      –— Œ y­w)z-stubs$Ú N)ÚreÚsub)Ú.0Úss     r   Ú	<genexpr>zMtransform_path_to_dotted.<locals>.iter_potential_solutions.<locals>.<genexpr>  s   è ø€ ÐIÁ5¸a¤§¡ z°2°q× 9Á5ùs   ‚!#)	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›   øè ø€ ÛˆAÜ�;Ó×*Ñ*¨1Õ-ä˜;Ó'¬¨A«¨Ð0�à—?‘?¤2§7¡7§;¡;Ô/°4·?±?À3Ô3Gà  ˜8�DâØ ŸJ™J¤r§w¡w§{¡{Ó3�EÜ˜uœ:ñ ô  ÑIÁ5ÓIÓIÓIñ% ùs   ƒ C
¤AC
Á=AC
c                 ó   — t        | «      S r   )r*   )rD   s    r   Ú<lambda>z*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   ) 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ß =Ý 3Ý Ý Ý à!#Ð ð.¨ó .ò('òVñ2  bÔ)ñ"ó *ð"òJ	!ò<ð, Dó ð¨Dó ò:ó5Lr   