U
    -eS                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZ dZdZdZdZd	Zd
Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZG d%d& d&ZG d'd( d(eZ G d)d* d*e	Z!e j"d+d,G d-d. d.e!Z#G d/d0 d0eZ$G d1d2 d2e	Z%e j"d+d,G d3d4 d4e%Z&e j"d5d6G d7d8 d8e%Z'e j"d9d6G d:d; d;e%Z(e j"d<d6G d=d> d>e%Z)e j"d?d6G d@dA dAe%Z*e j"dBd,G dCdD dDe%Z+e j"dEd,G dFdG dGe%Z,e j"dHd6G dIdJ dJe%Z-e j"dKd6G dLdM dMe%Z.e j"dNd6e j"dOd6G dPdQ dQe%Z/e j"dRd,G dSdT dTe%Z0e j"dUd,G dVdW dWe%Z1e j"dXd,G dYdZ dZe%Z2e j"dXd,G d[d\ d\e%Z3e j"d]d,G d^d_ d_e%Z4e j"ed`G dadb dbe%Z5e j"dcd,G ddde dee%Z6e j"dfd,G dgdh dhe%Z7e j"did,G djdk dke%Z8e j"dld,G dmdn dne%Z9e j"dod,e j"dpd,G dqdr dre%Z:e j"dsd,G dtdu due%Z;e j"dvd,G dwdx dxe%Z<G dydz dze%Z=e j"d{d,G d|d} d}e=Z>e j"d~d,G dd de=Z?e j"dd,G dd de=Z@e j"dd,G dd de=ZAe j"dd,G dd de=ZBe j"dd,G dd de=ZCe j"dd,G dd de=ZDdS )    N)contextmanager)
NormalizerNormalizerConfigIssueRule)_get_token_collection)Zif_stmt
while_stmtfor_stmttry_stmtZ	with_stmt)testlist_star_exprtestlist_compexprlist   d   )nested_scopes
generatorsdivisionabsolute_importwith_statementprint_functionunicode_literalsgenerator_stop)comp_forsync_comp_forc                 C   sd  | j }|dkrdS |dkr
t| }| jd d \}}|d k	rB|S |j dkr~|dk rXdS |jd d	kst|jd
 dkrxdS dS n|dkr|dkst| jdkr| jd j dkrdS |dkrtt| |dS |dkrdS |dkr|dkrdS |dkr`t| jdkr`dS nV|dkr@d| jkr$dS |dk r2dS t| jS n |dkrZ| jdkrZdS |dkrhdS |dkrvdS |d krdS |d!krd"S |d#kr
| jd
 d$krd%S | jd& j d'kr`| jd& }|jd
 dkrd(S |jd
 dkrd)S |jd
 d*kr`d+S nVd,|krd-|ks2d.|ks2|d/kr6dS |d-krDd0S |d1krRdS |d2kr`d3S |S )4Nlambdeflambdaatom   dictorsetmaker      literal   :r   **dict displayset display()r    r   tuple)version[list{}keywordyieldyield expressionoperator...Ellipsis
comparisonstringnumberstrings
yield_exprtestconditional expressionZ	atom_exprpowerawaitawait expressiontrailerfunction call	subscript.	attributeexpr	star_expr_testtermfactorstarredr   fstringf-string expression)type_get_comprehension_typechildrenlen_get_rhs_name_remove_parensvaluestr)noder+   type_comprehensionfirstsecondrC    r^   T/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/parso/python/errors.pyrU      s    












rU   c                 c   sH   | j D ]<}|jdkr<|j D ]}|jdks|dkr2q|V  qq|V  qdS )zB
    Iterates over all statements and splits up  simple_stmt.
    Zsimple_stmtnewline;NrS   rQ   )scopechildZchild2r^   r^   r_   _iter_stmts`   s    



re   c                 C   sr   | j d d \}}|jdkr>|j d jtkr>|dkr8dS dS n0|jdkrn|j d jtkrn|j d d	krjd
S dS d S )Nr   r   r#   r,   zlist comprehensionzgenerator expressionr   rB   r$   zdict comprehensionzset comprehensionrS   rQ   _COMP_FOR_TYPES)r   r\   r]   r^   r^   r_   rR   n   s    rR   c                 C   s   |   }dd |D dgkS )Nc                 S   s   g | ]
}|j qS r^   rW   .0nr^   r^   r_   
<listcomp>   s     z%_is_future_import.<locals>.<listcomp>
__future__)Zget_from_names)import_fromZ
from_namesr^   r^   r_   _is_future_import}   s    ro   c                 C   sJ   z
| j }W n tk
r   Y n(X t|dkrF|d dkrFt| j d S | S )z_
    Returns the inner part of an expression like `(foo)`. Also removes nested
    parens.
    r    r   r(   r#   )rS   AttributeErrorrT   rV   )r   rS   r^   r^   r_   rV      s    
rV   c                 C   s2   | j dk	r.| j } | jdks(| jd dkr | S q dS )za
    Returns an ancestor node of an expression, skipping all levels of parens
    bottom-up.
    Nr   r   r(   parentrQ   rS   rY   r^   r^   r_   _skip_parens_bottom_up   s
    
rt   c                 C   s   dd | j D S )Nc                 s   s&   | ]}|j d ks|j dkr|V  qdS )paramr3   NrQ   ri   r^   r^   r_   	<genexpr>   s     
 
 z_iter_params.<locals>.<genexpr>)rS   )Zparent_noder^   r^   r_   _iter_params   s    rx   c                 C   sT   d}t |  D ]>}|jdkr$|s$qd}|| kr6 dS |jdkrJt|rJq dS dS )z@
    Checks if the import is the first statement of a file.
    Fr8   Trn   N)re   Zget_root_noderQ   ro   )rn   Zfound_docstringstmtr^   r^   r_   _is_future_import_first   s    rz   c                 #   sN    fdd | j tkr<| jd d d D ]} |E d H  q&n | E d H  d S )Nc                 3   st   | j dkrj| jd dkrR| jd }|j dkr>t|E d H  d S  |E d H  d S n| jd dkrj|V  d S | V  d S )Nr   r   r(   r#   r   r,   )rQ   rS   !_iter_definition_exprs_from_lists)rd   r   
check_exprr^   r_   r}      s    


z5_iter_definition_exprs_from_lists.<locals>.check_exprr   )rQ   _STAR_EXPR_PARENTSrS   )r   rd   r^   r|   r_   r{      s
    
r{   c                 C   s@   g }| j d dd D ]&}|jdkr0|t|7 }q|| q|S )Nr   )r   testlist)rS   rQ   r{   append)	expr_stmtexprslist_r^   r^   r_   _get_expr_stmt_definition_exprs   s    
r   c                 C   s   | j d }tt|S Nr#   )rS   r-   r{   )r	   r   r^   r^   r_   _get_for_stmt_definition_exprs   s    
r   c                 C   s   | j d jtkS r   rf   )argumentr^   r^   r_   _is_argument_comprehension   s    r   c                 C   sN   | dk s|d krdS |j dkr2tdd |jD S |j dkr@dS |dS d S )Nr    	   F
error_nodec                 s   s   | ]}|j d kV  qdS )Zfstring_startNrv   rj   rd   r^   r^   r_   rw      s     z%_any_fstring_error.<locals>.<genexpr>rO   T)rQ   anyrS   search_ancestor)r+   rY   r^   r^   r_   _any_fstring_error   s    

r   c                   @   sZ   e Zd ZdddZ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S )_ContextNc                 C   s:   || _ g | _|| _i | _g | _g | _g | _g | _|| _d S N)	rY   blocksparent_context_used_name_dict_global_names_local_params_names_nonlocal_names_nonlocal_names_in_subscopes_add_syntax_error)selfrY   Zadd_syntax_errorr   r^   r^   r_   __init__   s    z_Context.__init__c                 C   s   |   o| jjjdkS )N)Zasync_funcdefZ
async_stmt)is_functionrY   rr   rQ   r   r^   r^   r_   is_async_funcdef   s    z_Context.is_async_funcdefc                 C   s   | j jdkS )Nfuncdef)rY   rQ   r   r^   r^   r_   r      s    z_Context.is_functionc                 C   s   |j j}|dkrd S |dkr*| j| nR|dkr@| j| n<|dkrf| jdd |j  D  n| j	|j
g | d S )NrC   Zglobal_stmtnonlocal_stmtr   c                 S   s   g | ]}|j jqS r^   )namerW   )rj   ru   r^   r^   r_   rl     s     z%_Context.add_name.<locals>.<listcomp>)rr   rQ   r   r   r   r   extend
get_paramsr   
setdefaultrW   )r   r   Zparent_typer^   r^   r_   add_name  s    z_Context.add_namec              	   C   s   |  | jd |  | jd dd | jD }| jD ]X}z||j }W n tk
r\   Y q2Y nX d|j }|j|jk rz|}n|}| || q2g }| jD ]^}|j}|| jkrq||ks| j	dkrd|j }| || q| 
 r|j| jkr|| q| j| S )zV
        Returns a list of nonlocal names that need to be part of that scope.
        globalnonlocalc                 S   s   i | ]}|j |qS r^   rh   ri   r^   r^   r_   
<dictcomp>  s      z%_Context.finalize.<locals>.<dictcomp>z name '%s' is nonlocal and globalNz"no binding for nonlocal '%s' found)_analyze_namesr   r   rW   KeyError	start_posr   r   r   r   r   r   r   )r   Zglobal_name_strsZnonlocal_nameZglobal_namemessageZ
error_nameZnonlocals_not_handledsearchr^   r^   r_   finalize  s4    






z_Context.finalizec           
         s    fdd}g }j jdkr*j  }|D ] d}tj jg D ]}|j jkr^d}|j}|jdkrz|j	|krzqJ|
 r|jdkr|jd jd	kr|r| |d
  qqd}nd}|sJ||  qqJ|D ]}	|	j	j jkr|df qq.d S )Nc                    s     |  jf  d S r   )r   rW   r   	base_namer   rZ   r^   r_   raise_5  s    z'_Context._analyze_names.<locals>.raise_r   FTru   r   r#   	annassignzannotated name '%s' can't be %sz.name '%s' is assigned to before %s declarationz)name '%s' is used prior to %s declarationzname '%s' is parameter and %s)rY   rQ   r   reversedr   getrW   r   rr   r   is_definitionrS   )
r   Zglobals_or_nonlocalsrZ   r   paramsZfound_global_or_nonlocalr   rr   r   ru   r^   r   r_   r   4  s8    

z_Context._analyze_namesc                 c   s    | j | d V  | j   d S r   )r   r   popr   rY   r^   r^   r_   	add_blocka  s    z_Context.add_blockc                 C   s   t || j| dS )N)r   )r   r   r   r^   r^   r_   add_contextg  s    z_Context.add_contextc                 C   s   |  j | 7  _ d S r   )r   r   )r   Zchild_contextr^   r^   r_   close_child_contextj  s    z_Context.close_child_context)N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r^   r^   r^   r_   r      s   
"-
r   c                       sl   e Zd ZdZ fddZdd Z fddZedd	 Z fd
dZ	dd Z
dd Zdd Zdd Z  ZS )ErrorFinderz1
    Searches for errors in the syntax tree.
    c                    s"   t  j|| i | _| jj| _d S r   )superr   _error_dictZgrammarversion_infor+   )r   argskwargs	__class__r^   r_   r   r  s    zErrorFinder.__init__c                    s.    fdd  |p t |j_d_d S )Nc                    s2   | d krd S  | j }| jdkr.t| j|S |S )N)classdefr   Z
file_input)rr   rQ   r   r   )rY   r   create_contextr   r^   r_   r   x  s    

z.ErrorFinder.initialize.<locals>.create_contextr   )r   r   context_indentation_countr   r^   r   r_   
initializew  s    	zErrorFinder.initializec              	      s6   |j dkr*| | W 5 Q R  dS Q R X t |S )Nr    )rQ   
visit_noder   visitr   r   r^   r_   r     s    
zErrorFinder.visitc              	   c   s   |  | |jtkrR| j|( t| jjtkr>| |d d V  W 5 Q R X d S |jdkr|  j	d7  _	| j	t
kr| |jd d d V  |jdkr|  j	d8  _	n$|jdkr| j}|j| _| j| d S )Nz!too many statically nested blocksZsuiter#   ztoo many levels of indentationr   r   )Z_check_type_rulesrQ   _BLOCK_STMTSr   r   rT   r   _MAX_BLOCK_SIZEr   r   _MAX_INDENT_COUNT_add_indentation_errorrS   r   r   )r   rY   r   r^   r^   r_   r     s$    





zErrorFinder.visit_nodec                    s   |j dkr|jdkrJt|  d }|jdkr8d}nd}| || nz|jdr\d}n\t	d	|j}|d krd
}| j
dkr|jt| j
jkrd| }nt|ddkrd}nd}| || dS |jdkr|j}|j dkr| j|| _t |S )N
error_leaf)INDENTZERROR_DEDENTrB   r   zunexpected indentz3unindent does not match any outer indentation level\z6unexpected character after line continuation characterz\w{,2}("{1,3}|'{1,3})invalid syntaxr   
f-string: r#   z!EOL while scanning string literalz/EOF while scanning triple-quoted string literalr   r$   r   )rQ   
token_typer-   get_next_leaf_split_prefixr   rW   
startswithrematchr+   r   Zalways_break_tokensrT   groupr   rr   r   r   r   
visit_leaf)r   leafspacingr   r   rr   r   r^   r_   r     s:    





zErrorFinder.visit_leafc                 C   s   |  |dd|  d S )N  IndentationError: 	add_issue)r   r   r   r^   r^   r_   r     s    z"ErrorFinder._add_indentation_errorc                 C   s   |  |dd|  d S )N  SyntaxError: r   )r   rY   r   r^   r^   r_   r     s    zErrorFinder._add_syntax_errorc                 C   s&   |j d }|||f}| j|| d S )Nr   )r   r   r   )r   rY   coder   liner   r^   r^   r_   r     s    

zErrorFinder.add_issuec                 C   s8   | j   | j D ]\}}}| jt||| qd S r   )r   r   r   valuesZissuesr   r   )r   r   r   rY   r^   r^   r_   r     s    
zErrorFinder.finalize)r   r   r   __doc__r   r   r   r   r   r   r   r   r   r   __classcell__r^   r^   r   r_   r   n  s   	
)r   c                       s    e Zd ZdZ fddZ  ZS )IndentationRuler   c                    s   t  ||}d| S )Nr   )r   _get_messager   r   rY   r   r^   r_   r     s    zIndentationRule._get_messager   r   r   r   r   r   r^   r^   r   r_   r     s   r   r   rv   c                   @   s    e Zd ZdZdd Zdd ZdS )_ExpectIndentedBlockzexpected an indented blockc                 C   s   |  }t| d S )NrB   )r   r-   r   )r   rY   r   r^   r^   r_   get_node  s    z_ExpectIndentedBlock.get_nodec                 C   s   |j d jdkS )NrB   r`   rb   r   r^   r^   r_   is_issue  s    z_ExpectIndentedBlock.is_issueNr   r   r   r   r   r   r^   r^   r^   r_   r     s   r   c                   @   s   e Zd ZeZdS )ErrorFinderConfigN)r   r   r   r   Znormalizer_classr^   r^   r^   r_   r     s   r   c                       s    e Zd ZdZ fddZ  ZS )
SyntaxRuler   c                    s4   t  ||}d|kr,t| jj|r,d| }d| S )Nzf-stringr   r   )r   r   r   _normalizerr+   r   r   r^   r_   r     s    zSyntaxRule._get_messager   r^   r^   r   r_   r     s   r   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )_InvalidSyntaxRuler   zf-string: invalid syntaxc                 C   s   |  S r   )r   r   r^   r^   r_   r     s    z_InvalidSyntaxRule.get_nodec                 C   s:   |  jdk}|r2t| jj|r2| j|| jd n|S d S )Nr   r   )r   rQ   r   r   r+   r   fstring_message)r   rY   errorr^   r^   r_   r     s    z_InvalidSyntaxRule.is_issueN)r   r   r   r   r   r   r   r^   r^   r^   r_   r     s   r   r@   rh   c                   @   s    e Zd ZdZdd Zdd ZdS )_AwaitOutsideAsyncz'await' outside async functionc                 C   s   | j j  S r   )r   r   r   r   r   r^   r^   r_   r      s    z_AwaitOutsideAsync.is_issuec                 C   s   |j S r   rr   r   r^   r^   r_   get_error_node#  s    z!_AwaitOutsideAsync.get_error_nodeN)r   r   r   r   r   r  r^   r^   r^   r_   r     s   r   breakc                   @   s   e Zd ZdZdd ZdS )_BreakOutsideLoopz'break' outside loopc                 C   s(   d}| j jjD ]}|jdkrd}q| S )NFr	   r   T)r   r   r   rQ   )r   r   in_loopblockr^   r^   r_   r   ,  s
    
z_BreakOutsideLoop.is_issueNr   r   r   r   r   r^   r^   r^   r_   r  (  s   r  continuec                   @   s   e Zd ZdZdZdd ZdS )_ContinueChecksz'continue' not properly in loopz0'continue' not supported inside 'finally' clausec                 C   sx   d}| j jjD ]\}|jdkr d}|jdkr|jd }|dkr|j|jkr| j jdk r| j|| jd  dS q|stdS d S )	NFr  Tr
   finallyr   r   )	r   r   r   rQ   rS   r   r+   r   message_in_finally)r   r   r  r  Z
last_blockr^   r^   r_   r   9  s     




z_ContinueChecks.is_issueN)r   r   r   r   r  r   r^   r^   r^   r_   r
  4  s   r
  fromc                   @   s    e Zd ZdZdd Zdd ZdS )_YieldFromCheckz"'yield from' inside async functionc                 C   s   |j j S r   r  r   r^   r^   r_   r   O  s    z_YieldFromCheck.get_nodec                 C   s   |j jdko| jj S )NZ	yield_arg)rr   rQ   r   r   r   r   r^   r^   r_   r   R  s    
z_YieldFromCheck.is_issueNr   r^   r^   r^   r_   r  K  s   r  r   c                   @   s   e Zd ZdZdZdd ZdS )_NameCheckszcannot assign to __debug__zcannot assign to Nonec                 C   s(   | j j| |jdkr$| r$dS d S )N	__debug__T)r   r   r   rW   r   r   r^   r^   r_   r   \  s    z_NameChecks.is_issueN)r   r   r   r   Zmessage_noner   r^   r^   r^   r_   r  W  s   r  r8   c                   @   s   e Zd ZdZdd ZdS )_StringChecksz0bytes can only contain ASCII literal characters.c              
   C   s   |j  }d|kr*tdd |jD r*dS d|kr| }d|krT|d}tj}ntj}z*t	
  t	d || W 5 Q R X W nn tk
r } z| j|dt| d	 W 5 d }~X Y n8 tk
r } z| j|d
t| d	 W 5 d }~X Y nX d S )Nbc                 s   s   | ]}t |d kr|V  qdS )   N)ordrj   cr^   r^   r_   rw   j  s      z)_StringChecks.is_issue.<locals>.<genexpr>Trzutf-8ignorez(unicode error) r   z(value error) )string_prefixlowerr   rW   Z_get_payloadencodecodecsescape_decodeunicode_escape_decodewarningscatch_warningsfilterwarningsUnicodeDecodeErrorr   rX   
ValueError)r   r   r  payloadfuncer^   r^   r_   r   g  s&    



&z_StringChecks.is_issueNr  r^   r^   r^   r_   r  c  s   r  *c                   @   s   e Zd ZdZdd ZdS )
_StarCheckz"named arguments must follow bare *c                 C   sL   |j }|jdkrH|rH|j|j|d d  }dd |D }t|dkS d S )N
parametersr#   c                 S   s   g | ]}|d kr|j s|qS )),r)   )
star_countr   r^   r^   r_   rl     s     z'_StarCheck.is_issue.<locals>.<listcomp>r   )rr   rQ   rS   indexrT   )r   r   r   afterr^   r^   r_   r     s
    z_StarCheck.is_issueNr  r^   r^   r^   r_   r)    s   r)  r%   c                   @   s   e Zd ZdZdd ZdS )_StarStarCheckz3dict unpacking cannot be used in dict comprehensionc                 C   s.   |j jdkr*|  }|d k	o(|jtkS d S )Nr   )rr   rQ   Zget_next_siblingrg   )r   r   r   r^   r^   r_   r     s    z_StarStarCheck.is_issueNr  r^   r^   r^   r_   r/    s   r/  r1   returnc                   @   s$   e Zd ZdZdZdd Zdd ZdS )_ReturnAndYieldChecksz&'return' with value in async generatorz'yield' inside async functionc                 C   s   |j S r   r  r   r^   r^   r_   r     s    z_ReturnAndYieldChecks.get_nodec                 C   sh   | j jjjdkr,| j| |d|j d n8| j j rdt| j jj	 rd|jdkrd|j
jdkrddS d S )Nr   z'%s' outside functionr   r0  Zreturn_stmtT)r   r   rY   rQ   r   r   rW   r   r   Ziter_yield_exprsrr   r   r^   r^   r_   r     s    z_ReturnAndYieldChecks.is_issueN)r   r   r   r   Zmessage_async_yieldr   r   r^   r^   r^   r_   r1    s   r1  r:   c                   @   s    e Zd ZdZdd Zdd ZdS )_BytesAndStringMixz&cannot mix bytes and nonbytes literalsc                 C   s   |j dkrdS d|j kS )NrO   Fr  )rQ   r  r  )r   r8   r^   r^   r_   _is_bytes_literal  s    
z$_BytesAndStringMix._is_bytes_literalc                 C   s@   |j d }| |}|j dd  D ]}|| |kr" dS q"d S )Nr   r#   T)rS   r3  )r   rY   r\   Zfirst_is_bytesr8   r^   r^   r_   r     s
    

z_BytesAndStringMix.is_issueN)r   r   r   r   r3  r   r^   r^   r^   r_   r2    s   r2  Zimport_as_namesc                   @   s   e Zd ZdZdd ZdS )_TrailingImportCommaz:trailing comma not allowed without surrounding parenthesesc                 C   s&   |j d dkr"|jj d dkr"dS d S )NrB   r+  r)   T)rS   rr   r   r^   r^   r_   r     s    z_TrailingImportComma.is_issueNr  r^   r^   r^   r_   r4    s   r4  rn   c                   @   s   e Zd ZdZdd ZdS )_ImportStarInFunctionz%import * only allowed at module levelc                 C   s   |  o| jjjd k	S r   )Zis_star_importr   r   r   r   r^   r^   r_   r     s    z_ImportStarInFunction.is_issueNr  r^   r^   r^   r_   r5    s   r5  c                   @   s   e Zd ZdZdd ZdS )_FutureImportRulez?from __future__ imports must occur at the beginning of the filec                 C   s   t |rt|sdS | D ]~\}}|j}tt}| jjdkrH|d |dkr`| j	|dd q|dkr|d}| j	||d q||krd	| }| j	||d qd S )
NTr       annotationsZbracesznot a chancer   barry_as_FLUFLz-Seriously I'm not implementing this :) ~ Davez future feature %s is not defined)
ro   rz   	get_pathsrW   r-   ALLOWED_FUTURESr   r+   r   r   )r   rY   	from_nameZfuture_namer   Zallowed_futuresmr   r^   r^   r_   r     s     
z_FutureImportRule.is_issueNr  r^   r^   r^   r_   r6    s   r6  rI   c                   @   s   e Zd ZdZdd ZdS )_StarExprRulez2iterable unpacking cannot be used in comprehensionc                 C   s   dd }| j jdkr|j}nt|}|jtdkr\|jdkrJ|jd dks\| j|dd	 d S ||r| j jdkr| j|d
d	 n| j|dd	 d S |jjdkr|jjd jtkr| j|| j	d	 d S )Nc                 S   s6   | j d k	r2| j } | jdkrdS | jtdkr dS q dS )Ndel_stmtTr   F)r   )rr   rQ   r~   rs   r^   r^   r_   check_delete_starred  s    

z4_StarExprRule.is_issue.<locals>.check_delete_starredr   r   r   r   r(   !can't use starred expression herer   zcannot delete starredr   r#   )r   )
r   r+   rr   rt   rQ   r~   rS   r   rg   message_iterable_unpacking)r   rY   rA  ancestorr^   r^   r_   r     s&    	z_StarExprRule.is_issueN)r   r   r   rC  r   r^   r^   r^   r_   r?    s   r?  )typesc                   @   s   e Zd Zdd ZdS )_StarExprParentRulec                    s    fdd  ||j rdd |jD }dd |D }t|dkrl| jjdk rTd}nd	}| j|d |d
 n0|r||d }|dkrd}| j|d |d
 d S )Nc                    sD   |d krdS |j }|dkrdS |dkr8| j|jd jk S  | |jS )NFrC   r   rB   )rQ   r   rS   rr   )rY   rD  rZ   r   r^   r_   r     s    z3_StarExprParentRule.is_issue.<locals>.is_definitionc                 S   s   g | ]}|d kr|qS )r+  r^   r  r^   r^   r_   rl   "  s      z0_StarExprParentRule.is_issue.<locals>.<listcomp>c                 S   s   g | ]}|j d kr|qS )rI   rv   r  r^   r^   r_   rl   #  s     
 r#   r   z%two starred expressions in assignmentz*multiple starred expressions in assignmentr   r      z1too many expressions in star-unpacking assignment)rr   rS   rT   r   r+   r   r-  )r   rY   r   rN   r   countr^   rG  r_   r     s    z_StarExprParentRule.is_issueNr   r   r   r   r^   r^   r^   r_   rF    s   rF  r   c                   @   s    e Zd ZdZdd Zdd ZdS )_AnnotatorRulezillegal target for annotationc                 C   s   |j S r   r  r   r^   r^   r_   r   7  s    z_AnnotatorRule.get_nodec                 C   s   d }|j jd }t|}z
|j}W n tk
r6   Y nHX d|ksV|jdkr\|d dkr\d}n|jdkrv|d dkrvd}|d }|d kr|jd	ks|jd
kr|jdkr|jd dksdS nd}| j|j || d d S )Nr   r+  r   r(   r*   r,   r-   rB   r   r>   rC   Tz,only single target (not %s) can be annotatedr   )rr   rS   rV   rp   rQ   r   )r   rY   rZ   lhsrS   rC   r   r^   r^   r_   r   :  s.    

z_AnnotatorRule.is_issueNr   r^   r^   r^   r_   rK  1  s   rK  r   c                   @   s   e Zd Zdd ZdS )_ArgumentRulec                 C   s   |j d }| jjdk rt|}|j d dkr||jdkr||jdkrX| jjdk rRd}qnd}n| jjdk rjd	}nd}| j||d
 t|r|jjdkr| j|dd
 d S )Nr   r   r#   =r   r   z lambda cannot contain assignmentz=expression cannot contain assignment, perhaps you meant "=="?zkeyword can't be an expressionr   r   r   )rS   r   r+   rV   rQ   r   r   rr   )r   rY   r\   r   r^   r^   r_   r   X  s    

z_ArgumentRule.is_issueNrJ  r^   r^   r^   r_   rM  V  s   rM  r   c                   @   s   e Zd ZdZdd ZdS )_NonlocalModuleLevelRulez0nonlocal declaration not allowed at module levelc                 C   s   | j jjd kS r   )r   r   r   r   r^   r^   r_   r   t  s    z!_NonlocalModuleLevelRule.is_issueNr  r^   r^   r^   r_   rO  p  s   rO  Zarglistc                   @   s    e Zd Zedd Zdd ZdS )_ArglistRulec                 C   s   | j jdk rdS dS d S )Nr7  z?Generator expression must be parenthesized if not sole argumentz*Generator expression must be parenthesized)r   r+   r   r^   r^   r_   r   z  s    z_ArglistRule.messagec                 C   s
  t  }d}d}|jD ]}|dkr"q|jdkr|jd }t|rRt|jdkrR dS |dkr|dkrz|r~d	}| j||d
 qd}nTd}|jdkr|j|krd}| jjdkr|d	|j7 }| j||d
 n|
|j q|rd}| j||d
 q|rd}| j||d
 qd S )NFr+  r   r   r   T)r(  r%   r(  z>iterable argument unpacking follows keyword argument unpackingr   r   zkeyword argument repeatedr   z: {}z6positional argument follows keyword argument unpackingz,positional argument follows keyword argument)setrS   rQ   r   rT   r   rW   r   r+   formatadd)r   rY   Zarg_setkw_onlyZkw_unpacking_onlyr   r\   r   r^   r^   r_   r     s<    




z_ArglistRule.is_issueN)r   r   r   propertyr   r   r^   r^   r^   r_   rP  x  s   
rP  r*  r   c                   @   s   e Zd ZdZdd ZdS )_ParameterRulez-non-default argument follows default argumentc                 C   s   t  }d}d}t|D ]}|jdkr8|jdkrd}d}q|jj|kr`d}| j|j||jj d ||jj |s|jd kr|js|r dS q|jrd}d}qd}qd S )NFr3   r(  Tz.duplicate argument '%s' in function definitionr   )	rQ  rx   rQ   rW   r   r   rS  defaultr,  )r   rY   Zparam_namesZdefault_onlyZ	star_seenpr   r^   r^   r_   r     s*    

z_ParameterRule.is_issueNr  r^   r^   r^   r_   rV    s   rV  r
   c                   @   s   e Zd ZdZdd ZdS )_TryStmtRulezdefault 'except:' must be lastc                 C   sP   d }|j dd d D ]6}|dkr$ qL|dkr2|}q|d k	r| j|| jd qd S )Nr    )elser  exceptr   )rS   r   r   )r   r
   Zdefault_exceptZexcept_clauser^   r^   r_   r     s    z_TryStmtRule.is_issueNr  r^   r^   r^   r_   rY    s   rY  rO   c                   @   s>   e Zd ZdZdZdZdZdd Zdd Zd	d
 Z	dddZ
dS )_FStringRuleNz3f-string expression part cannot include a backslashz'f-string: expressions nested too deeplyzAf-string: invalid conversion character: expected 's', 'r', or 'a'c                 C   s   |  |jdd  | d S r   _check_fstring_contentsrS   )r   format_specdepthr^   r^   r_   _check_format_spec  s    z_FStringRule._check_format_specc                 C   s   |dkr| j || jd |jd }d| kr>| j || jd |jd }|jdkrh|jdkrh|jd }n|}|jdkr|jd }|jd	kr| j || jd |jd
 }|jdkr| ||d  d S )Nr   r   r#   r   r3   rN  r    Zfstring_conversion)sr  ar   Zfstring_format_spec)	r   message_nestedrS   get_codemessage_exprrQ   rW   message_conversionra  )r   fstring_exprr`  rH   Z
children_2
conversionr   r_  r^   r^   r_   _check_fstring_expr  s     






z _FStringRule._check_fstring_exprc                 C   s   |  |jdd  d S )Nr#   rB   r]  )r   rO   r^   r^   r_   r     s    z_FStringRule.is_issuer   c                 C   s$   |D ]}|j dkr| || qd S )Nrh  )rQ   rj  )r   rS   r`  Zfstring_contentr^   r^   r_   r^    s    
z$_FStringRule._check_fstring_contents)r   )r   r   r   Z_fstring_grammarrf  rd  rg  ra  rj  r   r^  r^   r^   r^   r_   r\    s   r\  c                   @   s   e Zd ZdddZdS )_CheckAssignmentRuleFc                 C   s4  d }|j }|dkrd}n|dkr\|jd d \}}t|}|d kr|j dkr~| jjdk rdd}n|jd d	krxd
}nd}n|dkr|dkr| jjdk rd}nd
}n|dkrt|jdkr| jjdk rd}nd}n|dkr|j dkrd}nj|j dkrH|r|dkrd}n|dkrd}|jd d d D ]}	| |	||| q.n| |||| n||dkr|jdkrxd}n| jjdk rd}n
t|j}n>|dkr|jdkrd}n |dkrd}n|dkrd}n|dkrd}
| j	||
d n|dkrd }n|d!kr|jd" d#kr.d$}n||jd% d&krDd}nf|jd' }|j d(ks^t
|jd" dkrtd)}n6|r|jd" dkrd*}n|r|jd" d+krd,}n*|d-kr| jjdk rd}nd.}n|d/kr|jd d d D ]}	| |	||| qnd0|kr|d1ks0d2|ks0|d3kr6d}n|d1kr|rj| jjd4krZd5}n| j	|d6d n^| jjd4kr|j}nt|}|j tkr|s|j dkr|jd" dksd7}
| j	||
d | |jd  |d k	r0|rd8| }
n0| jjdk rd9nd:}d;||rd<nd=|g}
| j	||
d d S )>Nr   r   r   r   r   r   r"   r#   r$   r&   r'   r.   r/   )r(   r,   r;   r2   r   r(   r*   r,   r-   r0   r1   r3   r4   r5   r6   r7   z+assignment to yield expression not possibler   r<   r=   r>   r   r@   rA   r   r%   rB   rC   rD   rE   rF   rG   rO   rP   )r   r   r   rH   rI   rJ   rK   r   rN   rB  z4starred assignment target must be in a list or tuplez)cannot use assignment expressions with %szcan'tcannot deletez	assign to)rQ   rS   rR   r   r+   rT   _check_assignmentrW   rX   r   AssertionErrorrr   rt   r~   join)r   rY   is_deletionis_namedexpris_aug_assignr   rZ   r\   r]   rd   r   rC   rD  rl  r^   r^   r_   ro    s    



















z&_CheckAssignmentRule._check_assignmentN)FFF)r   r   r   ro  r^   r^   r^   r_   rk    s   rk  r   c                   @   s   e Zd ZdZdd ZdS )_CompForRulez>asynchronous comprehension outside of an asynchronous functionc                 C   s<   |j d }|jdkr| | |jj d dko:| jj  S )Nr#   	expr_listr   async)rS   rQ   ro  rr   r   r   r   )r   rY   rv  r^   r^   r_   r     s    


z_CompForRule.is_issueNr  r^   r^   r^   r_   ru    s   ru  r   c                   @   s    e Zd ZdZde Zdd ZdS )_ExprStmtRulez+illegal expression for augmented assignmentz'{target}' is an c                 C   s   |j d }|dko|jdk}| jjdks,|sP|j d dd D ]}| j||d q<|rt|j d }|jd	ks|jd
kr|j d jdkr|j d j d dkrdS | jjdkrdS | j|| jjt	|j d | jjdd d S )Nr#   rN  r   r   r   r   )rt  r   r   r>   rC   rB   r(   FT)targetr   )
rS   rQ   r   r+   ro  rV   r   extended_messagerR  rU   )r   rY   Z	augassignrt  Zbefore_equalry  r^   r^   r_   r     s.    

z_ExprStmtRule.is_issueN)r   r   r   r   rz  r   r^   r^   r^   r_   rx    s   rx  	with_itemc                   @   s   e Zd Zdd ZdS )_WithItemRulec                 C   s   |  |jd  d S Nr   )ro  rS   )r   r{  r^   r^   r_   r     s    z_WithItemRule.is_issueNrJ  r^   r^   r^   r_   r|    s   r|  r@  c                   @   s   e Zd Zdd ZdS )_DelStmtRulec                 C   s&   |j d }|jdkr"| j|dd d S )Nr#   rv  T)rr  rS   rQ   ro  )r   r@  rd   r^   r^   r_   r     s    

z_DelStmtRule.is_issueNrJ  r^   r^   r^   r_   r~    s   r~  rv  c                   @   s   e Zd Zdd ZdS )_ExprListRulec                 C   s$   |j d d d D ]}| | qd S r}  )rS   ro  )r   rv  rH   r^   r^   r_   r     s    z_ExprListRule.is_issueNrJ  r^   r^   r^   r_   r    s   r  r	   c                   @   s   e Zd Zdd ZdS )_ForStmtRulec                 C   s"   |j d }|jdkr| | d S )Nr#   rv  r  )r   r	   rv  r^   r^   r_   r     s    

z_ForStmtRule.is_issueNrJ  r^   r^   r^   r_   r    s   r  namedexpr_testc                   @   s   e Zd Zdd ZdS )_NamedExprRulec                    s   |j d }dd }||r,d}| j||d t   fddfdd	}||}|r| jjjjd
krxd}| j||d dd  D }|jdkr|j|krd|j }| j||d | j|dd d S )Nr   c                 S   s8   | j }|d kr|S |jdkr.|jd | kr.|S |} q d S )Nr   r    rq   )rY   rr   r^   r^   r_   search_namedexpr_in_comp_for  s    z=_NamedExprRule.is_issue.<locals>.search_namedexpr_in_comp_forzKassignment expression cannot be used in a comprehension iterable expressionr   c                    s6   | j dkr| }n| j dkr$| jd } t| d S )Nr   r   r#   )rQ   rS   r   r   )r   comp)r   r^   r_   process_comp_for  s
    


z1_NamedExprRule.is_issue.<locals>.process_comp_forc                    sF   d}|  dd} | d krqB| jD ]}|jtkr  | d} qq q|S )NFr   r   T)r   rS   rQ   rg   )rY   Zhas_ancestorsrd   )r  r^   r_   search_all_comp_ancestors  s    

z:_NamedExprRule.is_issue.<locals>.search_all_comp_ancestorsr   zKassignment expression within a comprehension cannot be used in a class bodyc                 S   s   g | ]}|j d kr|jqS )r   )rQ   rW   )rj   rH   r^   r^   r_   rl     s     
 z+_NamedExprRule.is_issue.<locals>.<listcomp>r   zGassignment expression cannot rebind comprehension iteration variable %rT)rs  )	rS   r   r-   r   r   rY   rQ   rW   ro  )r   r  r\   r  r   r  Z
search_allnamelistr^   )r   r  r_   r     s(    
	z_NamedExprRule.is_issueNrJ  r^   r^   r^   r_   r    s   r  )Er  r   r   
contextlibr   Zparso.normalizerr   r   r   r   Zparso.python.tokenizer   r   r~   r   r   r<  rg   rU   re   rR   ro   rV   rt   rx   rz   r{   r   r   r   r   r   r   r   Zregister_ruler   r   r   r   r   r  r
  r  r  r  r)  r/  r1  r2  r4  r5  r6  r?  rF  rK  rM  rO  rP  rV  rY  r\  rk  ru  rx  r|  r~  r  r  r  r^   r^   r^   r_   <module>   s   J	
 t







 





	


$

$


5



(x

"




