o
    tBh4                    @  s(  U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZg d d	lhmiZimjZjmkZkmlZlmmZmmnZnmoZompZp d d
lqmrZrmsZs d dltmuZumvZv d dlwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZ d dlmZmZ zejd Zded< ejdkrd dlZdejjv sWJ dej d   dd dlmZmZmZmZmZm5ZmZmZmZmZmZmZmZmZmZ efdYdd ZejZejZn3d d!lmZ d dlmZmZmZmZmZm5ZmZmZmZmZmZmZmZmZmZ efdYd"d ZeZeZejd#krejZejZejZejZejZejZejZejZejZeejejejejf ZneZeZeZeZeZeZeZeZeZeejejejf ZW n0 ey5   zd d$lmZ W n ey&   ed%ejd& Y nw ed'ejd& ed Y nw ed(eKd)Ze7d*Zded+< e|eg d,Zded-< d.Zded/< d0Zded1< ed2Zded3< 		dZd[d<d=Zd\d@dAZd]dFdGZd^dKdLZd_dPdQZG dRdS dSZG dTdU dUZd`dWdXZdS )a    )annotationsN)AnyCallableListOptionalSequenceTypeVarUnioncast)FinalLiteraloverload)defaults
errorcodesmessage_registry)Errors)K	ARG_NAMEDARG_NAMED_OPTARG_OPTARG_POSARG_STAR	ARG_STAR2ArgKindArgument
AssertStmtAssignmentExprAssignmentStmt	AwaitExprBlock	BreakStmt	BytesExprCallExprClassDefComparisonExprComplexExprConditionalExprContinueStmt	DecoratorDelStmtDictExprDictionaryComprehensionEllipsisExpr
ExpressionExpressionStmtFakeInfo	FloatExprForStmtFuncDefGeneratorExpr
GlobalDeclIfStmtImport	ImportAll
ImportBase
ImportFrom	IndexExprIntExpr
LambdaExprListComprehensionListExpr	MatchStmt
MemberExprMypyFileNameExprNodeNonlocalDeclOperatorAssignmentStmtOpExprOverloadedFuncDefOverloadPartPassStmt	RaiseStmtRefExpr
ReturnStmtSetComprehensionSetExpr	SliceExprStarExpr	StatementStrExpr	SuperExprTempNodeTryStmt	TupleExpr	UnaryExprVar	WhileStmtWithStmt	YieldExprYieldFromExprcheck_arg_names)Options)	AsPatternClassPatternMappingPattern	OrPatternSequencePatternSingletonPatternStarredPatternValuePattern)"infer_reachability_of_if_statementmark_block_unreachable)argument_elide_namespecial_function_elide_names)AnyTypeCallableArgumentCallableTypeEllipsisTypeInstance
ProperTypeRawExpressionType	TupleTypeTypeTypeList	TypeOfAnyUnboundType	UnionType)bytes_to_human_readable_reprunnamed_function   r   PY_MINOR_VERSION      kindzThis 3.8.0 alpha (z) is too old; 3.8.0a3 required)AST	AttributeBytesCallEllipsisr,   FunctionTypeIndexNameNameConstantNumStarredStrUnaryOpUSubsourcestr | bytesfilenamestrmodefeature_versionintreturnr   c                 C  s   t j| ||d|dS )NT)type_commentsr   ast3parser   r   r   r    r   e/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/fastparse.py
ast3_parse   s   r   )r   c                 C  s   t j| |||dS )Nr   r   r   r   r   r   r      s   )r|   
   )ast35zcThe typed_ast package is not installed.
You can install it with `python3 -m pip install typed-ast`.)filezYou need a more recent version of the typed_ast package.
You can update to the latest version with `python3 -m pip install -U typed-ast`.N)boundz*fallback can't be filled out until semanalMISSING_FALLBACK_dummy_fallbackzsyntax error in type commentTYPE_COMMENT_SYNTAX_ERRORzInvalid "type: ignore" commentINVALID_TYPE_IGNOREz[^#]*#\s*type:\s*ignore\s*(.*)TYPE_IGNORE_PATTERNfnammodule
str | NoneerrorsErrors | NoneoptionsOptions | Noner@   c              
   C  s  d}|du rt  }d}|du rt }|j|||d |d}|r:tjd }|jd dkr9|jd |kr9|jd }n|jd dksCJ |jd }z5t  tj	d	t
d
 t| |d|d}W d   n1 sgw   Y  t|||d|}	||	_||	_W n_ ty }
 zStjdk }|r|
jdkrd|
_|
j}|tjjkr|dr|jd  d|jd  }|d| d7 }|j|
jdur|
jnd|
j|dtjd tg g di }	W Y d}
~
nd}
~
ww |r| r|  |	S )zParse a source file, without doing any semantic analysis.

    Return the parse tree. If errors is not provided, raise ParseError
    on failure. Otherwise, use the errors object to report parse errors.
    FNT)r   z.pyiry   r   r|   ignore)categoryexecr   )r   is_stubr   r|   	   z	<fstring>zinvalid syntax.z+; you likely need to run mypy using Python z	 or newerr   blockercode)r   r]   set_fileendswithr   PYTHON3_VERSIONpython_versionwarningscatch_warningsfilterwarningsDeprecationWarningr   ASTConvertervisitpathr   SyntaxErrorsysversion_infor   linenomsgminor
startswithreportoffsetcodesSYNTAXr@   	is_errorsraise_error)r   r   r   r   r   raise_on_erroris_stub_filer   asttreeeis_py38_or_earliermessagepython_version_strr   r   r   r      sX   






r   taglist[str] | Nonec                 C  sT   | r|   dks|   drg S td| }|du rdS dd |ddD S )	zParse optional "[code, ...]" tag after "# type: ignore".

    Return:
     * [] if no tag was found (ignore all errors)
     * list of ignored error codes if a tag was found
     * None if the tag was invalid.
     #z\s*\[([^]#]*)\]\s*(#.*)?$Nc                 S  s   g | ]}|  qS r   )strip).0r   r   r   r   
<listcomp>F      z)parse_type_ignore_tag.<locals>.<listcomp>ry   ,)r   r   rematchgroupsplit)r   mr   r   r   parse_type_ignore_tag7  s   r   type_commentlinecolumn*tuple[list[str] | None, ProperType | None]c              
   C  s   zt | dd}W n, ty4   |dur3| ddd  }t d| d}|j|||d	tjd
 Y dS  w t	| }|r^t
t|d}t|}	|	du r]|dur[|j||ttjd ntnd}	t|tsgJ t|||dd|j}
|	|
fS )zkParse type portion of a type comment (+ optional type ignore).

    Return (ignore info, parsed type).
    z<type_comment>evalNr      r    ""Tr   NNry   )r   F)r   override_columnis_evaluated)r   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   
isinstanceast3_ExpressionTypeConverterr   body)r   r   r   r   typstripped_typeerr_msgextra_ignorer   ignored	convertedr   r   r   parse_type_commentI  s6   
	r   expr_stringexpr_fallback_namero   c              	   C  s   z/t |  ||dd\}}t|tr |jdu r | |_||_|W S t|tr(|W S t| |||W S  tt	fyA   t| ||| Y S w )zParses a type that was originally present inside of an explicit string.

    For example, suppose we have the type `Foo["blah"]`. We should parse the
    string expression "blah" using this function.
    N)r   r   r   )
r   r   r   ru   original_str_exproriginal_str_fallbackrv   rp   r   
ValueError)r   r   r   r   _noder   r   r   parse_type_stringn  s   
r  expr	ast3.exprboolc                 C  sD   t | tr
| jdkS t | tr t | jtr | jjdko| jdkS dS )Nno_type_checktypingF)r   r   idr   valueattr)r  r   r   r   is_no_type_check_decorator  s   


r  c                   @  s  e Zd ZU dd	d
ZdddZdejfdddZdddZdddZ	dd#d$Z
dd(d)Zdd,d-Zdd/d0Z	1ddd6d7Zdd<d=Zejd>ejd?ejd@ejdAejdBejdCejdDejdEejdFejdGejdHejdIejdJiZdKedL< ddOdPZ ej!dQej"dRej#dSej$dTej%dUej&dVej'dWej(dXej)dYej*dZi
Z+dKed[< dd]d^Z,ddbdcZ-ddedfZ.ddgdhZ/	idddldmZ0ddodpZ1ddqdrZ2ddtduZ3ddvdwZ4ddydzZ5dd~dZ6dddZ7dddZ8	1ddddZ9dddZ:	1ddddZ;	1ddddZ<dddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddĄZFdddǄZGddd˄ZHddd΄ZIddd҄ZJdddքZKdddڄZLdddބZMdddZNdddZOdddZPdddZQdddZRdddZSdddZTdddZUdސddZVdߐddZWddd	ZXdddZYdddZZdddZ[dddZ\dddZ]dd d!Z^dd$d%Z_dd(d)Z`dd,d-Zadd0d1Zbdd4d5Zcdd8d9Zddd<d=Zedd@dAZfddCdDZgddGdHZhddKdLZiddOdPZjddRdSZkddVdWZlddZd[Zmdd^d_ZnddbdcZoddfdgZpddjdkZqddmdnZrddqdrZsddudvZtddydzZudd|d}ZvdddZwd ddZxdddZydddZzdddZ{dddZ|dddZ}dddZ~dddZdddZdiS (	  r   r   r]   r   r	  r   r   r   Nonec                 C  s.   g | _ g | _|| _|| _|| _i | _i | _d S N)class_and_function_stackimportsr   r   r   type_ignoresvisitor_cache)selfr   r   r   r   r   r   __init__  s   
zASTConverter.__init__r   r   r   r   r   c                 C  s   | j j|||dtjd d S Nnote)severityr   r   r   r   r   r  r   r   r   r   r   r   r       zASTConverter.noteTr   r   codes.ErrorCodec                 C  s*   |s| j js| jj|||||d d S d S )Nr   )r   ignore_errorsr   r   )r  r   r   r   r   r   r   r   r   fail  s   zASTConverter.failr  r4   c                 C  s   | j d|j|jdtjd d S )Nz6Condition can't be inferred, unable to merge overloadsF)r   r   r   r   )r   r   r   r   MISCr  r  r   r   r   fail_merge_overload  s   
z ASTConverter.fail_merge_overload
AST | Noner   c                 C  sP   |d u rd S t |}| j|}|d u r$d|jj }t| |}|| j|< ||S )Nvisit_)typer  get	__class____name__getattr)r  r  typeobjvisitormethodr   r   r   r     s   

zASTConverter.visitr   nAstNodec                 C  s0   |j |_|j|_t|dd |_t|dd |_|S )N
end_linenoend_col_offset)r   r   
col_offsetr   r*  end_line
end_column)r  r  r.  r   r   r   set_line  s
   zASTConverter.set_linelSequence[AST | None]list[Expression | None]c                 C  s&   g }|D ]}|  |}|| q|S r  )r   append)r  r6  resr   expr   r   r   translate_opt_expr_list  s
   
z$ASTConverter.translate_opt_expr_listSequence[AST]list[Expression]c                 C  s   t tt | |S r  )r
   r   r,   r<  r  r6  r   r   r   translate_expr_list     z ASTConverter.translate_expr_listast3.expr | ast3.stmtc                 C  s.   t |tjtjtjfr|jr|jd jS |jS Nr   )r   r   AsyncFunctionDefr"   FunctionDefdecorator_listr   r"  r   r   r   
get_lineno  s   zASTConverter.get_linenoFstmtsSequence[ast3.stmt]ismodulelist[Statement]c                 C  s   |r6|r6| j r6t| j | |d k r6| jj| jj t| j  tjj	 t
| | |}t| |gS g }|D ]}| |}|| q:|S rC  )r  minrG  r   used_ignored_linesr   r9  r   FILEr   r   fix_function_overloadstranslate_stmt_listrg   r   )r  rH  rJ  blockr:  stmtr  r   r   r   rP    s$   
z ASTConverter.translate_stmt_listast3.stmt | ast3.argr   r   ProperType | Nonec                 C  s>   |d u rd S |j }t|||j| j\}}|d ur|| j|< |S r  )r   r   r2  r   r  )r  r.  r   r   r   r   r   r   r   translate_type_comment  s   
z#ASTConverter.translate_type_comment+-*@/%z**z<<z>>|^&z//zFinal[dict[type[AST], str]]op_mapopast3.operatorc                 C  0   t jt|}|d u rtdtt| |S )NzUnknown operator )r   r_  r'  r&  RuntimeErrorr   r  r`  op_namer   r   r   from_operator     zASTConverter.from_operator><z==z>=z<=z!=iszis notinznot incomp_op_map
ast3.cmpopc                 C  rb  )NzUnknown comparison operator )r   rl  r'  r&  rc  r   rd  r   r   r   from_comp_operator#  rg  zASTConverter.from_comp_operatorlist[ast3.stmt]r   Block | Nonec                 C  s*   d }|rt | | |}|| |S r  r   rO  rP  r5  r  rH  r   br   r   r   as_block*  s
   
zASTConverter.as_blockr   c                 C  s*   |sJ t | | |}|| |S r  rq  rr  r   r   r   as_required_block1  s   
zASTConverter.as_required_blockc                 C  s  g }g }d }d}d }d }d }d }	g }
|D ]}d }d }d }t |tr7|du r7| ||}|d ur7| |\}}|d urt |ttfr|j|kr|d urP|
| |d urit |tr`|	|j
 n|| d\}}|	rr| |	 d }	|| t |tr~d}q|d urt |tr||kr|
| |d u r|d ur| | q|d urt |tr|	|j
 n|| d\}}t |jd tr|
	ttt |jd d  |	|jd j
 q|ttttf |jd  q|d ur|| |}d\}}d }	|r||kr|
tt|  |r$|
r$|
D ]}| | || qg }
t|dkr3||d  nt|dkrA|t| d}t |trVt|jsV|g}|j}qt |tr|d urg }|}|}d }|d ur|
	ttt |jd d  tttttf |jd }|}	qg }d }|| q|r|
r|
D ]}| | || qt|dkr||d  |S t|dkr|t| |S |d ur|| |S |d ur|| |S )NFr   Tr   r   ry   )r   r4   _check_ifstmt_for_overloads'_get_executable_if_block_with_overloadsr'   r1   namer9  rF   extenditemsr#  r   r
   r   r	   pop_strip_contents_from_if_stmtlenrx   )r  rH  retcurrent_overloadcurrent_overload_nameseen_unconditional_func_deflast_if_stmtlast_if_overloadlast_if_stmt_overload_namelast_if_unknown_truth_valueskipped_if_stmtsrR  if_overload_nameif_block_with_overloadif_unknown_truth_valueif_stmtr   r   r   rO  9  s   



















z#ASTConverter.fix_function_overloadsNrR  r  c                   sL  t |jd jdkr&t|jd jd ttfsP|dur&t|jd jd tsPt |jd jdkrNt|jd jd trNt fdd|jd jdd D sPdS tttttf |jd jd j	}|j
du rh|S t|j
trt |j
jdkrt|j
jd tttfr|j
jd j	|kr|S t|j
jd tr |j
jd ||kr|S dS )z{Check if IfStmt contains only overloads with the same name.
        Return overload_name if found, None otherwise.
        r   ry   Nr   c                 3  s    | ]}  |V  qd S r  )_is_stripped_if_stmt)r   r  r  r   r   	<genexpr>      z;ASTConverter._check_ifstmt_for_overloads.<locals>.<genexpr>)r}  r   r   r'   rF   r1   allr
   r	   rx  	else_bodyr   r4   rv  )r  rR  r  overload_namer   r  r   rv    s>   	$
z(ASTConverter._check_ifstmt_for_overloads"tuple[Block | None, IfStmt | None]c                 C  s   t || j |jdu r|jd jdu rdS |jdu s(|jd jdu r,|jjdu r,d|fS |jjdu r9|jd dfS |jd jdu rXt|jjd trS| |jjd S |jdfS d|fS )a  Return block from IfStmt that will get executed.

        Return
            0 -> A block if sure that alternative blocks are unreachable.
            1 -> An IfStmt if the reachability of it can't be inferred,
                 i.e. the truth value is unknown.
        Nr   Tr   F)rf   r   r  r   is_unreachabler   r4   rw  r  rR  r   r   r   rw    s   


z4ASTConverter._get_executable_if_block_with_overloadsc                 C  sl   t |jdkrg |jd _|jr2t |jjdkr4t|jjd tr,| |jjd  dS g |j_dS dS dS )zRemove contents from IfStmt.

        Needed to still be able to check the conditions after the contents
        have been merged with the surrounding function overloads.
        ry   r   N)r}  r   r  r   r4   r|  r  r   r   r   r|    s   z)ASTConverter._strip_contents_from_if_stmtrP   c                 C  s`   t |tsdS t|jdkrt|jd jdksdS |jr%t|jjdkr'dS | |jjd S )ziCheck stmt to make sure it is a stripped IfStmt.

        See also: _strip_contents_from_if_stmt
        Fry   r   T)r   r4   r}  r   r  r  r  r   r   r   r    s   
"z!ASTConverter._is_stripped_if_stmtc                 C  s   | j dd  ddgkS )NCF)r  r  r   r   r   in_method_scope1     zASTConverter.in_method_scoper  c                 C  s   || j jkrdS |S )z;Return the actual, internal module id for a source text id.r  )r   custom_typing_module)r  r  r   r   r   translate_module_id4  s   z ASTConverter.translate_module_idmodast3.Moduler@   c                 C  sj   i | _ |j D ]}t|j}|d ur|| j |j< q| t|jd q| | j|jdd}t	|| j
d| j S )Nr   T)rJ  F)r  r   r   r   r   r   rO  rP  r   r@   r  )r  r  tiparsedr   r   r   r   visit_Module:  s   

zASTConverter.visit_Moduleast3.FunctionDefFuncDef | Decoratorc                 C  s
   |  |S r  do_func_defr  r.  r   r   r   visit_FunctionDefJ  s   
zASTConverter.visit_FunctionDefast3.AsyncFunctionDefc                 C     | j |ddS )NT)is_coroutiner  r  r   r   r   visit_AsyncFunctionDefO     z#ASTConverter.visit_AsyncFunctionDef(ast3.FunctionDef | ast3.AsyncFunctionDefr  c                 C  s  | j d t|jotdd |jD }|j}| j|j||d}t|j	r.|D ]}d|_
q(dd |D }dd |D }g }	|rJd	gt| }	d	}
n|jd	urz|t|jd
d}t|ts_J t|jdkrt|jd tr|jrz| tj||j dd |D }	n)|jstdd |D r| tj||j t| j||jd|j}dd |D }	t| j|d|j}
|  rt|	t|k r|	dttj W nb t y   |j!ddd " }t# d| d}| |||j |jr|jd dvr| $d||j ttj%gt| }	ttj%}
Y nw dd |D }	t| j|jr'|jjn|d|j}
t&||	D ]\}}| '||j( q4d	}t|	sK|
rt|	dkretdd |	D re| d||j n?t|	t|kry| jd||jdd n+t|	t|k r| jd||jdd nt)d d |	D |||
d	ur|
nttj*t+}t,|d!d	}t,|d"d	}t-|j	|| .|j/||}t|j0t)r|j01 |_2|rd|_3|d	ur||_4||_5|jr3t6j7d#k r|}|t|j7 }n|jd j}t8|j	}d|_9|:| d|_;||_<|:||j|| |j/:| t=|| |j|}|jd }|:|j|j|| |}n|:||j|| |}| j >  |S )$zCHelper shared between visit_FunctionDef and visit_AsyncFunctionDef.r  c                 s  s    | ]}t |V  qd S r  )r  )r   dr   r   r   r  X  s    z+ASTConverter.do_func_def.<locals>.<genexpr>)r
  Tc                 S     g | ]}|j qS r   )r~   r   argr   r   r   r   a      z,ASTConverter.do_func_def.<locals>.<listcomp>c                 S  s   g | ]}|j r	d n|jjqS r  )pos_onlyvariablerx  r  r   r   r   r   b  s    Nz<func_type>	func_typery   r   c                 S  s&   g | ]}|j d ur|j nttjqS r  )type_annotationrj   rt   unannotatedr   ar   r   r   r   s  s    
c                 s  s    | ]}|j d uV  qd S r  r  r  r   r   r   r  {  r  )r   r   c                 S  "   g | ]}|d ur
|nt tjqS r  rj   rt   r  r  r   r   r   r     s    r   r   r   r   r   )(r   z.Suggestion: wrap argument types in parenthesesc                 S  r  r   r  r  r   r   r   r     r  c                 s  s    | ]}t |tV  qd S r  )r   rm   )r   tr   r   r   r    r  zIEllipses cannot accompany other argument types in function type signaturez%Type signature has too many argumentsF)r   z$Type signature has too few argumentsc                 S  r  r  r  r  r   r   r   r     s   " r0  r1  r{   )?r  r9  r	  rF  anyr   transform_argsargsri   rx  r  r}  r   r   r   r   argtypesast3_Ellipsisreturnsr   r   DUPLICATE_TYPE_SIGNATURESr2  r   r   r@  r   r  insertrj   rt   special_formr   r   r   r   r  
from_errorzipset_type_optionalinitializerrl   r  r   r*  r1   ru  r   r&  copy_modifiedunanalyzed_typer  
definitionr   r   r   rW   is_readyr5  is_decorated	deco_liner'   r{  )r  r.  r  r
  r   r  r  	arg_kinds	arg_names	arg_typesreturn_typefunc_type_asttranslated_argsr   r   arg_typer  r3  r4  func_defr  vardecofirstretvalr   r   r   r  R  s   


"

	




zASTConverter.do_func_defr&  Type | Noner  Expression | Nonec                 C  s8   | j jrd S t|to|jdk}t|tr||_d S d S )Nr  )r   no_implicit_optionalr   rA   rx  ru   optional)r  r&  r  r  r   r   r   r    s   

zASTConverter.set_type_optionalr  ast3.argumentsr
  list[Argument]c              
   C  s  g }g }t |dtttj g }||j }|j}t|t| }	t|d |	 D ]\}
}|
t|k }|	| 
|d t|| |	| q(tt||	d  |D ]\}
\}}|	|
 t|k }|	| 
||t|| |	| qO|jd ur|	| 
|jd t| |	|j t|j|jD ]\}}|	| 
|||d u rtnt| |	| q|jd ur|	| 
|jd t| |	|j tdd |D || j |S )Nposonlyargsc                 S  s   g | ]}|j jqS r   )r  rx  r  r   r   r   r     r   z/ASTConverter.transform_args.<locals>.<listcomp>)r*  r
   r   r   r  r  r   r}  	enumerater9  make_argumentr   r  r   varargr   
kwonlyargskw_defaultsr   r   kwargr   r\   fail_arg)r  r  r   r
  new_argsnamesr  	args_argsargs_defaultsnum_no_defaultsir  r  r  kdr   r   r   r    s:   
"

zASTConverter.transform_argsr  ast3.argdefaultast3.expr | Noner~   r   r  r   c           	      C  s   |rd }n0|j }|j}|d ur|d ur| tj|j|j d }|d ur/t| j|jd	|}n| 
||}t|jr<d}tt|j|| 	|||S )Nr  T)
annotationr   r   r   r  r   r2  r   r   r   rU  rh   r  r   rW   )	r  r  r  r~   r
  r  r  r  r   r   r   r   r    s   
zASTConverter.make_argumentc                 C  s   |  ||j|j d S r  )r   r   r2  )r  r   r  r   r   r   r  1  r  zASTConverter.fail_argast3.ClassDefr"   c                   s    j d  fdd|jD }t|j |j|jd  |j	t
|d|d} |j|_tjdk rD|jt|j |_|j|_n|j|_|jrQ|jd jnd |_|j|_t|dd |_t|d	d |_ j   |S )
Nr  c                   s$   g | ]}|j r|j  |jfqS r   )r  r   r  )r   kwr  r   r   r   ;  s   $ z/ASTConverter.visit_ClassDef.<locals>.<listcomp>	metaclass)r  keywordsr{   r   r0  r1  )r  r9  r  r"   rx  ru  r   r   r@  basesdictr'  rF  
decoratorsr   r   r}  r   r  r2  r   r*  r3  r4  r{  )r  r.  r  cdefr   r  r   visit_ClassDef9  s*   



zASTConverter.visit_ClassDefast3.ReturnrK   c                 C     t | |j}| ||S r  )rK   r   r  r5  r  r.  r  r   r   r   visit_ReturnU     zASTConverter.visit_Returnast3.Deleter(   c                 C  sT   t |jdkrt| |j}||j t|}n
t| |jd }| ||S )Nry   r   )r}  targetsrU   r@  r5  r   r(   r   )r  r.  tupr  r   r   r   visit_DeleteZ  s   
zASTConverter.visit_Deleteast3.Assignr   c                 C  sB   |  |j}| |j}| ||j}t|||dd}| ||S )NFr&  
new_syntax)r@  r  r   r  rU  r   r   r5  )r  r.  lvaluesrvaluer   sr   r   r   visit_Assignd  s
   zASTConverter.visit_Assignast3.AnnAssignc                 C  s   |j }|jd u rtttjdd}||_|j|_n| 	|j}t
| j|d	|j}|d us0J |jj|_t| 	|jg||dd}| ||S )NT)no_rhsr  r
  )r   r  rS   rj   rt   r  r   r2  r   r   r   r   r  r   targetr5  )r  r.  r   r  r   r  r   r   r   visit_AnnAssignl  s   


zASTConverter.visit_AnnAssignast3.AugAssignrD   c                 C  s0   t | |j| |j| |j}| ||S r  )rD   rf  r`  r   r  r  r5  r  r.  r  r   r   r   visit_AugAssign{  s   zASTConverter.visit_AugAssignast3.Forr0   c                 C  sR   |  ||j}t| |j| |j| |j|j| 	|j
|j|}| ||S r  )rU  r   r0   r   r  iterru  r   r   rt  orelser5  r  r.  target_typer  r   r   r   	visit_For  s   

zASTConverter.visit_Forast3.AsyncForc                 C  sX   |  ||j}t| |j| |j| |j|j| 	|j
|j|}d|_| ||S )NT)rU  r   r0   r   r  r  ru  r   r   rt  r  is_asyncr5  r  r   r   r   visit_AsyncFor  s   

zASTConverter.visit_AsyncFor
ast3.WhilerX   c                 C  s8   t | |j| |j|j| |j|j}| ||S r  )	rX   r   testru  r   r   rt  r  r5  r  r   r   r   visit_While  s   
zASTConverter.visit_Whileast3.Ifc                 C  s>   |j }t| |jg| |j|g| |j|}| ||S r  )	r   r4   r   r!  ru  r   rt  r  r5  )r  r.  r   r  r   r   r   visit_If  s   zASTConverter.visit_If	ast3.WithrY   c                   sT     ||j}t fdd|jD  fdd|jD  |j|j|} ||S )Nc                      g | ]}  |jqS r   r   context_exprr   r  r  r   r   r         z+ASTConverter.visit_With.<locals>.<listcomp>c                   r&  r   r   optional_varsr)  r  r   r   r     r*  )rU  r   rY   rz  ru  r   r   r5  r  r   r  r   
visit_With  s   zASTConverter.visit_Withast3.AsyncWithc                   sZ     ||j}t fdd|jD  fdd|jD  |j|j|}d|_ ||S )Nc                   r&  r   r'  r)  r  r   r   r     r*  z0ASTConverter.visit_AsyncWith.<locals>.<listcomp>c                   r&  r   r+  r)  r  r   r   r     r*  T)	rU  r   rY   rz  ru  r   r   r  r5  )r  r.  r  r  r   r  r   visit_AsyncWith  s   zASTConverter.visit_AsyncWith
ast3.RaiserI   c                 C  &   t | |j| |j}| ||S r  )rI   r   exccauser5  r  r   r   r   visit_Raise     zASTConverter.visit_Raiseast3.TryrT   c              
     s~    fdd|j D } fdd|j D } fdd|j D }t |j|j||| |j|j |j|j} ||S )Nc                   s,   g | ]}|j d ur t|j |nd qS r  )rx  r5  rA   r   hr  r   r   r     s     z*ASTConverter.visit_Try.<locals>.<listcomp>c                   r&  r   )r   r&  r7  r  r   r   r     r*  c                   s   g | ]
}  |j|jqS r   ru  r   r   r7  r  r   r   r         )	handlersrT   ru  r   r   rt  r  	finalbodyr5  )r  r.  vstypesr;  r  r   r  r   	visit_Try  s   
zASTConverter.visit_Tryast3.Assertr   c                 C  r1  r  )r   r   r!  r   r5  r  r   r   r   visit_Assert  r5  zASTConverter.visit_Assertast3.Importr5   c                 C  sh   g }|j D ]}| |j}|j}|d u r||jkr|j}|||f qt|}| j| | ||S r  )r  r  rx  asnamer9  r5   r  r5  )r  r.  r  aliasrx  rC  r  r   r   r   visit_Import  s   
zASTConverter.visit_Importast3.ImportFromr7   c                 C  s   |j d usJ t|jdkr'|jd jdkr'|jd ur|jnd}t||j }nt|jd ur3| |jnd|j dd |jD }| j	| | 
||S )Nry   r   rX  r   c                 S  s   g | ]}|j |jfqS r   )rx  rC  r  r   r   r   r     r*  z1ASTConverter.visit_ImportFrom.<locals>.<listcomp>)levelr}  r  rx  r   r6   r8   r  r  r9  r5  )r  r.  r  r  r   r   r   visit_ImportFrom  s   zASTConverter.visit_ImportFromast3.Globalr3   c                 C     t |j}| ||S r  )r3   r  r5  )r  r.  gr   r   r   visit_Global      
zASTConverter.visit_Globalast3.NonlocalrC   c                 C  rJ  r  )rC   r  r5  )r  r.  r  r   r   r   visit_Nonlocal  rM  zASTConverter.visit_Nonlocal	ast3.Exprr-   c                 C      |  |j}t|}| ||S r  )r   r  r-   r5  )r  r.  r  r  r   r   r   
visit_Expr
     zASTConverter.visit_Expr	ast3.PassrH   c                 C     t  }| ||S r  )rH   r5  r  r   r   r   
visit_Pass     zASTConverter.visit_Pass
ast3.Breakr   c                 C  rU  r  )r   r5  r  r   r   r   visit_Break  rW  zASTConverter.visit_Breakast3.Continuer&   c                 C  rU  r  )r&   r5  r  r   r   r   visit_Continue  rW  zASTConverter.visit_Continue	NamedExprr   c                 C  r1  r  )r   r   r  r  r5  r  r   r   r   visit_NamedExpr   r5  zASTConverter.visit_NamedExprast3.BoolOprE   c                 C  sf   t |jdks	J |j}t|tjrd}nt|tjrd}n
tdtt	| | 
|| |j|S )Nr   andorzunknown BoolOp )r}  valuesr`  r   r   AndOrrc  r   r&  r   r@  )r  r.  op_noder`  r   r   r   visit_BoolOp%  s   zASTConverter.visit_BoolOpvalsr  c              	   C  sP   t |dkrt||d |d }nt||d | ||dd  |}| ||S )Nr   r   ry   )r}  rE   r   r5  )r  r`  rf  r.  r   r   r   r   r   3  s   "zASTConverter.group
ast3.BinOpc                 C  sR   |  |j}|d u rtdtt|j t|| |j| |j}| 	||S )Nzcannot translate BinOp )
rf  r`  rc  r   r&  rE   r   leftrightr5  r  r.  r`  r   r   r   r   visit_BinOp;  s
   zASTConverter.visit_BinOpast3.UnaryOprV   c                 C  s   d }t |jtjrd}nt |jtjrd}nt |jtjr d}n	t |jtjr)d}|d u r8tdtt	|j t
|| |j}| ||S )N~notrV  rW  zcannot translate UnaryOp )r   r`  r   InvertNotUAddr   rc  r   r&  rV   r   operandr5  rj  r   r   r   visit_UnaryOpE  s   zASTConverter.visit_UnaryOpast3.Lambdar;   c                 C  sV   t |j}|jj|_|jj|_t| |j|j| |g|j}|	|j|j |S r  )
r   Returnr   r   r2  r;   r  r  ru  r5  )r  r.  r   r   r   r   r   visit_LambdaW  s   

zASTConverter.visit_Lambda
ast3.IfExpr%   c                 C  s0   t | |j| |j| |j}| ||S r  )r%   r   r!  r   r  r5  r  r.  r   r   r   r   visit_IfExpc  s   $zASTConverter.visit_IfExp	ast3.Dictr)   c                 C  s.   t tt| |j| |j}| ||S r  )r)   listr  r<  keysr@  ra  r5  rx  r   r   r   
visit_Dicth  s   zASTConverter.visit_Dictast3.SetrM   c                 C  r  r  )rM   r@  eltsr5  rx  r   r   r   	visit_Seto  r  zASTConverter.visit_Setast3.ListCompr<   c                 C  "   t | ttj|}| ||S r  )r<   visit_GeneratorExpr
   r   GeneratorExpr5  rx  r   r   r   visit_ListCompt     zASTConverter.visit_ListCompast3.SetComprL   c                 C  r  r  )rL   r  r
   r   r  r5  rx  r   r   r   visit_SetCompy  r  zASTConverter.visit_SetCompast3.DictCompr*   c                   sz    fdd|j D } fdd|j D } fdd|j D }dd |j D }t |j |j||||} ||S )Nc                   r&  r   r   r  r   cr  r   r   r     r*  z/ASTConverter.visit_DictComp.<locals>.<listcomp>c                   r&  r   r   r  r  r  r   r   r     r*  c                   r&  r   r@  ifsr  r  r   r   r     r*  c                 S     g | ]}t |jqS r   r	  r  r  r   r   r   r         )
generatorsr*   r   keyr  r5  r  r.  r  itersifs_listr  r   r   r  r   visit_DictComp~  s   zASTConverter.visit_DictCompast3.GeneratorExpr2   c                   sp    fdd|j D } fdd|j D } fdd|j D }dd |j D }t |j||||} ||S )Nc                   r&  r   r  r  r  r   r   r     r*  z3ASTConverter.visit_GeneratorExp.<locals>.<listcomp>c                   r&  r   r  r  r  r   r   r     r*  c                   r&  r   r  r  r  r   r   r     r*  c                 S  r  r   r  r  r   r   r   r     r  )r  r2   r   eltr5  r  r   r  r   r    s   zASTConverter.visit_GeneratorExp
ast3.Awaitr   c                 C  rQ  r  )r   r  r   r5  )r  r.  vr   r   r   r   visit_Await  rS  zASTConverter.visit_Await
ast3.YieldrZ   c                 C  r  r  )rZ   r   r  r5  rx  r   r   r   visit_Yield  r  zASTConverter.visit_Yieldast3.YieldFromr[   c                 C  r  r  )r[   r   r  r5  rx  r   r   r   visit_YieldFrom  r  zASTConverter.visit_YieldFromast3.Comparer#   c                   s>    fdd|j D } |jg|j }t||} ||S )Nc                      g | ]}  |qS r   )rn  )r   or  r   r   r     r  z.ASTConverter.visit_Compare.<locals>.<listcomp>)opsr@  rh  comparatorsr#   r5  )r  r.  	operatorsoperandsr   r   r  r   visit_Compare  s   
zASTConverter.visit_Comparer   r!   c              	   C  s   |j }|j}dd |D }| dd |D dd |D  }dd |D dd |D  }t| |j||tdd gt| | }| ||S )Nc                 S  r  r   )r  r   kr   r   r   r     r  z+ASTConverter.visit_Call.<locals>.<listcomp>c                 S  s    g | ]}t |tr|jn|qS r   )r   r   r  r  r   r   r   r          c                 S  r  r   )r  r  r   r   r   r     r  c                 S  s    g | ]}t |tu rtntqS r   )r&  r   r   r   r  r   r   r   r     r  c                 S  s   g | ]
}|d u r
t ntqS r  )r   r   r  r   r   r   r     s    zList[Optional[str]])	r  r  r@  r!   r   funcr
   r}  r5  )r  r.  r  r  keyword_namesr  r  r   r   r   r   
visit_Call  s    
zASTConverter.visit_CallConstantc                 C  s   |j }d }|d u rtd}nTt|trt|j}nIt|tr&tt|j}n<t|t	r2tt|}n0t|t
r<t|}n&t|trFt|}nt|trPt|}n|tu rXt }n
tdtt| | ||S )Nr  zConstant not implemented for )r  rA   r   r   rQ   r  bytesr    rw   r	  r   r:   floatr/   complexr$   r   r+   rc  r&  r5  r  r.  valr   r   r   r   visit_Constant  s(   









zASTConverter.visit_Constantast3.Num!IntExpr | FloatExpr | ComplexExprc                 C  sb   |j }t|trt|}nt|trt|}nt|tr!t|}n
tdt	t
| | ||S )Nznum not implemented for )r.  r   r   r:   r  r/   r  r$   rc  r   r&  r5  r  r   r   r   	visit_Num  s   





zASTConverter.visit_Numr   rQ   c                 C  rJ  r  )rQ   r  r5  rx  r   r   r   	visit_Str  rM  zASTConverter.visit_Strast3.JoinedStrr,   c                 C  s   t d}||j|j t| |j}|| t|jdkr)| |jd |S t	|d}|| t
||gtgd g}| ||S )Nr   ry   r   join)rQ   r5  r   r2  r=   r@  ra  r}  rz  r?   r!   r   )r  r.  empty_stringstrs_to_joinjoin_methodresult_expressionr   r   r   visit_JoinedStr  s   


zASTConverter.visit_JoinedStrast3.FormattedValuec                 C  s   |  |j}||j|j |jd u s|jdk rdndt|j }td| d }|jd ur4|  |jntd}||j|j t	|d}|| t
|||gttgd d g}| ||S )Nr   r   !{z:{}}format)r   r  r5  r   r2  
conversionchrrQ   format_specr?   r!   r   )r  r.  val_expconv_strformat_stringformat_spec_expformat_methodr  r   r   r   visit_FormattedValue  s   &

z!ASTConverter.visit_FormattedValue
ast3.BytesBytesExpr | StrExprc                 C     t t|j}| ||S r  )r    rw   r  r5  rx  r   r   r   visit_Bytes     zASTConverter.visit_Bytesr   rA   c                 C  r  r  )rA   r   r  r5  rx  r   r   r   visit_NameConstant  r  zASTConverter.visit_NameConstantr  r+   c                 C  rU  r  )r+   r5  rx  r   r   r   visit_Ellipsis  rW  zASTConverter.visit_Ellipsisr   MemberExpr | SuperExprc                 C  s^   |j }t| ||j}|j}t|tr't|jtr'|jj	dkr't
|j	|}n|}| ||S )Nsuper)r  r?   r   r  r  r   r!   calleerA   rx  rR   r5  )r  r.  r  member_exprobjr   r   r   r   visit_Attribute  s   
zASTConverter.visit_Attributeast3.Subscriptr9   c                 C  sh   t | |j| |j}| || tjdk }t|jtj	s(|r2t|jtj
r2|j|j_|j|j_|S )Nr   )r9   r   r  slicer5  r   r   r   r   SliceExtSlicer   indexr   )r  r.  r   r   r   r   r   visit_Subscript,  s   


zASTConverter.visit_Subscriptr   rO   c                 C  r  r  )rO   r   r  r5  rx  r   r   r   visit_Starred=  r  zASTConverter.visit_Starredr   c                 C  rJ  r  )rA   r  r5  rx  r   r   r   
visit_NameB  rM  zASTConverter.visit_Name	ast3.ListListExpr | TupleExprc                   s@    fdd|j D }t|jtjrt|}nt|} ||S )Nc                   r  r   r   r   r   r  r   r   r   H  r  z+ASTConverter.visit_List.<locals>.<listcomp>)r  r   ctxr   StorerU   r=   r5  )r  r.  	expr_listr   r   r  r   
visit_ListG  s
   
zASTConverter.visit_List
ast3.TuplerU   c                 C  r  r  )rU   r@  r  r5  rx  r   r   r   visit_TupleQ  r  zASTConverter.visit_Tuple
ast3.SlicerN   c                 C  s$   t | |j| |j| |jS r  )rN   r   lowerupperstepr  r   r   r   visit_SliceX  s   $zASTConverter.visit_Sliceast3.ExtSlicec                 C  s   t | tt|jS r  )rU   r@  r
   r   dimsr  r   r   r   visit_ExtSlice\  s   zASTConverter.visit_ExtSlicer   rB   c                 C     |  tt|jS r  r   r
   r   r  r  r   r   r   visit_Indexa     zASTConverter.visit_IndexMatchr>   c                   sT   t  jfdd jD fdd jD  fdd jD }| S )Nc                   r&  r   )r   patternr  r  r   r   r   i  r*  z,ASTConverter.visit_Match.<locals>.<listcomp>c                   r&  r   )r   guardr  r  r   r   r   j  r*  c                   s   g | ]
} |j jqS r   r9  r  r.  r  r   r   r   k  r:  )r>   r   subjectcasesr5  r  r   r  r   visit_Matchf  s   
zASTConverter.visit_Match
MatchValuere   c                 C  r  r  )re   r   r  r5  r  r   r   r   visit_MatchValueo  r  zASTConverter.visit_MatchValueMatchSingletonrc   c                 C  rJ  r  )rc   r  r5  r  r   r   r   visit_MatchSingletons  rM  z!ASTConverter.visit_MatchSingletonMatchSequencerb   c                   sF    fdd|j D }dd |D }t|dk sJ t|} ||S )Nc                   r  r   r  r   pr  r   r   r   x  r  z4ASTConverter.visit_MatchSequence.<locals>.<listcomp>c                 S  s   g | ]	}t |tr|qS r   )r   rd   r  r   r   r   r   y  s    r   )patternsr}  rb   r5  )r  r.  r  starsr  r   r  r   visit_MatchSequencew  s
   z ASTConverter.visit_MatchSequence	MatchStarrd   c                 C  s.   |j d u r
td }ntt|j }| ||S r  )rx  rd   rA   r5  r  r   r   r   visit_MatchStar  s   

zASTConverter.visit_MatchStarMatchMappingr`   c                   sZ    fdd|j D } fdd|jD }|jd u rd }nt|j}t|||} ||S )Nc                   r  r   r  r  r  r   r   r     r  z3ASTConverter.visit_MatchMapping.<locals>.<listcomp>c                   r  r   r  )r   r  r  r   r   r     r  )r|  r  restrA   r`   r5  )r  r.  r|  ra  r  r  r   r  r   visit_MatchMapping  s   

zASTConverter.visit_MatchMapping
MatchClassr_   c                   sb     |j}t|tsJ  fdd|jD }|j} fdd|jD }t||||} ||S )Nc                   r  r   r  r  r  r   r   r     r  z1ASTConverter.visit_MatchClass.<locals>.<listcomp>c                   r  r   r  r  r  r   r   r     r  )	r   clsr   rJ   r  	kwd_attrskwd_patternsr_   r5  )r  r.  	class_refpositionalskeyword_keyskeyword_valuesr  r   r  r   visit_MatchClass  s   zASTConverter.visit_MatchClassMatchAsr^   c                 C  sD   |j d u rd }nt|j }| ||}t| |j|}| ||S r  )rx  rA   r5  r^   r   r  )r  r.  rx  r  r   r   r   visit_MatchAs  s   

zASTConverter.visit_MatchAsMatchOrra   c                   s$   t  fdd|jD } ||S )Nc                   r  r   r  )r   r  r  r   r   r     r  z.ASTConverter.visit_MatchOr.<locals>.<listcomp>)ra   r  r5  r  r   r  r   visit_MatchOr  s   zASTConverter.visit_MatchOr)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  r4   r   r  )r  r$  r   r   )r  r   r.  r/  r   r   )r6  r7  r   r8  )r6  r=  r   r>  )r  rB  r   r   )F)rH  rI  rJ  r	  r   rK  )r.  rS  r   r   r   rT  )r`  ra  r   r   )r`  rm  r   r   )rH  ro  r   r   r   rp  )rH  ro  r   r   r   r   )rH  rK  r   rK  r  )rR  r4   r  r   r   r   )rR  r4   r   r  )rR  r4   r   r  )rR  rP   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  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   rK   )r.  r  r   r(   )r.  r	  r   r   )r.  r  r   r   )r.  r  r   rD   )r.  r  r   r0   )r.  r  r   r0   )r.  r   r   rX   )r.  r#  r   r4   )r.  r%  r   rY   )r.  r.  r   rY   )r.  r0  r   rI   )r.  r6  r   rT   )r.  r@  r   r   )r.  rB  r   r5   )r.  rF  r   r7   )r.  rI  r   r3   )r.  rN  r   rC   )r.  rP  r   r-   )r.  rT  r   rH   )r.  rX  r   r   )r.  rZ  r   r&   )r.  r\  r   r   )r.  r^  r   rE   )r`  r   rf  r>  r.  r  r   rE   )r.  rg  r   rE   )r.  rl  r   rV   )r.  rt  r   r;   )r.  rw  r   r%   )r.  rz  r   r)   )r.  r~  r   rM   )r.  r  r   r<   )r.  r  r   rL   )r.  r  r   r*   )r.  r  r   r2   )r.  r  r   r   )r.  r  r   rZ   )r.  r  r   r[   )r.  r  r   r#   )r.  r   r   r!   )r.  r  r   r   )r.  r  r   r  )r.  r   r   rQ   )r.  r  r   r,   )r.  r  r   r,   )r.  r  r   r  )r.  r   r   rA   )r.  r  r   r+   )r.  r   r   r  )r.  r  r   r9   )r.  r   r   rO   )r.  r   r   rA   )r.  r  r   r  )r.  r  r   rU   )r.  r  r   rN   )r.  r  r   rU   )r.  r   r   rB   )r.  r  r   r>   )r.  r  r   re   )r.  r  r   rc   )r.  r  r   rb   )r.  r  r   rd   )r.  r  r   r`   )r.  r  r   r_   )r.  r  r   r^   )r.  r  r   ra   )r)  
__module____qualname__r  r  r   r   r   r#  r   r5  r<  r@  rG  rP  rU  r   AddSubMultMatMultDivModPowLShiftRShiftBitOrBitXorBitAndFloorDivr_  __annotations__rf  GtLtEqGtELtENotEqIsIsNotInNotInrl  rn  rt  ru  rO  rv  rw  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r$  r-  r/  r4  r?  rA  rE  rH  rL  rO  rR  rV  rY  r[  r]  re  r   rk  rs  rv  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  r  r  r   r  r  r
  r  r  r  r  r  r   r   r   r   r     s  
 		 +  	2
	

	
	
r   c                   @  s@  e Zd Z			djdkddZdlddZdmdnddZedoddZedpddZdpd dZdqd!d"Zdrd%d&Z	drd'd(Z
dsd,d-Zdtd1d2Zdud4d5Zdvd7d8Zdwd:d;Zdxd=d>Zdyd@dAZdzdCdDZd{dFdGZd|dJdKZd}dMdNZd~dPdQZddSdTZddVdWZddYdZZdd\d]Zdd_d`ZddbdcZddedfZddhdiZdS )r   r   Tr   r   r   r   r   r   r	  r   r  c                 C  s"   || _ || _|| _g | _|| _d S r  )r   r   r   
node_stackr   )r  r   r   r   r   r   r   r   r    s
   
zTypeConverter.__init__r   c                 C  s   | j dk r|S | j S )zApply column override if defined; otherwise return column.

        Column numbers are sometimes incorrect in the AST and the column
        override can be used to work around that.
        r   )r   )r  r   r   r   r   convert_column  s   
zTypeConverter.convert_columnNr  r   r  r   rp   c                 C  s   t dd| jt|dd|dS )a  Constructs a type representing some expression that normally forms an invalid type.
        For example, if we see a type hint that says "3 + 4", we would transform that
        expression into a RawExpressionType.

        The semantic analysis layer will report an "Invalid type" error when it
        encounters this type, along with the given note if one is provided.

        See RawExpressionType's docstring for more details on how it's used.
        Nz
typing.Anyr2  r   )r   r   r  )rp   r   r*  )r  r  r  r   r   r   invalid_type  s   
zTypeConverter.invalid_typer  ro   c                 C     d S r  r   r"  r   r   r   r        zTypeConverter.visitr$  rT  c                 C  r;  r  r   r"  r   r   r   r     r<  c                 C  sp   |du rdS | j | z%d|jj }t| |d}|dur'||W | j   S | |W | j   S | j   w )z2Modified visit -- keep track of the stack of nodesNr%  )r8  r9  r(  r)  r*  r{  r:  )r  r  r-  r,  r   r   r   r     s   
c                 C  s   t | jdk r	dS | jd S )z3Return the AST node above the one we are processingr   Nr  )r}  r8  r  r   r   r   parent  s   
zTypeConverter.parentr   r   c                 C  &   | j r| j j|||dtjd d S d S )NTr   r  r  r   r   r   r        zTypeConverter.failc                 C  r>  r  r  r  r   r   r   r    r?  zTypeConverter.noter6  Sequence[ast3.expr]
list[Type]c                   s    fdd|D S )Nc                   r  r   r  r  r  r   r   r     r  z5TypeConverter.translate_expr_list.<locals>.<listcomp>r   r?  r   r  r   r@    s   z!TypeConverter.translate_expr_listr   r   rr   c                 C  s  |j }t|}t|  tjsd }|rd|}| j||dS |s*| d|j	|j
 d }ttj}|}t|jD ])\}}	|dkrN| |	}
|
d usKJ |
}q8|dkrX| |	}q8| d|j	|j
 q8|jD ]Q}|j}|jdkr|d ur| d||j	|j
 | |}qe|jd	kr||ur| d
||j	|j
 | |}
|
d usJ |
}qe| d|j d|j	|j
 qet||||j	|j
S )Nz,Suggestion: use {0}[...] instead of {0}(...)r  zExpected arg constructor namer   ry   z+Too many arguments for argument constructorrx  z5"{}" gets multiple values for keyword argument "name"r&  z5"{}" gets multiple values for keyword argument "type"zUnexpected argument "z" for argument constructor)r  stringify_namer   r=  r   r   r  r:  r   r   r2  rj   rt   r  r  r  r   _extract_argument_namer  r  r  rk   )r  r   fconstructorr  rx  default_typer   r  r  r   r  r  r   r   r   r    sd   






zTypeConverter.visit_Callrs   c                   s   t  fdd|D  jdS )Nc                   r  r   r  r  r  r   r   r   6  r  z9TypeConverter.translate_argument_list.<locals>.<listcomp>r  )rs   r   r?  r   r  r   translate_argument_list5  r  z%TypeConverter.translate_argument_listr.  c                 C  sP   t |tr
|j S t |trt|jdkrd S | dt|j	 | j
d d S )Nr  z/Expected string literal for argument name, got r   )r   r   r  r   r   r   r  r   r&  r)  r   r  r   r   r   rD  8  s   

z$TypeConverter._extract_argument_namer   c                 C  s   t |j| j| |jdS )Nr   r   )ru   r  r   r9  r2  r  r   r   r   r  B  s   zTypeConverter.visit_Namerg  c                 C  sR   t |jtjs| |S | |j}| |j}t||g| j	| 
|j| jddS )NT)r   r   r   uses_pep604_syntax)r   r`  r   r)  r:  r   rh  ri  rv   r   r9  r2  r   )r  r.  rh  ri  r   r   r   rk  E  s   

zTypeConverter.visit_BinOpr   c                 C  s6   t |jtrt|jd| jdS tt|j| j|jdS )Nbuiltins.boolr  rI  )r   r  r	  rp   r   ru   r   r2  r  r   r   r   r  S  s   z TypeConverter.visit_NameConstantr  c                 C  s   |j }|d u rtd| jdS t|trt|jd| j|jS |tu r't	| jdS t|t
r4t|d| jdS t|tttfrB| ||S t|trUt|}t|d| j|jdS | |S )Nr  r  builtins.strrK  builtins.bytesr   )r  ru   r   r   r   r  r  r2  r   rm   r	  rp   r   r  r  numeric_typer  rw   r:  )r  r.  r  contentsr   r   r   r  Z  s   



zTypeConverter.visit_Constantr   c                 C  sJ   |  |j}t|tr t|jtr t|jtr | jd9  _|S | |S )Nr   )	r   rr  r   rp   r`  r   literal_valuer   r:  )r  r.  r   r   r   r   rs  q  s   
zTypeConverter.visit_UnaryOpr  objectc                 C  sB   t |tr
|}d}n
d }dt|j }t||| jt|dddS )Nzbuiltins.intz	builtins.r2  r   rI  )r   r   r&  r)  rp   r   r*  )r  r  r.  numeric_value	type_namer   r   r   rO  {  s   
zTypeConverter.numeric_typer   c                 C  s   |  |j|S r  )rO  r.  r  r   r   r   r    r  zTypeConverter.visit_Numr   c                 C  s   t |jd| j|jS )NrL  )r  r  r   r2  r  r   r   r   r    rA  zTypeConverter.visit_Strr   c                 C  s   t |j}t|d| j|jdS )NrM  rN  )rw   r  rp   r   r2  )r  r.  rP  r   r   r   r    s   
zTypeConverter.visit_Bytes
ast3.Indexc                 C  r  r  r  r  r   r   r   r    r  zTypeConverter.visit_Indexr  c                 C  r  )Nz(did you mean to use ',' instead of ':' ?rB  )r:  r  r   r   r   r    r  zTypeConverter.visit_Slicer  c                 C  sP  t jdkr	|j}nbt|jtjr|jj}nVt|jtjr0t	|j}t
|dd d u r/|jj|_n;t|jtjs9J t	|jj}|D ]!}t
|dd d u rct|tjrX|jj|_qBt|tjrc|jj|_qBt||j}d}t|tjr| |j}t|jdkrd}n| |g}| |j}t|tr|jst|j|| j|j|dS | |S )Nr   r2  Fr   T)r   r   empty_tuple_index)r   r   r  r   r   r   r  r  copydeepcopyr*  r  r2  r  r  Tupler  r@  r  r}  r   ru   r  rx  r   r   r:  )r  r.  slicevalr  r  rV  paramsr  r   r   r   r    sH   




zTypeConverter.visit_Subscriptr  c                 C  s$   t | |jtd| j| |jdS )NT)implicitr   r   )rq   r@  r  r   r   r9  r2  r  r   r   r   r    s   

zTypeConverter.visit_Tupler   c                 C  sB   |  |j}t|tr|jst|j d|j | jdS | |S )Nr   r  )	r   r  r   ru   r  rx  r  r   r:  )r  r.  
before_dotr   r   r   r    s   
zTypeConverter.visit_Attributer  c                 C  s   t | jdS )Nr  )rm   r   r  r   r   r   r    s   zTypeConverter.visit_Ellipsisr  c                 C  s   t |jtjs	J | |jS r  )r   r  r   LoadrH  r  r  r   r   r   r    s   zTypeConverter.visit_List)r   r   T)
r   r   r   r   r   r   r   r	  r   r  )r   r   r   r   r  )r  r   r  r   r   rp   )r  r  r   ro   )r  r$  r   rT  )r   r$  r  )r6  r@  r   rA  )r   r   r   rr   )r6  r@  r   rs   )r.  r  r   r   )r.  r   r   rr   )r.  rg  r   rr   )r.  r   r   rr   )r.  r  r   rr   )r.  r   r   rr   )r  rR  r.  r   r   rr   )r.  r   r   rr   )r.  r   r   rr   )r.  r   r   rr   )r.  rU  r   rr   )r.  r  r   rr   )r.  r  r   rr   )r.  r  r   rr   )r.  r   r   rr   )r.  r  r   rr   )r.  r  r   rr   )r)  r  r  r  r9  r:  r   r   r=  r   r  r@  r  rH  rD  r  rk  r  r  rs  rO  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r     sF    







9















*


	r   r.  c                 C  s@   t | tr| jS t | trt| j}|d ur| d| j S d S )Nr   )r   r   r  r   rC  r  r  )r.  svr   r   r   rC    s   


rC  )
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   r   r   r   )
r   r   r   r   r   r   r   r   r   ro   )r  r  r   r	  )r.  r   r   r   )
__future__r   rW  r   r   r   r  r   r   r   r   r   r   r	   r
   typing_extensionsr   r   r   mypyr   r   r   r   mypy.errorsr   
mypy.nodesr   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   mypy.optionsr]   mypy.patternsr^   r_   r`   ra   rb   rc   rd   re   mypy.reachabilityrf   rg   mypy.sharedparserh   ri   
mypy.typesrj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   	mypy.utilrw   rx   r   rz   r-  r   r   r  _fieldsversionr   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r\  	typed_asttyped_ast.ast3r  r  r  r  r  r  r  r  r  r  rR  r  ExceptHandlerr/  ImportErrorr   printstderrexitr   r   r   r   r   compiler   r   r   r   r  r  r   r   rC  r   r   r   r   <module>   s    (6 M(
<DD

@

%
	          (  B