o
    ˷e7                     @   s   d dl Z d dlZ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 Z
dd Zd$d
dZdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZedd Zd%ddZd d! Zd"d# ZdS )&    N)chain)contextmanager)treec                 C   sJ   | j }d|v sd|v rdS tjtjdd}ttt	|d t
| S )Nzdist-packageszsite-packagesFlibpythonz\d.\d)partsospathjoinsysprefixboolrematchescapestr)r	   r   	base_path r   M/var/www/ideatree/venv/lib/python3.10/site-packages/jedi/inference/helpers.pyis_stdlib_path   s
   r   c                 C   sZ   t  | }g }| jD ]}t|tjrt  |}||_nt|}||_|| q
||_|S )zO
    Much, much faster than copy.deepcopy, but just for parser tree nodes.
    )copychildren
isinstancer   Leafparentdeep_ast_copyappend)objnew_objnew_childrenchild	new_childr   r   r   r      s   


r   Fc                 C   sL  |j }|jdkrddlm} || jS |jdks%||jd |jd fvr@|dkr1ddlm} |S |jdkr;| 	|S | 	|S |j }|j
|}|rN|}n|d	 }|jd
krt|}		 |	d	8 }	|j|	 }
|
jdkrinqZ|j|	d	 | }n|jd }
|jd	| }|
dkr|d }
|d	d }| 	|
}ddlm} |D ]}|| ||}q|S )a  
    Creates a "call" node that consist of all ``trailer`` and ``power``
    objects.  E.g. if you call it with ``append``::

        list([]).append(3) or None

    You would get a node with the content ``list([]).append`` back.

    This generates a copy of the original ast node.

    If you're using the leaf, e.g. the bracket `)` it will return ``list([])``.

    We use this function for two purposes. Given an expression ``bar.foo``,
    we may want to
      - infer the type of ``foo`` to offer completions after foo
      - infer the type of ``bar`` to be able to jump to the definition of foo
    The option ``cut_own_trailer`` must be set to true for the second purpose.
    fstringr   )compiledtrailer:)	NO_VALUESatom   
error_nodeTawaitN)infer_trailer)r   typejedi.inferencer#   get_string_value_setinference_stater   jedi.inference.base_valuer'   
infer_nodeindexjedi.inference.syntax_treer,   )contextleafcut_own_trailerr$   r#   r'   powerr3   cutstartbasetrailersvaluesr,   r   r   r   infer_call_of_leaf-   sF   
"







r>   c                 C   sN   z| j }W n ty   | jdkr| g Y S g  Y S w ttdd |D S )Nnamec                 s   s    | ]}t |V  qd S N)get_names_of_node).0cr   r   r   	<genexpr>x   s    z$get_names_of_node.<locals>.<genexpr>)r   AttributeErrorr-   listr   from_iterable)noder   r   r   r   rA   o   s   


rA   c                 C   s   |   ot| jd dtS N)default)is_compiledr   get_safe_valuer   valuer   r   r   	is_string{   s   rO   c                 C   s   t | pt| S r@   )	is_numberrO   rM   r   r   r   
is_literal   s   rQ   c                 C   s   | j d d} t| |r| S d S rI   )rL   r   )rN   acceptr   r   r   _get_safe_value_or_none   s   
rS   c                 C   
   t | tS r@   )rS   intrM   r   r   r   get_int_or_none      
rV   c                 C   rT   r@   )rS   r   rM   r   r   r   get_str_or_none   rW   rX   c                 C   s   t | ttfd uS r@   )rS   rU   floatrM   r   r   r   rP      s   rP   c                   @   s   e Zd ZdS )SimpleGetItemNotFoundN)__name__
__module____qualname__r   r   r   r   rZ      s    rZ   c               
   g   s0    zd V  W d S  | y } zt |d }~ww r@   )rZ   )exception_classeser   r   r   reraise_getitem_errors   s   r`   c                 C   s   d}g }| dd  D ]R}|dv r|s|t |j7 }q
|jdkr;|jd d d D ]}|| ||u r4 nq'q
 ||fS |jdkrO|| ||u rN ||fS q
|dkrX|sWg }q
 ||fS ||fS )Nr   r)   ).z...dotted_name   r?   ,)lenrN   r-   r   r   )nodesis_import_from
until_nodelevelnamesrH   nr   r   r   parse_dotted_names   s8   



rl   c                 G   s   |  |d d |d S )Nr%   )import_modulepy__getattribute__)r0   rj   r   r   r   values_from_qualified_names   s   ro   c                 C   s"   |   j}|d u rdS |d dv S )NFr   )pandasnumpy
tensorflow
matplotlib)get_root_contextstring_names)r5   ru   r   r   r   is_big_annoying_library   s   
rv   )Fr@   )r   r   r   r   	itertoolsr   
contextlibr   parso.pythonr   r   r   r>   rA   rO   rQ   rS   rV   rX   rP   	ExceptionrZ   r`   rl   ro   rv   r   r   r   r   <module>   s.    
B

