U
    nufI                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ 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mZ d dlmZ eeeeeefZeejZejejejejej ej!ej"ej#ej$ej%ej&eej'ej(ej)fZ*eejZee+j,Z-ej.d /e0Z1ee1d Z2e0 Z3ej4ej5ej6ej7ej8ej9ej:ej;dZ<ej=ej>d	Z?e?@e< ejej!ej#ee-e2eAeBfZCe3fd
dZDeddZEdd ZFdd ZGdd ZHG dd dZIeIdddZJdd ZKG dd dZLdd ZMdS )    N)
namedtuple)Path)OptionalTuple)getattr_static__dict____subclasshook__)z==z!=iszis not<z<=>z>=)+-c                 C   sN   zt | |\}}W n" tk
r4   |tkr, | Y S X t|trJt| |S |S N)r   AttributeError	_sentinel
isinstanceALLOWED_DESCRIPTOR_ACCESSgetattr)objnamedefaultattris_get_descriptor r   B/tmp/pip-unpacked-wheel-ol4ehs9f/jedi/inference/compiled/access.pysafe_getattrN   s    


r   SignatureParamz]name has_default default default_string has_annotation annotation annotation_string kind_namec                    s    fdd}|S )Nc                    s(    | }t |dkr$|d d d }|S )N2   z..)len)selfrfuncr   r   wrapperi   s    zshorten_repr.<locals>.wrapperr   )r"   r#   r   r!   r   shorten_reprh   s    r$   c                 C   s   | j |S r   )Zcompiled_subprocessZget_or_create_access_handle)inference_stater   r   r   r   create_accessq   s    r&   c                 C   s   t j| }t _ztzt| W nb tk
rN   tjd||f tdd Y W :d S  tk
r~   tjdt	  tdd Y W 
d S X W 5 |t _X t j
| }t| |S )Nz$Module %s not importable in path %s.   )
stacklevelzCannot import:
%s)syspath
__import__ImportErrorwarningswarnUserWarning	Exception	traceback
format_excmodulescreate_access_path)r%   Zdotted_namesys_pathtempmoduler   r   r   load_moduleu   s(    


  
r8   c                   @   s   e Zd Zdd ZdS )
AccessPathc                 C   s
   || _ d S r   )accessesr   r:   r   r   r   __init__   s    zAccessPath.__init__N)__name__
__module____qualname__r<   r   r   r   r   r9      s   r9   returnc                 C   s   t | |}t| S r   )r&   r9   get_access_path_tuples)r%   r   accessr   r   r   r4      s    
r4   c                 C   sL   t | rdS t | rdS t | sDt | sDt | sDt | rHdS dS )Nclassr7   functioninstance)inspectisclassismodule	isbuiltinismethodismethoddescriptor
isfunctionr   r   r   r   get_api_type   s    

rO   c                   @   s  e Zd Zdd Zdd Zdd Zeddd	Zd
d Ze	e
 dddZdd Zdd Zdd Zdd Zdd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d(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdWee e e	e f dd4d5Z!e"fd6d7Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/e	e ddPdQZ0dRdS Z1dTdU Z2dVS )XDirectObjectAccessc                 C   s   || _ || _d S r   )_inference_state_obj)r   r%   r   r   r   r   r<      s    zDirectObjectAccess.__init__c                 C   s   d| j j|  f S )Nz%s(%s))	__class__r=   get_reprr   r   r   r   __repr__   s    zDirectObjectAccess.__repr__c                 C   s   t | j|S r   r&   rQ   r   r   r   r   r   _create_access   s    z!DirectObjectAccess._create_accessr@   c                 C   s   t | j|S r   )r4   rQ   rX   r   r   r   _create_access_path   s    z&DirectObjectAccess._create_access_pathc                 C   s
   t | jS r   )boolrR   rU   r   r   r   
py__bool__   s    zDirectObjectAccess.py__bool__c                 C   s*   zt | jjW S  tk
r$   Y d S X d S r   )r   rR   __file__r   rU   r   r   r   
py__file__   s    zDirectObjectAccess.py__file__c                 C   s   t | jpdS )N )rG   getdocrR   rU   r   r   r   	py__doc__   s    zDirectObjectAccess.py__doc__c                 C   sf   t | jrt| jr| j}n$z| jj}W n tk
r@   Y d S X z|jW S  tk
r`   Y d S X d S r   )_is_class_instancerR   rG   rL   rS   r   r=   )r   clsr   r   r   
py__name__   s    

zDirectObjectAccess.py__name__c                    s"   t  fdd jjdd  D S )Nc                 3   s   | ]}  |V  qd S r   rZ   ).0rc   rU   r   r   	<genexpr>   s     z7DirectObjectAccess.py__mro__accesses.<locals>.<genexpr>   )tuplerR   __mro__rU   r   rU   r   py__mro__accesses   s    z$DirectObjectAccess.py__mro__accessesc                    s   t  jtr$ fdd j D S t  jttfrH fdd jD S   rht j jj	}|
 S z jj}W n tk
r   Y n X t j| }|d k	r|gS d S )Nc                    s   g | ]}  |qS r   re   rf   vrU   r   r   
<listcomp>   s     z>DirectObjectAccess.py__getitem__all_values.<locals>.<listcomp>c                    s   g | ]}  |qS r   re   rl   rU   r   r   rn      s     )r   rR   dictvalueslistri   is_instancerP   rQ   rS   py__getitem__all_values__getitem__r   get_return_annotation)r   rc   getitem
annotationr   rU   r   rs      s    z*DirectObjectAccess.py__getitem__all_valuesT)safec                C   s&   |rt | jtkrd S | | j| S r   )typerR   ALLOWED_GETITEM_TYPESrZ   )r   indexrx   r   r   r   py__simple_getitem__   s    z'DirectObjectAccess.py__simple_getitem__c                 C   s   z| j j}W n tk
r"   Y d S X t| j| }|d k	rB|gS t| j tkrTg S g }t| j D ]$\}}|dkrv q|	| 
| qb|S )N   )rR   __iter__r   rP   rQ   ru   ry   rz   	enumerateappendrZ   )r   Ziter_methodplstipartr   r   r   py__iter__list   s    z!DirectObjectAccess.py__iter__listc                 C   s   |  | jjS r   )rZ   rR   rS   rU   r   r   r   py__class__  s    zDirectObjectAccess.py__class__c                    s    fdd j jD S )Nc                    s   g | ]}  |qS r   re   )rf   baserU   r   r   rn   
  s     z2DirectObjectAccess.py__bases__.<locals>.<listcomp>)rR   	__bases__rU   r   rU   r   py__bases__	  s    zDirectObjectAccess.py__bases__c                 C   s2   t | jdd }t|tr*tdd |D s.d S |S )N__path__c                 s   s   | ]}t |tV  qd S r   )r   strrf   r   r   r   r   rg     s     z0DirectObjectAccess.py__path__.<locals>.<genexpr>)r   rR   r   rq   all)r   pathsr   r   r   
py__path__  s    
zDirectObjectAccess.py__path__c                 C   sz   t | jrt| jS t| jddddkr4t| jS t| j}|tkrRt| jS t|ddddkrnt| jS t| jS )Nr>   r_   r   builtins)rG   rI   rR   reprr   ry   rV   object)r   type_r   r   r   rT     s    



zDirectObjectAccess.get_reprc                 C   s   t | jS r   )rG   rH   rR   rU   r   r   r   is_class&  s    zDirectObjectAccess.is_classc                 C   s   t | jpt | jS r   )rG   rM   rR   rK   rU   r   r   r   is_function)  s    zDirectObjectAccess.is_functionc                 C   s   t | jS r   )rG   rI   rR   rU   r   r   r   	is_module,  s    zDirectObjectAccess.is_modulec                 C   s
   t | jS r   )rb   rR   rU   r   r   r   rr   /  s    zDirectObjectAccess.is_instancec                 C   s   t | jS r   )rG   rL   rR   rU   r   r   r   rL   2  s    z%DirectObjectAccess.ismethoddescriptorc                 C   sN   dd }|   rdS || j}|d kr@|t| j}|d kr@dS t|dS )Nc                 S   s   t | dt | dd S )Nr?   r=   )r   rN   r   r   r   try_to_get_name6  s    z?DirectObjectAccess.get_qualified_names.<locals>.try_to_get_namer   .)r   rR   ry   ri   split)r   r   r   r   r   r   get_qualified_names5  s    
z&DirectObjectAccess.get_qualified_namesc                 C   s
   t | jS r   )dirrR   rU   r   r   r   r   B  s    zDirectObjectAccess.dirc                 C   s,   zt | j W dS  tk
r&   Y dS X d S )NTF)iterrR   	TypeErrorrU   r   r   r   has_iterE  s
    
zDirectObjectAccess.has_iterc                 C   s   zt | j|\}}W nv tk
r   |stjddJ td z$t| j|dd fW W  5 Q R   Y S  tk
rx   Y nX W 5 Q R X Y dS X |rt|t	krt
|trt|jdrt| j|j}dd| fS dS dS )	NTrecordalwaysF)FFN__annotations__)TTN)TFN)r   rR   r   r-   catch_warningssimplefilterhasattrr0   ry   r   r   propertyfgetrP   rQ   ru   )r   r   rx   r   r   ar   r   r   is_allowed_getattrL  s$    
$
z%DirectObjectAccess.is_allowed_getattrc              
   C   s  z2t jdd t d t| j|}W 5 Q R X W n> tk
rp } z |tkr\t|trX t|}W 5 d }~X Y nX | 	|}t
|r|gS z
|j}W n tk
r   Y n6X |d k	rt|trzt| W n tk
r   Y nX t
|}|d krt
t|}|d krt}| 	||gS )NTr   r   )r-   r   r   r   rR   r0   r   r   r   rY   rG   rI   r>   r   r+   r,   	getmodulery   r   )r   r   r   Z
return_objerC   r7   r   r   r   getattr_pathsl  s8    







z DirectObjectAccess.getattr_pathsc                 C   s@   t | jttttttfks$| jd kr*| jS tdt | j d S )Nz Object is type %s and not simple)	ry   rR   r[   bytesfloatintr   slice
ValueErrorrU   r   r   r   get_safe_value  s    $z!DirectObjectAccess.get_safe_valuec                 C   s
   t | jS r   )rO   rR   rU   r   r   r   rO     s    zDirectObjectAccess.get_api_typec                 C   s   t | jtrdS d S )Nro   )r   rR   ro   rU   r   r   r   get_array_type  s    z!DirectObjectAccess.get_array_typec                    s     fdd} fdd| D S )Nc                  3   s.   t  j D ]\} }| dkr" q*|V  qd S )Nr   )r   rR   keys)r   krU   r   r   iter_partial_keys  s    z;DirectObjectAccess.get_key_paths.<locals>.iter_partial_keysc                    s   g | ]}  |qS r   re   )rf   r   rU   r   r   rn     s     z4DirectObjectAccess.get_key_paths.<locals>.<listcomp>r   )r   r   r   rU   r   get_key_paths  s    	z DirectObjectAccess.get_key_pathsc                    s$    fdd   D }dd |D S )Nc                    s   g | ]}t  j|qS r   rW   )rf   orU   r   r   rn     s     z=DirectObjectAccess.get_access_path_tuples.<locals>.<listcomp>c                 S   s   g | ]}|  |fqS r   )rd   )rf   rC   r   r   r   rn     s     )_get_objects_pathr;   r   rU   r   rB     s    z)DirectObjectAccess.get_access_path_tuplesc                    s    fdd}t tt | S )Nc                  3   s    j } | V  z
| j} W n tk
r*   Y nX | V  z
| j}W n$ tk
r`   t| s\tV  Y n>X |d krrtV  n,ztj| V  W n t	k
r   tV  Y nX d S r   )
rR   __objclass__r   r>   rG   rI   r   r)   r3   KeyError)r   Zimp_plzrU   r   r   get  s$    


z1DirectObjectAccess._get_objects_path.<locals>.get)rq   reversed)r   r   r   rU   r   r     s    z$DirectObjectAccess._get_objects_pathc                 C   s"   |j }t| }| || j|jS r   )rC   
_OPERATORSrZ   rR   )r   Zother_access_handleoperatorZother_accessopr   r   r   execute_operation  s    z$DirectObjectAccess.execute_operationc                    s   d}d}t  jddddkrptdt j}|dk	rp|d}d	dl}tjd
kr`|	 j}nt  jddd}|t
 fdd|D fS )zF
        Returns Tuple[Optional[str], Tuple[AccessPath, ...]]
        Nr   r>   r_   r   typingztyping.(\w+)\[rh   r   )      __args__c                 3   s   | ]}  |V  qd S r   re   )rf   argrU   r   r   rg     s     zBDirectObjectAccess.get_annotation_name_and_args.<locals>.<genexpr>)r   rR   rematchr   groupr   r)   version_infoget_argsri   )r   r   argsmr   r   rU   r   get_annotation_name_and_args  s    

z/DirectObjectAccess.get_annotation_name_and_argsc                 C   s   t | jo| jtkS r   )rG   rH   rR   ry   rU   r   r   r   needs_type_completions  s    z)DirectObjectAccess.needs_type_completionsc                 C   s
   t |S r   )rG   formatannotation)r   rw   r   r   r   _annotation_to_str  s    z%DirectObjectAccess._annotation_to_strc                    s    fdd   j D S )Nc                    sZ   g | ]R}t |j|j|jk	 |jt|j|j|jk	 |j |jt|j	d qS ))r   Zhas_defaultr   Zdefault_stringZhas_annotationrw   Zannotation_stringZ	kind_name)
r   r   r   emptyrZ   r   rw   r   r   kindr   rU   r   r   rn     s   





z;DirectObjectAccess.get_signature_params.<locals>.<listcomp>)_get_signature
parametersrp   rU   r   rU   r   get_signature_params  s    

z'DirectObjectAccess.get_signature_paramsc              	   C   s4   | j }zt|W S  ttfk
r.   tY nX d S r   )rR   rG   	signatureRuntimeErrorr   r   rX   r   r   r   r      s
    z!DirectObjectAccess._get_signaturec                 C   sl   z| j jd}W n tk
r(   Y d S X |d kr6d S zt| j d}W n tk
r`   Y nX | |S )NrA   )rR   r   r   r   r   get_type_hintsr0   rZ   )r   r   r   r   r   ru   
  s    z(DirectObjectAccess.get_return_annotationc                 C   s   |  | j S r   )rZ   rR   rU   r   r   r   negate  s    zDirectObjectAccess.negatec                    s&   t  fdd  D }  |fS )zw
        Used to return a couple of infos that are needed when accessing the sub
        objects of an objects
        c                 3   s   | ]}|  |fV  qd S r   )r   )rf   r   rU   r   r   rg   "  s   z3DirectObjectAccess.get_dir_infos.<locals>.<genexpr>)ro   r   r   )r   Ztuplesr   rU   r   get_dir_infos  s    z DirectObjectAccess.get_dir_infosN)T)3r=   r>   r?   r<   rV   rY   r9   rZ   r\   r   r   r^   ra   rd   rk   rs   r|   r   r   r   r   r$   rT   r   r   r   rr   rL   r   r   r   r   r[   r   r   r   r   rO   r   r   rB   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   rP      sT   	
 -
rP   c                 C   sD   z
| j }W n tk
r    Y dS X |tko>t|to>t|t S dS )zLike inspect.* methods.FN)rS   r   ry   r   
issubclassNOT_CLASS_TYPES)r   rc   r   r   r   rb   )  s
    
rb   )NrG   typesr1   r)   r   r   collectionsr   r-   r   r   r   pathlibr   r   r   Z&jedi.inference.compiled.getattr_staticr   r   rq   ri   r   	bytearrayro   rz   ry   replaceMethodDescriptorTypeBuiltinFunctionTypeCodeType	FrameTypeFunctionTypeGeneratorTypeGetSetDescriptorType
LambdaTypeMemberDescriptorType
MethodType
ModuleTypeTracebackTypeMappingProxyTypeSimpleNamespaceDynamicClassAttributer   setr~   WrapperDescriptorTyper   __get__r   Zobject_class_dictClassMethodDescriptorTyper   eqneis_is_notltlegtgeZCOMPARISON_OPERATORSaddsubr   updatestaticmethodclassmethodr   r   r   r$   r&   r8   r9   r4   rO   rP   rb   r   r   r   r   <module>   s   



	   