o
    DDiy                     @   s  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 d dlm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eZG dd deeZG dd deeZG dd deeZeeddG dd deZeeddG dd deZeeddG dd deZeeddG dd  d eZeeddG d!d" d"e
Z eeddG d#d$ d$eZ!eeddG d%d& d&eZ"eeddG d'd( d(eZ#eeddG d)d* d*eZ$eeddG d+d, d,eZ%eeddG d-d. d.eZ&eeddG d/d0 d0eZ'eeddG d1d2 d2eeZ(eeddG d3d4 d4eeZ)eeddG d5d6 d6eeZ*eeddG d7d8 d8eeZ+eeddG d9d: d:eeZ,eeddG d;d< d<eeZ-eeddG d=d> d>eeZ.eeddG d?d@ d@eeZ/eeddG dAdB dBeeZ0eeddG dCdD dDeeZ1eeddG dEdF dFeeZ2eeddG dGdH dHeeZ3eeddG dIdJ dJeeZ4eeddG dKdL dLeeZ5eeddG dMdN dNeeZ6eeddG dOdP dPeeZ7eeddG dQdR dReeZ8eeddG dSdT dTeeZ9eeddG dUdV dVeeZ:eeddG dWdX dXeeZ;eeddG dYdZ dZeeZ<eeddG d[d\ d\eeZ=eeddG d]d^ d^eeZ>eeddG d_d` d`eeZ?eeddG dadb dbeeZ@eeddG dcdd ddeeZAeeddG dedf dfeeZBeeddG dgdh dheeZCeeddG didj djeeZDeeddG dkdl dleeZEeeddG dmdn dneeZFeeddG dodp dpeeZGeeddG dqdr dreeZHeeddG dsdt dteeZIeeddG dudv dveeZJeeddG dwdx dxeeZKdyS )z    )ABCabstractmethod)	dataclass)Tuple)	add_slots)BaseLeafCSTNodeCSTValidationError)CodegenStatevisit_required)BaseParenthesizableWhitespaceSimpleWhitespace)CSTVisitorTc                   @   s\   e Zd ZU dZdZeed< eed< dedd fddZd	e	dd
fddZ
edefddZd
S )_BaseOneTokenOpzU
    Any node that has a static value and needs to own whitespace on both sides.
     whitespace_beforewhitespace_aftervisitorreturnc                 C   s&   | j t| d| j|t| d| j|dS )Nr   r   )r   r   )	__class__r   r   r   selfr   r   r   I/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_nodes/op.py_visit_and_replace_children   s   

z+_BaseOneTokenOp._visit_and_replace_childrenstateNc                 C   sT   | j | ||  ||   W d    n1 sw   Y  | j| d S N)r   _codegenrecord_syntactic_position	add_token
_get_tokenr   r   r   r   r   r   _codegen_impl'   s
   z_BaseOneTokenOp._codegen_implc                 C      d S r   r   r   r   r   r   r   -      z_BaseOneTokenOp._get_token__name__
__module____qualname____doc__	__slots__r   __annotations__r   r   r
   r!   r   strr   r   r   r   r   r      s   
 r   c                   @   sv   e Zd ZU dZdZeed< eed< eed< ddd	Zd
edd fddZ	de
ddfddZedeeef fddZdS )_BaseTwoTokenOpzg
    Any node that ends up as two tokens, so we must preserve the whitespace
    in beteween them.
    r   r   whitespace_betweenr   r   Nc                 C   s   | j jrtdd S )Nz0Must have at least one space between not and in.)r.   emptyr	   r#   r   r   r   	_validate?   s   z_BaseTwoTokenOp._validater   c                 C   s4   | j t| d| j|t| d| j|t| d| j|dS )Nr   r.   r   )r   r.   r   )r   r   r   r.   r   r   r   r   r   r   C   s   


z+_BaseTwoTokenOp._visit_and_replace_childrenr   c                 C   sv   | j | ||   ||  d  | j| ||  d  W d    n1 s.w   Y  | j| d S )Nr      )r   r   r   r   _get_tokensr.   r   r    r   r   r   r!   Q   s   z_BaseTwoTokenOp._codegen_implc                 C   r"   r   r   r#   r   r   r   r2   Y   r$   z_BaseTwoTokenOp._get_tokensr   N)r&   r'   r(   r)   r*   r   r+   r0   r   r   r
   r!   r   r   r,   r2   r   r   r   r   r-   1   s   
 
r-   c                   @   sT   e Zd ZU dZdZeed< dedd fddZde	dd	fd
dZ
edefddZd	S )BaseUnaryOpzX
    Any node that has a static value used in a :class:`UnaryOperation` expression.
    r   r   r   r   c                 C   s   | j t| d| j|dS )Nr   )r   )r   r   r   r   r   r   r   r   g   s
   
z'BaseUnaryOp._visit_and_replace_childrenr   Nc                 C   s   | |   | j| d S r   )r   r   r   r   r    r   r   r   r!   o   s   zBaseUnaryOp._codegen_implc                 C   r"   r   r   r#   r   r   r   r   s   r$   zBaseUnaryOp._get_tokenr%   r   r   r   r   r4   ]   s   
 r4   c                   @      e Zd ZdZdZdS )BaseBooleanOpz~
    Any node that has a static value used in a :class:`BooleanOperation` expression.
    This node is purely for typing.
    r   Nr&   r'   r(   r)   r*   r   r   r   r   r6   w       r6   c                   @   r5   )BaseBinaryOpz}
    Any node that has a static value used in a :class:`BinaryOperation` expression.
    This node is purely for typing.
    r   Nr7   r   r   r   r   r9      r8   r9   c                   @   r5   )
BaseCompOpzx
    Any node that has a static value used in a :class:`Comparison` expression.
    This node is purely for typing.
    r   Nr7   r   r   r   r   r:      r8   r:   c                   @   r5   )	BaseAugOpzx
    Any node that has a static value used in an :class:`AugAssign` assignment.
    This node is purely for typing.
    r   Nr7   r   r   r   r   r;      r8   r;   T)frozenc                   @   D   e Zd ZU dZedZeed< edZ	eed< de
fddZdS )		Semicolonz
    Used by any small statement (any subclass of :class:`BaseSmallStatement`
    such as :class:`Pass`) as a separator between subsequent nodes contained
    within a :class:`SimpleStatementLine` or :class:`SimpleStatementSuite`.
     r   r   r   c                 C      dS )N;r   r#   r   r   r   r      r$   zSemicolon._get_tokenNr&   r'   r(   r)   r   fieldr   r   r+   r   r,   r   r   r   r   r   r>      s
   
 r>   c                   @   r=   )	Colonz
    Used by :class:`Slice` as a separator between subsequent expressions,
    and in :class:`Lambda` to separate arguments and body.
    r?   r   r   r   c                 C   r@   )N:r   r#   r   r   r   r      r$   zColon._get_tokenNrB   r   r   r   r   rD      
   
 rD   c                   @   r=   )	Commaa"  
    Syntactic trivia used as a separator between subsequent items in various
    parts of the grammar.

    Some use-cases are:

    * :class:`Import` or :class:`ImportFrom`.
    * :class:`FunctionDef` arguments.
    * :class:`Tuple`/:class:`List`/:class:`Set`/:class:`Dict` elements.
    r?   r   r   r   c                 C   r@   )N,r   r#   r   r   r   r      r$   zComma._get_tokenNrB   r   r   r   r   rG      s
   
 rG   c                   @   r=   )	Dotz[
    Used by :class:`Attribute` as a separator between subsequent :class:`Name` nodes.
    r?   r   r   r   c                 C   r@   )N.r   r#   r   r   r   r      r$   zDot._get_tokenNrB   r   r   r   r   rI      
   
 rI   c                   @   s"   e Zd ZdZdeddfddZdS )
ImportStarzj
    Used by :class:`ImportFrom` to denote a star import instead of a list
    of importable objects.
    r   r   Nc                 C   s   | d d S N*)r   r    r   r   r   r!      s   zImportStar._codegen_impl)r&   r'   r(   r)   r
   r!   r   r   r   r   rL      s    rL   c                   @   r=   )	AssignEquala>  
    Used by :class:`AnnAssign` to denote a single equal character when doing an
    assignment on top of a type annotation. Also used by :class:`Param` and
    :class:`Arg` to denote assignment of a default value, and by
    :class:`FormattedStringExpression` to denote usage of self-documenting
    expressions.
     r   r   r   c                 C   r@   )N=r   r#   r   r   r   r     r$   zAssignEqual._get_tokenNrB   r   r   r   r   rO      s
   
 	rO   c                   @   2   e Zd ZU dZedZeed< de	fddZ
dS )PlusX
    A unary operator that can be used in a :class:`UnaryOperation`
    expression.
    r?   r   r   c                 C   r@   N+r   r#   r   r   r   r     r$   zPlus._get_tokenNr&   r'   r(   r)   r   rC   r   r   r+   r,   r   r   r   r   r   rS   
     
 rS   c                   @   rR   )MinusrT   r?   r   r   c                 C   r@   N-r   r#   r   r   r   r   $  r$   zMinus._get_tokenNrW   r   r   r   r   rY     rX   rY   c                   @   rR   )	BitInvertrT   r?   r   r   c                 C   r@   )N~r   r#   r   r   r   r   3  r$   zBitInvert._get_tokenNrW   r   r   r   r   r\   (  rX   r\   c                   @   rR   )NotrT   rP   r   r   c                 C   r@   )Nnotr   r#   r   r   r   r   B  r$   zNot._get_tokenNrW   r   r   r   r   r^   7  rX   r^   c                   @   r=   )	And\
    A boolean operator that can be used in a :class:`BooleanOperation`
    expression.
    rP   r   r   r   c                 C   r@   )Nandr   r#   r   r   r   r   T  r$   zAnd._get_tokenNrB   r   r   r   r   r`   F  rF   r`   c                   @   r=   )	Orra   rP   r   r   r   c                 C   r@   )Norr   r#   r   r   r   r   f  r$   zOr._get_tokenNrB   r   r   r   r   rc   X  rF   rc   c                   @   r=   )	AddZ
    A binary operator that can be used in a :class:`BinaryOperation`
    expression.
    rP   r   r   r   c                 C   r@   rU   r   r#   r   r   r   r   x  r$   zAdd._get_tokenNrB   r   r   r   r   re   j  rF   re   c                   @   r=   )	Subtractrf   rP   r   r   r   c                 C   r@   rZ   r   r#   r   r   r   r     r$   zSubtract._get_tokenNrB   r   r   r   r   rg   |  rF   rg   c                   @   r=   )	Multiplyrf   rP   r   r   r   c                 C   r@   rM   r   r#   r   r   r   r     r$   zMultiply._get_tokenNrB   r   r   r   r   rh     rF   rh   c                   @   r=   )	Dividerf   rP   r   r   r   c                 C   r@   )N/r   r#   r   r   r   r     r$   zDivide._get_tokenNrB   r   r   r   r   ri     rF   ri   c                   @   r=   )	FloorDividerf   rP   r   r   r   c                 C   r@   )Nz//r   r#   r   r   r   r     r$   zFloorDivide._get_tokenNrB   r   r   r   r   rk     rF   rk   c                   @   r=   )	Modulorf   rP   r   r   r   c                 C   r@   )N%r   r#   r   r   r   r     r$   zModulo._get_tokenNrB   r   r   r   r   rl     rF   rl   c                   @   r=   )	Powerrf   rP   r   r   r   c                 C   r@   )Nz**r   r#   r   r   r   r     r$   zPower._get_tokenNrB   r   r   r   r   rn     rF   rn   c                   @   r=   )		LeftShiftrf   rP   r   r   r   c                 C   r@   )Nz<<r   r#   r   r   r   r     r$   zLeftShift._get_tokenNrB   r   r   r   r   ro     rF   ro   c                   @   r=   )	
RightShiftrf   rP   r   r   r   c                 C   r@   )Nz>>r   r#   r   r   r   r     r$   zRightShift._get_tokenNrB   r   r   r   r   rp     rF   rp   c                   @   r=   )	BitOrrf   rP   r   r   r   c                 C   r@   )N|r   r#   r   r   r   r     r$   zBitOr._get_tokenNrB   r   r   r   r   rq     rF   rq   c                   @   r=   )	BitAndrf   rP   r   r   r   c                 C   r@   )N&r   r#   r   r   r   r   ,  r$   zBitAnd._get_tokenNrB   r   r   r   r   rs     rF   rs   c                   @   r=   )	BitXorrf   rP   r   r   r   c                 C   r@   )N^r   r#   r   r   r   r   >  r$   zBitXor._get_tokenNrB   r   r   r   r   ru   0  rF   ru   c                   @   r=   )	MatrixMultiplyrf   rP   r   r   r   c                 C   r@   )N@r   r#   r   r   r   r   P  r$   zMatrixMultiply._get_tokenNrB   r   r   r   r   rw   B  rF   rw   c                   @   r=   )	LessThanV
    A comparision operator that can be used in a :class:`Comparison` expression.
    rP   r   r   r   c                 C   r@   )N<r   r#   r   r   r   r   a  r$   zLessThan._get_tokenNrB   r   r   r   r   ry   T  rK   ry   c                   @   r=   )	GreaterThanrz   rP   r   r   r   c                 C   r@   )N>r   r#   r   r   r   r   r  r$   zGreaterThan._get_tokenNrB   r   r   r   r   r|   e  rK   r|   c                   @   r=   )	Equalrz   rP   r   r   r   c                 C   r@   )Nz==r   r#   r   r   r   r     r$   zEqual._get_tokenNrB   r   r   r   r   r~   v  rK   r~   c                   @   r=   )	LessThanEqualrz   rP   r   r   r   c                 C   r@   )Nz<=r   r#   r   r   r   r     r$   zLessThanEqual._get_tokenNrB   r   r   r   r   r     rK   r   c                   @   r=   )	GreaterThanEqualrz   rP   r   r   r   c                 C   r@   )Nz>=r   r#   r   r   r   r     r$   zGreaterThanEqual._get_tokenNrB   r   r   r   r   r     rK   r   c                   @   sl   e Zd ZU dZdZeed< edZ	e
ed< edZe
ed< dd	d
Zdedd fddZdefddZdS )NotEquala  
    A comparison operator that can be used in a :class:`Comparison` expression.

    This node defines a static value for convenience, but in reality due to
    PEP 401 it can be one of two values, both of which should be a
    :class:`NotEqual` :class:`Comparison` operator.
    !=valuerP   r   r   r   Nc                 C   s   | j dvr	tdd S )N)r   z<>z Invalid value for NotEqual node.)r   r	   r#   r   r   r   r0     s   
zNotEqual._validater   c                 C   s*   | j t| d| j|| jt| d| j|dS )Nr   r   )r   r   r   )r   r   r   r   r   r   r   r   r   r     s   

z$NotEqual._visit_and_replace_childrenc                 C   s   | j S r   )r   r#   r   r   r   r     s   zNotEqual._get_tokenr3   )r&   r'   r(   r)   r   r,   r+   r   rC   r   r   r   r0   r   r   r   r   r   r   r   r     s   
 	
r   c                   @   r=   )	Inrz   rP   r   r   r   c                 C   r@   )Ninr   r#   r   r   r   r     r$   zIn._get_tokenNrB   r   r   r   r   r     rK   r   c                   @   ^   e Zd ZU dZedZeed< edZ	eed< edZ
eed< deeef fddZd	S )
NotIn
    A comparision operator that can be used in a :class:`Comparison` expression.

    This operator spans two tokens that must be separated by at least one space,
    so there is a third whitespace attribute to represent this.
    rP   r   r.   r   r   c                 C   r@   )N)r_   r   r   r#   r   r   r   r2     r$   zNotIn._get_tokensNr&   r'   r(   r)   r   rC   r   r   r+   r.   r   r   r,   r2   r   r   r   r   r        
 r   c                   @   r=   )	Isrz   rP   r   r   r   c                 C   r@   )Nisr   r#   r   r   r   r     r$   zIs._get_tokenNrB   r   r   r   r   r     rK   r   c                   @   r   )
IsNotr   rP   r   r.   r   r   c                 C   r@   )N)r   r_   r   r#   r   r   r   r2     r$   zIsNot._get_tokensNr   r   r   r   r   r   	  r   r   c                   @   r=   )		AddAssignb
    An augmented assignment operator that can be used in a :class:`AugAssign`
    statement.
    rP   r   r   r   c                 C   r@   )Nz+=r   r#   r   r   r   r   .  r$   zAddAssign._get_tokenNrB   r   r   r   r   r      rF   r   c                   @   r=   )	SubtractAssignr   rP   r   r   r   c                 C   r@   )Nz-=r   r#   r   r   r   r   @  r$   zSubtractAssign._get_tokenNrB   r   r   r   r   r   2  rF   r   c                   @   r=   )	MultiplyAssignr   rP   r   r   r   c                 C   r@   )Nz*=r   r#   r   r   r   r   R  r$   zMultiplyAssign._get_tokenNrB   r   r   r   r   r   D  rF   r   c                   @   r=   )	MatrixMultiplyAssignr   rP   r   r   r   c                 C   r@   )Nz@=r   r#   r   r   r   r   d  r$   zMatrixMultiplyAssign._get_tokenNrB   r   r   r   r   r   V  rF   r   c                   @   r=   )	DivideAssignr   rP   r   r   r   c                 C   r@   )Nz/=r   r#   r   r   r   r   v  r$   zDivideAssign._get_tokenNrB   r   r   r   r   r   h  rF   r   c                   @   r=   )	ModuloAssignr   rP   r   r   r   c                 C   r@   )Nz%=r   r#   r   r   r   r     r$   zModuloAssign._get_tokenNrB   r   r   r   r   r   z  rF   r   c                   @   r=   )	BitAndAssignr   rP   r   r   r   c                 C   r@   )Nz&=r   r#   r   r   r   r     r$   zBitAndAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	BitOrAssignr   rP   r   r   r   c                 C   r@   )Nz|=r   r#   r   r   r   r     r$   zBitOrAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	BitXorAssignr   rP   r   r   r   c                 C   r@   )Nz^=r   r#   r   r   r   r     r$   zBitXorAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	LeftShiftAssignr   rP   r   r   r   c                 C   r@   )Nz<<=r   r#   r   r   r   r     r$   zLeftShiftAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	RightShiftAssignr   rP   r   r   r   c                 C   r@   )Nz>>=r   r#   r   r   r   r     r$   zRightShiftAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	PowerAssignr   rP   r   r   r   c                 C   r@   )Nz**=r   r#   r   r   r   r     r$   zPowerAssign._get_tokenNrB   r   r   r   r   r     rF   r   c                   @   r=   )	FloorDivideAssignr   rP   r   r   r   c                 C   r@   )Nz//=r   r#   r   r   r   r     r$   zFloorDivideAssign._get_tokenNrB   r   r   r   r   r     rF   r   N)Labcr   r   dataclassesr   typingr   libcst._add_slotsr   libcst._nodes.baser   r   r	   libcst._nodes.internalr
   r   libcst._nodes.whitespacer   r   libcst._visitorsr   r   r-   r4   r6   r9   r:   r;   r>   rD   rG   rI   rL   rO   rS   rY   r\   r^   r`   rc   re   rg   rh   ri   rk   rl   rn   ro   rp   rq   rs   ru   rw   ry   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   <module>   s>   ,				
%