ó
    Ð]jD  ã                   ój  • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJrJr  SSKJrJrJr  SSKr\
(       a  SSKJr  \" S	S
5      r/ SQrSS/rSr\R4                  R6                  < S\R4                  R8                  < 3r " S S\5      r " S S5      r S r! " S S\ 5      r" " S S5      r# " S S\#\"5      r$ " S S\#\ 5      r%S4S jr&S r'S r(S  r)S! r*\" S"S#9S$ 5       r+S5S%S%S&.S' jjr,SS(.S) jr-SS(.S* jr.S%SS+.S, jr/S6S- jr0\Rb                  S.:X  a  S/ r2S0 r3S1 r4S2 r5S3 r6g)7z¡
Environments are a way to activate different Python versions or Virtualenvs for
static analysis. The Python binary in that environment is going to be executed.
é    N)Ú
namedtuple)Úwhich)ÚTYPE_CHECKINGÚAny)Úmemoize_methodÚ
time_cache)ÚCompiledSubprocessÚInferenceStateSameProcessÚInferenceStateSubprocess)ÚInferenceStateÚVersionInfozmajor minor micro)z3.14z3.13z3.12z3.11z3.10z/usr/binz/usr/local/binÚCONDA_PREFIXÚ.c                   ó   • \ rS rSrSrSrg)ÚInvalidPythonEnvironmenté   z†
If you see this exception, the Python executable or Virtualenv you have
been trying to use is probably not a correct Python version.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚQ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/jedi/api/environment.pyr   r      s   † ôr   r   c                   óJ   • \ rS rSr% \\S'   \\S'   \S 5       r\S 5       r	Sr
g)Ú_BaseEnvironmenté&   Úversion_infoÚ
executablec                 óŒ   • U R                   R                  < SU R                   R                  < 3n[        R                  " US9$ )Nr   ©Úversion)r   ÚmajorÚminorÚparsoÚload_grammar)ÚselfÚversion_strings     r   Úget_grammarÚ_BaseEnvironment.get_grammar*   s5   € à$(×$5Ñ$5×$;Ô$;¸T×=NÑ=N×=TÓ=TÐUˆÜ×!Ò!¨.Ñ9Ð9r   c                 óˆ   •  U R                   $ ! [         a)    [        U R                  5      U l         U R                   s $ f = f©N)Ú_hashÚAttributeErrorÚ_calculate_sha256_for_filer    ©r(   s    r   Ú_sha256Ú_BaseEnvironment._sha256/   s:   € ð	Ø—:‘:ÐøÜó 	Ü3°D·O±OÓDˆDŒJØ—:‘:Òð	ús   ‚ Ž0AÁ A)r.   N)r   r   r   r   r   Ú__annotations__r   r*   Úpropertyr2   r   r   r   r   r   r   &   s3   ‡ ØÓØƒOàñ:ó ð:ð ñó ór   r   c                  óf   • [         R                  [         R                  [         R                  S S 4$ ©Né   )Úsysr    Úprefixr   r   r   r   Ú	_get_infor;   8   s*   € ä�‰Ü�
‰
Ü×Ñ˜˜!Ððð r   c                   óT   • \ rS rSrSrSrSS jrS rS rSSS	\	4S
 jr
\S 5       rSrg)ÚEnvironmenté@   zÌ
This class is supposed to be created by internal Jedi architecture. You
should not create it directly. Please use create_environment or the other
functions instead. It is then returned by that function.
Nc                 ó<   • Xl         X l        U R                  5         g r-   )Ú_start_executableÚ	_env_varsÚ_get_subprocess)r(   r    Úenv_varss      r   Ú__init__ÚEnvironment.__init__H   s   € Ø!+ÔØ!Œà×ÑÕr   c                 ó¶  • U R                   b'  U R                   R                  (       d  U R                   $  [        U R                  U R                  S9U l         U R                   R                  S [        5      nUS   U l	         US   U l
         [        US   6 U l         U R                   $ ! [         a"  n[        SU R                  < SU< 35      eS nAff = f)N©rC   z&Could not get version information for ú: r   é   é   )Ú_subprocessÚ
is_crashedr	   r@   rA   Ú_sendr;   Ú	Exceptionr   r    ÚpathÚ_VersionInfor   )r(   ÚinfoÚexcs      r   rB   ÚEnvironment._get_subprocessN   sÜ   € Ø×ÑÑ'°×0@Ñ0@×0K×0KØ×#Ñ#Ð#ð	Ü1°$×2HÑ2HØ;?¿>¹>ñ KˆDÔà×#Ñ#×)Ñ)¨$´	Ó:ˆDð ˜q™'ˆŒð	ð ˜‘GˆŒ	ð	ô )¨$¨q©'Ð2ˆÔð	ð ×ÑÐøô+ ó 	Ý*à×*Ô*Úðóð ûð	ús   ¶AB, Â,
CÂ6CÃCc                 ó    • SR                  S U R                   5       5      nSU R                  R                  < SU< SU R                  < S3$ )Nr   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr-   )Ústr)Ú.0Úis     r   Ú	<genexpr>Ú'Environment.__repr__.<locals>.<genexpr>n   s   é € Ð=Ò+< aœ3˜qŸ6˜6Ò+<ùs   ‚Ú<rH   z in Ú>)Újoinr   Ú	__class__r   rO   )r(   r#   s     r   Ú__repr__ÚEnvironment.__repr__m   s7   € Ø—(‘(Ñ=¨4×+<Ò+<Ó=Ó=‰Ø#'§>¡>×#:Ô#:»GÀTÇYÄYÐOÐOr   Úinference_stater   Úreturnc                 ó4   • [        XR                  5       5      $ r-   )r   rB   ©r(   ra   s     r   Úget_inference_state_subprocessÚ*Environment.get_inference_state_subprocessq   s   € ô (¨×9MÑ9MÓ9OÓPÐPr   c                 ó>   • U R                  5       R                  5       $ )z�
The sys path for this environment. Does not include potential
modifications from e.g. appending to :data:`sys.path`.

:returns: list of str
)rB   Úget_sys_pathr1   s    r   rh   ÚEnvironment.get_sys_pathw   s   € ð ×#Ñ#Ó%×2Ñ2Ó4Ð4r   )rA   r@   rK   r    rO   r   r-   )r   r   r   r   r   rK   rD   rB   r_   r   re   r   rh   r   r   r   r   r=   r=   @   sL   † ñð
 €Kôò ò>PðQà)ðQð 
"ôQð ñ5ó ó5r   r=   c                   ó   • \ rS rSrS rSrg)Ú_SameEnvironmentMixiné‡   c                 ó°   • [         R                  =U l        U l        [         R                  U l        [        [         R                  S S 6 U l        S U l        g r7   )r9   r    r@   r:   rO   rP   r   rA   r1   s    r   rD   Ú_SameEnvironmentMixin.__init__ˆ   sA   € Ü36·>±>ÐAˆÔ ¤Ü—J‘JˆŒ	Ü(¬#×*:Ñ*:¸2¸AÐ*>Ð?ˆÔØˆ�r   )rA   r@   r    rO   r   N)r   r   r   r   rD   r   r   r   r   rk   rk   ‡   s   † õr   rk   c                   ó   • \ rS rSrSrg)ÚSameEnvironmenté�   r   N)r   r   r   r   r   r   r   r   rp   rp   �   s   † Úr   rp   c                   ó,   • \ rS rSrSSS\4S jrS rSrg)	ÚInterpreterEnvironmenté“   ra   r   rb   c                 ó   • [        U5      $ r-   )r
   rd   s     r   re   Ú5InterpreterEnvironment.get_inference_state_subprocess”   s   € ô )¨Ó9Ð9r   c                 ó"   • [         R                  $ r-   )r9   rO   r1   s    r   rh   Ú#InterpreterEnvironment.get_sys_pathš   s   € Ü�x‰xˆr   r   N)r   r   r   r   r
   re   rh   r   r   r   r   rs   rs   “   s   † ð:à)ð:ð 
#ô:õr   rs   c                 ó6  • [         R                  R                  U 5      nU(       ac  [         R                  R	                  U5      [         R                  R	                  [
        R                  5      :X  a
  [        5       $  [        USS9$ g! [         a     gf = f)zÐGet virtualenv environment from VIRTUAL_ENV environment variable.

It uses `safe=False` with ``create_environment``, because the environment
variable is considered to be safe / controlled by the user solely.
F©ÚsafeN)
ÚosÚenvironÚgetrO   Úrealpathr9   r:   Ú_try_get_same_envÚcreate_environmentr   )Úenv_varÚvars     r   Ú_get_virtual_env_from_varr„   ž   sy   € ô �*‰*�.‰.˜Ó
!€CÞ
ô
 �7‰7×Ñ˜CÓ ¤B§G¡G×$4Ñ$4´S·Z±ZÓ$@Ó@Ü$Ó&Ð&ð	Ü% c°Ñ6Ð6ð øô (ó 	Ùð	ús   Â 	B Â
BÂBc                 ó  ^• [         R                  " 5       n[        U S5       m[        U4S jS5       H  nUR	                  U5        M     S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)NÚrbc                  óB   >• T R                  [        R                  5      $ r-   )ÚreadÚfilecmpÚBUFSIZE)Úfs   €r   Ú<lambda>Ú,_calculate_sha256_for_file.<locals>.<lambda>¶   s   ø€  !§&¡&¬¯©Ô"9r   r   )ÚhashlibÚsha256ÚopenÚiterÚupdateÚ	hexdigest)rO   r�   Úblockr‹   s      @r   r0   r0   ³   sj   ø€ Ü�^Š^Ó€FÜ	ˆd�DÔ	˜QÜÔ9¸3Ö?ˆEØ�M‰M˜%Ö ñ @÷ 
ð ×ÑÓÐ÷ 
Ô	ð ×ÑÓÐús   £)A$Á$
Bc                  ó\   • [        5       n U b  U $ [        [        5      nUb  U$ [        5       $ )a`  
Tries to return an active Virtualenv or conda environment.
If there is no VIRTUAL_ENV variable or no CONDA_PREFIX variable set
set it will return the latest Python version installed on the system. This
makes it possible to use as many new Python features as possible when using
autocompletion and other functionality.

:returns: :class:`.Environment`
)r„   Ú
_CONDA_VARr€   )Úvirtual_envÚ	conda_envs     r   Úget_default_environmentr™   »   s7   € ô ,Ó-€KØÑØÐä)¬*Ó5€IØÑØÐäÓÐr   c                  óH  • [        5       n [        R                  R                  U R                  5      R                  5       R                  S5      (       dÌ  [        R                  S:X  a  SnOCS[        R                  S   < S[        R                  S   < 3S[        R                  S   -  S4nU Hb  n[        R                  R                  [        R                  U5      n[        R                  R                  U5      (       d  MW  [        U5      s  $    [        5       $ U $ )	NÚpythonÚnt)zScripts\python.exeú
python.exez
bin/pythonr   r   rI   zbin/python%s)rp   r|   rO   Úbasenamer    ÚlowerÚ
startswithÚnamer9   r   r#   r]   Úexec_prefixÚisfiler=   rs   )ÚenvÚchecksÚcheckÚguesss       r   r€   r€   Ð   sÞ   € Ü
Ó
€CÜ�7‰7×Ñ˜CŸN™NÓ+×1Ñ1Ó3×>Ñ>¸x×HÑHô �7‰7�d‹?ð ;‰Fð ô &)×%5Ñ%5°aÔ%8¼#¿+¹+Àa».ÐIØ¤#×"2Ñ"2°1Ñ"5Ñ6ØðˆFó
 ˆEÜ—G‘G—L‘L¤§¡°%Ó8ˆEÜ�w‰w�~‰~˜e×$Ó$ä" 5Ó)Ò)ñ	 ô &Ó'Ð'ð €Jr   c                  óŠ  • [         R                  R                  S5      =(       d#    [         R                  R                  [        5      n [	        5       nU (       ah  [         R
                  R                  U 5      [         R
                  R                  UR
                  5      :w  a  [        R                  5         [	        5       $ U$ )NÚVIRTUAL_ENV)r|   r}   r~   r–   Ú_get_cached_default_environmentrO   r   Úclear_cache)rƒ   Úenvironments     r   Úget_cached_default_environmentr­   ø   sy   € Ü
�*‰*�.‰.˜Ó
'×
E¬2¯:©:¯>©>¼*Ó+E€CÜ1Ó3€Kö Œr�w‰w×Ñ Ó$¬¯©×(8Ñ(8¸×9IÑ9IÓ(JÓJÜ'×3Ñ3Ô5Ü.Ó0Ð0ØÐr   iX  )Úsecondsc                  óL   •  [        5       $ ! [         a    [        5       s $ f = fr-   )r™   r   rs   r   r   r   rª   rª     s*   € ð(Ü&Ó(Ð(øÜ#ó (ô
 &Ó'Ò'ð(ús   ‚	 Œ#¢#T)r{   Úuse_environment_varsc             #   ó†  #   • U c  / n [        5       nU(       a]  [        5       nUb  Uv •  UR                  UR                  5        [        [        5      nUb  Uv •  UR                  UR                  5        U  H³  n[
        R                  R                  U5      (       d  M)  [
        R                  R                  U5      n[
        R                  " U5       HQ  n[
        R                  R                  Xg5      nXs;   a  M)  UR                  U5         [        XqS9n[        U5      v •  MS     Mµ     g! [         a     Mg  f = f7f)aÕ  
:param paths: A list of paths in your file system to be scanned for
    Virtualenvs. It will search in these paths and potentially execute the
    Python binaries.
:param safe: Default True. In case this is False, it will allow this
    function to execute potential `python` environments. An attacker might
    be able to drop an executable in a path this function is searching by
    default. If the executable has not been installed by root, it will not
    be executed.
:param use_environment_vars: Default True. If True, the VIRTUAL_ENV
    variable will be checked if it contains a valid VirtualEnv.
    CONDA_PREFIX will be checked to see if it contains a valid conda
    environment.

:yields: :class:`.Environment`
Nrz   )Úsetr„   ÚaddrO   r–   r|   ÚisdirÚabspathÚlistdirr]   Ú_get_executable_pathr=   r   )	Úpathsr{   r°   Ú_used_pathsr—   r˜   Ú	directoryrO   r    s	            r   Úfind_virtualenvsr»     s  é € ð" �}Øˆä“%€Kæô 0Ó1ˆØÑ"ØÒØ�O‰O˜K×,Ñ,Ô-ä-¬jÓ9ˆ	ØÑ ØŠOØ�O‰O˜IŸN™NÔ+ãˆ	Ü�w‰w�}‰}˜Y×'Ñ'Ùä—G‘G—O‘O IÓ.ˆ	Ü—J’J˜yÖ)ˆDÜ—7‘7—<‘< 	Ó0ˆDØÓ"áØ�O‰O˜DÔ!ðÜ1°$ÑB�
Ü! *Ó-Ô-ó *ò øô ,ó Úðüs*   ‚DEÄD0Ä'	EÄ0
D>Ä:EÄ=D>Ä>ErG   c              #   ó`   #   • [          H  n [        XS9v •  M     g! [         a     M!  f = f7f)a  
Ignores virtualenvs and returns the Python versions that were installed on
your system. This might return nothing, if you're running Python e.g. from
a portable version.

The environments are sorted from latest to oldest Python version.

:yields: :class:`.Environment`
rG   N)Ú_SUPPORTED_PYTHONSÚget_system_environmentr   )rC   r)   s     r   Úfind_system_environmentsr¿   H  s4   é € ÷ -ˆð	Ü(¨ÑKÔKò -øô (ó 	Úð	üs   ‚
.�˜.�
+§.ª+«.c                ó  • [        SU -   5      nU(       a)  U[        R                  :X  a
  [        5       $ [	        U5      $ [        R
                  S:X  a  [        U 5       H  n [	        X!S9s  $    [        SU -  5      e! [         a     M,  f = f)zÏ
Return the first Python environment found for a string of the form 'X.Y'
where X and Y are the major and minor versions of Python.

:raises: :exc:`.InvalidPythonEnvironment`
:returns: :class:`.Environment`
r›   Úwin32rG   z Cannot find executable python%s.)r   r9   r    rp   r=   ÚplatformÚ&_get_executables_from_windows_registryr   )r#   rC   Úexes      r   r¾   r¾   [  s‰   € ô �˜7Ñ"Ó
#€CÞ
Ø”#—.‘.Ó Ü"Ó$Ð$Ü˜3ÓÐä
‡|�|�wÓÜ9¸'ÖBˆCðÜ" 3Ñ:Ò:ñ Cô
 #Ð#EÈÑ#OÓ
PÐPøô ,ó Úðús   Á"A=Á=
BÂ
B)r{   rC   c                ó”   • [         R                  R                  U 5      (       a  [        X5        [	        XS9$ [	        [        XS9US9$ )zà
Make it possible to manually create an Environment object by specifying a
Virtualenv path or an executable path and optional environment variables.

:raises: :exc:`.InvalidPythonEnvironment`
:returns: :class:`.Environment`
rG   rz   )r|   rO   r£   Ú_assert_safer=   r·   )rO   r{   rC   s      r   r�   r�   r  s=   € ô 
‡w�w‡~�~�d×ÑÜ�TÔ Ü˜4Ñ3Ð3ÜÔ+¨DÑ<ÀxÑPÐPr   c                 ó†  • [         R                  S:X  aB  [        R                  R	                  U SS5      [        R                  R	                  U S5      /nO"[        R                  R	                  U SS5      /nU H)  n[        R                  R                  U5      (       d  M)    O   [        SW-  5      e[        X15        U$ )z2
Returns None if it's not actually a virtual env.
rÁ   ÚScriptsr�   Úbinr›   z%s seems to be missing.)r9   rÂ   r|   rO   r]   Úexistsr   rÆ   )rO   r{   Úpythonsr›   s       r   r·   r·   €  s”   € ô
 ‡|�|�wÓÜ—7‘7—<‘<  i°Ó>ÄÇÁÇÁÈTÐS_Ó@`Ða‰ä—7‘7—<‘<  e¨XÓ6Ð7ˆÛˆÜ�7‰7�>‰>˜&×!Ó!Ùñ ô 'Ð'@À6Ñ'IÓJÐJä�ÔØ€Mr   rÁ   c              #   óÀ  #   • SS K n/ SQnUR                  UR                  4 H“  nU HŠ  nUR                  U S9n UR	                  X45       nUR                  US5      S   n[        R                  R                  US5      n[        R                  R                  U5      (       a  Uv •  S S S 5        MŒ     M•     g ! , (       d  f       M¢  = f! [         a     M²  f = f7f)Nr   )z0SOFTWARE\Python\PythonCore\{version}\InstallPathz<SOFTWARE\Wow6432Node\Python\PythonCore\{version}\InstallPathz3SOFTWARE\Python\PythonCore\{version}-32\InstallPathz?SOFTWARE\Wow6432Node\Python\PythonCore\{version}-32\InstallPathr"   Ú r�   )ÚwinregÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚformatÚOpenKeyÚQueryValueExr|   rO   r]   r£   ÚWindowsError)r#   rÎ   Úsub_keysÚroot_keyÚsub_keyÚkeyr:   rÄ   s           r   rÃ   rÃ   ”  sÀ   é € Ûò
ˆð  ×1Ñ1°6×3LÑ3LÓMˆHÛ#�Ø!Ÿ.™.°˜.Ð9�ðØŸ™¨Ô:¸cØ!'×!4Ñ!4°S¸"Ó!=¸aÑ!@˜Ü Ÿg™gŸl™l¨6°<Ó@˜ÜŸ7™7Ÿ>™>¨#×.Ñ.Ø"%šI÷	 ;Ñ:ó $ò N÷ ;Ö:ûô
 $ó ÚðüsM   ‚8C»CÁAB;Â*CÂ2	CÂ;
C
ÃCÃCÃ
CÃ
CÃCÃCÃCc                 óJ   • U(       a  [        U 5      (       d  [        S5      eg g )Nz(The python binary is potentially unsafe.)Ú_is_safer   )Úexecutable_pathr{   s     r   rÆ   rÆ   «  s&   € Þ”H˜_×-Ñ-Ü&Ø6ó8ð 	8ð .€tr   c                 óà   • [         R                  R                  U 5      n[        U5      (       a  g[	        5        H0  nUR
                  U:X  a    gUR                  [        U5      :X  d  M0    g   g)NTF)r|   rO   r   Ú_is_unix_safe_simpler¿   r    r2   r0   )rÛ   Ú	real_pathr¬   s      r   rÚ   rÚ   ±  sd   € ô —‘× Ñ  Ó1€Iä˜I×&Ñ&Øô
 0Ö1ˆØ×!Ñ! YÓ.Ùð ×ÑÔ"<¸YÓ"GÕGÙñ 2ð r   c                 óž   ^ • [        5       (       a  [        U 4S j[         5       5      $ [        R                  " T 5      R
                  nUS:H  $ )Nc              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7fr-   )r    )rW   ÚprÞ   s     €r   rY   Ú'_is_unix_safe_simple.<locals>.<genexpr>Ñ  s   øé € Ð@²K¨q�9×'Ñ'¨×*Ð*²Kùs   ƒ!r   )Ú_is_unix_adminÚanyÚ_SAFE_PATHSr|   ÚstatÚst_uid)rÞ   Úuids   ` r   rÝ   rÝ   Í  s>   ø€ Ü×Ñô Ô@µKÓ@Ó@Ð@ä
�'Š'�)Ó
×
#Ñ
#€Cð �!‰8€Or   c                  óT   •  [         R                  " 5       S:H  $ ! [         a     gf = f)Nr   F)r|   Úgetuidr/   r   r   r   rã   rã   à  s*   € ðÜ�yŠy‹{˜aÑÐøÜó Ùðús   ‚ š
'¦')r©   r-   )T)7r   r|   r9   rŽ   r‰   Úcollectionsr   Úshutilr   Útypingr   r   Ú
jedi.cacher   r   Ú"jedi.inference.compiled.subprocessr	   r
   r   r&   Újedi.inferencer   rP   r½   rå   r–   r   r$   r%   Ú_CURRENT_VERSIONrN   r   r   r;   r=   rk   rp   rs   r„   r0   r™   r€   r­   rª   r»   r¿   r¾   r�   r·   rÂ   rÃ   rÆ   rÚ   rÝ   rã   r   r   r   Ú<module>rò      se  ðñó 
Û 
Û Û Ý "Ý ß %ç 1÷8ñ 8ó æÝ-ñ ˜-Ð)<Ó=€â=Ð ØÐ+Ð,€Ø€
Ø!×.Ñ.×4Ô4°c×6FÑ6F×6LÓ6LÐMÐ ô˜yô ÷ñ ò$ôD5Ð"ô D5÷Nñ ô	Ð+¨[ô 	ôÐ2Ð4Dô ôò*òò*%òPñ �GÑñ(ó ð(ð3¨ÀDö 3ðl *.õ ð& 15õ Qð. &*°Dõ Qôð& ‡<�<�7Óòò.8òò8ó&r   