B
    bt                 @   sZ  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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%   2lib/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)   Zobj_namepZmodule_namefunc)r&   )r$   r'   r(   wrapperi   s&    
zexecute.<locals>.wrapperr%   )r&   r7   r%   )r&   r(   executeh   s    r8   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
    rA   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)Zcolorcontextr'   r=   r$   r&   zbuiltin end: %s)tupler   r=   r   r   r   ZdbgrB   )r'   r$   r&   argskwargsresult)clinic_stringr6   want_argumentswant_callbackwant_contextwant_inference_state
want_valuer%   r(   r7      s(    


z+argument_clinic.<locals>.f.<locals>.wrapperr%   )r6   r7   )rG   rH   rI   rJ   rK   rL   )r6   r(   f   s    zargument_clinic.<locals>.fr%   )rG   rL   rJ   rH   rK   rI   rM   r%   )rG   rH   rI   rJ   rK   rL   r(   argument_clinic   s    rN   ziterator[, default], /T)rK   c             C   s   ||  d B S )N__next__)py__getattribute__execute_with_values)Z	iteratorsdefaultsr=   r%   r%   r(   builtins_next   s    rS   c             C   s   |  d S )N__iter__)rP   rQ   )Ziterators_or_callablesrR   r%   r%   r(   builtins_iter   s    rU   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   warningrP   r   )objectsnamesrR   r'   r+   stringr%   r%   r(   builtins_getattr   s    


rZ   zobject[, bases, dict], /c             C   s   |s|rt S |  S d S )N)r   py__class__)rW   basesZdictsr%   r%   r(   builtins_type   s    r]   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)r_   r[   py__bases__)r`   r%   r%   r(   
_get_bases   s    zSuperInstance._get_basesc             C   s*   |   d   }|s| jS tt|S )Nr   )rd   r<   rQ   r_   nextiter)r`   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)rd   r<   rQ   get_filters)r`   origin_scopebr'   rM   r%   r%   r(   rh      s    zSuperInstance.get_filters)N)__name__
__module____qualname____doc__rb   rd   rg   rh   r%   r%   r%   r(   r^      s
   r^   z[type[, value]], /)rJ   c             C   sD   d }t |tr|j}nt |tr&|j}|d kr2tS tt|j|hS )N)
isinstancer   ra   r   r   r   r^   r=   )typesrW   rB   ra   r%   r%   r(   builtins_super   s    

rq   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)superrb   
_iter_list)r`   Zreversed_objZ	iter_list)	__class__r%   r(   rb      s    zReversedObject.__init__Nc             C   s   | j S )N)rt   )r`   Zcontextualized_noder%   r%   r(   
py__iter__  s    zReversedObject.py__iter__rO   c             C   s   t dd | jD S )Nc             s   s   | ]}|  V  qd S )N)r<   ).0r@   r%   r%   r(   	<genexpr>
  s    z'ReversedObject._next.<locals>.<genexpr>)r   	from_setsrt   )r`   r$   r%   r%   r(   _next  s    zReversedObject._next)N)rk   rl   rm   rb   rv   r   rz   __classcell__r%   r%   )ru   r(   rr      s   
rr   zsequence, /)rL   rH   c             C   sf   t | \}}d }t|tr,t|j|j}t| |}|j	j
d \}tt|tt|gS )NIterator)re   r:   ro   r   r   rB   datar9   iterater=   Ztyping_modulerP   rQ   r   rr   reversed)	sequencesr'   r$   r?   r@   ZcnZorderedseqr%   r%   r(   builtins_reversed  s    
r   zvalue, type, /)rH   rK   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 )NTFrC   c             s   s   | ]}|  V  qd S )N)r<   )rw   r@   r%   r%   r(   rx   8  s   z&builtins_isinstance.<locals>.<genexpr>c             3   s   | ]}| kV  qd S )Nr%   )rw   cls)mror%   r(   rx   ;  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)rw   rj   )r=   r%   r(   rx   F  s   )setr[   rc   r-   r9   	py__mro__is_classaddr+   r,   get_root_contextr/   r   ry   r~   anyr:   ro   r   r}   r   rB   )rW   rp   r$   r=   Zbool_resultsor   Z
cls_or_tupclasses_r@   Z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)r`   ra   class_valuer%   r%   r(   	py__get__L  s    zStaticMethodObject.py__get__N)rk   rl   rm   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   )rw   rM   r%   r%   r(   rx   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)rs   rb   	_function)r`   Zclass_method_objfunction)ru   r%   r(   rb   V  s    zClassMethodObject.__init__c                s    t  fddjdD S )Nc                s   g | ]}t | jqS r%   )ClassMethodGetr   )rw   __get__)r   r`   r%   r(   
<listcomp>\  s   z/ClassMethodObject.py__get__.<locals>.<listcomp>r   )r   r   rP   )r`   ra   r   r%   )r   r`   r(   r   Z  s    zClassMethodObject.py__get__)rk   rl   rm   rb   r   r{   r%   r%   )ru   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)rs   rb   _classr   )r`   Z
get_methodklassr   )ru   r%   r(   rb   b  s    zClassMethodGet.__init__c                s    fdd j  D S )Nc                s   g | ]}|  jqS r%   )Zbindr   )rw   Zsig)r`   r%   r(   r   h  s    z1ClassMethodGet.get_signatures.<locals>.<listcomp>)r   get_signatures)r`   r%   )r`   r(   r   g  s    zClassMethodGet.get_signaturesc             C   s   | j t| j|S )N)r   r8   ClassMethodArgumentsr   )r`   r$   r%   r%   r(   
py__call__j  s    zClassMethodGet.py__call__)rk   rl   rm   rb   r   r   r{   r%   r%   )ru   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)rs   rb   r   )r`   r   r$   )ru   r%   r(   rb   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:   )r`   r6   valuesr%   r%   r(   r:   s  s    zClassMethodArguments.unpack)N)rk   rl   rm   rb   r:   r{   r%   r%   )ru   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   )rw   Zclass_method_objectr   )r   r%   r(   rx   |  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)rs   rb   r   )r`   Zproperty_objr   )ru   r%   r(   rb     s    zPropertyObject.__init__c             C   s   |d krt | gS | j|S )N)r   r   rQ   )r`   ra   r   r%   r%   r(   r     s    
zPropertyObject.py__get__deletergettersetterc             C   s
   t | hS )N)r   )r`   r$   r%   r%   r(   _return_self  s    zPropertyObject._return_self)	rk   rl   rm   api_typerb   r   r   r   r{   r%   r%   )ru   r(   r     s   r   zfunc, /)rI   c                s   t  fdd| D S )Nc             3   s"   | ]} D ]}t ||V  q
qd S )N)r   )rw   Zproperty_valuer   )r   r%   r(   rx     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   )rw   r@   vr%   r%   r(   r     s   z*collections_namedtuple.<locals>.<listcomp>c             S   s   g | ]}|d k	r|qS )Nr%   )rw   rM   r%   r%   r(   r     s    ' 
c             s   s    | ]\}}t j||d V  qdS ))r>   r+   N)_NAMEDTUPLE_FIELD_TEMPLATEformat)rw   r>   r+   r%   r%   r(   rx     s   z)collections_namedtuple.<locals>.<genexpr>)typenamefield_names
num_fieldsarg_listrepr_fmtZ
field_defsT)keepends)Z
code_lines)r=   rA   r   r   r9   replacesplitro   r   Sequencerv   _NAMEDTUPLE_CLASS_TEMPLATEr   rC   lenreprjoin	enumerateZgrammarparsere   Ziter_classdefsr   parsoZsplit_lines
as_contextr   r   )r'   r$   r&   r=   r+   cxZparam_values_fieldsrY   Z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)rs   rb   
_argumentsr_   )r`   Zactual_valuer$   ra   )ru   r%   r(   rb     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)re   r   rV   r   r<   )r`   unpacked_argumentsr?   r@   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)rw   s)	arg_countkeysr%   r(   r     s    z0PartialObject.get_signatures.<locals>.<listcomp>)r   r:   r   r_   r   r   r   )r`   r   funcsr?   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   r8   MergedPartialArgumentsr_   )r`   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__)r`   Z	callablesZ	callable_r%   r%   r(   r     s    

zPartialObject.py__doc__c             C   s
   t | gS )N)r   )r`   ra   r   r%   r%   r(   r     s    zPartialObject.py__get__)N)
rk   rl   rm   rb   r   r   r   r   r   r{   r%   r%   )ru   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   )r`   ra   r   r%   r%   r(   r     s    
zPartialMethodObject.py__get__N)rk   rl   rm   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)rs   rb   _skipped_arg_count_skipped_arg_set)r`   Zwrapped_signatureZskipped_arg_countZskipped_arg_set)ru   r%   r(   rb     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   )rw   n)r`   r%   r(   r     s    z4PartialSignature.get_param_names.<locals>.<listcomp>)Z_wrapped_signatureget_param_namesr   )r`   resolve_starsrX   r%   )r`   r(   r     s    z PartialSignature.get_param_names)F)rk   rl   rm   rb   r   r{   r%   r%   )ru   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_argumentsr_   )r`   Zpartial_argumentsZcall_argumentsra   r%   r%   r(   rb   #  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:   re   r_   r   r   )r`   ZfuncdefZunpackedZkey_lazy_valuer%   r%   r(   r:   (  s    



zMergedPartialArguments.unpack)N)N)rk   rl   rm   rb   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   )rw   ra   )r$   r%   r(   rx   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   )rw   ra   )r$   r%   r(   rx   >  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)rv   r<   )rw   sequencer@   r%   r%   r(   rx   K  s   z!_random_choice.<locals>.<genexpr>)r   ry   )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   )rA   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)Z	start_pos)r+   r%   r%   r(   <lambda>c      z1DataclassWrapper.get_signatures.<locals>.<lambda>)r?   r   Z	expr_stmt	annassign      )r.   	tree_nameannotation_nodedefault_node)r   r9   r   ro   r   r   Zget_global_filtersortedr   r   Zget_definitionZchildrentyper   appendDataclassParamNamer.   DataclassSignature)r`   param_namesr   filter_r+   dr   defaultr%   r%   r(   r   [  s"    



zDataclassWrapper.get_signaturesN)rk   rl   rm   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)rs   rb   _param_names)r`   r'   r   )ru   r%   r(   rb   u  s    zDataclassSignature.__init__Fc             C   s   | j S )N)r   )r`   r   r%   r%   r(   r   y  s    z"DataclassSignature.get_param_names)F)rk   rl   rm   rb   r   r{   r%   r%   )ru   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)rs   rb   r   r   )r`   r.   r   r   r   )ru   r%   r(   rb   ~  s    zDataclassParamName.__init__c             C   s   t jS )N)r   ZPOSITIONAL_OR_KEYWORD)r`   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)r`   r%   r%   r(   r<     s    
zDataclassParamName.infer)rk   rl   rm   rb   r   r<   r{   r%   r%   )ru   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)rs   rb   _args_value_set)r`   ra   args_value_set)ru   r%   r(   rb     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<   )rw   r@   )item_value_setr%   r(   r     s   z1ItemGetterCallable.py__call__.<locals>.<listcomp>)r   r   r9   rv   r   r   r<   r   r   ZFakeListr   r=   )r`   r   Z	value_setZ
args_valueZlazy_valuesr%   )r   r(   r     s    
zItemGetterCallable.py__call__)rk   rl   rm   rb   r   r   r{   r%   r%   )ru   r(   r     s   r   c             C   s   t dd | D S )Nc             s   s   | ]}t |V  qd S )N)WrapsCallable)rw   r6   r%   r%   r(   rx     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   )rw   r6   )r`   r%   r(   	<setcomp>  s    z+WrapsCallable.py__call__.<locals>.<setcomp>)r   )r`   r   r%   )r`   r(   r     s    zWrapsCallable.py__call__N)rk   rl   rm   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)rs   rb   _original_function)r`   r6   Zoriginal_function)ru   r%   r(   rb     s    zWrapped.__init__c             C   s   | j jS )N)r  r+   )r`   r%   r%   r(   r+     s    zWrapped.namec             C   s   | gS )Nr%   )r`   r%   r%   r(   get_signature_functions  s    zWrapped.get_signature_functions)rk   rl   rm   rb   r   r+   r  r{   r%   r%   )ru   r(   r    s   r  z*args, /c                s   t  fdd||D S )Nc                s   g | ]}t | qS r%   )r   )rw   ra   )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)rL   rH   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   )r6   stringsr%   r(   r~     s
    
z?_create_string_input_function.<locals>.wrapper.<locals>.iterate)r   r   )r  r'   r$   r~   r   )r6   )r  r(   r7     s
    
z._create_string_input_function.<locals>.wrapper)rN   )r6   r7   r%   )r6   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   rv   r<   r   re   rf   ospathsepr   r   r  r=   )Zargs_setr&   rY   r   Zis_firstr@   Zstring_valuesr   r%   r%   r(   _os_path_join  s"    r  )
getattrr   rs   r   ro   re   rf   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   )Z_aliasZruntime_checkableZ	dataclass)dirnameabspathrelpathr   )r*   r  Zjsoncollections	functools_weakrefZrandomoperatorabctypingZdataclassesz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,   )rw   r+   )r   r%   r(   
<dictcomp>5  s   z:get_metaclass_filters.<locals>.wrapper.<locals>.<dictcomp>)r1   r   r    r   r!   r   )r   Zmetaclassesr2   	metaclassr   )r6   )r   r(   r7   0  s    
z&get_metaclass_filters.<locals>.wrapperr%   )r6   r7   r%   )r6   r(   get_metaclass_filters/  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)r`   r   r+   r%   r%   r(   rb   >  s    zEnumInstance.__init__c             C   s   t | | jjS )N)r   r,  r   )r`   r%   r%   r(   r+   D  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)r,  r,   
startswithendswithr   r<   re   rf   r=   Zbuiltins_modulerP   r+  rQ   )r`   r   Zinferredr   r'   r%   r%   r(   rg   H  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=   r,  r,   r+   rg   rh   )r`   ri   rM   r%   r%   r(   rh   T  s
    zEnumInstance.get_filters)N)rk   rl   rm   rb   r   r+   rg   rh   r%   r%   r%   r(   r'  =  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=   rB   r   )r6   r%   r(   r7   ^  s    z$tree_name_to_values.<locals>.wrapperr%   )r6   r7   r%   )r6   r(   tree_name_to_values]  s    r2  )FFFFF)N)frn   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   r8   rA   rN   rS   rU   rZ   r]   r^   rq   rr   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'  r2  r%   r%   r%   r(   <module>   s   =#	  
!	*		:8				




 