a
    lc.P                     @   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   Y/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/inference/compiled/value.py__init__   s    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__)N)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dN 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*dOdJdKZ+  Z,S )P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yP   t | Y S 0 | j 	 rddl
m} t|| j| j| |gS t| |S d S )Nr!   r   )CompiledInstance)r"   Zget_return_annotationcreate_from_access_pathr,   execute_annotationr#   AttributeErrorr+   
py__call__is_classZjedi.inference.valuer0   r   r-   _execute_function)r   	argumentsreturn_annotationr0   r.   r   r   r4   3   s     

zCompiledValue.py__call__c                 C   s   t | j| j S r   )r1   r,   r"   py__class__r   r   r   r   r9   I   s    zCompiledValue.py__class__c                    s"    ft  fdd j D  S )Nc                 3   s   | ]}t  j|V  qd S r   r1   r,   .0accessr:   r   r   	<genexpr>O   s   z*CompiledValue.py__mro__.<locals>.<genexpr>)tupler"   Zpy__mro__accessesr:   r   r:   r   	py__mro__M   s    zCompiledValue.py__mro__c                    s   t  fdd j D S )Nc                 3   s   | ]}t  j|V  qd S r   r;   r<   r:   r   r   r?   V   s   z,CompiledValue.py__bases__.<locals>.<genexpr>)r@   r"   py__bases__r:   r   r:   r   rB   T   s    zCompiledValue.py__bases__c                 C   s
   | j  S r   )r"   get_qualified_namesr:   r   r   r   rC   [   s    z!CompiledValue.get_qualified_namesc                 C   s
   | j  S r   )r"   
py__bool__r:   r   r   r   rD   ^   s    zCompiledValue.py__bool__c                 C   s
   | j  S r   )r"   r5   r:   r   r   r   r5   a   s    zCompiledValue.is_classc                 C   s
   | j  S r   )r"   is_functionr:   r   r   r   rE   d   s    zCompiledValue.is_functionc                 C   s
   | j  S r   )r"   	is_moduler:   r   r   r   rF   g   s    zCompiledValue.is_modulec                 C   s   dS )NTr   r:   r   r   r   is_compiledj   s    zCompiledValue.is_compiledc                 C   s   dS )NFr   r:   r   r   r   is_stubm   s    zCompiledValue.is_stubc                 C   s
   | j  S r   )r"   is_instancer:   r   r   r   rI   p   s    zCompiledValue.is_instancec                 C   s
   | j  S r   )r"   	py__doc__r:   r   r   r   rJ   s   s    zCompiledValue.py__doc__c           
      c   s   z| j  }W nt ty   |  \}}|s2g }n
|d}| j  rR|dd |D ]&}| d\}}}t	| ||V  qVY n0 |D ]}	t
| |	V  qd S )N,r   r   =)r"   Zget_signature_params
ValueError_parse_function_docsplitismethoddescriptorinsertstrip	partitionUnresolvableParamNameSignatureParamName)
r   Zsignature_params
params_strrettokenspname_defaultsignature_paramr   r   r   get_param_namesv   s    

zCompiledValue.get_param_namesc                 C   s   |   \}}t| |gS r   )rN   r   )r   r[   Zreturn_stringr   r   r   get_signatures   s    zCompiledValue.get_signaturesc                 C   s   d| j j| j f S Nz<%s: %s>)r/   r    r"   get_reprr:   r   r   r   __repr__   s    zCompiledValue.__repr__c                 C   s   |   }|d u rdS t|S )N) rc   )rJ   rN   )r   docr   r   r   rN      s    z!CompiledValue._parse_function_docc                 C   s
   | j  S r   )r"   Zget_api_typer:   r   r   r   api_type   s    zCompiledValue.api_typeFc                 c   s   |  |V  d S r   )_ensure_one_filter)r   rI   Zorigin_scoper   r   r   get_filters   s    zCompiledValue.get_filtersc                 C   s   t | j| |S r   )CompiledValueFilterr,   )r   rI   r   r   r   rf      s    z CompiledValue._ensure_one_filterc              	      s   t tttN z| j|}W n, tyJ   t | Y W  d    S 0 W d    n1 s`0    Y  |d u r~t |S tt	| j
|gS r   )r   
IndexErrorKeyError	TypeErrorr"   py__simple_getitem__r3   r+   r   r1   r,   )r   indexr>   r.   r   r   rl      s    >z"CompiledValue.py__simple_getitem__c                    s6    j  }|d u r t ||S t fdd|D S )Nc                 3   s   | ]}t  j|V  qd S r   r;   r<   r:   r   r   r?      s   z.CompiledValue.py__getitem__.<locals>.<genexpr>)r"   Zpy__getitem__all_valuesr+   py__getitem__r   )r   Zindex_value_setcontextualized_nodeZall_access_pathsr.   r:   r   rn      s    
zCompiledValue.py__getitem__c                 #   sR   | j  st |E d H  | j  }|d u r2d S |D ]}tt| j|V  q6d S r   )r"   Zhas_iterr+   
py__iter__Zpy__iter__listr   r1   r,   )r   ro   Zaccess_path_listr>   r.   r   r   rp      s    

zCompiledValue.py__iter__c                 C   s
   | j  S r   )r"   
py__name__r:   r   r   r   rq      s    zCompiledValue.py__name__c                 C   s$   |   }|d u r| j }t| |S r   )rq   r"   ra   CompiledValueNamer   rZ   r   r   r   rZ      s    
zCompiledValue.namec              	   c   s   ddl m} ddlm} | jdkr&d S |  d  D ]P}z| jjj	
| W n tyd   Y q6Y q60 || j|}| j||E d H  q6|| E d H  d S )Nr   )
docstringsbuiltin_from_namefunction   )Zjedi.inferencert   jedi.inference.compiledrv   re   rN   rO   r,   builtins_moduler"   r#   r3   executeZinfer_return_types)r   paramsrt   rv   rZ   Zbltn_objr   r   r   r6      s    

zCompiledValue._execute_functionc                 C   s2   z| j  W S  ty,   |tkr$ | Y S 0 d S r   )r"   get_safe_valuerM   r   )r   r\   r   r   r   r}      s    zCompiledValue.get_safe_valuec                 C   s<   z t t| j| j|j|gW S  ty6   t Y S 0 d S r   )r   r1   r,   r"   execute_operationrk   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rTt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   r1   r,   )r=   pathr:   r   r   
<listcomp>   s   z4CompiledValue.execute_annotation.<locals>.<listcomp>Unionc                 s   s   | ]}|  V  qd S r   )r2   )r=   argr   r   r   r?          z3CompiledValue.execute_annotation.<locals>.<genexpr>c                    s   g | ]}|  qS r   )Zwith_generics)r=   v)r7   r   r   r     s   )
r"   ra   r   Zget_annotation_name_and_argsZ	from_setsr,   Ztyping_moduleZpy__getattribute__r2   r+   )r   rZ   argsr.   )r7   r   r   r2      s    

z CompiledValue.execute_annotationc                 C   s   t | j| j S r   )r1   r,   r"   negater:   r   r   r   r     s    zCompiledValue.negatec                 C   s   t S r   r   r:   r   r   r   get_metaclasses  s    zCompiledValue.get_metaclassesc                 C   s   t | S r   )r   r:   r   r   r   _as_context  s    zCompiledValue._as_contextc                 C   s
   | j  S r   )r"   Zget_array_typer:   r   r   r   
array_type  s    zCompiledValue.array_typec                    s    fdd j  D S )Nc                    s   g | ]}t  j|qS r   r;   )r=   kr:   r   r   r     s   z0CompiledValue.get_key_values.<locals>.<listcomp>)r"   Z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"   ra   )r   Zadd_class_infor   r   r   get_type_hint  s    zCompiledValue.get_type_hint)N)FN)N)T)-r    r'   r(   r   r4   r   r9   rA   rB   rC   rD   r5   rE   rF   rG   rH   rI   rJ   r   r^   r_   rb   r   rN   propertyre   rg   rf   rl   rn   rp   rq   rZ   r6   r   r}   r~   r2   r   r   r   r   r   r   __classcell__r   r   r.   r   r*   .   sZ   








	
r*   c                   @   sF   e Zd ZdZdd Zdd Zdd Zedd	 Ze	e
 d
ddZdS )CompiledModuleNc                 C   s   t | S r   )r   r:   r   r   r   r   $  s    zCompiledModule._as_contextc                 C   s
   | j  S r   )r"   
py__path__r:   r   r   r   r   '  s    zCompiledModule.py__path__c                 C   s   |   d uS r   )r   r:   r   r   r   
is_package*  s    zCompiledModule.is_packagec                 C   s"   |   }|d u rdS t|dS )Nr   .)rq   r@   rO   rs   r   r   r   string_names-  s    zCompiledModule.string_names)returnc                 C   s
   | j  S r   )r"   
py__file__r:   r   r   r   r   5  s    zCompiledModule.py__file__)r    r'   r(   Z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)r   r,   Zparent_valuerZ   r   r   r   r   :  s    
zCompiledName.__init__c                 C   s   |    S r   )infer_compiled_valuerJ   r:   r   r   r   rJ   @  s    zCompiledName.py__doc__c                 C   s"   | j  }|d u rd S || jf S r   )r-   rC   r   )r   Zparent_qualified_namesr   r   r   _get_qualified_namesC  s    
z!CompiledName._get_qualified_namesc                 C   s$   | j }| s| r | j  S d S r   )r-   rF   r5   	get_value)r   contextr   r   r   get_defining_qualified_valueI  s    
z)CompiledName.get_defining_qualified_valuec                 C   s8   z| j j}W n ty"   d }Y n0 d| jj|| jf S )Nz<%s: (%s).%s>)r-   rZ   r3   r/   r    r   rs   r   r   r   rb   P  s
    
zCompiledName.__repr__c                 C   s
   |   jS r   )r   re   r:   r   r   r   re   W  s    zCompiledName.api_typec                 C   s   t |  gS r   )r   r   r:   r   r   r   infer[  s    zCompiledName.inferc                 C   s   t | j| j| jS r   )create_from_namer   r   r   r:   r   r   r   r   ^  s    z!CompiledName.infer_compiled_valueN)r    r'   r(   r   rJ   r   r   rb   r   re   r   r   r   r   r   r   r   r   9  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 )rU   c                 C   s   |j | _ || _d S r   )r-   _signature_param)r   compiled_valuer]   r   r   r   r   d  s    zSignatureParamName.__init__c                 C   s   | j jS r   )r   rZ   r:   r   r   r   r   h  s    zSignatureParamName.string_namec                 C   sB   |   | j }| jjr&|d| jj 7 }| jjr>|d| jj 7 }|S )Nz: rL   )Z_kind_stringr   r   has_annotationZannotation_stringhas_defaultZdefault_string)r   sr   r   r   	to_stringl  s    zSignatureParamName.to_stringc                 C   s   t t| jjS r   )getattrr   r   Z	kind_namer:   r   r   r   get_kindt  s    zSignatureParamName.get_kindc                 C   sL   | j }| jj}t}|jr*tt||jg}|jrHt||j	}||
 O }|S r   )r   r-   r,   r   r   r   r1   r\   r   
annotationZexecute_with_values)r   rY   r,   valuesr   r   r   r   r   w  s    zSignatureParamName.inferN)	r    r'   r(   r   r   r   r   r   r   r   r   r   r   rU   c  s   
rU   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rT   c                 C   s   |j | _ || _|| _d S r   )r-   r   _default)r   r   rZ   r\   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 )NrL   )r   r   )r   stringr   r   r   r     s    zUnresolvableParamName.to_stringc                 C   s   t S r   r   r:   r   r   r   r     s    zUnresolvableParamName.inferN)r    r'   r(   r   r   r   r   r   r   r   r   rT     s   rT   c                   @   s   e Zd Zdd ZdS )rr   c                 C   s   || _ || _|j| _d S r   )r   _valuer-   )r   valuerZ   r   r   r   r     s    zCompiledValueName.__init__N)r    r'   r(   r   r   r   r   r   rr     s   rr   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   )rz   r-   r   )r   r,   rZ   r   r   r   r     s    zEmptyCompiledName.__init__c                 C   s   t S r   r   r:   r   r   r   r     s    zEmptyCompiledName.inferN)r    r'   r(   r)   r   r   r   r   r   r   r     s   r   c                   @   sN   e Zd ZdddZdd ZdddZeddd	Zd
d Zdd Z	dd Z
dS )rh   Fc                 C   s   || _ || _|| _d S r   )r   r   rI   )r   r,   r   rI   r   r   r   r     s    zCompiledValueFilter.__init__c                    s*   | j j | j| fdd fddddS )Nc                    s    j | |dS )Nsafe)Zis_allowed_getattrrZ   r   r"   r   r   <lambda>  r   z)CompiledValueFilter.get.<locals>.<lambda>c                    s   |    v S r   )dirrZ   r   r   r   r     r   T)check_has_attribute)r   r"   _getrs   r   r   r   get  s    

zCompiledValueFilter.getc                 C   sh   | j jr||| j j d\}}|r*|s*g S |s2|sJ| j jsJ| j|ddgS | jr\||s\g S | |gS )zU
        To remove quite a few access calls we introduced the callback here.
        r   T)is_empty)r   Zallow_descriptor_getattr_get_cached_namerI   )r   rZ   Zallowed_getattr_callbackZin_dir_callbackr   Zhas_attributeZis_descriptorr   r   r   r     s    
zCompiledValueFilter._getc                 C   s   |rt | j|S | |S d S r   )r   r   _create_name)r   rZ   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sx|rx|| jd D ]}||	 7 }qf|S )Nr   ru   c                    s    |  S r   r   r   Z	dir_infosr   r   r     r   z,CompiledValueFilter.values.<locals>.<lambda>c                    s   |  v S r   r   r   r   r   r   r     r   type)
ry   rv   r   r"   Zget_dir_infosr   rI   r   rg   r   )r   rv   namesZneeds_type_completionsrZ   filterr   r   r   r     s    


zCompiledValueFilter.valuesc                 C   s   t | j| j|S r   )r   r   r   rs   r   r   r   r     s
    z CompiledValueFilter._create_namec                 C   s   d| j j| jf S r`   )r/   r    r   r:   r   r   r   rb     s    zCompiledValueFilter.__repr__N)F)F)F)r    r'   r(   r   r   r   r   r   r   r   rb   r   r   r   r   rh     s   
	
rh   floatstrintdict)zfloating point number	characterinteger
dictionaryr   c              	   C   sB  zrd}|  d}t| |d D ]>\}}|dkr:|d7 }n|dkrJ|d8 }|dkr || } q`q | |d | }W n( ttfy   td d}d}Y n(0 dd	 }td
||\}}|dkrqq|dd}t	d| ||d  }	|	du rd}
nF||	
  }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   (Nrx   )zno brackets found - no paramrc   c                 S   sH   |  dd}t|D ]$\}}|rd|vr||  d7  < qd|S )Nrx   rK   rL   z=None)grouprO   	enumeratejoin)mr   iar   r   r   change_options  s
    z+_parse_function_doc.<locals>.change_optionsz ?\[([^\[\]]+)\]-r[   z-[>-]*    z(,\n|[^\n-])+z[nN]ew (.*)z\1())rm   r   rM   UnboundLocalErrorr   Zdbgresubnreplacesearchendcompilematchr   rR   subdocstr_defaultsr   )rd   countstartr   r   r   Z	param_strr   changesrrW   rm   patternZret_strr   r   r   rN     s@    	




rN   c                 C   s@   |j j|d d}d }|D ]"}t| ||d u r.d n| d}q|S )N)r\   r-   )r"   r#   create_cached_compiled_valuer   )r,   r   rZ   Zaccess_pathsr   access_pathr   r   r   r   =  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   wrapperL  s    z'_normalize_create_args.<locals>.wrapper)Nr   )r   r   r   r   r   _normalize_create_argsJ  s    r   c                 C   s6   d }|j D ]&\}}t| ||d u r$d n| d}q
|S )Nr   )Zaccessesr   r   )r,   r   r   rZ   r>   r   r   r   r1   Q  s    r1   c                 C   s,   t |trJ |d u rt}nt}|| ||S r   )
isinstancer*   r   )r,   r"   r-   clsr   r   r   r   \  s
    r   )6r)   r   	functoolsr   inspectr   pathlibr   typingr   Zjedir   Zjedi.inference.utilsr   Z
jedi.cacher   Zjedi.inference.filtersr	   Zjedi.inference.namesr
   r   r   Zjedi.inference.base_valuer   r   r   Zjedi.inference.lazy_valuer   Zjedi.inference.compiled.accessr   Zjedi.inference.cacher   Zjedi.inference.helpersr   Zjedi.inference.signaturer   Zjedi.inference.contextr   r   r   r*   r   r   rU   rT   rr   r   rh   r   rN   r   r   r1   r   r   r   r   r   <module>   sP    t* N	<