o
    7fB                    @  sn  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mZ d dlmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZm Z m!Z!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`maZambZbmcZcmdZdmeZemfZfmgZg d d	lhmiZi d d
ljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZr d dlsmtZtmuZu d dlvmwZwmxZx d dlymzZz d dl{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ ejd Zded< d dlZd dlmZmZmZmZmZmZmZmZmZmZ efdXddZejZejZejdkryejZneZejd krejZejZejZejZejZejZejZejZejZeejejejejf ZneZeZeZeZeZeZeZeZeZeejejejf Zejd!krejZneZed"eMd#Ze9d$Zded%< eeg d&Zded'< ed(Zded)< 	dYdZd2d3Zd[d6d7Zd\d=d>Zd]dBdCZd^dGdHZG dIdJ dJZG dKdL dLZd_dNdOZG dPdQ dQezZG dRdS dSezZd`dVdWZdS )a    )annotationsN)	AnyCallableFinalListOptionalSequenceTypeVarUnioncast)Literaloverload)defaults
errorcodesmessage_registry)Errors)ErrorMessage)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)TraverserVisitor)AnyTypeCallableArgumentCallableTypeEllipsisTypeInstance
ProperTypeRawExpressionType	TupleTypeTypeTypeList	TypeOfAnyUnboundType	UnionType
UnpackType)bytes_to_human_readable_reprunnamed_function   r   PY_MINOR_VERSION)
AST	AttributeCallFunctionTypeIndexNameStarredUAdd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   G/home/ertert/spirit/venv/lib/python3.10/site-packages/mypy/fastparse.py
ast3_parse   s   r         )r   
   )r      N)boundz*fallback can't be filled out until semanalMISSING_FALLBACK_dummy_fallbackz[^#]*#\s*type:\s*ignore\s*(.*)TYPE_IGNORE_PATTERNfnammodule
str | Noneerrorsr   optionsOptions | NonerA   c              
   C  s  |dur|j p||jv }|o|du p|j }|du rt }|j|||d |d}|rEtjd }|jd dkrD|jd |krD|jd }n|jd dksNJ |jd }z1t	
  t	jdtd t| |d	|d
}	W d   n1 srw   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 t|
tsJ |
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.
    N)r   z.pyir|   r   r   ignore)categoryexec)r   )r   is_stubr   strip_function_bodiespathr   	   z	<fstring>zinvalid syntax.z+; you likely need to run mypy using Python z	 or newerr   TblockercodeF)ignore_errorsignored_filespreserve_astsr^   set_fileendswithr   PYTHON3_VERSIONpython_versionwarningscatch_warningsfilterwarningsDeprecationWarningr   ASTConvertervisitSyntaxErrorsysversion_infor   linenomsgminor
startswithreportoffsetcodesSYNTAXrA   
isinstance)r   r   r   r   r   r   r   is_stub_filer   asttreeeis_py38_or_earliermessagepython_version_strr   r   r   r      sb   





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>      z)parse_type_ignore_tag.<locals>.<listcomp>r|   ,)r   r   rematchgroupsplit)r   mr   r   r   parse_type_ignore_tag   s   r   type_commentlinecolumnErrors | None*tuple[list[str] | None, ProperType | None]c              
   C  s   zt | dd}W n+ ty3   |dur2| ddd  }tj|}|j|||jd|j	d Y d	S  w t
| }|r\|d
}t|}	|	du r[|durY|j||tjjtjd ntnd}	t|tjsfJ 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   NNr|   r   F)r   override_columnis_evaluated)r   r   r   r   r   TYPE_COMMENT_SYNTAX_ERROR_VALUEformatr   valuer   r   r   r   r   INVALID_TYPE_IGNOREr   r   r   r   r-   TypeConverterr   body)r   r   r   r   typstripped_typeerr_msgextra_ignorer   ignored	convertedr   r   r   parse_type_comment  s:   
	
r   expr_stringexpr_fallback_namerq   c              	   C  s   z1t d|  d||dd\}}t|tr"|jdu r"| |_||_|W S t|tr*|W S t| |||W S  ttfyC   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   rw   original_str_exproriginal_str_fallbackrx   rr   r   
ValueError)r   r   r   r   _noder   r   r   parse_type_string8  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   r   attr)r  r   r   r   is_no_type_check_decoratorP  s   


r  c                   @  s  e Zd ZU dddZdddZddddZdddZddd Zdd$d%Zdd)d*Z	dd-d.Z
dd0d1Zd2d2d2d3dd:d;Zdd@dAZejdBejdCejdDejdEejdFejdGejdHejdIejdJejdKejdLejdMejdNiZdOedP< ddSdTZejdUej dVej!dWej"dXej#dYej$dZej%d[ej&d\ej'd]ej(d^i
Z)dOed_< ddadbZ*ddedfZ+ddidjZ,d2d2dkddldmZ-ddndoZ.	pdddsdtZ/ddvdwZ0ddxdyZ1dd{d|Z2dd~dZ3dddZ4dddZ5dddZ6	2ddddZ7dddZ8	2ddddZ9	2ddddZ:dddZ;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dՐd dZSd֐ddZTdאdd	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/d0Z_dd3d4Z`dd7d8Zadd;d<Zbdd?d@ZcddCdDZdddGdHZeddJdKZfddNdOZgddQdRZhddUdVZiddYdZZjdd]d^ZkddadbZlddedfZmddidjZnddmdnZoddpdqZpddtduZqddxdyZrdd|d}ZsdddZtddd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{dpS (  r   r   r^   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   r   r   type_ignoresvisitor_cache)selfr   r   r   r   r   r   r   r   __init__Z  s   

zASTConverter.__init__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  r     zASTConverter.noteTr   r   c                 C  sF   |s| j js!| j| j| j| j j | jj|||j||jd d S d S )Nr   )	r   r   r   set_file_ignored_linesr   r  r   r   r   )r  r   r   r   r   r   r   r   failu  s   zASTConverter.failr  r5   c                 C  s   | j tj|j|jdd d S )NFr   r   r   )r  r   FAILED_TO_MERGE_OVERLOADSr   r   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  r2  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-   r8  r  r2  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)ismodule	can_stripis_coroutinestmtsSequence[ast3.stmt]rD  rE  rF  list[Statement]c                C  s  |r[|r[| j r[t| j | |d k r[| j t| j  }|r2d|}| jtj|t| j ddd | jj	| jj
 t| j  tjj t| | |}| || t| |gS | j}|rs| jrst|dkrs|d dkrs|ssg S g }	|D ]}
| |
}|	| qw|r| jr|dd  ddgkrt|	rd}nt }|	D ]}|| |jrd} nq|r|d	 dkr|rt }|	D ]}|| |jrd} nq|rg S |	S )
Nr   z, Fr  r|   FCr   )r  minrC  joinr  r   "TYPE_IGNORE_WITH_ERRCODE_ON_MODULEr   r   used_ignored_linesfiler5  r   FILEr   r   fix_function_overloadstranslate_stmt_listset_block_linesrh   r  r   lenr   is_possible_trivial_bodyFindAttributeAssignacceptfound	FindYield)r  rG  rD  rE  rF  ignoresjoined_ignoresblockstackr6  stmtr  r(  syield_visitorr   r   r   rT    sv   





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   r.  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   ro  r#  r"  RuntimeErrorr   r  rp  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  rr  )NzUnknown comparison operator )r   r|  r#  r"  rs  r   rt  r   r   r   from_comp_operator(  rw  zASTConverter.from_comp_operatorbr   c                 C  sx   |d |d }}|j |_|j|_t|dd |_t|dd |_|js$d S |jd }t|t	t
fr:|j|_|j|_d S d S )Nr   r   r,  r-  )r   r   r.  r   r&  r/  r0  r   r   r(   rG   )r  r  rG  firstlast	new_firstr   r   r   rU  /  s   
zASTConverter.set_block_lineslist[ast3.stmt]Block | Nonec                 C  s,   d }|rt | | |}| || |S r  r   rS  rT  rU  )r  rG  r  r   r   r   as_block>  s
   zASTConverter.as_blockrE  rF  c                C  s2   |sJ t | | j|||d}| || |S )Nr  r  )r  rG  rE  rF  r  r   r   r   as_required_blockE  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sJ |
| |r+|
r+|
D ]}| | || qg }
t|dkr:||d  nt|dkrH|t| d}t |tr]t|js]|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   r|   )r   r5   _check_ifstmt_for_overloads'_get_executable_if_block_with_overloadsr(   r2   namer5  rG   extenditemsr  r   r   r   r
   pop_strip_contents_from_if_stmtrV  r{   )r  rG  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_stmtsr`  if_overload_nameif_block_with_overloadif_unknown_truth_valuepoppedif_stmtr   r   r   rS  Q  s   




















z#ASTConverter.fix_function_overloadsNr`  r  c                   s@  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
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   r|   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>)rV  r   r   r(   rG   r2   allr   r
   r  	else_bodyr5   r  )r  r`  r  overload_namer   r  r   r    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)rg   r   r  r   is_unreachabler   r5   r  r  r`  r   r   r   r  	  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.
        r|   r   N)rV  r   r  r   r5   r  r  r   r   r   r  )  s   z)ASTConverter._strip_contents_from_if_stmtrQ   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
        Fr|   r   T)r   r5   rV  r   r  r  r  r   r   r   r  7  s   
"z!ASTConverter._is_stripped_if_stmtr	  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_idJ  s   z ASTConverter.translate_module_idmodast3.ModulerA   c                 C  s   i | _ |j D ]}t|j}|d ur|| j |j< q| jtj|jddd q| | j|j	dd}t
|| jd| j d}| j|_| j|_|S )Nr   Fr   T)rD  )ignored_lines)r  r   r   r   r  r   r   rS  rT  r   rA   r  r   r   )r  r  tiparsedr   r  r   r   r   visit_ModuleP  s   

zASTConverter.visit_Moduleast3.FunctionDefFuncDef | Decoratorc                 C  s
   |  |S r  do_func_defr  r*  r   r   r   visit_FunctionDefe     
zASTConverter.visit_FunctionDefast3.AsyncFunctionDefc                 C     | j |ddS )NT)rF  r  r  r   r   r   visit_AsyncFunctionDefj     z#ASTConverter.visit_AsyncFunctionDef(ast3.FunctionDef | ast3.AsyncFunctionDefc                 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 }	|rKd	gt| }	d	}
n|jd	ur'zt|jd
d}t|ts`J t|jdkrt|jd tr|jd jtu r|jr| tj||j dd |D }	n+|jstdd |D r| tj||j t| j||jd|j}tttt  |}	t| j|d |j}
| j dd	 ddgk}|rt|	t|k r|	!dt"t#j$ W n t%y&   |j&ddd ' }tj()|}| |||j |jr|jd dvr| *d||j t"t#j+gt| }	t"t#j+}
Y n;w t,j-dkrG|j.rG| jt/dt0j1d|j.d j|j.d jdd dd |D }	t| j|jrY|jjn|d |j}
t2||	D ]\}}| 3||j4 qfd	}t|	s}|
rt|	dkrtdd |	D r| tj5||j nAt|	t|kr| jtj6||jdd n,t|	t|k r| jtj7||jdd nt8dd |	D |||
d	ur|
nt"t#j9t:}t;|d d	}t;|d!d	}| j <  | j d" | j=|j>d|d#}t?|j	|||}t|j@t8r|j@A |_B|rd|_C|d	ur||_D||_E|jra|jd j}tF|j	}d|_G|H| d|_I||_J|H||j|| tK|| |j|}|jd }|H|j|j|| |}n|H||j|| |}| jLjMrytNjO|dd$|_P| j <  |S )%zCHelper shared between visit_FunctionDef and visit_AsyncFunctionDef.Dc                 s  s    | ]}t |V  qd S r  )r  )r   dr   r   r   r  s  s    z+ASTConverter.do_func_def.<locals>.<genexpr>)r  Tc                 S     g | ]}|j qS r   )kindr   argr   r   r   r   |      z,ASTConverter.do_func_def.<locals>.<listcomp>c                 S  s   g | ]}|j r	d n|jjqS r  )pos_onlyvariabler  r  r   r   r   r   }  s    Nz<func_type>	func_typer|   r   c                 S  s&   g | ]}|j d ur|j nttjqS r  )type_annotationrl   rv   unannotatedr   ar   r   r   r     s    
c                 s  s    | ]}|j d uV  qd S r  r  r  r   r   r   r    r  )r   r   r   rK  rL  r   r   )r   r   z.Suggestion: wrap argument types in parenthesesr   &PEP 695 generics are not yet supportedr   Fr  c                 S  r  r   r  r  r   r   r   r     r  c                 s  s    | ]}t |tV  qd S r  )r   ro   )r   tr   r   r   r    r  c                 S  s"   g | ]}|d ur
|nt tjqS r  )rl   rv   r  r  r   r   r   r     s   " r,  r-  rJ  r  clean)Qr  r5  r  rB  anyr   transform_argsargsrj   r  r  rV  r   r   r   r   argtypesConstantr   Ellipsisreturnsr  r   DUPLICATE_TYPE_SIGNATURESr.  r   r   r<  r   r   r   rt   r   insertrl   rv   special_formr   r   r   r   r   r  
from_errorr   r   type_paramsr   r   
VALID_TYPEzipset_type_optionalinitializerELLIPSIS_WITH_OTHER_TYPEARGSTYPE_SIGNATURE_TOO_MANY_ARGSTYPE_SIGNATURE_TOO_FEW_ARGSrn   r  r   r&  r  r  r   r2   r"  copy_modifiedunanalyzed_typerF  
definitionr   rX   is_readyr1  is_decorated	deco_liner(   r   include_docstringsr   get_docstring	docstring)r  r*  rF  r  r   r  r  	arg_kinds	arg_names	arg_typesreturn_typefunc_type_asttranslated_argsin_method_scoper   r   arg_typer  r/  r0  r   func_defr  vardecor  retvalr   r   r   r  m  s   




"	






zASTConverter.do_func_defr"  Type | Noner  Expression | Nonec                 C  s8   | j jsd S t|to|jdk}t|tr||_d S d S )Nr  )r   implicit_optionalr   rB   r  rw   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  r  r  r   r   r   r   8  r   z/ASTConverter.transform_args.<locals>.<listcomp>)r&  r   r   r   r  r  r   rV  	enumerater5  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|| 	|||}	|	|j|jt|dd t|dd  |	S )Nr  Tr,  r-  )
annotationr   r  r   r  r   r.  r   r   r   re  ri   r  r   rX   r1  r&  )
r  r  r  r  r  r  r  r  r   argumentr   r   r   r  <  s(   


zASTConverter.make_argumentc                 C  s   |  t||j|j d S r  )r  r   r   r.  )r  r   r  r   r   r   r  \     zASTConverter.fail_argast3.ClassDefr#   c                   s   j d  fdd|jD }tjdkr.|jr. jtdtj	d|jd j
|jd jdd	 t|j |jd  |jt|d
|d} |j|_|j
|_|jrZ|jd j
nd |_ jjritj|dd|_|j|_t|dd |_t|dd |_  j !  |S )NrL  c                   s$   g | ]}|j r|j  |jfqS r   )r  r   r   )r   kwr  r   r   r   f  s   $ z/ASTConverter.visit_ClassDef.<locals>.<listcomp>r   r  r   r   Fr  	metaclass)r  keywordsr  r,  r-  )"r  r5  r  r   r   r  r  r   r   r  r   r.  r#   r  r  r   r<  basesdictr#  rB  
decoratorsr   r  r   r  r   r  r  r   r&  r/  r0  r  )r  r*  r  cdefr   r  r   visit_ClassDefd  s6   




zASTConverter.visit_ClassDefast3.ReturnrL   c                 C     t | |j}| ||S r  )rL   r   r   r1  r  r*  r  r   r   r   visit_Return     zASTConverter.visit_Returnast3.Deleter)   c                 C  sT   t |jdkrt| |j}||j t|}n
t| |jd }| ||S )Nr|   r   )rV  targetsrV   r<  r1  r   r)   r   )r  r*  tupr  r   r   r   visit_Delete  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   re  r   r   r1  )r  r*  lvaluesrvaluer   ra  r   r   r   visit_Assign  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   rT   rl   rv   r  r   r.  r   r   r   r   r  r   targetr1  )r  r*  r   r*  r   ra  r   r   r   visit_AnnAssign  s   


zASTConverter.visit_AnnAssignast3.AugAssignrE   c                 C  s0   t | |j| |j| |j}| ||S r  )rE   rv  rp  r   r.  r   r1  r  r*  ra  r   r   r   visit_AugAssign     zASTConverter.visit_AugAssignast3.Forr1   c                 C  sJ   |  ||j}t| |j| |j| |j| |j	|}| 
||S r  )re  r   r1   r   r.  iterr  r   r  orelser1  r  r*  target_typer  r   r   r   	visit_For  s   



zASTConverter.visit_Forast3.AsyncForc                 C  sP   |  ||j}t| |j| |j| |j| |j	|}d|_
| ||S NT)re  r   r1   r   r.  r5  r  r   r  r6  is_asyncr1  r7  r   r   r   visit_AsyncFor  s   



zASTConverter.visit_AsyncFor
ast3.WhilerY   c                 C  s0   t | |j| |j| |j}| ||S r  )rY   r   testr  r   r  r6  r1  r  r   r   r   visit_While  r3  zASTConverter.visit_Whileast3.Ifc                 C  s4   t | |jg| |jg| |j}| ||S r  )r5   r   r?  r  r   r  r6  r1  r  r   r   r   visit_If  s   "zASTConverter.visit_If	ast3.WithrZ   c                   sP     ||j}t fdd|jD  fdd|jD  |j|} ||S )Nc                      g | ]}  |jqS r   r   context_exprr   r  r  r   r   r         z+ASTConverter.visit_With.<locals>.<listcomp>c                   rD  r   r   optional_varsrG  r  r   r   r     rH  )re  r   rZ   r  r  r   r1  r7  r   r  r   
visit_With  s   
zASTConverter.visit_Withast3.AsyncWithc                   sV     ||j}t fdd|jD  fdd|jD  |j|}d|_ ||S )Nc                   rD  r   rE  rG  r  r   r   r     rH  z0ASTConverter.visit_AsyncWith.<locals>.<listcomp>c                   rD  r   rI  rG  r  r   r   r     rH  T)re  r   rZ   r  r  r   r<  r1  )r  r*  r8  ra  r   r  r   visit_AsyncWith  s   
zASTConverter.visit_AsyncWith
ast3.RaiserJ   c                 C  &   t | |j| |j}| ||S r  )rJ   r   exccauser1  r  r   r   r   visit_Raise     zASTConverter.visit_Raiseast3.TryrU   c              	     sr    fdd|j D } fdd|j D } fdd|j D }t |j||| |j |j} ||S )Nc                   ,   g | ]}|j d ur t|j |nd qS r  r  r1  rB   r   hr  r   r   r          z*ASTConverter.visit_Try.<locals>.<listcomp>c                   rD  r   r   r"  rW  r  r   r   r     rH  c                   rD  r   r  r   rW  r  r   r   r     rH  )handlersrU   r  r   r  r6  	finalbodyr1  r  r*  vstypesr\  r  r   r  r   	visit_Try  s   



zASTConverter.visit_TryTryStarc              	     sx    fdd|j D } fdd|j D } fdd|j D }t |j||| |j |j}d|_ ||S )Nc                   rU  r  rV  rW  r  r   r   r   	  rY  z.ASTConverter.visit_TryStar.<locals>.<listcomp>c                   rD  r   rZ  rW  r  r   r   r     rH  c                   rD  r   r[  rW  r  r   r   r     rH  T)	r\  rU   r  r   r  r6  r]  is_starr1  r^  r   r  r   visit_TryStar  s   



zASTConverter.visit_TryStarast3.Assertr   c                 C  rO  r  )r   r   r?  r   r1  r  r   r   r   visit_Assert  rS  zASTConverter.visit_Assertast3.Importr6   c                 C  sh   g }|j D ]}| |j}|j}|d u r||jkr|j}|||f qt|}| j| | ||S r  )r  r  r  asnamer5  r6   r  r1  )r  r*  r  aliasr  rh  r  r   r   r   visit_Import   s   
zASTConverter.visit_Importast3.ImportFromr8   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 )Nr|   r   rh  r   c                 S  s   g | ]}|j |jfqS r   )r  rh  r  r   r   r   r   9  rH  z1ASTConverter.visit_ImportFrom.<locals>.<listcomp>)levelrV  r  r  r   r7   r9   r  r  r5  r1  )r  r*  r  r  r   r   r   visit_ImportFrom0  s   zASTConverter.visit_ImportFromast3.Globalr4   c                 C     t |j}| ||S r  )r4   r  r1  )r  r*  gr   r   r   visit_Global?     
zASTConverter.visit_Globalast3.NonlocalrD   c                 C  ro  r  )rD   r  r1  )r  r*  r  r   r   r   visit_NonlocalD  rr  zASTConverter.visit_Nonlocal	ast3.Exprr.   c                 C      |  |j}t|}| ||S r  )r   r   r.   r1  )r  r*  r   r  r   r   r   
visit_ExprI     zASTConverter.visit_Expr	ast3.PassrI   c                 C     t  }| ||S r  )rI   r1  r1  r   r   r   
visit_PassO     zASTConverter.visit_Pass
ast3.Breakr    c                 C  rz  r  )r    r1  r1  r   r   r   visit_BreakT  r|  zASTConverter.visit_Breakast3.Continuer'   c                 C  rz  r  )r'   r1  r1  r   r   r   visit_ContinueY  r|  zASTConverter.visit_Continue	NamedExprr   c                 C  rO  r  )r   r   r.  r   r1  r1  r   r   r   visit_NamedExpr_  rS  zASTConverter.visit_NamedExprast3.BoolOprF   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 )rV  valuesrp  r   r   AndOrrs  r   r"  r   r<  )r  r*  op_noderp  r   r   r   visit_BoolOpd  s   zASTConverter.visit_BoolOpvalsr  c              	   C  sP   t |dkrt||d |d }nt||d | ||dd  |}| ||S )Nr   r   r|   )rV  rF   r   r1  )r  rp  r  r*  r   r   r   r   r   r  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 )
rv  rp  rs  r   r"  rF   r   leftrightr1  r  r*  rp  r   r   r   r   visit_BinOpz  s
   zASTConverter.visit_BinOpast3.UnaryOprW   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~notrf  rg  zcannot translate UnaryOp )r   rp  r   InvertNotr   r   rs  r   r"  rW   r   operandr1  r  r   r   r   visit_UnaryOp  s   zASTConverter.visit_UnaryOpast3.Lambdar<   c                 C  sh   t |j}|jj|_|jj|_| jd t| |j	|j| 
|g}| j  ||j|j |S )NL)r   Returnr   r   r.  r  r5  r<   r  r  r  r  r1  )r  r*  r   r   r   r   r   visit_Lambda  s   


zASTConverter.visit_Lambda
ast3.IfExpr&   c                 C  s0   t | |j| |j| |j}| ||S r  )r&   r   r?  r   r6  r1  r  r*  r   r   r   r   visit_IfExp  s   $zASTConverter.visit_IfExp	ast3.Dictr*   c                 C  s.   t tt| |j| |j}| ||S r  )r*   listr  r8  keysr<  r  r1  r  r   r   r   
visit_Dict  s   zASTConverter.visit_Dictast3.SetrN   c                 C  r  r  )rN   r<  eltsr1  r  r   r   r   	visit_Set  r!  zASTConverter.visit_Setast3.ListCompr=   c                 C  "   t | ttj|}| ||S r  )r=   visit_GeneratorExpr   r   GeneratorExpr1  r  r   r   r   visit_ListComp     zASTConverter.visit_ListCompast3.SetComprM   c                 C  r  r  )rM   r  r   r   r  r1  r  r   r   r   visit_SetComp  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                   rD  r   r   r.  r   cr  r   r   r     rH  z/ASTConverter.visit_DictComp.<locals>.<listcomp>c                   rD  r   r   r5  r  r  r   r   r     rH  c                   rD  r   r<  ifsr  r  r   r   r     rH  c                 S     g | ]}t |jqS r   r  r<  r  r   r   r   r         )
generatorsr+   r   keyr   r1  r  r*  r#  itersifs_listr<  r   r   r  r   visit_DictComp  s   zASTConverter.visit_DictCompast3.GeneratorExpr3   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                   rD  r   r  r  r  r   r   r     rH  z3ASTConverter.visit_GeneratorExp.<locals>.<listcomp>c                   rD  r   r  r  r  r   r   r     rH  c                   rD  r   r  r  r  r   r   r     rH  c                 S  r  r   r  r  r   r   r   r     r  )r  r3   r   eltr1  r  r   r  r   r    s   zASTConverter.visit_GeneratorExp
ast3.Awaitr   c                 C  rv  r  )r   r   r   r1  )r  r*  vr   r   r   r   visit_Await  rx  zASTConverter.visit_Await
ast3.Yieldr[   c                 C  r  r  )r[   r   r   r1  r  r   r   r   visit_Yield  r!  zASTConverter.visit_Yieldast3.YieldFromr\   c                 C  r  r  )r\   r   r   r1  r  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   )r~  )r   or  r   r   r     r  z.ASTConverter.visit_Compare.<locals>.<listcomp>)opsr<  r  comparatorsr$   r1  )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   rV  r1  )r  r*  r  r  keyword_namesr  r  r   r   r   r   
visit_Call  s    
zASTConverter.visit_Callr  c                 C  s   |j }d }|d u rtd}nRt|trt|}nHt|tr$tt|}n<t|tr0tt|}n0t|t	r:t
|}n&t|trDt|}nt|trNt|}n|tu rVt }n
tdtt| | ||S )Nr  zConstant not implemented for )r   rB   r   r   rR   bytesr!   rz   r  r   r;   floatr0   complexr%   r  r,   rs  r"  r1  )r  r*  valr   r   r   r   visit_Constant  s(   










zASTConverter.visit_Constantast3.JoinedStrr-   c                 C  s   t d}||j|j t| |j}|| t|jdkr)| |jd |S t|jdkrE|jd }t	|t rE|j
dkrE|jdd = t|d}|| t||gtgd g}| ||S )Nr   r|   r   r   rN  )rR   r1  r   r.  r>   r<  r  rV  r  r   r   r@   r"   r   )r  r*  empty_stringstrs_to_joinr  join_methodresult_expressionr   r   r   visit_JoinedStr  s   



zASTConverter.visit_JoinedStrast3.FormattedValuec                 C  s   |  |j}||j|j |jdk rdndt|j }td| d }|jd ur/|  |jntd}||j|j t	|d}|| t
|||gttgd d g}| ||S )Nr   r   !{z:{}}r   )r   r   r1  r   r.  
conversionchrrR   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_FormattedValuer   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"   calleerB   r  rS   r1  )r  r*  r   member_exprobjr   r   r   r   visit_Attribute=  s   
zASTConverter.visit_Attributeast3.Subscriptr:   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   )r:   r   r   slicer1  r   r   r   r   SliceExtSlicer   indexr   )r  r*  r   r   r   r   r   visit_SubscriptL  s   


zASTConverter.visit_Subscriptr   rP   c                 C  r  r  )rP   r   r   r1  r  r   r   r   visit_Starred]  r!  zASTConverter.visit_Starredr   rB   c                 C  ro  r  )rB   r	  r1  r  r   r   r   
visit_Nameb  rr  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   StorerV   r>   r1  )r  r*  	expr_listr   r   r  r   
visit_Listg  s
   
zASTConverter.visit_List
ast3.TuplerV   c                 C  r  r  )rV   r<  r  r1  r  r   r   r   visit_Tupleq  r!  zASTConverter.visit_Tuple
ast3.SlicerO   c                 C  s$   t | |j| |j| |jS r  )rO   r   lowerupperstepr  r   r   r   visit_Slicex  s   $zASTConverter.visit_Sliceast3.ExtSlicec                 C  s   t | tt|jS r  )rV   r<  r   r   dimsr  r   r   r   visit_ExtSlice|  s   zASTConverter.visit_ExtSlicer   rC   c                 C  $   |  tt|j}t|tsJ |S r  )r   r   r   r   r   rC   r  r*  r   r   r   r   visit_Index     zASTConverter.visit_IndexMatchr?   c                   sR   t  |j fdd|jD  fdd|jD  fdd|jD } ||S )Nc                   rD  r   )r   patternr  r  r   r   r     rH  z,ASTConverter.visit_Match.<locals>.<listcomp>c                   rD  r   )r   guardr  r  r   r   r     rH  c                   rD  r   r[  r  r  r   r   r     rH  )r?   r   subjectcasesr1  r  r   r  r   visit_Match  s   
zASTConverter.visit_Match
MatchValuerf   c                 C  r  r  )rf   r   r   r1  r  r   r   r   visit_MatchValue  r!  zASTConverter.visit_MatchValueMatchSingletonrd   c                 C  ro  r  )rd   r   r1  r  r   r   r   visit_MatchSingleton  rr  z!ASTConverter.visit_MatchSingletonMatchSequencerc   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     r  z4ASTConverter.visit_MatchSequence.<locals>.<listcomp>c                 S  s   g | ]	}t |tr|qS r   )r   re   r  r   r   r   r     s    r   )patternsrV  rc   r1  )r  r*  r  starsr  r   r  r   visit_MatchSequence  s
   z ASTConverter.visit_MatchSequence	MatchStarre   c                 C  s:   |j d u r
td }n| t|j |}t|}| ||S r  )r  re   r1  rB   )r  r*  r  r  r   r   r   visit_MatchStar  s
   

zASTConverter.visit_MatchStarMatchMappingra   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  restrB   ra   r1  )r  r*  r  r  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   rK   r  	kwd_attrskwd_patternsr`   r1  )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  )r  rB   r1  r_   r   r  )r  r*  r  r  r   r   r   visit_MatchAs  s   

zASTConverter.visit_MatchAsMatchOrrb   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>)rb   r  r1  r  r   r  r   visit_MatchOr  s   zASTConverter.visit_MatchOrast_TypeAliasc                 C  sH   | j tdtjd|j|jdd tt|jj	g| 
|j}| ||S )Nz*PEP 695 type aliases are not yet supportedr   Fr  )r  r   r   r  r   r.  r   rB   r  r	  r   r   r1  r  r   r   r   visit_TypeAlias  s   zASTConverter.visit_TypeAlias)r   r^   r   r  r   r   r   r  r   r   r   r  r   r   r   r   r   r   r   r  )T)
r   r   r   r   r   r   r   r  r   r  )r  r5   r   r  )r  r   r   r   )r  r   r*  r+  r   r   )r2  r3  r   r4  )r2  r9  r   r:  )r  r>  r   r   )
rG  rH  rD  r  rE  r  rF  r  r   rI  )r*  rc  r   r   r   rd  )rp  rq  r   r   )rp  r}  r   r   )r  r   rG  rH  r   r  )rG  r  r   r  )rG  r  rE  r  rF  r  r   r   )rG  rI  r   rI  r  )r`  r5   r  r   r   r   )r`  r5   r   r  )r`  r5   r   r  )r`  rQ   r   r  )r	  r   r   r   )r  r  r   rA   )r*  r  r   r  )r*  r  r   r  )F)r*  r  rF  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   rL   )r*  r"  r   r)   )r*  r&  r   r   )r*  r,  r   r   )r*  r0  r   rE   )r*  r4  r   r1   )r*  r:  r   r1   )r*  r>  r   rY   )r*  rA  r   r5   )r*  rC  r   rZ   )r*  rL  r   rZ   )r*  rN  r   rJ   )r*  rT  r   rU   )r*  rb  r   rU   )r*  re  r   r   )r*  rg  r   r6   )r*  rk  r   r8   )r*  rn  r   r4   )r*  rs  r   rD   )r*  ru  r   r.   )r*  ry  r   rI   )r*  r}  r   r    )r*  r  r   r'   )r*  r  r   r   )r*  r  r   rF   )rp  r   r  r:  r*  r  r   rF   )r*  r  r   rF   )r*  r  r   rW   )r*  r  r   r<   )r*  r  r   r&   )r*  r  r   r*   )r*  r  r   rN   )r*  r  r   r=   )r*  r  r   rM   )r*  r  r   r+   )r*  r  r   r3   )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   rP   )r*  r   r   rB   )r*  r  r   r  )r*  r  r   rV   )r*  r  r   rO   )r*  r	  r   rV   )r*  r   r   rC   )r*  r  r   r?   )r*  r  r   rf   )r*  r  r   rd   )r*  r  r   rc   )r*  r   r   re   )r*  r"  r   ra   )r*  r%  r   r`   )r*  r.  r   r_   )r*  r0  r   rb   )r*  r2  r   r   )|r%  
__module____qualname__r  r  r  r  r   r1  r8  r<  rC  rT  re  r   AddSubMultMatMultDivModPowLShiftRShiftBitOrBitXorBitAndFloorDivro  __annotations__rv  GtLtEqGtELtENotEqIsIsNotInNotInr|  r~  rU  r  r  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r+  r/  r2  r9  r=  r@  rB  rK  rM  rR  ra  rd  rf  rj  rm  rq  rt  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r$  r-  r/  r1  r3  r   r   r   r   r   Y  s  
 N +  	2 #

	
		
r   c                   @  s  e Zd Z			d_d`ddZdaddZdbdcddZeddddZededdZded dZdfd!d"Zdgd%d&Z	dhd(d)Z
did-d.Zdjd2d3Zdkd5d6Zdld8d9Zdmd;d<Zdnd>d?ZdodAdBZdpdDdEZdqdHdIZdrdKdLZdsdNdOZdtdQdRZdudTdUZdvdWdXZdwdZd[Zdxd]d^ZdS )yr   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   rr   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.Anyr.  r   )r   r   r  )rr   r   r&  )r  r  r  r   r   r   invalid_type  s   
zTypeConverter.invalid_typer  rq   c                 C     d S r  r   r  r   r   r   r        zTypeConverter.visitr   rd  c                 C  rR  r  r   r  r   r   r   r     rS  c                 C  s   |du rdS | j | z.d|jj }t| |d}|dur0||}t|ts(J |W | j   S | |W | j   S | j   w )z2Modified visit -- keep track of the stack of nodesNr!  )	rO  r5  r$  r%  r&  r   rq   r  rQ  )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   NrK  )rV  rO  r  r   r   r   parent  s   
zTypeConverter.parentr   r   c                 C  s(   | j r| j j|||jd|jd d S d S )NTr   )r   r   r   r   r  r   r   r   r    s   zTypeConverter.failr   c                 C  s&   | j r| j j|||dtjd d S d S r  r  r  r   r   r   r  "  s   zTypeConverter.noter2  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   rt   c                 C  s  |j }t|}t|  tjsd }|rd|}| j||dS |s+| t	j
|j|j d }ttj}|}t|jD ]*\}}	|dkrO| |	}
|
d usLJ |
}q9|dkrY| |	}q9| t	j|j|j q9|jD ]S}|j}|jdkr|d ur| t	j||j|j | |}qg|jdkr||ur| t	j||j|j | |}
|
d usJ |
}qg| t	j|j|j|j qgt||||j|jS )Nz,Suggestion: use {0}[...] instead of {0}(...)r  r   r|   r  r"  )r  stringify_namer   rT  r   r   r   rQ  r  r   ARG_CONSTRUCTOR_NAME_EXPECTEDr   r.  rl   rv   r  r   r  r   _extract_argument_nameARG_CONSTRUCTOR_TOO_MANY_ARGSr  r   r  MULTIPLE_VALUES_FOR_NAME_KWARGMULTIPLE_VALUES_FOR_TYPE_KWARGARG_CONSTRUCTOR_UNEXPECTED_ARGrm   )r  r   fconstructorr  r  default_typer   r  r  r   r  r   r   r   r   r  )  s\   








zTypeConverter.visit_Callru   c                   s   t  fdd|D  jdS )Nc                   r  r   r  r  r  r   r   r   _  r  z9TypeConverter.translate_argument_list.<locals>.<listcomp>r  )ru   r   r;  r   r  r   translate_argument_list^  r  z%TypeConverter.translate_argument_listr*  c                 C  sZ   t |trt |jtr|j S t |tr|jd u rd S | tjt	|j
| jd d S r?  )r   r  r   r   r   r  r    ARG_NAME_EXPECTED_STRING_LITERALr   r"  r%  r   r  r   r   r   rZ  a  s   
z$TypeConverter._extract_argument_namer   c                 C  s   t |j| j| |jdS )Nr   r   )rw   r	  r   rP  r.  r  r   r   r   r  m  r  zTypeConverter.visit_Namer  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   rp  r   r@  rQ  r   r  r  rx   r   rP  r.  r   )r  r*  r  r  r   r   r   r  p  s   

zTypeConverter.visit_BinOpr  c                 C  s   |j }|d u rtd| jdS t|trt|d| j|jS |tu r&t| jdS t|t	r3t
|d| jdS t|tttfrA| ||S t|trTt|}t
|d| j|jdS | |S )Nr  r  zbuiltins.strzbuiltins.boolzbuiltins.bytes)r   )r   rw   r   r   r   r  r.  r  ro   r  rr   r   r  r  numeric_typer  rz   rQ  )r  r*  r  contentsr   r   r   r  ~  s   



zTypeConverter.visit_Constantr   c                 C  s\   |  |j}t|tr)t|jtu r)t|jtr!| jd9  _|S t|jt	r)|S | 
|S )Nr   )r   r  r   rr   r"  literal_valuer   rp  r   r   rQ  )r  r*  r   r   r   r   r    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.r.  r   rd  )r   r   r"  r%  rr   r   r&  )r  r   r*  numeric_value	type_namer   r   r   rf    s   
zTypeConverter.numeric_type
ast3.Indexc                 C  r  r  )r   r   r   r   r   rt   r  r   r   r   r    r  zTypeConverter.visit_Indexr  c                 C  r  )Nz(did you mean to use ',' instead of ':' ?rW  )rQ  r  r   r   r   r    r  zTypeConverter.visit_Slicer  c                 C  s^  t jdkr	|j}nit|jtjr|jj}n]t|jtjr0t	|j}t
|dd d u r/|jj|_nBt|jtjs9J t	|jj}|D ](}t
|dd d u rjt|tjrX|jj|_qBt|tjrj|jd useJ |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   r.  Fr   T)r   r   empty_tuple_index)r   r   r  r   r   r   r   r  copydeepcopyr&  r  r.  r  r
  Tupler  r<  r  rV  r   rw   r  r  r   r   rQ  )r  r*  slicevalr
  ra  rm  paramsr   r   r   r   r    sJ   




zTypeConverter.visit_Subscriptr  c                 C  s$   t | |jtd| j| |jdS )NT)implicitr   r   )rs   r<  r  r   r   rP  r.  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   rw   r  r  r
  r   rQ  )r  r*  
before_dotr   r   r   r    s   
zTypeConverter.visit_Attributeast3.Starredc                 C  s   t | |jddS )NT)from_star_syntax)ry   r   r   r  r   r   r   r     r=  zTypeConverter.visit_Starredr  c                 C  s"   t |jtjs	J | |j}|S r  )r   r  r   Loadrb  r  )r  r*  resultr   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   rr   )r  r  r   rq   )r  r   r   rd  )r   r   )r   r   r   r   r   r   r   r  r4  )r2  rU  r   rV  )r   r   r   rt   )r2  rU  r   ru   )r*  r  r   r   )r*  r   r   rt   )r*  r  r   rt   )r*  r  r   rt   )r*  r   r   rt   )r   ri  r*  r~   r   rt   )r*  rl  r   rt   )r*  r  r   rt   )r*  r  r   rt   )r*  r  r   rt   )r*  r   r   rt   )r*  ru  r   rt   )r*  r  r   rt   )r%  r5  r6  r  rP  rQ  r   r   rT  r  r  r<  r  rb  rZ  r  r  r  r  rf  r  r  r  r  r  r  r  r   r   r   r   r     s>    







5









+


	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   rX  r   r
  )r*  svr   r   r   rX  
  s   


rX  c                   @  s`   e Zd Z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Z	d$ddZ
d%ddZdS )&rX  zACheck if an AST contains attribute assignments (e.g. self.x = 0).r   r  c                 C  s   d| _ d| _d S NFlvaluerZ  r  r   r   r   r    s   
zFindAttributeAssign.__init__ra  r   c                 C  s&   d| _ |jD ]}||  qd| _ d S NTF)r|  r)  rY  r  ra  lvr   r   r   visit_assignment_stmt  s   

z)FindAttributeAssign.visit_assignment_stmtrZ   c                 C  s:   d| _ |jD ]}|d ur||  qd| _ |j|  d S r}  )r|  r.  rY  r   r~  r   r   r   visit_with_stmt!  s   

z#FindAttributeAssign.visit_with_stmtr1   c                 C  s>   d| _ |j|  d| _ |j|  |jr|j|  d S d S r}  )r|  r  rY  r   r  r  ra  r   r   r   visit_for_stmt)  s   z"FindAttributeAssign.visit_for_stmtr.   c                 C  rR  r  r   r  r   r   r   visit_expression_stmt1     z)FindAttributeAssign.visit_expression_stmtr   r"   c                 C  rR  r  r   r  r   r   r   r   visit_call_expr5  r  z#FindAttributeAssign.visit_call_exprr:   c                 C  rR  r  r   r  r   r   r   visit_index_expr9  r  z$FindAttributeAssign.visit_index_exprr@   c                 C  s   | j rd| _d S d S r;  r{  r  r   r   r   visit_member_expr=  s   
z%FindAttributeAssign.visit_member_exprNr   r  )ra  r   r   r  )ra  rZ   r   r  )ra  r1   r   r  )ra  r.   r   r  )r   r"   r   r  )r   r:   r   r  )r   r@   r   r  )r%  r5  r6  __doc__r  r  r  r  r  r  r  r  r   r   r   r   rX    s    






rX  c                   @  s.   e Zd ZdZdddZddd	ZdddZdS )r[  z/Check if an AST contains yields or yield froms.r   r  c                 C  
   d| _ d S rz  rZ  r  r   r   r   r  E  r  zFindYield.__init__r   r[   c                 C  r  r;  r  r  r   r   r   visit_yield_exprH  r  zFindYield.visit_yield_exprr\   c                 C  r  r;  r  r  r   r   r   visit_yield_from_exprK  r  zFindYield.visit_yield_from_exprNr  )r   r[   r   r  )r   r\   r   r  )r%  r5  r6  r  r  r  r  r   r   r   r   r[  B  s
    

r[  ra  rI  c                 C  s   t | }|dkr
dS d}t| d trt| d jtr|d7 }||kr%dS ||d kr-dS | | }t|ttfpBt|toBt|jtS )zCould the statements form a "trivial" function body, such as 'pass'?

    This mimics mypy.semanal.is_trivial_body, but this runs before
    semantic analysis so some checks must be conservative.
    r   Fr|   T)rV  r   r.   r  rR   rI   rJ   r,   )ra  r2  r  r`  r   r   r   rW  O  s   rW  )
r   r   r   r   r   r   r   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   r   r   r   )
r   r   r   r   r   r   r   r   r   rq   )r  r  r   r  )r*  r~   r   r   )ra  rI  r   r  )
__future__r   rn  r   r   r   r  r   r   r   r   r   r   r	   r
   r   typing_extensionsr   r   mypyr   r   r   r   mypy.errorsr   mypy.message_registryr   
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/   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\   r]   mypy.optionsr^   mypy.patternsr_   r`   ra   rb   rc   rd   re   rf   mypy.reachabilityrg   rh   mypy.sharedparseri   rj   mypy.traverserrk   
mypy.typesrl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   	mypy.utilrz   r{   r   r}   rD  r   r   r~   r   r   r   r   r   r   r   r   r   r   r  r  	TypeAliasr2  r  r  r  r  r   r"  r%  r.  r0  r  r`  r  ExceptHandlerr+  rb  r   r   r   compiler   r   r   r   r  r  r   r   rX  rX  r[  rW  r   r   r   r   <module>   s    ,6 M(
@0
C

&
	             
2
.