B
    /du                 @   sf  d 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l	m
Z
 ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZ ddlmZ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+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 dZ4dZ5dd Z6dd Z7dddZ8e8dddd d! Z9e8dd"d# Z:e8d$dd%d&Z;e8d'd(d) Z<G d*d+ d+eZ=e8d,dd-d.d/ Z>G d0d1 d1e-Z?e8d2ddd3d4d5 Z@e8d6ddd7d8d9 ZAG d:d; d;eZBe8d2d<d= ZCG d>d? d?eZDG d@dA dAeZEG dBdC dCeZFe8d2ddd3dDdE ZGG dFdG dGe-eZHe8dHddIdJdK ZIdLdM ZJG dNdO dOeZKG dPdQ dQeKZLG dRdS dSe3ZMG dTdU dUeZNdVdW ZOdXdY ZPe8dZd[d\ ZQe8d]d^d_ ZRd`da ZSG dbdc dcee!ZTG ddde dee2ZUG dfdg dge+ZVG dhdi dieZWe8dHdjdk ZXG dldm dmeZYG dndo doee#ZZe8dpddd3dqdr Z[dsdt Z\e8dpddIdudv Z]e;e<e>e@eAe9e:eCeGeIdw
eQeQdxdydz d{dz d|d}eJieOePeXd~deQideRide[ideQiddz ddz ddeSideSideSie\ej^j_e\ej^j`e\ej^jae]ddZbdd ZcG dd deZddd ZedS )a  
Implementations of standard library functions, because it's not possible to
understand them with Jedi.

To add a new implementation, create a function and add it to the
``_implemented`` dict at the bottom of this module.

Note that this module exists only to implement very specific functionality in
the standard library. The usual way to understand the standard library is the
compiled module that returns the types for C-builtins.
    N)	Parameter)debug)safe_property)get_str_or_none)iterate_argument_clinic
ParamIssuerepack_with_argument_clinicAbstractArgumentsTreeArgumentsWrapper)analysis)compiled)AnonymousMethodExecutionContextMethodExecutionContext)ContextualizedNode	NO_VALUESValueSetValueWrapperLazyValueWrapper)
ClassValueModuleValue)
ClassMixin)FunctionMixin)iterable)LazyTreeValueLazyKnownValueLazyKnownValues)	ValueNameBaseTreeParamName)AttributeOverwritepublish_methodParserTreeFilter
DictFilter)AbstractSignatureSignatureWrappera  _property = property
_tuple = tuple
from operator import itemgetter as _itemgetter
from collections import OrderedDict

class {typename}(tuple):
    __slots__ = ()

    _fields = {field_names!r}

    def __new__(_cls, {arg_list}):
        'Create new instance of {typename}({arg_list})'
        return _tuple.__new__(_cls, ({arg_list}))

    @classmethod
    def _make(cls, iterable, new=tuple.__new__, len=len):
        'Make a new {typename} object from a sequence or iterable'
        result = new(cls, iterable)
        if len(result) != {num_fields:d}:
            raise TypeError('Expected {num_fields:d} arguments, got %d' % len(result))
        return result

    def _replace(_self, **kwds):
        'Return a new {typename} object replacing specified fields with new values'
        result = _self._make(map(kwds.pop, {field_names!r}, _self))
        if kwds:
            raise ValueError('Got unexpected field names: %r' % list(kwds))
        return result

    def __repr__(self):
        'Return a nicely formatted representation string'
        return self.__class__.__name__ + '({repr_fmt})' % self

    def _asdict(self):
        'Return a new OrderedDict which maps field names to their values.'
        return OrderedDict(zip(self._fields, self))

    def __getnewargs__(self):
        'Return self as a plain tuple.  Used by copy and pickle.'
        return tuple(self)

    # These methods were added by Jedi.
    # __new__ doesn't really work with Jedi. So adding this to nametuples seems
    # like the easiest way.
    def __init__(self, {arg_list}):
        'A helper function for namedtuple.'
        self.__iterable = ({arg_list})

    def __iter__(self):
        for i in self.__iterable:
            yield i

    def __getitem__(self, y):
        return self.__iterable[y]

{field_defs}
zW    {name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}')
c                s    fdd}|S )Nc                s    fdd}yj j}W n tk
r0   Y nX j}|d k	rN| rNd}n |d k	rh| rh| }n| S  s~ r| S yt	| | }W n t
k
r   Y nX | |dS | S )Nc                  s    dS )N)	arguments r%   )r$   callbackvaluer%   `/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/jedi/plugins/stdlib.pycallj   s    z&execute.<locals>.wrapper.<locals>.callbuiltins)r$   r&   )namestring_nameAttributeErrorparent_contextis_builtins_module	is_module
py__name__Zis_bound_methodis_instance_implementedKeyError)r'   r$   r)   obj_namepmodule_namefunc)r&   )r$   r'   r(   wrapperi   s&    
zexecute.<locals>.wrapperr%   )r&   r9   r%   )r&   r(   executeh   s    r:   c             C   s:   yt | | \}}W n tk
r,   tS X | S d S )N)listunpack
IndexErrorr   infer)inference_stater$   indexkey
lazy_valuer%   r%   r(   _follow_param   s
    rC   Fc                s    fdd}|S )zL
    Works like Argument Clinic (PEP 436), to validate function params.
    c                s    fdd}|S )Nc                s   yt t| j| }W n tk
r*   tS X tjd|  dd i }rP|j|d< r\| |d< rj| j|d< rv||d< r||d< ||}tjd	|dd |S )
Nzbuiltin start %sZMAGENTA)colorcontextr'   r?   r$   r&   zbuiltin end: %s)tupler   r?   r   r   r   ZdbgrE   )r'   r$   r&   argskwargsresult)clinic_stringr8   want_argumentswant_callbackwant_contextwant_inference_state
want_valuer%   r(   r9      s(    


z+argument_clinic.<locals>.f.<locals>.wrapperr%   )r8   r9   )rJ   rK   rL   rM   rN   rO   )r8   r(   f   s    zargument_clinic.<locals>.fr%   )rJ   rO   rM   rK   rN   rL   rP   r%   )rJ   rK   rL   rM   rN   rO   r(   argument_clinic   s    rQ   ziterator[, default], /T)rN   c             C   s   ||  d B S )N__next__)py__getattribute__execute_with_values)	iteratorsdefaultsr?   r%   r%   r(   builtins_next   s    rW   c             C   s   |  d S )N__iter__)rS   rT   )Ziterators_or_callablesrV   r%   r%   r(   builtins_iter   s    rY   zobject, name[, default], /c             C   sH   xB| D ]:}x4|D ],}t |}|d kr2td qq||S qW qW tS )Nzgetattr called without str)r   r   warningrS   r   )objectsnamesrV   r'   r+   stringr%   r%   r(   builtins_getattr   s    


r^   zobject[, bases, dict], /c             C   s   |s|rt S |  S d S )N)r   py__class__)r[   basesZdictsr%   r%   r(   builtins_type   s    ra   c               @   s2   e Zd ZdZdd Zdd Zdd Zdd	d
ZdS )SuperInstancez-To be used like the object ``super`` returns.c             C   s   || _ || _d S )N)r?   	_instance)selfr?   instancer%   r%   r(   __init__   s    zSuperInstance.__init__c             C   s   | j   S )N)rc   r_   py__bases__)rd   r%   r%   r(   
_get_bases   s    zSuperInstance._get_basesc             C   s*   |   d   }|s| jS tt|S )Nr   )rh   r>   rT   rc   nextiter)rd   Zobjsr%   r%   r(   _get_wrapped_value   s    z SuperInstance._get_wrapped_valueNc             c   sD   x>|   D ]2}x,|  D ]}x| D ]
}|V  q*W qW q
W d S )N)rh   r>   rT   get_filters)rd   origin_scopebr'   rP   r%   r%   r(   rl      s    zSuperInstance.get_filters)N)__name__
__module____qualname____doc__rf   rh   rk   rl   r%   r%   r%   r(   rb      s
   rb   z[type[, value]], /)rM   c             C   sD   d }t |tr|j}nt |tr&|j}|d kr2tS tt|j|hS )N)
isinstancer   re   r   r   r   rb   r?   )typesr[   rE   re   r%   r%   r(   builtins_super   s    

ru   c                   s6   e Zd Z fddZd	ddZeddd Z  ZS )
ReversedObjectc                s   t  | || _d S )N)superrf   
_iter_list)rd   Zreversed_objZ	iter_list)	__class__r%   r(   rf      s    zReversedObject.__init__Nc             C   s   | j S )N)rx   )rd   Zcontextualized_noder%   r%   r(   
py__iter__  s    zReversedObject.py__iter__rR   c             C   s   t dd | jD S )Nc             s   s   | ]}|  V  qd S )N)r>   ).0rB   r%   r%   r(   	<genexpr>
  s    z'ReversedObject._next.<locals>.<genexpr>)r   	from_setsrx   )rd   r$   r%   r%   r(   _next  s    zReversedObject._next)N)ro   rp   rq   rf   rz   r   r~   __classcell__r%   r%   )ry   r(   rv      s   
rv   zsequence, /)rO   rK   c             C   sf   t | \}}d }t|tr,t|j|j}t| |}|j	j
d \}tt|tt|gS )NIterator)ri   r<   rs   r   r   rE   datar;   iterater?   Ztyping_modulerS   rT   r   rv   reversed)	sequencesr'   r$   rA   rB   ZcnZorderedseqr%   r%   r(   builtins_reversed  s    
r   zvalue, type, /)rK   rN   c          	      s   t  }x | D ]}| }y
|j W n" tk
rF   t ddg}P Y nX t| x|D ]}| rv||k qZ|jj	dkr|
  rtdd | D }|tfdd|D  qZt| d \}	}
t|
trZ|
j}d| }t|
jd	|| qZW qW t fd
d|D S )NTFrF   c             s   s   | ]}|  V  qd S )N)r>   )r{   rB   r%   r%   r(   r|   8  s   z&builtins_isinstance.<locals>.<genexpr>c             3   s   | ]}| kV  qd S )Nr%   )r{   cls)mror%   r(   r|   ;  s       z[TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types, not %s.ztype-error-isinstancec             3   s   | ]}t  t|V  qd S )N)r   Zbuiltin_from_namestr)r{   rn   )r?   r%   r(   r|   F  s   )setr_   rg   r-   r;   	py__mro__is_classaddr+   r,   get_root_contextr/   r   r}   r   anyr<   rs   r   r   r   rE   )r[   rt   r$   r?   Zbool_resultsor   Z
cls_or_tupclasses_rB   nodemessager%   )r?   r   r(   builtins_isinstance!  s6    



r   c               @   s   e Zd Zdd ZdS )StaticMethodObjectc             C   s   t | jgS )N)r   _wrapped_value)rd   re   class_valuer%   r%   r(   	py__get__L  s    zStaticMethodObject.py__get__N)ro   rp   rq   r   r%   r%   r%   r(   r   K  s   r   c             C   s   t dd | D S )Nc             s   s   | ]}t |V  qd S )N)r   )r{   rP   r%   r%   r(   r|   R  s    z(builtins_staticmethod.<locals>.<genexpr>)r   )	functionsr%   r%   r(   builtins_staticmethodP  s    r   c                   s$   e Zd Z fddZdd Z  ZS )ClassMethodObjectc                s   t  | || _d S )N)rw   rf   	_function)rd   Zclass_method_objfunction)ry   r%   r(   rf   V  s    zClassMethodObject.__init__c                s    t  fddjdD S )Nc                s   g | ]}t | jqS r%   )ClassMethodGetr   )r{   __get__)r   rd   r%   r(   
<listcomp>\  s   z/ClassMethodObject.py__get__.<locals>.<listcomp>r   )r   r   rS   )rd   re   r   r%   )r   rd   r(   r   Z  s    zClassMethodObject.py__get__)ro   rp   rq   rf   r   r   r%   r%   )ry   r(   r   U  s   r   c                   s,   e Zd Z fddZdd Zdd Z  ZS )r   c                s   t  | || _|| _d S )N)rw   rf   _classr   )rd   
get_methodklassr   )ry   r%   r(   rf   b  s    zClassMethodGet.__init__c                s    fdd j  D S )Nc                s   g | ]}|  jqS r%   )bindr   )r{   sig)rd   r%   r(   r   h  s    z1ClassMethodGet.get_signatures.<locals>.<listcomp>)r   get_signatures)rd   r%   )rd   r(   r   g  s    zClassMethodGet.get_signaturesc             C   s   | j t| j|S )N)r   r:   ClassMethodArgumentsr   )rd   r$   r%   r%   r(   
py__call__j  s    zClassMethodGet.py__call__)ro   rp   rq   rf   r   r   r   r%   r%   )ry   r(   r   a  s   r   c                   s&   e Zd Z fddZdddZ  ZS )r   c                s   t  | || _d S )N)rw   rf   r   )rd   r   r$   )ry   r%   r(   rf   o  s    zClassMethodArguments.__init__Nc             c   s0   d t | jfV  x| j|D ]
}|V  qW d S )N)r   r   Z_wrapped_argumentsr<   )rd   r8   valuesr%   r%   r(   r<   s  s    zClassMethodArguments.unpack)N)ro   rp   rq   rf   r<   r   r%   r%   )ry   r(   r   n  s   r   c                s   t  fdd|j|dD S )Nc             3   s"   | ]} D ]}t ||V  q
qd S )N)r   )r{   Zclass_method_objectr   )r   r%   r(   r|   |  s   z'builtins_classmethod.<locals>.<genexpr>)r$   )r   r   )r   r'   r$   r%   )r   r(   builtins_classmethody  s    
r   c                   sH   e Zd ZdZ fddZdd Zedededd	d
 Z  ZS )PropertyObjectpropertyc                s   t  | || _d S )N)rw   rf   r   )rd   Zproperty_objr   )ry   r%   r(   rf     s    zPropertyObject.__init__c             C   s   |d krt | gS | j|S )N)r   r   rT   )rd   re   r   r%   r%   r(   r     s    
zPropertyObject.py__get__deletergettersetterc             C   s
   t | hS )N)r   )rd   r$   r%   r%   r(   _return_self  s    zPropertyObject._return_self)	ro   rp   rq   api_typerf   r   r   r   r   r%   r%   )ry   r(   r     s   r   zfunc, /)rL   c                s   t  fdd| D S )Nc             3   s"   | ]} D ]}t ||V  q
qd S )N)r   )r{   Zproperty_valuer   )r   r%   r(   r|     s   z$builtins_property.<locals>.<genexpr>)r   )r   r&   r%   )r   r(   builtins_property  s    
r   c             C   s:  | j }d}x*t||dD ]}t|}|dk	r|}P qW t||d}|sJtS t|d }t|}	|	dk	rx|	dd }
n2t|tj	rdd |
 D }
d	d |
D }
ntS tj|t|
t|
tt|
d
ddd dddd t|
D d}|j|}t| }t||tj|ddd }tt|||gS )z
    Implementation of the namedtuple function.

    This has to be done by processing the namedtuple class template and
    inferring the result.

    Zjedi_unknown_namedtupler   Nr   , c             S   s"   g | ]}|  D ]}t|qqS r%   )r>   r   )r{   rB   vr%   r%   r(   r     s   z*collections_namedtuple.<locals>.<listcomp>c             S   s   g | ]}|d k	r|qS )Nr%   )r{   rP   r%   r%   r(   r     s    ' 
c             s   s    | ]\}}t j||d V  qdS ))r@   r+   N)_NAMEDTUPLE_FIELD_TEMPLATEformat)r{   r@   r+   r%   r%   r(   r|     s   z)collections_namedtuple.<locals>.<genexpr>)typenamefield_names
num_fieldsarg_listrepr_fmtZ
field_defsT)keepends)Z
code_lines)r?   rC   r   r   r;   replacesplitrs   r   Sequencerz   _NAMEDTUPLE_CLASS_TEMPLATEr   rF   lenreprjoin	enumerateZgrammarparseri   Ziter_classdefsr   parsosplit_lines
as_contextr   r   )r'   r$   r&   r?   r+   cxZparam_values_fieldsr]   fieldscodemoduleZgenerated_classr.   r%   r%   r(   collections_namedtuple  sB    
r   c                   sF   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Z  Z	S )PartialObjectNc                s   t  | || _|| _d S )N)rw   rf   
_argumentsrc   )rd   Zactual_valuer$   re   )ry   r%   r(   rf     s    zPartialObject.__init__c             C   s8   t |d\}}|d k	s|d kr0td| j d S | S )N)NNz(Partial should have a proper function %s)ri   r   rZ   r   r>   )rd   unpacked_argumentsrA   rB   r%   r%   r(   _get_functions  s
    zPartialObject._get_functionsc                s~   | j  }| |}|d kr g S d | jd k	r2d t x,|D ]$\}}|d krX d7  q>| q>W  fdd| D S )Nr   r   c                s   g | ]}t | qS r%   )PartialSignature)r{   s)	arg_countkeysr%   r(   r     s    z0PartialObject.get_signatures.<locals>.<listcomp>)r   r<   r   rc   r   r   r   )rd   r   funcsrA   r   r%   )r   r   r(   r     s    



zPartialObject.get_signaturesc             C   s2   |  | j }|d krtS |t| j|| jS )N)r   r   r<   r   r:   MergedPartialArgumentsrc   )rd   r$   r   r%   r%   r(   r     s
    zPartialObject.py__call__c             C   s4   |  | j }|dkrdS x|D ]
}| S W dS )z
        In CPython partial does not replace the docstring. However we are still
        imitating it here, because we want this docstring to be worth something
        for the user.
        Nr   )r   r   r<   	py__doc__)rd   Z	callablesZ	callable_r%   r%   r(   r     s    

zPartialObject.py__doc__c             C   s
   t | gS )N)r   )rd   re   r   r%   r%   r(   r     s    zPartialObject.py__get__)N)
ro   rp   rq   rf   r   r   r   r   r   r   r%   r%   )ry   r(   r     s   	r   c               @   s   e Zd Zdd ZdS )PartialMethodObjectc             C   s(   |d krt | gS t t| j| j|gS )N)r   r   r   r   )rd   re   r   r%   r%   r(   r     s    
zPartialMethodObject.py__get__N)ro   rp   rq   r   r%   r%   r%   r(   r     s   r   c                   s&   e Zd Z fddZdddZ  ZS )r   c                s   t  | || _|| _d S )N)rw   rf   _skipped_arg_count_skipped_arg_set)rd   Zwrapped_signatureZskipped_arg_countZskipped_arg_set)ry   r%   r(   rf     s    zPartialSignature.__init__Fc                s&    j   jd  } fdd|D S )Nc                s   g | ]}|j  jkr|qS r%   )r,   r   )r{   n)rd   r%   r(   r     s    z4PartialSignature.get_param_names.<locals>.<listcomp>)Z_wrapped_signatureget_param_namesr   )rd   resolve_starsr\   r%   )rd   r(   r     s    z PartialSignature.get_param_names)F)ro   rp   rq   rf   r   r   r%   r%   )ry   r(   r     s   r   c               @   s    e Zd ZdddZdddZdS )r   Nc             C   s   || _ || _|| _d S )N)_partial_arguments_call_argumentsrc   )rd   Zpartial_argumentsZcall_argumentsre   r%   r%   r(   rf   #  s    zMergedPartialArguments.__init__c             c   sd   | j |}t|d  | jd k	r0d t| jfV  x|D ]
}|V  q6W x| j|D ]
}|V  qRW d S )N)r   r<   ri   rc   r   r   )rd   ZfuncdefunpackedZkey_lazy_valuer%   r%   r(   r<   (  s    



zMergedPartialArguments.unpack)N)N)ro   rp   rq   rf   r<   r%   r%   r%   r(   r   "  s   
r   c                s   t  fdd|  D S )Nc             3   s   | ]}t | V  qd S )N)r   )r{   re   )r$   r%   r(   r|   7  s   z$functools_partial.<locals>.<genexpr>)r   r   )r'   r$   r&   r%   )r$   r(   functools_partial5  s    
r   c                s   t  fdd|  D S )Nc             3   s   | ]}t | V  qd S )N)r   )r{   re   )r$   r%   r(   r|   >  s   z*functools_partialmethod.<locals>.<genexpr>)r   r   )r'   r$   r&   r%   )r$   r(   functools_partialmethod<  s    
r   zfirst, /c             C   s   | S )Nr%   )Zfirstsr%   r%   r(   _return_first_paramC  s    r   r   c             C   s   t dd | D S )Nc             s   s$   | ]}|  D ]}| V  qqd S )N)rz   r>   )r{   sequencerB   r%   r%   r(   r|   K  s   z!_random_choice.<locals>.<genexpr>)r   r}   )r   r%   r%   r(   _random_choiceH  s    r   c             C   s<   x6t | j|dD ]$}| r*tt|gS t| gS qW tS )Nr   )rC   r?   r   r   DataclassWrapperr   )r'   r$   r&   r   r%   r%   r(   
_dataclassQ  s
    r   c               @   s   e Zd Zdd ZdS )r   c          
   C   s   g }xt t|  D ]}t|tr|  }xt| dd dD ]j}|j	
 }|jd }|jdkrF|jdkrFt|jdk rd }n
|jd }|t|j|j	|jd |d	 qFW qW t||gS )
Nc             S   s   | j S )N)	start_pos)r+   r%   r%   r(   <lambda>c      z1DataclassWrapper.get_signatures.<locals>.<lambda>)rA   r   Z	expr_stmt	annassign      )r.   	tree_nameannotation_nodedefault_node)r   r;   r   rs   r   r   Zget_global_filtersortedr   r   Zget_definitionchildrentyper   appendDataclassParamNamer.   DataclassSignature)rd   param_namesr   filter_r+   dr   defaultr%   r%   r(   r   [  s"    



zDataclassWrapper.get_signaturesN)ro   rp   rq   r   r%   r%   r%   r(   r   Z  s   r   c                   s&   e Zd Z fddZdddZ  ZS )r   c                s   t  | || _d S )N)rw   rf   _param_names)rd   r'   r  )ry   r%   r(   rf   u  s    zDataclassSignature.__init__Fc             C   s   | j S )N)r  )rd   r   r%   r%   r(   r   y  s    z"DataclassSignature.get_param_names)F)ro   rp   rq   rf   r   r   r%   r%   )ry   r(   r   t  s   r   c                   s,   e Zd Z fddZdd Zdd Z  ZS )r   c                s   t  || || _|| _d S )N)rw   rf   r   r   )rd   r.   r   r   r   )ry   r%   r(   rf   ~  s    zDataclassParamName.__init__c             C   s   t jS )N)r   POSITIONAL_OR_KEYWORD)rd   r%   r%   r(   get_kind  s    zDataclassParamName.get_kindc             C   s    | j d krtS | j| j S d S )N)r   r   r.   Z
infer_node)rd   r%   r%   r(   r>     s    
zDataclassParamName.infer)ro   rp   rq   rf   r  r>   r   r%   r%   )ry   r(   r   }  s   r   c                   s,   e Zd Z fddZeddd Z  ZS )ItemGetterCallablec                s   t  | || _d S )N)rw   rf   _args_value_set)rd   re   args_value_set)ry   r%   r(   rf     s    zItemGetterCallable.__init__zitem, /c          	      sr   t }xh| jD ]^}t| }t|dkrB| |d  d O }q|tt	| j
j fdd|D gO }qW |S )Nr   r   c                s    g | ]}t  | d qS )N)r   get_itemr>   )r{   rB   )item_value_setr%   r(   r     s   z1ItemGetterCallable.py__call__.<locals>.<listcomp>)r   r	  r;   rz   r   r  r>   r   r   ZFakeListr   r?   )rd   r  Z	value_setZ
args_valueZlazy_valuesr%   )r  r(   r     s    
zItemGetterCallable.py__call__)ro   rp   rq   rf   r   r   r   r%   r%   )ry   r(   r    s   r  c             C   s   t dd | D S )Nc             s   s   | ]}t |V  qd S )N)WrapsCallable)r{   r8   r%   r%   r(   r|     s    z#_functools_wraps.<locals>.<genexpr>)r   )r   r%   r%   r(   _functools_wraps  s    r  c               @   s   e Zd Zeddd ZdS )r  zfunc, /c                s   t  fdd|D S )Nc                s   h | ]}t | jqS r%   )Wrappedr   )r{   r8   )rd   r%   r(   	<setcomp>  s    z+WrapsCallable.py__call__.<locals>.<setcomp>)r   )rd   r   r%   )rd   r(   r     s    zWrapsCallable.py__call__N)ro   rp   rq   r   r   r%   r%   r%   r(   r    s   r  c                   s0   e Zd Z fddZedd Zdd Z  ZS )r  c                s   t  | || _d S )N)rw   rf   _original_function)rd   r8   Zoriginal_function)ry   r%   r(   rf     s    zWrapped.__init__c             C   s   | j jS )N)r  r+   )rd   r%   r%   r(   r+     s    zWrapped.namec             C   s   | gS )Nr%   )rd   r%   r%   r(   get_signature_functions  s    zWrapped.get_signature_functions)ro   rp   rq   rf   r   r+   r  r   r%   r%   )ry   r(   r    s   r  z*args, /c                s   t  fdd||D S )Nc                s   g | ]}t | qS r%   )r  )r{   re   )r
  r%   r(   r     s   z(_operator_itemgetter.<locals>.<listcomp>)r   r   )r
  r'   r$   r%   )r
  r(   _operator_itemgetter  s    
r  c                s   t dddd fdd}|S )Nz	string, /T)rO   rK   c                s*    fdd}t | }|r |S ||S )Nc              3   s:   x4D ],} t | }|d k	r |}t| j|V  qW d S )N)r   r   create_simple_objectr?   )r'   r   )r8   stringsr%   r(   r     s
    
z?_create_string_input_function.<locals>.wrapper.<locals>.iterate)r   r   )r  r'   r$   r   r   )r8   )r  r(   r9     s
    
z._create_string_input_function.<locals>.wrapper)rQ   )r8   r9   r%   )r8   r(   _create_string_input_function  s    r  c             C   s   t | dkrd}| \}d}xp| D ]P}| }t |dkr>P ttt|}|d krXP |sh|tjj7 }||7 }d}q$W t	t
|j|gS | S )Nr   r   TF)r   rz   r>   r   ri   rj   ospathsepr   r   r  r?   )Zargs_setr&   r]   r   Zis_firstrB   Zstring_valuesr   r%   r%   r(   _os_path_join  s"    r  )
getattrr   rw   r   rs   ri   rj   staticmethodclassmethodr   )copydeepcopyc             C   s   t S )N)r   )r'   r$   r&   r%   r%   r(   r      r   r   c             C   s   t S )N)r   )r'   r$   r&   r%   r%   r(   r     r   )loadloads
namedtuple)partialpartialmethodwrapsproxychoice
itemgetterabstractmethodc             C   s   t S )N)r   )r'   r$   r&   r%   r%   r(   r     r   c             C   s   t S )N)r   )r'   r$   r&   r%   r%   r(   r      r   )_aliasruntime_checkable	dataclassZdefine)dirnameabspathrelpathr   )r*   r  jsoncollections	functools_weakrefrandomoperatorabctypingdataclassesattrattrszos.pathc                s    fdd}|S )Nc                s`   xR|D ]J}|  dkr|   dkrt  d}t fdd| D gS qW  ||S )NEnumMetaenum)r.   c                s   i | ]}t  |j|jqS r%   )EnumInstancer+   r,   )r{   r+   )r   r%   r(   
<dictcomp>>  s   z:get_metaclass_filters.<locals>.wrapper.<locals>.<dictcomp>)r1   r   r    r   r!   r   )r   Zmetaclassesr2   	metaclassr  )r8   )r   r(   r9   9  s    
z&get_metaclass_filters.<locals>.wrapperr%   )r8   r9   r%   )r8   r(   get_metaclass_filters8  s    
r@  c               @   s2   e Zd Zdd Zedd Zdd Zd
dd	ZdS )r=  c             C   s"   |j | _ || _|| _| jj| _d S )N)r?   _cls_namer   Z	tree_node)rd   r   r+   r%   r%   r(   rf   G  s    zEnumInstance.__init__c             C   s   t | | jjS )N)r   rB  r   )rd   r%   r%   r(   r+   M  s    zEnumInstance.namec             C   sf   | j j}|dr|ds(| j jdkrV| j  }|rBtt|S | jj	
d\}|S | j \}|S )N__r   object)rB  r,   
startswithendswithr   r>   ri   rj   r?   Zbuiltins_modulerS   rA  rT   )rd   r   inferredr   r'   r%   r%   r(   rk   Q  s     
zEnumInstance._get_wrapped_valueNc             c   sD   t tt| j| jjj| jdV  x|  	 D ]
}|V  q2W d S )N)r+   r'   )
r!   dictr   r  r?   rB  r,   r+   rk   rl   )rd   rm   rP   r%   r%   r(   rl   ]  s
    zEnumInstance.get_filters)N)ro   rp   rq   rf   r   r+   rk   rl   r%   r%   r%   r(   r=  F  s   r=  c                s    fdd}|S )Nc                s@   |j dkr4| r4| dkr4tt| tjjhS  | ||S )Nr  zos.path)	r'   r0   r1   r   r   r  r  r  r  )r?   rE   r   )r8   r%   r(   r9   g  s    z$tree_name_to_values.<locals>.wrapperr%   )r8   r9   r%   )r8   r(   tree_name_to_valuesf  s    rI  )FFFFF)N)frr   r   r  inspectr   Zjedir   Zjedi.inference.utilsr   Zjedi.inference.helpersr   Zjedi.inference.argumentsr   r   r   r	   r
   Zjedi.inferencer   r   Zjedi.inference.value.instancer   r   Zjedi.inference.base_valuer   r   r   r   r   Zjedi.inference.valuer   r   Zjedi.inference.value.klassr   Zjedi.inference.value.functionr   r   Zjedi.inference.lazy_valuer   r   r   Zjedi.inference.namesr   r   Zjedi.inference.filtersr   r   r    r!   Zjedi.inference.signaturer"   r#   r   r   r:   rC   rQ   rW   rY   r^   ra   rb   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r-  r.  r/  r3   r@  r=  rI  r%   r%   r%   r(   <module>   s   =#	  
!	*		:8				




 