Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib/python3.7/site-packages/astroid/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/astroid/__pycache__/protocols.cpython-37.opt-1.pyc

B

��\�g�@sbdZddlZddlZddlZddlZddlmZddlmZddlm	Z	ddlm
ZddlmZddlm
Z
dd	lmZdd
lmZddlmZddlmZe�d
�Ze�d�Zdd�Zdd�ZdZddddddddddddd d!�
Zd"d#�e��D�Zd$d#�e��D�Zd%d&d'dd(�Zejejejej d(�Z!d)d*�Z"d+d,�ej#_$d-d,�ej%_$d.d,�ej&_$d/d,�ej'_$d0d,�ej(_$d1d,�d2d,�d3d,�d4d,�d5d,�d6d,�d7d,�d8d,�d9d,�d:d,�d;d,�d<d,�d=�Z)ej*d>k�r�ej+e)d?<x&e,e)���D]\Z-Z.e.e)e-d@<�q�We
j/dAdB��Z0e0ej'_1dCdD�Z2dEdF�Z3e
j/dGdH��Z4e4ej#_1e4ej%_1e
j/dIdJ��Z5e5e	j6_1e5ej7_1dKdL�Z8e
j9dedMdN��Z:e:ej;_<e:ej=_<dfdOdP�Z>e>ej#_<e>ej%_<dgdQdR�Z?e?ej@_<e?ejA_<dSdT�ZBdhdUdV�ZCeCejD_<e
j9didWdX��ZEdjdYdZ�ZFeEejG_<eFejH_<eEejI_<d[d\�ZJe
j9dkd]d^��ZKeKejL_<d_d`�ZMe
j9dldadb��ZNeNejO_<e
j/dmdcdd��ZPePejQ_<dS)nzcthis module contains a set of functions to handle python protocols for nodes
where it makes sense.
�N)�Store)�	arguments)�bases)�context)�
exceptions)�
decorators)�node_classes)�helpers)�nodes)�util�raw_building�objectscCsd|dd�S)NZ__r��)�namerr�B/opt/alt/python37/lib/python3.7/site-packages/astroid/protocols.py�_reflected_name,srcCsd|dd�S)NZ__irr)rrrr�_augmented_name0srzcontextlib.contextmanager�__add__�__sub__�__truediv__�__floordiv__�__mul__�__pow__�__mod__�__and__�__or__�__xor__�
__lshift__�
__rshift__�
__matmul__)
�+�-�/z//�*z**�%�&�|�^z<<z>>�@cCsi|]\}}t|�|�qSr)r)�.0�key�valuerrr�
<dictcomp>Esr-cCsi|]\}}t|�|d�qS)�=)r)r*r+r,rrrr-Hs�__pos__�__neg__�
__invert__)r!r"�~�notcCst|}||�}t�|�S)N)�_UNARY_OPERATORSr
�
const_factory)�obj�op�funcr,rrr�_infer_unary_opZsr9cCstt|j�|�S)N)r9�tuple�elts)�selfr7rrr�<lambda>`�r=cCst|j|�S)N)r9r;)r<r7rrrr=ar>cCstt|j�|�S)N)r9�setr;)r<r7rrrr=br>cCst|j|�S)N)r9r,)r<r7rrrr=cr>cCstt|j�|�S)N)r9�dict�items)r<r7rrrr=dr>cCs||S)Nr)�a�brrrr=ir>cCs||S)Nr)rBrCrrrr=jr>cCs||S)Nr)rBrCrrrr=kr>cCs||S)Nr)rBrCrrrr=lr>cCs||S)Nr)rBrCrrrr=mr>cCs||S)Nr)rBrCrrrr=nr>cCs||S)Nr)rBrCrrrr=or>cCs||@S)Nr)rBrCrrrr=pr>cCs||BS)Nr)rBrCrrrr=qr>cCs||AS)Nr)rBrCrrrr=rr>cCs||>S)Nr)rBrCrrrr=sr>cCs||?S)Nr)rBrCrrrr=tr>)r!r"r#z//r$z**r%r&r'r(z<<z>>)��r)r.ccs�t�t�}t|tj�r�y\t|}yt�||j|j��VWn4tk
rT|VYntk
rnt	j
VYnXWq�tk
r�|VYq�Xn$t|jt�r�|dkr�t	j
Vn|VdS)Nr%)r
�Const�NotImplemented�
isinstance�BIN_OP_IMPLr5r,�	TypeError�	Exceptionr�Uninferable�str)r<�opnode�operator�otherr�_�not_implemented�implrrr�const_infer_binary_op~s


rTcs4|j|d�}�fdd�|jD�}t|�|j|_|S)N)�parentc3s*|]"}|tjk	rt�|��p tjVqdS)N)rrLr	Z
safe_infer)r*�elt)rrr�	<genexpr>�sz'_multiply_seq_by_int.<locals>.<genexpr>)�	__class__r;�listr,)r<rNrPr�nodeZ
filtered_eltsr)rr�_multiply_seq_by_int�s


r[ccsXxR|D]J}|tjkr t��Vqx.|�|�D] }|tjk	rB|Vq,t��Vq,WqWdS)N)rrLr
ZUnknown�infer)r;rrV�inferredrrr�_filter_uninferable_nodes�s


r^c	cs�t�t�}t||j�rT|dkrT|j|d�}tt�t|j	|�t|j	|���|_	|Vn�t|tj�r�|dkr�t|j
t�s~|VdSt||||�VnDt|t
j�r�|dkr�t�|�}|s�tjVq�t||||�Vn|VdS)Nr!)rUr$)r
rFrGrHrXrY�	itertools�chainr^r;r,�intr[r�Instancer	Zclass_instance_as_indexrrL)	r<rNrOrPr�methodrRrZZas_indexrrr�tl_infer_binary_op�s&



rdcCs|�||�S)N)�infer_call_result)r<rNrOrPrrcrrr�instance_class_infer_binary_op�srfc	cs�|dd�}|�d�}x�|D]�}|tjkr,qt|d�s8qy|��}Wntk
rZwYnXx�|D]�}t�|�}y|�||�}Wn t	t
jt
jfk
r�wbYnX|s�|Vqb|tjkr�Pqbyt
|�|�||�EdHWqbt
jk
r�PYqbXqbWqWdS)z;recursive function to resolve multiple assignments on loopsNr�itered)�poprrL�hasattrrgrJr
rF�getitem�AttributeErrorr�AstroidTypeError�AstroidIndexError�_resolve_looppartr\�InferenceError)	�parts�assign_pathr�index�partrg�stmt�
index_node�assignedrrrrn�s:






rnccs�t|tj�st|dd�r(t||||d�S|dkrfxN|j�|�D]"}t|tjtjf�r>|j	EdHq>Wnt
|j�|�||�EdHt||||d�S)NZis_asyncF)rZ�unknownrqr)rHr
ZAsyncFor�getattrr@�iterr\�Tuple�Listr;rn)r<rZrrqZlstrrr�for_assigned_stmts
sr|c
Csr|dkrg}y|j�|�}Wn6tk
rR}ztjd|||d�|�Wdd}~XYnX|�d|�|jj|||d�S)Nz6Tried to retrieve a node {node!r} which does not exist)rZrqrr)rZrrq)r;rr�
ValueErrorrro�insertrU�assigned_stmts)r<rZrrqrr�excrrr�sequence_assigned_stmtssr�cCs|jj||d�S)N)rZr)rUr)r<rZrrqrrr�assend_assigned_stmts6sr�c	csb|js|js|jstjVdS|jr�t|jddd�|kr�|jj}|jj��}t	|t
j�ob|jdk}|sp|dkrz|VdS|dkr�t�
|�VdS|r�|jr�t�|j|j�}|�|j||�EdHdS||jkr�t
�d�}||_|VdS||jk�rt
�i�}||_|VdSy,t�|�}|�|��|�EdHtjVWn tjk
�r\tjVYnXdS)Nrr�	metaclass�classmethodrcr)�args�vararg�kwargrrLrxrU�type�scoperHr
�ClassDefrrb�callcontextr�CallSiteZ
extra_context�infer_argumentr5�
contextmod�copy_contextZ
default_valuer\rZ	NoDefault)	r<rrZfunctype�clsZis_metaclassZ	call_siter�r�rrr�_arguments_infer_argname>sB




r�cCsF|jr8|j}t�|�}d|_t�|�}|�|j|j|�St||j|�S)N)	r�r�r�rr�r�rUrr�)r<rZrrqr�r�rrr�arguments_assigned_stmtsks

r�ccs:|s|jVdSt|j�|�||�EdHt||||d�S)N)rZrwrqr)r,�_resolve_assignment_partsr\r@)r<rZrrqrrr�assign_assigned_stmtsysr�ccs4x.t||||�D]}|dkr&tjVq|VqWdS)N)r�rrL)r<rZrrqr]rrr�assign_annassigned_stmts�s
r�c
cs�|dd�}|�d�}x�|D]�}d}t|tj�rZy|j|\}}Wq�tk
rVdSXnBt|d�r�t�|�}y|�||�}Wnt	j
t	jfk
r�dSX|s�dS|s�|Vq|tj
kr�dSyt|�|�||�EdHWqt	jk
r�dSXqWdS)z2recursive function to resolve multiple assignmentsNrrj)rhrHr
�DictrA�
IndexErrorrirFrjrrlrmrrLr�r\ro)rprqrrrrsrvrQrurrrr��s4




r�ccsBx0t�|j�D] }t|tj�r(t�|�}|VqWt||||d�S)N)rZrwrqr)	rZunpack_inferr�rHr
r�r
ZExceptionInstancer@)r<rZrrqrvrrr�excepthandler_assigned_stmts�s


r�c
	#s�t|j|d��}t|tj�r�|j��js6tjd�d��xD�jj	D],}t|�|��}t|t	j
�r@|��tkr@Pq@Wtj�d����
t	j�}t�fdd�|D�d�}|r�|js�t	�d�}||_|j|_|Vn|jj|d�EdHn�t|tj��rvyt|jd|d��}	Wn*tjtjfk
�r.tj|d��YnXt|	tj��sJtj|	d��|j�sbtj|gd�|_|	�||�EdHntj|d��dS)N)rz,No decorators found on inferred generator %s)rZc3s|]}|���kr|VqdS)N)r�)r*rZ)r8rrrW�sz)_infer_context_manager.<locals>.<genexpr>�	__enter__)r�)�nextr\rHr�	GeneratorrUrrror
ZFunctionDefZqname�_CONTEXTLIB_MGR�nodes_of_classZYieldr,rF�linenorbZigetattrZAttributeInferenceErrorZBoundMethodr�r�ZCallContextre)
r<�mgrrr]Zdecorator_nodeZ	decoratorZpossible_yield_pointsZyield_pointZconstZenterr)r8r�_infer_context_manager�sB

r�c	#s*yt�fdd�|jD��}Wntk
r0dSX|dkrNt|||�EdHn�x�t|||�D]�}|}x�|D]�}t|d�s�tjd|�||d��y|j|}Wqjtk
r�}ztjd|�||d�|�Wdd}~XYqjt	k
�r
}ztjd|�||d�|�Wdd}~XYqjXqjW|Vq\Wt
|�||d	�S)
aInfer names and other nodes from a *with* statement.

    This enables only inference for name binding in a *with* statement.
    For instance, in the following code, inferring `func` will return
    the `ContextManager` class, not whatever ``__enter__`` returns.
    We are doing this intentionally, because we consider that the context
    manager result is whatever __enter__ returns and what it is binded
    using the ``as`` keyword.

        class ContextManager(object):
            def __enter__(self):
                return 42
        with ContextManager() as f:
            pass

        # ContextManager().infer() will return ContextManager
        # f.infer() will return 42.

    Arguments:
        self: nodes.With
        node: The target of the assignment, `as (a, b)` in `with foo as (a, b)`.
        context: Inference context used for caching already inferred objects
        assign_path:
            A list of indices, where each index specifies what item to fetch from
            the inference results.
    c3s|]\}}|�kr|VqdS)Nr)r*r��vars)rZrrrWsz&with_assigned_stmts.<locals>.<genexpr>Nr;z0Wrong type ({targets!r}) for {node!r} assignment)rZ�targetsrqrzCTried to infer a nonexistent target with index {index} in {node!r}.z1Tried to unpack a non-iterable value in {node!r}.)rZrwrqr)r�rA�
StopIterationr�rirror;r�rJr@)	r<rZrrqr��resultr6rrr�r)rZr�with_assigned_stmts�sH


r�c
#s��fdd��|��}t|tjtjf�s:tjd||||d��|dkrJt��}t|tj��r�|j	}|j
d}tdd�|�tj
�D��d	kr�tjd
||||d��yt|�|��}Wntjk
r�tjVdSX|tjks�t|d�s�tjVdSyt�|���}Wntk
�rtjVdSXx�t|j�D]�\}	}
t|
tj
��sT|�sHP|���q*t�t|j|	d���}xZ|D]R}t|tj
��s�|�s�P|���qrtjt||j|jd
�}
|
j |d�|
VP�qrW�q*Wt|tj��r�yt|j!j|d��}Wn tjk
�rtjVdSX|tjk�s,t|d��s8tjVdSy|��}Wntk
�rbtjVdSX|j"}t|tj#��s�tjd|d��g}�|||�|�s�tjd|d��|d\}}||d	k}t$||�r�dn||�}||d<x�|D]�}d}x~|D]v}t|d��sPt|t$��s|d}y|��}||}Wn4t%k
�rHPYn"tk
�rdtjVdSX|}�q�Wtjt||j|jd
�}|j |�p�gd�|VdSWtjVdS)aD
    Arguments:
        self: nodes.Starred
        node: a node related to the current underlying Node.
        context: Inference context used for caching already inferred objects
        assign_path:
            A list of indices, where each index specifies what item to fetch from
            the inference results.
    cs�|��}xrt|�D]f\}}t|tj�rJ|jj|jjkrJ|�|t|�f�Pt|tj	�r|�|t|���f��|||�qWdS)N)
rg�	enumeraterHr
�Starredr,r�append�lenrz)Zstarred�target�lookupsrgrr�element)�$_determine_starred_iteration_lookupsrrr�MszDstarred_assigned_stmts.<locals>._determine_starred_iteration_lookupszDStatement {stmt!r} enclosing {node!r} must be an Assign or For node.)rZrtrwrNrcss|]
}dVqdS)�Nr)r*rQrrrrWlsz)starred_assigned_stmts.<locals>.<genexpr>r�z>Too many starred arguments in the  assignment targets {lhs!r}.)rZr�rwrrg)ZctxrUr��
col_offset)r;)rz8Could not make sense of this, the target must be a tuplez5Could not make sense of this, needs at least a lookup���)&Z	statementrHr
�Assign�Forrror�ZInferenceContextr,r��sumr�r�r�r\rrLri�collections�dequergrJr�r;�popleft�reversedrhr{rr�r�Zpostinitryr�rz�slicer�)r<rZrrqrtr,ZlhsZrhsr;rrZ	left_nodeZlhs_eltsZ
right_nodeZpackedZinferred_iterablergr�r�Zlast_element_indexZlast_element_lengthZis_starred_lastZlookup_slicer�Z
found_element�lookupZitered_inner_elementZunpackedr)r�r�starred_assigned_stmtsAs�
	





r�)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)NNN)R�__doc__r�rOZoperator_mod�sysr_Zastroidrrrrr�rrrr	r
rZlazy_importrr
rrr�Z
BIN_OP_METHODrAZREFLECTED_BIN_OP_METHODZAUGMENTED_OP_METHODZUNARY_OP_METHOD�pos�neg�invert�not_r4r9rzZinfer_unary_opr{�SetrFr�rI�version_info�matmulrYZ_KEYZ_IMPLZyes_if_nothing_inferredrTZinfer_binary_opr[r^rdrfrbr�rnZraise_if_nothing_inferredr|r�rZ
Comprehensionr�r�Z
AssignNameZ
AssignAttrr�r�Z	Argumentsr�r�r�Z	AnnAssignZ	AugAssignr�r�Z
ExceptHandlerr�r�ZWithr�r�rrrr�<module>s�



(


-

(	1E2