§
    ŒŸj¦  ã                   óv   — d 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 d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )a°  
Searching for names with given scope and name. This is very central in Jedi and
Python. The name resolution is quite complicated with descripter,
``__getattribute__``, ``__getattr__``, ``global``, etc.

If you want to understand name resolution, please read the first few chapters
in http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/.

Flow checks
+++++++++++

Flow checks are not really mature. There's only a check for ``isinstance``.  It
would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``.
Unfortunately every other thing is being ignored (e.g. a == '' would be easy to
check for -> a is a string). There's big potential in these checks.
é    )ÚName)Úsettings)ÚTreeArguments)Úiterable)Ú	NO_VALUES)Úis_scopec                 ó¶   — t          |t          ¦  «        r|j        n|}g }| D ]}|                     |¦  «        }|r nŒt	          t          |¦  «        ¦  «        S )zh
    Searches names that are defined in a scope (the different
    ``filters``), until a name fits.
    )Ú
isinstancer   ÚvalueÚgetÚlistÚ_remove_del_stmt)ÚfiltersÚname_or_strÚstring_nameÚnamesÚfilters        úb/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/inference/finder.pyÚfilter_namer      sp   € õ
 (2°+½tÑ'DÔ'DÐU�+Ô#Ð#È+€KØ€EØð ð ˆØ—
’
˜;Ñ'Ô'ˆØð 	ØˆEð	õ Õ  Ñ'Ô'Ñ(Ô(Ð(ó    c              #   óx   K  — | D ]4}|j         �'|j                              ¦   «         }|�|j        dk    rŒ0|V — Œ5d S )NÚdel_stmt)Ú	tree_nameÚget_definitionÚtype)r   ÚnameÚ
definitions      r   r   r   *   sZ   è è € àð ð ˆØŒ>Ð%Øœ×6Ò6Ñ8Ô8ˆJØÐ%¨*¬/¸ZÒ*GÐ*GØØˆ
ˆ
ˆ
ˆ
ðð r   c                 ó,  ‡‡— t           j        sdS d}t          ‰¦  «        rš‰                     ¦   «         }	 |                     ¦   «         |j                 }n# t          $ r Y dS w xY wt          ˆˆfd„|D ¦   «         ¦  «        }|D ]5}|                     d¦  «        }|�t          | |j
        |¦  «        }|�|c S Œ6‰j        dv rOd„ ‰j        ddd…         D ¦   «         }	t          |	¦  «        D ]%}
|j        |
j        k    rt          | |
|¦  «        c S Œ&|S )zÿ Try to find out the type of a variable just with the information that
    is given by the flows: e.g. It is also responsible for assert checks.::

        if isinstance(k, str):
            k.  # <- completion here

    ensures that `k` is a string.
    Nc                 óV   •— g | ]%}‰j         |j         cxk    r‰p‰j        k     ¯ n n|‘Œ&S © )Ú	start_posÚend_pos)Ú.0ÚnÚflowÚposs     €€r   ú
<listcomp>z*check_flow_information.<locals>.<listcomp>H   sP   ø€ ð 
ð 
ð 
ØØŒ~ ¤ÐDÐDÒDÐD°Ð0C°t´|ÒDÐDÐDÐDÐDð ØDÐDÐDr   Úassert_stmt)Úif_stmtÚ
while_stmtc                 ó   — g | ]
}|d k    ¯|‘ŒS )ú:r    )r#   Úcs     r   r'   z*check_flow_information.<locals>.<listcomp>U   s   € ÐDÐDÐD˜q¸1Àº8¸8˜¸8¸8¸8r   é   é   )r   Údynamic_flow_informationr   Úget_root_nodeÚget_used_namesr   ÚKeyErrorÚreversedÚsearch_ancestorÚ_check_isinstance_typeÚ	assertionr   Úchildrenr!   r"   )r   r%   Úsearch_namer&   ÚresultÚmodule_noder   r   ÚassÚpotential_ifsÚif_tests    ` `       r   Úcheck_flow_informationr?   4   s{  øø€ õ Ô,ð Øˆtà€FÝ��~„~ð "à×(Ò(Ñ*Ô*ˆð	Ø×.Ò.Ñ0Ô0°Ô1BÔCˆEˆEøÝð 	ð 	ð 	Ø�4�4ð	øøøåð 
ð 
ð 
ð 
ð 
Øð
ñ 
ô 
ñ ô ˆð
 ð 	"ð 	"ˆDØ×&Ò& }Ñ5Ô5ˆCØˆÝ/°°s´}ÀkÑRÔR�ØÐ%Ø!�M�M�Møà„yÐ-Ð-Ð-ØDÐD D¤M°!°$°Q°$Ô$7ÐDÑDÔDˆÝ Ñ.Ô.ð 	Kð 	KˆGØÔ$ w¤Ò6Ð6Ý-¨e°W¸kÑJÔJÐJÐJÐJð 7à€Ms   ·A Á
A%Á$A%c                 óÄ   — | j         dv rVt          | j        ¦  «        dk    r>| j        \  }}|j         dk    r)|j        dk    r|j         dk    r|j        d         dk    r|S d S )N)ÚpowerÚ	atom_expré   r   r
   Útrailerr   ú()r   Úlenr8   r   )ÚnodeÚfirstrD   s      r   Ú_get_isinstance_trailer_arglistrI   \   sq   € Ø„yÐ*Ð*Ð*­s°4´=Ñ/AÔ/AÀQÒ/FÐ/Fàœ‰ˆˆwØŒ:˜ÒÐ E¤K°<Ò$?Ð$?Ø”L IÒ-Ð-°'Ô2BÀ1Ô2EÈÒ2LÐ2LØˆNØˆ4r   c                 óú  — d }t          |¦  «        }|�Èt          |j        ¦  «        dk    r°|j        d         }t          | j        | ||¦  «        }t          |                     ¦   «         ¦  «        }t          |¦  «        dk    rXt          |j        ¦  «        dk    r@|\  \  }}	\  }
}|€3|
€1t          |¦  «        }t          |j        d         ¦  «        }||k    r|}|€d S t          }| 	                    ¦   «         D ]}t          |t          j        ¦  «        rL|j        dk    rA|                     ¦   «         D ]+}|| 	                    ¦   «                              ¦   «         z  }Œ,Œh||                     ¦   «         z  }Œ€|S )Né   r.   rC   r   Útuple)rI   rF   r8   r   Úinference_stater   ÚunpackÚ_get_call_stringr   Úinferr
   r   ÚSequenceÚ
array_typeÚ
py__iter__Úexecute_with_values)r   rG   r9   Úlazy_clsrD   ÚarglistÚargsÚ
param_listÚkey1Ú_Úkey2Úlazy_value_clsÚcallÚis_instance_callÚ	value_setÚ
cls_or_tupÚ
lazy_values                    r   r6   r6   f   s’  € Ø€HÝ-¨dÑ3Ô3€GØÐ�s 7Ô#3Ñ4Ô4¸Ò9Ð9ØÔ" 1Ô%ˆÝ˜UÔ2°E¸7ÀGÑLÔLˆÝ˜$Ÿ+š+™-œ-Ñ(Ô(ˆ
åˆz‰?Œ?˜aÒÐ¥C¨Ô(8Ñ$9Ô$9¸QÒ$>Ð$>Ø0:Ñ-‰IˆT�1Ñ-˜˜nØˆ|  Ý'¨Ñ4Ô4�Ý#3°GÔ4DÀQÔ4GÑ#HÔ#HÐ ð Ð+Ò+Ð+Ø-�HØÐØˆtå€IØ—n’nÑ&Ô&ð :ð :ˆ
Ý�j¥(Ô"3Ñ4Ô4ð 	:¸Ô9NÐRYÒ9YÐ9YØ(×3Ò3Ñ5Ô5ð Fð F�
Ø˜Z×-Ò-Ñ/Ô/×CÒCÑEÔEÑE�	�	ðFð ˜×7Ò7Ñ9Ô9Ñ9ˆIˆIØÐr   c                 ó  — | j         j        dk    rt          | j         ¦  «        S d}|                      ¦   «         }|                      ¦   «         j        }|j        |k     r)||j        z  }|                     ¦   «         }|j        |k     °)|S )NrB   Ú )	Úparentr   rO   Úget_first_leafÚget_last_leafr"   r!   r   Úget_next_leaf)rG   ÚcodeÚleafÚends       r   rO   rO   ‡   sŒ   € Ø„{Ô˜;Ò&Ð&Ý ¤Ñ,Ô,Ð,à€DØ×ÒÑ Ô €DØ
×
Ò
Ñ
Ô
Ô
&€CØ
Œ.˜3Ò
Ð
Ø�”
ÑˆØ×!Ò!Ñ#Ô#ˆð Œ.˜3Ò
Ð
ð €Kr   N)Ú__doc__Úparso.python.treer   Újedir   Újedi.inference.argumentsr   Újedi.inference.valuer   Újedi.inference.base_valuer   Újedi.parser_utilsr   r   r   r?   rI   r6   rO   r    r   r   ú<module>rr      sã   ððð ð" #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø &Ð &Ð &Ð &Ð &Ð &ð)ð )ð )ðð ð ð%ð %ð %ðPð ð ðð ð ðB
ð 
ð 
ð 
ð 
r   