o
    MThS                     @   s  d 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 ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ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dl"m#Z# ddl$m%Z%m&Z& G dd dZ'G dd deZ(G dd de(Z)G dd deZ*G dd deeZ+G dd deeZ,G dd  d eeZ-G d!d" d"eZ.G d#d$ d$eZ/d%d&d'd(d&d)Z0d*d+ Z1d,d- Z2d.d/ Z3d0d1 Z4e3e d2d3 Z5dS )4z$
Imitate the parser representation.
    N)partial)	Parameter)Path)Optional)debug)to_list)memoize_method)AbstractFilter)AbstractNameDefinitionValueNameMixinParamNameInterface)ValueValueSet	NO_VALUES)LazyKnownValue)	_sentinel)inference_state_function_cache)reraise_getitem_errors)BuiltinSignature)CompiledContextCompiledModuleContextc                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
CheckAttributezARaises :exc:`AttributeError` if the attribute X is not available.Nc                 C   s
   || _ d S N)
check_name)selfr    r   `/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/jedi/inference/compiled/value.py__init__      
zCheckAttribute.__init__c                 C   s$   || _ | jd u r|jdd  | _| S )N   )funcr   __name__)r   r    r   r   r   __call__   s   
zCheckAttribute.__call__c                 C   s&   |d u r| S |j | j t| j|S r   )access_handlegetattr_pathsr   r   r    )r   instanceownerr   r   r   __get__%   s   zCheckAttribute.__get__r   )r!   
__module____qualname____doc__r   r"   r'   r   r   r   r   r      s
    
r   c                       s~  e Zd ZdL fdd	Z fddZe dd Ze dd	 Ze d
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zd d! Zd"d# Zed$d% Zed&d' ZdMd)d*Zed+d, Z fd-d.Z fd/d0ZdL fd1d2	Zd3d4 Zed5d6 Z d7d8 Z!e"fd9d:Z#d;d< Z$ fd=d>Z%d?d@ Z&dAdB Z'dCdD Z(edEdF Z)dGdH Z*dNdJdKZ+  Z,S )OCompiledValueNc                    s   t  || || _d S r   )superr   r#   )r   inference_stater#   parent_context	__class__r   r   r   /   s   
zCompiledValue.__init__c                    s   | j  }|d urt| j| S z| j d W n ty(   t | Y S w | j 	 r@ddl
m} t|| j| j| |gS t| |S )Nr"   r   )CompiledInstance)r#   get_return_annotationcreate_from_access_pathr-   execute_annotationr$   AttributeErrorr,   
py__call__is_classjedi.inference.valuer1   r   r.   _execute_function)r   	argumentsreturn_annotationr1   r/   r   r   r6   3   s&   

zCompiledValue.py__call__c                 C      t | j| j S r   )r3   r-   r#   py__class__r   r   r   r   r=   H      zCompiledValue.py__class__c                    s"    ft  fdd j D  S )Nc                 3       | ]	}t  j|V  qd S r   r3   r-   .0accessr>   r   r   	<genexpr>N   
    

z*CompiledValue.py__mro__.<locals>.<genexpr>)tupler#   py__mro__accessesr>   r   r>   r   	py__mro__L   s   
zCompiledValue.py__mro__c                    s   t  fdd j D S )Nc                 3   r@   r   rA   rB   r>   r   r   rE   U   rF   z,CompiledValue.py__bases__.<locals>.<genexpr>)rG   r#   py__bases__r>   r   r>   r   rJ   S   s   zCompiledValue.py__bases__c                 C   
   | j  S r   )r#   get_qualified_namesr>   r   r   r   rL   Z      
z!CompiledValue.get_qualified_namesc                 C   rK   r   )r#   
py__bool__r>   r   r   r   rN   ]   rM   zCompiledValue.py__bool__c                 C   rK   r   )r#   r7   r>   r   r   r   r7   `   rM   zCompiledValue.is_classc                 C   rK   r   )r#   is_functionr>   r   r   r   rO   c   rM   zCompiledValue.is_functionc                 C   rK   r   )r#   	is_moduler>   r   r   r   rP   f   rM   zCompiledValue.is_modulec                 C      dS )NTr   r>   r   r   r   is_compiledi      zCompiledValue.is_compiledc                 C   rQ   )NFr   r>   r   r   r   is_stubl   rS   zCompiledValue.is_stubc                 C   rK   r   )r#   is_instancer>   r   r   r   rU   o   rM   zCompiledValue.is_instancec                 C   rK   r   )r#   	py__doc__r>   r   r   r   rV   r   rM   zCompiledValue.py__doc__c           
      c   s    z| j  }W n; tyC   |  \}}|sg }n|d}| j  r*|dd |D ]}| d\}}}t	| ||V  q,Y d S w |D ]}	t
| |	V  qFd S )N,r   r   =)r#   get_signature_params
ValueError_parse_function_docsplitismethoddescriptorinsertstrip	partitionUnresolvableParamNameSignatureParamName)
r   signature_params
params_strrettokenspname_defaultsignature_paramr   r   r   get_param_namesu   s$   

zCompiledValue.get_param_namesc                 C   s   |   \}}t| |gS r   )r[   r   )r   ri   return_stringr   r   r   get_signatures   s   zCompiledValue.get_signaturesc                 C   s   d| j j| j f S Nz<%s: %s>)r0   r!   r#   get_reprr>   r   r   r   __repr__   s   zCompiledValue.__repr__c                 C   s   |   }|d u r
dS t|S )N) rr   )rV   r[   )r   docr   r   r   r[      s   z!CompiledValue._parse_function_docc                 C   rK   r   )r#   get_api_typer>   r   r   r   api_type   r   zCompiledValue.api_typeFc                 c   s    |  |V  d S r   )_ensure_one_filter)r   rU   origin_scoper   r   r   get_filters   s   zCompiledValue.get_filtersc                 C   s   t | j| |S r   )CompiledValueFilterr-   )r   rU   r   r   r   rv      s   z CompiledValue._ensure_one_filterc              	      s   t ttt, z| jj|| jj d}W n ty*   t	 | Y W  d    S w W d    n1 s5w   Y  |d u rDt	 |S t
t| j|gS N)safe)r   
IndexErrorKeyError	TypeErrorr#   py__simple_getitem__r-   allow_unsafe_executionsr5   r,   r   r3   )r   indexrD   r/   r   r   r      s   
z"CompiledValue.py__simple_getitem__c                    s6    j  }|d u rt ||S t fdd|D S )Nc                 3   r@   r   rA   rB   r>   r   r   rE      rF   z.CompiledValue.py__getitem__.<locals>.<genexpr>)r#   py__getitem__all_valuesr,   py__getitem__r   )r   index_value_setcontextualized_nodeall_access_pathsr/   r>   r   r      s   
zCompiledValue.py__getitem__c                 #   sT    | j  st |E d H  | j  }|d u rd S |D ]}tt| j|V  qd S r   )r#   has_iterr,   
py__iter__py__iter__listr   r3   r-   )r   r   access_path_listrD   r/   r   r   r      s   

zCompiledValue.py__iter__c                 C   rK   r   )r#   
py__name__r>   r   r   r   r      rM   zCompiledValue.py__name__c                 C   s$   |   }|d u r| j }t| |S r   )r   r#   rp   CompiledValueNamer   rh   r   r   r   rh      s   

zCompiledValue.namec              	   c   s    ddl m} ddlm} | jdkrd S |  d  D ]&}z
| jjj	
| W n	 ty1   Y qw || j|}| j||E d H  q|| E d H  d S )Nr   )
docstringsbuiltin_from_namefunction   )jedi.inferencer   jedi.inference.compiledr   ru   r[   r\   r-   builtins_moduler#   r$   r5   executeinfer_return_types)r   paramsr   r   rh   bltn_objr   r   r   r9      s   
zCompiledValue._execute_functionc                 C   s.   z| j  W S  ty   |tkr | Y S w r   )r#   get_safe_valuerZ   r   )r   rj   r   r   r   r      s   zCompiledValue.get_safe_valuec                 C   s8   zt t| j| j|j|gW S  ty   t Y S w r   )r   r3   r-   r#   execute_operationr~   r   )r   otheroperatorr   r   r   r      s   
zCompiledValue.execute_operationc                    s   j  dkrtgS j  \}}fdd|D  |dkr*tdd  D S |r>t fddjj|D  S t	  S )NNonec                    s   g | ]}t t j|gqS r   )r   r3   r-   )rC   pathr>   r   r   
<listcomp>   s    z4CompiledValue.execute_annotation.<locals>.<listcomp>Unionc                 s   s    | ]}|  V  qd S r   )r4   )rC   argr   r   r   rE      s    z3CompiledValue.execute_annotation.<locals>.<genexpr>c                    s   g | ]}|  qS r   )with_genericsrC   v)r:   r   r   r     s    )
r#   rp   r   get_annotation_name_and_args	from_setsr-   typing_modulepy__getattribute__r4   r,   )r   rh   argsr/   )r:   r   r   r4      s   


z CompiledValue.execute_annotationc                 C   r<   r   )r3   r-   r#   negater>   r   r   r   r   
     zCompiledValue.negatec                 C      t S r   r   r>   r   r   r   get_metaclasses  rS   zCompiledValue.get_metaclassesc                 C      t | S r   )r   r>   r   r   r   _as_context     zCompiledValue._as_contextc                 C   rK   r   )r#   get_array_typer>   r   r   r   
array_type  r   zCompiledValue.array_typec                    s    fdd j  D S )Nc                    s   g | ]}t  j|qS r   rA   )rC   kr>   r   r   r     s    
z0CompiledValue.get_key_values.<locals>.<listcomp>)r#   get_key_pathsr>   r   r>   r   get_key_values  s   
zCompiledValue.get_key_valuesTc                 C   s   | j  dv r	dS d S )N)r   z<class 'NoneType'>r   )r#   rp   )r   add_class_infor   r   r   get_type_hint  s   zCompiledValue.get_type_hintr   )FN)T)-r!   r(   r)   r   r6   r   r=   rI   rJ   rL   rN   r7   rO   rP   rR   rT   rU   rV   r   rl   rn   rq   r   r[   propertyru   rx   rv   r   r   r   r   rh   r9   r   r   r   r4   r   r   r   r   r   r   __classcell__r   r   r/   r   r+   .   s\    








	
r+   c                   @   sF   e Zd ZdZdd Zdd Zdd Zedd	 Zd
e	e
 fddZdS )CompiledModuleNc                 C   r   r   )r   r>   r   r   r   r   &  r   zCompiledModule._as_contextc                 C   rK   r   )r#   
py__path__r>   r   r   r   r   )  rM   zCompiledModule.py__path__c                 C   s   |   d uS r   )r   r>   r   r   r   
is_package,     zCompiledModule.is_packagec                 C   s"   |   }|d u r
dS t|dS )Nr   .)r   rG   r\   r   r   r   r   string_names/  s   zCompiledModule.string_namesreturnc                 C   rK   r   )r#   
py__file__r>   r   r   r   r   7  rM   zCompiledModule.py__file__)r!   r(   r)   file_ior   r   r   r   r   r   r   r   r   r   r   r   r   #  s    
r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	dd Z
edd ZdS )CompiledNamec                 C   s&   || _ | | _|| _|| _|| _d S r   )_inference_state
as_contextr.   _parent_valuestring_nameis_descriptor)r   r-   parent_valuerh   r   r   r   r   r   <  s
   

zCompiledName.__init__c                 C   s   |    S r   )infer_compiled_valuerV   r>   r   r   r   rV   C  r   zCompiledName.py__doc__c                 C   s"   | j  }|d u rd S || jf S r   )r.   rL   r   )r   parent_qualified_namesr   r   r   _get_qualified_namesF  s   
z!CompiledName._get_qualified_namesc                 C   s$   | j }| s| r| j  S d S r   )r.   rP   r7   	get_value)r   contextr   r   r   get_defining_qualified_valueL  s   
z)CompiledName.get_defining_qualified_valuec                 C   s8   z| j j}W n ty   d }Y nw d| jj|| jf S )Nz<%s: (%s).%s>)r.   rh   r5   r0   r!   r   r   r   r   r   rq   S  s   zCompiledName.__repr__c                 C   s   | j rdS |  jS )Nr%   )r   r   ru   r>   r   r   r   ru   Z  s   
zCompiledName.api_typec                 C   s   t |  gS r   )r   r   r>   r   r   r   inferc     zCompiledName.inferc                 C   s   t | j| j| jS r   )create_from_namer   r   r   r>   r   r   r   r   f  r?   z!CompiledName.infer_compiled_valueN)r!   r(   r)   r   rV   r   r   rq   r   ru   r   r   r   r   r   r   r   r   ;  s    
r   c                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )rb   c                 C   s   |j | _ || _d S r   )r.   _signature_param)r   compiled_valuerk   r   r   r   r   l     
zSignatureParamName.__init__c                 C   s   | j jS r   )r   rh   r>   r   r   r   r   p  s   zSignatureParamName.string_namec                 C   sB   |   | j }| jjr|d| jj 7 }| jjr|d| jj 7 }|S )Nz: rX   )_kind_stringr   r   has_annotationannotation_stringhas_defaultdefault_string)r   sr   r   r   	to_stringt  s   zSignatureParamName.to_stringc                 C   s   t t| jjS r   )getattrr   r   	kind_namer>   r   r   r   get_kind|  r   zSignatureParamName.get_kindc                 C   sL   | j }| jj}t}|jrtt||jg}|jr$t||j	}||
 O }|S r   )r   r.   r-   r   r   r   r3   rj   r   
annotationexecute_with_values)r   rg   r-   valuesr   r   r   r   r     s   zSignatureParamName.inferN)	r!   r(   r)   r   r   r   r   r   r   r   r   r   r   rb   k  s    
rb   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ra   c                 C   s   |j | _ || _|| _d S r   )r.   r   _default)r   r   rh   rj   r   r   r   r     s   
zUnresolvableParamName.__init__c                 C   s   t jS r   )r   POSITIONAL_ONLYr>   r   r   r   r     s   zUnresolvableParamName.get_kindc                 C   s   | j }| jr|d| j 7 }|S )NrX   )r   r   )r   stringr   r   r   r     s   zUnresolvableParamName.to_stringc                 C   r   r   r   r>   r   r   r   r     rS   zUnresolvableParamName.inferN)r!   r(   r)   r   r   r   r   r   r   r   r   ra     s
    ra   c                   @   s   e Zd Zdd ZdS )r   c                 C   s   || _ || _|j| _d S r   )r   _valuer.   )r   valuerh   r   r   r   r     s   zCompiledValueName.__init__N)r!   r(   r)   r   r   r   r   r   r     s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )EmptyCompiledNamez
    Accessing some names will raise an exception. To avoid not having any
    completions, just give Jedi the option to return this object. It infers to
    nothing.
    c                 C   s   |j | _|| _d S r   )r   r.   r   )r   r-   rh   r   r   r   r     r   zEmptyCompiledName.__init__c                 C   r   r   r   r>   r   r   r   r     rS   zEmptyCompiledName.inferN)r!   r(   r)   r*   r   r   r   r   r   r   r     s    r   c                   @   sT   e Zd ZdddZdd ZdddZedddd	d
Zdd Zdd Z	dd Z
dS )ry   Fc                 C   s   || _ || _|| _d S r   )r   r   rU   )r   r-   r   rU   r   r   r   r     s   
zCompiledValueFilter.__init__c                    s6   | j j | jj | j| fdd fddddS )Nc                    s    j | dS rz   )is_allowed_getattrrh   r#   r{   r   r   <lambda>  s    z)CompiledValueFilter.get.<locals>.<lambda>c                    s   |    v S r   )dirr   )r#   r   r   r     s    T)check_has_attribute)r   r#   r   r   _getr   r   r   r   get  s   

zCompiledValueFilter.getc           	         s   | \}}}|durt | j| }|r fdd|D S |r$|s$g S |s(|s4| jjs4| j ddgS | jr=| s=g S | j |dgS )zU
        To remove quite a few access calls we introduced the callback here.
        Nc                    s   g | ]}t | qS r   )r   r   r   r   r   r     s    z,CompiledValueFilter._get.<locals>.<listcomp>T)is_emptyr   )r3   r   r4   r   _get_cached_namerU   )	r   rh   allowed_getattr_callbackin_dir_callbackr   has_attributer   property_return_annotationr   r   r   r   r     s*   
zCompiledValueFilter._getr   c                C   s   |rt | j|S | j||dS )Nr   )r   r   _create_name)r   rh   r   r   r   r   r   r     s   z$CompiledValueFilter._get_cached_namec              	      s|   ddl m} g }| jj \}  D ]}|| | fdd fdd7 }q| js<|r<|| jd D ]}||	 7 }q3|S )Nr   r   c                    s    |  S r   r   r   	dir_infosr   r   r         z,CompiledValueFilter.values.<locals>.<lambda>c                    s   |  v S r   r   r   r   r   r   r     r   type)
r   r   r   r#   get_dir_infosr   rU   r   rx   r   )r   r   namesneeds_type_completionsrh   filterr   r   r   r     s   


zCompiledValueFilter.valuesc                 C   s   t | j| j||S r   )r   r   r   )r   rh   r   r   r   r   r     s   z CompiledValueFilter._create_namec                 C   s   d| j j| jf S ro   )r0   r!   r   r>   r   r   r   rq     r   zCompiledValueFilter.__repr__N)F)r!   r(   r)   r   r   r   r   r   r   r   rq   r   r   r   r   ry     s    


ry   floatstrintdict)zfloating point number	characterinteger
dictionaryr   c              	   C   sJ  z9d}|  d}t| |d D ]\}}|dkr|d7 }n|dkr%|d8 }|dkr/|| } nq| |d | }W n ttfyM   td d}d}Y nw dd	 }	 td||\}}|dkranqS|dd}t	d| ||d  }	|	du r~d}
||
fS ||	
  }td}|| |d }tdd|}t||}
||
fS )z
    Takes a function and returns the params and return value as a tuple.
    This is nothing more than a docstring parser.

    TODO docstrings like utime(path, (atime, mtime)) and a(b [, b]) -> None
    TODO docstrings like 'tuple of integers'
    r   (Nr   )zno brackets found - no paramrr   c                 S   sH   |  dd}t|D ]\}}|rd|vr||  d7  < qd|S )Nr   rW   rX   z=None)groupr\   	enumeratejoin)mr   iar   r   r   change_options,  s   
z+_parse_function_doc.<locals>.change_optionsTz ?\[([^\[\]]+)\]-ri   z-[>-]*    z(,\n|[^\n-])+z[nN]ew (.*)z\1())r   r  rZ   UnboundLocalErrorr   dbgresubnreplacesearchendcompilematchr  r_   subdocstr_defaultsr   )rs   countstartr  r   r  	param_strr  changesrre   r   patternret_strr   r   r   r[     sJ   	



r[   c                 C   s@   |j j|d d}d }|D ]}t| ||d u rd n| d}q|S )N)rj   r.   )r#   r$   create_cached_compiled_valuer   )r-   r   rh   access_pathsr   access_pathr   r   r   r   K  s   r   c                    s   d fdd	}|S )z5The cache doesn't care about keyword vs. normal args.Nc                    s    | ||S r   r   )r-   objr.   r    r   r   wrapperZ  r   z'_normalize_create_args.<locals>.wrapperr   r   )r    r-  r   r,  r   _normalize_create_argsX  s   r.  c                 C   s6   d }|j D ]\}}t| ||d u rd n| d}q|S )Nr'  )accessesr(  r   )r-   r*  r   rh   rD   r   r   r   r3   _  s   r3   c                 C   s,   t |trJ |d u rt}nt}|| ||S r   )
isinstancer+   r   )r-   r#   r.   clsr   r   r   r(  j  s
   r(  )6r*   r  	functoolsr   inspectr   pathlibr   typingr   jedir   jedi.inference.utilsr   
jedi.cacher   jedi.inference.filtersr	   jedi.inference.namesr
   r   r   jedi.inference.base_valuer   r   r   jedi.inference.lazy_valuer   jedi.inference.compiled.accessr   jedi.inference.cacher   jedi.inference.helpersr   jedi.inference.signaturer   jedi.inference.contextr   r   r   r+   r   r   rb   ra   r   r   ry   r  r[   r   r.  r3   r(  r   r   r   r   <module>   sR     v0 T	<