o
    ØÝ2gFo  ã                   @  s   d Z ddlmZ ddlmZmZ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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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZc ddldmeZe ddlfmgZgmhZhmiZi ddljmkZk dd	llmmZm G d
d„ deme7 ƒZnG dd„ deeƒZodS )z{Base visitor that implements an identity AST transform.

Subclass TransformVisitor to perform non-trivial transformations.
é    )Úannotations)ÚIterableÚOptionalÚcast)RÚGDEFÚREVEAL_TYPEÚArgumentÚ
AssertStmtÚAssertTypeExprÚAssignmentExprÚAssignmentStmtÚ	AwaitExprÚBlockÚ	BreakStmtÚ	BytesExprÚCallExprÚCastExprÚClassDefÚComparisonExprÚComplexExprÚConditionalExprÚContinueStmtÚ	DecoratorÚDelStmtÚDictExprÚDictionaryComprehensionÚEllipsisExprÚEnumCallExprÚ
ExpressionÚExpressionStmtÚ	FloatExprÚForStmtÚFuncDefÚFuncItemÚGeneratorExprÚ
GlobalDeclÚIfStmtÚImportÚ	ImportAllÚ
ImportFromÚ	IndexExprÚIntExprÚ
LambdaExprÚListComprehensionÚListExprÚ	MatchStmtÚ
MemberExprÚMypyFileÚNamedTupleExprÚNameExprÚNewTypeExprÚNodeÚNonlocalDeclÚOperatorAssignmentStmtÚOpExprÚOverloadedFuncDefÚOverloadPartÚParamSpecExprÚPassStmtÚPromoteExprÚ	RaiseStmtÚRefExprÚ
ReturnStmtÚ
RevealExprÚSetComprehensionÚSetExprÚ	SliceExprÚStarExprÚ	StatementÚStrExprÚ	SuperExprÚSymbolTableÚTempNodeÚTryStmtÚ	TupleExprÚTypeAliasExprÚTypeApplicationÚTypedDictExprÚTypeVarExprÚTypeVarTupleExprÚ	UnaryExprÚVarÚ	WhileStmtÚWithStmtÚ	YieldExprÚYieldFromExpr)	Ú	AsPatternÚClassPatternÚMappingPatternÚ	OrPatternÚPatternÚSequencePatternÚSingletonPatternÚStarredPatternÚValuePattern)ÚTraverserVisitor)ÚFunctionLikeÚ
ProperTypeÚType)Úreplace_object_state)ÚNodeVisitorc                   @  sF  e Zd ZdZdIdd„ZdJdd	„ZdKdd„ZdLdd„ZdMdd„ZdNdd„Z	dOdd„Z
dPdd„ZdQd d!„ZdRd#d$„ZdSd&d'„ZdTd)d*„ZdUd,d-„ZdVd/d0„ZdWd2d3„ZdXd5d6„ZdYd8d9„ZdZd;d<„ZdZd=d>„Zd[d@dA„Zd\dCdD„Zd]dFdG„Zd^dIdJ„Zd_dLdM„Zd`dOdP„ZdadRdS„ZdbdUdV„ZdcdXdY„Zddd[d\„Z ded^d_„Z!dfdadb„Z"dgddde„Z#dhdhdi„Z$didkdl„Z%djdndo„Z&dkdqdr„Z'dldtdu„Z(dmdwdx„Z)dndzd{„Z*dod}d~„Z+dpdd‚„Z,dqd„d…„Z-drd‡dˆ„Z.dsdŠd‹„Z/dtddŽ„Z0dudd‘„Z1dvd“d”„Z2dwd–d—„Z3dxd™dš„Z4dxd›dœ„Z5dydždŸ„Z6dzd¡d¢„Z7d{d¤d¥„Z8d|d§d¨„Z9d}dªd«„Z:d~d­d®„Z;dd°d±„Z<d€d³d´„Z=dd¶d·„Z>d‚d¹dº„Z?dƒd¼d½„Z@d„d¿dÀ„ZAd…dÂdÃ„ZBd†dÅdÆ„ZCd‡dÈdÉ„ZDdˆdËdÌ„ZEd‰dÎdÏ„ZFdŠdÑdÒ„ZGd‹dÔdÕ„ZHdŒd×dØ„ZIddÚdÛ„ZJdŽdÝdÞ„ZKddàdá„ZLddãdä„ZMddådæ„ZNd‘dèdé„ZOd’dëdì„ZPd“dîdï„ZQd”dñdò„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[dJdd„Z\dždd„Z]dŸdd„Z^d dd„Z_d¡dd„Z`d¢d d!„Zad£d#d$„Zbd¤d'd(„Zcd¥d+d,„Zdd¦d/d0„Zed§d3d4„Zfd¨d7d8„Zgd©d;d<„Zhdªd?d@„Zid«dBdC„Zjd¬dFdG„ZkdHS (­  ÚTransformVisitoraò  Transform a semantically analyzed AST (or subtree) to an identical copy.

    Use the node() method to transform an AST node.

    Subclass to perform a non-identity transform.

    Notes:

     * This can only be used to transform functions or classes, not top-level
       statements, and/or modules as a whole.
     * Do not duplicate TypeInfo nodes. This would generally not be desirable.
     * Only update some name binding cross-references, but only those that
       refer to Var, Decorator or FuncDef nodes, not those targeting ClassDef or
       TypeInfo nodes.
     * Types are not transformed, but you can override type() to also perform
       type transformation.

    TODO nested classes and functions have not been tested well enough
    ÚreturnÚNonec                 C  s   d| _ i | _i | _d S )NF)Ú	test_onlyÚvar_mapÚfunc_placeholder_map©Úself© ro   úJ/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/treetransform.pyÚ__init__„   s   
zTransformVisitor.__init__Únoder1   c                 C  sX   | j sJ dƒ‚dd„ |j ¡ D ƒ}t|  |j¡g |j|d}|j|_|j|_t	ƒ |_
|S )Nz0This visitor should not be used for whole files.c                 S  s   i | ]	\}}||  ¡ “qS ro   )Úcopy)Ú.0ÚlineÚcodesro   ro   rp   Ú
<dictcomp>”   s    z4TransformVisitor.visit_mypy_file.<locals>.<dictcomp>)Úignored_lines)rj   rx   Úitemsr1   Ú
statementsÚdefsÚis_bomÚ	_fullnameÚpathrI   Únames)rn   rr   rx   Únewro   ro   rp   Úvisit_mypy_file‘   s   z TransformVisitor.visit_mypy_filer'   c                 C  ó   t |j ¡ ƒS ©N)r'   Úidsrs   ©rn   rr   ro   ro   rp   Úvisit_import›   ó   zTransformVisitor.visit_importr)   c                 C  s   t |j|j|j ¡ ƒS rƒ   )r)   ÚidÚrelativer   rs   r…   ro   ro   rp   Úvisit_import_fromž   s   z"TransformVisitor.visit_import_fromr(   c                 C  s   t |j|jƒS rƒ   )r(   rˆ   r‰   r…   ro   ro   rp   Úvisit_import_all¡   r‡   z!TransformVisitor.visit_import_allÚargumentr   c                 C  s*   t |  |j¡|j|j|jƒ}| |¡ |S rƒ   )r   Ú	visit_varÚvariableÚtype_annotationÚinitializerÚkindÚset_line)rn   rŒ   Úargro   ro   rp   Úcopy_argument¤   s   
ü
zTransformVisitor.copy_argumentr"   c              	     sÔ   t ˆ ƒ}|jjD ]}| |¡ qt|j‡ fdd„|jD ƒˆ  |j¡ttt	 ˆ  
|j¡ƒƒ}ˆ  ||¡ |j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|ˆ jv rhˆ j| }t||ƒ |S |S )Nc                   ó   g | ]}ˆ   |¡‘qS ro   ©r”   ©rt   r“   rm   ro   rp   Ú
<listcomp>Á   ó    z3TransformVisitor.visit_func_def.<locals>.<listcomp>)ÚFuncMapInitializerÚbodyÚacceptr"   ÚnameÚ	argumentsÚblockr   r   rb   Úoptional_typeÚtypeÚcopy_function_attributesr}   Úis_decoratedÚis_conditionalÚabstract_statusÚ	is_staticÚis_classÚis_propertyÚis_finalÚoriginal_defrl   re   )rn   rr   ÚinitÚstmtr€   Úresultro   rm   rp   Úvisit_func_def±   s0   

ü


zTransformVisitor.visit_func_defr,   c                   sF   t ‡ fdd„|jD ƒˆ  |j¡ttt ˆ  |j¡ƒƒ}ˆ  	||¡ |S )Nc                   r•   ro   r–   r—   rm   ro   rp   r˜   ß   r™   z6TransformVisitor.visit_lambda_expr.<locals>.<listcomp>)
r,   rž   rŸ   r›   r   r   rb   r    r¡   r¢   ©rn   rr   r€   ro   rm   rp   Úvisit_lambda_exprÝ   s   
ýz"TransformVisitor.visit_lambda_exprr€   r#   Úoriginalc                 C  sL   |j |_ |j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_d S rƒ   )	ÚinfoÚmin_argsÚmax_posÚis_overloadÚis_generatorÚis_coroutineÚis_async_generatorÚis_awaitable_coroutineru   )rn   r€   r±   ro   ro   rp   r¢   æ   s   z)TransformVisitor.copy_function_attributesr9   c                   s¨   ‡ fdd„|j D ƒ}t||j ƒD ]\}}|j|_qt|ƒ}|j|_ˆ  |j¡}t|tƒs.J ‚||_|j	|_	|j
|_
|j|_|j|_|j|_|jrRtt|j ˆ ¡ƒ|_|S )Nc                   s   g | ]
}t t| ˆ ¡ƒ‘qS ro   )r   r:   rœ   )rt   Úitemrm   ro   rp   r˜   ò   s    z>TransformVisitor.visit_overloaded_func_def.<locals>.<listcomp>)ry   Úzipru   r9   r}   r    r¡   Ú
isinstancerc   r²   r¦   r§   r¨   r©   Úimplr   r:   rœ   )rn   rr   ry   ÚnewitemÚolditemr€   Únew_typero   rm   rp   Úvisit_overloaded_func_defñ   s    
z*TransformVisitor.visit_overloaded_func_defr   c                   sV   t |jˆ  |j¡|jˆ  |j¡ˆ  |j¡ƒ}|j	|_	|j
|_
‡ fdd„|jD ƒ|_|S )Nc                   r•   ro   ©Úexpr)rt   Ú	decoratorrm   ro   rp   r˜     r™   z4TransformVisitor.visit_class_def.<locals>.<listcomp>)r   r   rŸ   r{   Ú	type_varsÚexpressionsÚbase_type_exprsÚoptional_exprÚ	metaclassÚfullnamer²   Ú
decoratorsr¯   ro   rm   rp   Úvisit_class_def  s   


ûz TransformVisitor.visit_class_defr%   c                 C  r‚   rƒ   )r%   r   rs   r…   ro   ro   rp   Úvisit_global_decl  r‡   z"TransformVisitor.visit_global_declr6   c                 C  r‚   rƒ   )r6   r   rs   r…   ro   ro   rp   Úvisit_nonlocal_decl  r‡   z$TransformVisitor.visit_nonlocal_declr   c                 C  ó   t |  |j¡ƒS rƒ   )r   rz   r›   r…   ro   ro   rp   Úvisit_block  ó   zTransformVisitor.visit_blockr   c                 C  s>   |   |j¡}|jj|_t||  |j¡|  |j¡ƒ}|j|_|S rƒ   )	r®   Úfuncru   r   rÆ   rË   r   Úvarrµ   )rn   rr   rÒ   r€   ro   ro   rp   Úvisit_decorator  s
   
z TransformVisitor.visit_decoratorrS   c                 C  s¨   || j v r
| j | S t|j|  |j¡ƒ}|j|_|j|_|j|_|j|_|j	|_	|j
|_
|j|_|j|_|j|_|j|_|j|_|j|_|j|_| |¡ || j |< |S rƒ   )rk   rS   r   r    r¡   ru   r}   r²   Úis_selfÚis_readyÚis_initialized_in_classÚis_staticmethodÚis_classmethodr¨   r©   Úfinal_valueÚfinal_unset_in_classÚfinal_set_in_initr’   r¯   ro   ro   rp   r   !  s&   



zTransformVisitor.visit_varr   c                 C  ó   t |  |j¡ƒS rƒ   )r   rÃ   r…   ro   ro   rp   Úvisit_expression_stmt7  rÑ   z&TransformVisitor.visit_expression_stmtr   c                 C  ó
   |   |¡S rƒ   )Úduplicate_assignmentr…   ro   ro   rp   Úvisit_assignment_stmt:  ó   
z&TransformVisitor.visit_assignment_stmtc                 C  sF   t |  |j¡|  |j¡|  |j¡ƒ}|j|_|j|_|  |j	¡|_	|S rƒ   )
r   rÆ   ÚlvaluesrÃ   Úrvaluer    Úunanalyzed_typeru   Úis_final_defr¡   r¯   ro   ro   rp   rà   =  s   


ýz%TransformVisitor.duplicate_assignmentr7   c                 C  s   t |j|  |j¡|  |j¡ƒS rƒ   )r7   ÚoprÃ   Úlvaluerä   r…   ro   ro   rp   Úvisit_operator_assignment_stmtH  s   z/TransformVisitor.visit_operator_assignment_stmtrT   c                 C  s$   t |  |j¡|  |j¡|  |j¡ƒS rƒ   )rT   rÃ   rŸ   r›   Úoptional_blockÚ	else_bodyr…   ro   ro   rp   Úvisit_while_stmtM  ó   ÿz!TransformVisitor.visit_while_stmtr!   c                 C  sR   t |  |j¡|  |j¡|  |j¡|  |j¡|  |j¡ƒ}|j	|_	|  |j
¡|_
|S rƒ   )r!   rÃ   ÚindexrŸ   r›   rê   rë   r    Úunanalyzed_index_typeÚis_asyncÚ
index_typer¯   ro   ro   rp   Úvisit_for_stmtR  s   




ûzTransformVisitor.visit_for_stmtr@   c                 C  rÏ   rƒ   )r@   rÈ   rÃ   r…   ro   ro   rp   Úvisit_return_stmt^  rÑ   z"TransformVisitor.visit_return_stmtr	   c                 C  s   t |  |j¡|  |j¡ƒS rƒ   )r	   rÃ   rÈ   Úmsgr…   ro   ro   rp   Úvisit_assert_stmta  ó   z"TransformVisitor.visit_assert_stmtr   c                 C  rÝ   rƒ   )r   rÃ   r…   ro   ro   rp   Úvisit_del_stmtd  rÑ   zTransformVisitor.visit_del_stmtr&   c                 C  s$   t |  |j¡|  |j¡|  |j¡ƒS rƒ   )r&   rÆ   rÃ   Úblocksr›   rê   rë   r…   ro   ro   rp   Úvisit_if_stmtg  ó
   


ýzTransformVisitor.visit_if_stmtr   c                 C  ó   t ƒ S rƒ   )r   r…   ro   ro   rp   Úvisit_break_stmtn  ó   z!TransformVisitor.visit_break_stmtr   c                 C  rû   rƒ   )r   r…   ro   ro   rp   Úvisit_continue_stmtq  rý   z$TransformVisitor.visit_continue_stmtr<   c                 C  rû   rƒ   )r<   r…   ro   ro   rp   Úvisit_pass_stmtt  rý   z TransformVisitor.visit_pass_stmtr>   c                 C  ó   t |  |j¡|  |j¡ƒS rƒ   )r>   rÈ   rÃ   Ú	from_exprr…   ro   ro   rp   Úvisit_raise_stmtw  rö   z!TransformVisitor.visit_raise_stmtrK   c              	   C  sN   t |  |j¡|  |j¡|  |j¡|  |j¡|  	|j
¡|  	|j¡ƒ}|j|_|S rƒ   )rK   rŸ   r›   Úoptional_namesÚvarsÚoptional_expressionsÚtypesrø   Úhandlersrê   rë   Úfinally_bodyÚis_starr¯   ro   ro   rp   Úvisit_try_stmtz  s   





úzTransformVisitor.visit_try_stmtrU   c                   sP   t ˆ  |j¡ˆ  |j¡ˆ  |j¡ˆ  |j¡ƒ}|j	|_	‡ fdd„|j
D ƒ|_
|S )Nc                   r•   ro   ©r¡   )rt   Útyprm   ro   rp   r˜   Ž  r™   z4TransformVisitor.visit_with_stmt.<locals>.<listcomp>)rU   rÆ   rÃ   r  ÚtargetrŸ   r›   r    rå   rð   Úanalyzed_typesr¯   ro   rm   rp   Úvisit_with_stmt†  s   



üz TransformVisitor.visit_with_stmtÚprX   c                 C  s<   t |jd ur|  |j¡nd |jd ur|  |j¡dS d dS )N)Úpatternr   )rX   r  r   Úduplicate_name©rn   r  ro   ro   rp   Úvisit_as_pattern‘  s   þþz!TransformVisitor.visit_as_patternr[   c                   ó   t ‡ fdd„|jD ƒƒS )Nc                   r•   ro   ©r  ©rt   Úpatrm   ro   rp   r˜   ˜  r™   z5TransformVisitor.visit_or_pattern.<locals>.<listcomp>)r[   Úpatternsr  ro   rm   rp   Úvisit_or_pattern—  ó   z!TransformVisitor.visit_or_patternr`   c                 C  rÝ   rƒ   )r`   rÃ   r  ro   ro   rp   Úvisit_value_patternš  rÑ   z$TransformVisitor.visit_value_patternr^   c                 C  ó
   t |jƒS rƒ   )r^   Úvaluer  ro   ro   rp   Úvisit_singleton_pattern  râ   z(TransformVisitor.visit_singleton_patternr]   c                   r  )Nc                   r•   ro   r  r  rm   ro   rp   r˜   ¡  r™   z;TransformVisitor.visit_sequence_pattern.<locals>.<listcomp>)r]   r  r  ro   rm   rp   Úvisit_sequence_pattern   r  z'TransformVisitor.visit_sequence_patternr_   c                 C  s    t |jd ur|  |j¡ƒS d ƒS rƒ   )r_   Úcapturer  r  ro   ro   rp   Úvisit_starred_pattern£  s    z&TransformVisitor.visit_starred_patternrZ   c                   sH   t ‡ fdd„|jD ƒ‡ fdd„|jD ƒ|jd ur ˆ  |j¡dS d dS )Nc                   r•   ro   rÂ   ©rt   rÃ   rm   ro   rp   r˜   ¨  r™   z:TransformVisitor.visit_mapping_pattern.<locals>.<listcomp>c                   r•   ro   r  r  rm   ro   rp   r˜   ©  r™   )ÚkeysÚvaluesÚrest)rZ   r$  r%  r&  r  r  ro   rm   rp   Úvisit_mapping_pattern¦  s   ýýz&TransformVisitor.visit_mapping_patternrY   c                   sP   |j  ˆ ¡}t|tƒsJ ‚t|‡ fdd„|jD ƒt|jƒ‡ fdd„|jD ƒdS )Nc                   r•   ro   r  r  rm   ro   rp   r˜   ²  r™   z8TransformVisitor.visit_class_pattern.<locals>.<listcomp>c                   r•   ro   r  r  rm   ro   rp   r˜   ´  r™   )Ú	class_refÚpositionalsÚkeyword_keysÚkeyword_values)	r(  rœ   r¼   r?   rY   r)  Úlistr*  r+  )rn   r  r(  ro   rm   rp   Úvisit_class_pattern­  s   üz$TransformVisitor.visit_class_patternÚor/   c                   s8   t ˆ  |j¡‡ fdd„|jD ƒˆ  |j¡ˆ  |j¡dS )Nc                   r•   ro   r  )rt   r  rm   ro   rp   r˜   º  r™   z5TransformVisitor.visit_match_stmt.<locals>.<listcomp>)Úsubjectr  ÚguardsÚbodies)r/   rÃ   r/  r  r  r0  rø   r1  )rn   r.  ro   rm   rp   Úvisit_match_stmt·  s   


üz!TransformVisitor.visit_match_stmtrE   c                 C  r  rƒ   )rE   rÃ   r…   ro   ro   rp   Úvisit_star_expr¿  râ   z TransformVisitor.visit_star_exprr+   c                 C  r  rƒ   )r+   r  r…   ro   ro   rp   Úvisit_int_exprÂ  râ   zTransformVisitor.visit_int_exprrG   c                 C  r  rƒ   )rG   r  r…   ro   ro   rp   Úvisit_str_exprÅ  râ   zTransformVisitor.visit_str_exprr   c                 C  r  rƒ   )r   r  r…   ro   ro   rp   Úvisit_bytes_exprÈ  râ   z!TransformVisitor.visit_bytes_exprr    c                 C  r  rƒ   )r    r  r…   ro   ro   rp   Úvisit_float_exprË  râ   z!TransformVisitor.visit_float_exprr   c                 C  r  rƒ   )r   r  r…   ro   ro   rp   Úvisit_complex_exprÎ  râ   z#TransformVisitor.visit_complex_exprr   c                 C  rû   rƒ   )r   r…   ro   ro   rp   Úvisit_ellipsisÑ  rý   zTransformVisitor.visit_ellipsisr3   c                 C  rß   rƒ   ©r  r…   ro   ro   rp   Úvisit_name_exprÔ  râ   z TransformVisitor.visit_name_exprc                 C  s"   t |jƒ}|  ||¡ |j|_|S rƒ   )r3   r   Úcopy_refÚis_special_formr¯   ro   ro   rp   r  ×  s   
zTransformVisitor.duplicate_namer0   c                 C  s2   t |  |j¡|jƒ}|jr|j|_|  ||¡ |S rƒ   )r0   rÃ   r   Údef_varr<  )rn   rr   Úmemberro   ro   rp   Úvisit_member_exprß  s
   z"TransformVisitor.visit_member_exprr?   c                 C  s€   |j |_ |j|_|j}t|tƒr|j tkr|  |¡}nt|tƒr'|  |j¡}nt|t	ƒr3| j
 ||¡}||_|j|_|j|_d S rƒ   )r‘   rÊ   rr   r¼   rS   r   r   r   rÓ   r"   rl   ÚgetÚ
is_new_defÚis_inferred_def)rn   r€   r±   r  ro   ro   rp   r<  è  s   


€

zTransformVisitor.copy_refrW   c                 C  rÝ   rƒ   )rW   rÃ   r…   ro   ro   rp   Úvisit_yield_from_exprú  rÑ   z&TransformVisitor.visit_yield_from_exprrV   c                 C  rÏ   rƒ   )rV   rÈ   rÃ   r…   ro   ro   rp   Úvisit_yield_exprý  rÑ   z!TransformVisitor.visit_yield_exprr   c                 C  rÝ   rƒ   )r   rÃ   r…   ro   ro   rp   Úvisit_await_expr   rÑ   z!TransformVisitor.visit_await_exprr   c                 C  s4   t |  |j¡|  |j¡|j ¡ |j ¡ |  |j	¡ƒS rƒ   )
r   rÃ   ÚcalleerÆ   ÚargsÚ	arg_kindsrs   Ú	arg_namesrÈ   Úanalyzedr…   ro   ro   rp   Úvisit_call_expr  s   


ûz TransformVisitor.visit_call_exprr8   c              	   C  sD   t |j|  |j¡|  |j¡ttt |  |j	¡ƒƒ}|  
|j¡|_|S rƒ   )r8   rç   rÃ   ÚleftÚrightr   r   rM   rÈ   rK  r    Úmethod_typer¯   ro   ro   rp   Úvisit_op_expr  s   

üzTransformVisitor.visit_op_exprr   c                   s.   t |jˆ  |j¡ƒ}‡ fdd„|jD ƒ|_|S )Nc                   r•   ro   )r    )rt   Útrm   ro   rp   r˜     r™   z:TransformVisitor.visit_comparison_expr.<locals>.<listcomp>)r   Ú	operatorsrÆ   ÚoperandsÚmethod_typesr¯   ro   rm   rp   Úvisit_comparison_expr  s   z&TransformVisitor.visit_comparison_exprr   c                 C  ó   t |  |j¡|  |j¡ƒS rƒ   )r   rÃ   r¡   r…   ro   ro   rp   Úvisit_cast_expr  rö   z TransformVisitor.visit_cast_exprr
   c                 C  rV  rƒ   )r
   rÃ   r¡   r…   ro   ro   rp   Úvisit_assert_type_expr  rö   z'TransformVisitor.visit_assert_type_exprrA   c                 C  s0   |j tkr|jd usJ ‚tt|  |j¡dS |S )N)r‘   rÃ   )r‘   r   rÃ   rA   r…   ro   ro   rp   Úvisit_reveal_expr!  s   
z"TransformVisitor.visit_reveal_exprrH   c                 C  s2   |   |j¡}t|tƒsJ ‚t|j|ƒ}|j|_|S rƒ   )rÃ   Úcallr¼   r   rH   r   r²   )rn   rr   rZ  r€   ro   ro   rp   Úvisit_super_expr)  s
   z!TransformVisitor.visit_super_exprr   c                 C  r   rƒ   )r   rÃ   r  r  r…   ro   ro   rp   Úvisit_assignment_expr0  rö   z&TransformVisitor.visit_assignment_exprrR   c                 C  s&   t |j|  |j¡ƒ}|  |j¡|_|S rƒ   )rR   rç   rÃ   r    rO  r¯   ro   ro   rp   Úvisit_unary_expr3  s   z!TransformVisitor.visit_unary_exprr.   c                 C  rÏ   rƒ   )r.   rÆ   ry   r…   ro   ro   rp   Úvisit_list_expr8  rÑ   z TransformVisitor.visit_list_exprr   c                   r  )Nc                   s,   g | ]\}}|rˆ   |¡nd ˆ   |¡f‘qS rƒ   rÂ   )rt   Úkeyr  rm   ro   rp   r˜   =  s   , z4TransformVisitor.visit_dict_expr.<locals>.<listcomp>)r   ry   r…   ro   rm   rp   Úvisit_dict_expr;  s   ÿz TransformVisitor.visit_dict_exprrL   c                 C  rÏ   rƒ   )rL   rÆ   ry   r…   ro   ro   rp   Úvisit_tuple_expr@  rÑ   z!TransformVisitor.visit_tuple_exprrC   c                 C  rÏ   rƒ   )rC   rÆ   ry   r…   ro   ro   rp   Úvisit_set_exprC  rÑ   zTransformVisitor.visit_set_exprr*   c                 C  sp   t |  |j¡|  |j¡ƒ}|jr|  |j¡|_|jr6t|jtƒr(|  	|j¡|_n|  
|j¡|_|j |j¡ |S rƒ   )r*   rÃ   Úbaserî   rO  r¡   rK  r¼   rN   Úvisit_type_applicationÚvisit_type_alias_exprr’   r¯   ro   ro   rp   Úvisit_index_exprF  s   z!TransformVisitor.visit_index_exprrN   c                 C  rV  rƒ   )rN   rÃ   r  r…   ro   ro   rp   rd  R  rö   z'TransformVisitor.visit_type_applicationr-   c                 C  ó    |   |j¡}| |j¡ t|ƒS rƒ   )Úduplicate_generatorÚ	generatorr’   r-   ©rn   rr   ri  ro   ro   rp   Úvisit_list_comprehensionU  ó   z)TransformVisitor.visit_list_comprehensionrB   c                 C  rg  rƒ   )rh  ri  r’   rB   rj  ro   ro   rp   Úvisit_set_comprehensionZ  rl  z(TransformVisitor.visit_set_comprehensionr   c                   sT   t ˆ  |j¡ˆ  |j¡‡ fdd„|jD ƒ‡ fdd„|jD ƒ‡ fdd„|jD ƒ|jƒS )Nc                   r•   ro   rÂ   ©rt   rî   rm   ro   rp   r˜   e  r™   zCTransformVisitor.visit_dictionary_comprehension.<locals>.<listcomp>c                   r•   ro   rÂ   ©rt   Úsrm   ro   rp   r˜   f  r™   c                   ó   g | ]}‡ fd d„|D ƒ‘qS )c                   r•   ro   rÂ   ©rt   Úcondrm   ro   rp   r˜   g  r™   zNTransformVisitor.visit_dictionary_comprehension.<locals>.<listcomp>.<listcomp>ro   ©rt   Ú
conditionsrm   ro   rp   r˜   g  ó    )r   rÃ   r_  r  ÚindicesÚ	sequencesÚ	condlistsrð   r…   ro   rm   rp   Úvisit_dictionary_comprehension_  s   

úz/TransformVisitor.visit_dictionary_comprehensionr$   c                 C  rß   rƒ   )rh  r…   ro   ro   rp   Úvisit_generator_exprk  râ   z%TransformVisitor.visit_generator_exprc                   sJ   t ˆ  |j¡‡ fdd„|jD ƒ‡ fdd„|jD ƒ‡ fdd„|jD ƒ|jƒS )Nc                   r•   ro   rÂ   rn  rm   ro   rp   r˜   q  r™   z8TransformVisitor.duplicate_generator.<locals>.<listcomp>c                   r•   ro   rÂ   ro  rm   ro   rp   r˜   r  r™   c                   rq  )c                   r•   ro   rÂ   rr  rm   ro   rp   r˜   s  r™   zCTransformVisitor.duplicate_generator.<locals>.<listcomp>.<listcomp>ro   rt  rm   ro   rp   r˜   s  rv  )r$   rÃ   Ú	left_exprrw  rx  ry  rð   r…   ro   rm   rp   rh  n  s   
ûz$TransformVisitor.duplicate_generatorrD   c                 C  ó$   t |  |j¡|  |j¡|  |j¡ƒS rƒ   )rD   rÈ   Úbegin_indexÚ	end_indexÚstrider…   ro   ro   rp   Úvisit_slice_exprw  rú   z!TransformVisitor.visit_slice_exprr   c                 C  r}  rƒ   )r   rÃ   rs  Úif_exprÚ	else_exprr…   ro   ro   rp   Úvisit_conditional_expr~  rí   z'TransformVisitor.visit_conditional_exprrP   c                 C  s2   t |j|j|  |j¡|  |j¡|  |j¡|jdS ©N)Úvariance)	rP   r   rÊ   r  r%  r¡   Úupper_boundÚdefaultr†  r…   ro   ro   rp   Úvisit_type_var_exprƒ  s   


úz$TransformVisitor.visit_type_var_exprr;   c                 C  s(   t |j|j|  |j¡|  |j¡|jdS r…  )r;   r   rÊ   r¡   r‡  rˆ  r†  r…   ro   ro   rp   Úvisit_paramspec_expr  s   

ûz%TransformVisitor.visit_paramspec_exprrQ   c                 C  s,   t |j|j|  |j¡|j|  |j¡|jdS r…  )rQ   r   rÊ   r¡   r‡  Útuple_fallbackrˆ  r†  r…   ro   ro   rp   Úvisit_type_var_tuple_expr–  s   

úz*TransformVisitor.visit_type_var_tuple_exprrM   c                 C  r  rƒ   )rM   rr   r…   ro   ro   rp   re     râ   z&TransformVisitor.visit_type_alias_exprr4   c                 C  s$   t |j|j|j|jd}|j|_|S )N)ru   Úcolumn)r4   r   Úold_typeru   r  r²   )rn   rr   Úresro   ro   rp   Úvisit_newtype_expr£  s   z#TransformVisitor.visit_newtype_exprr2   c                 C  r  rƒ   )r2   r²   r…   ro   ro   rp   Úvisit_namedtuple_expr¨  râ   z&TransformVisitor.visit_namedtuple_exprr   c                 C  s   t |j|j|jƒS rƒ   )r   r²   ry   r%  r…   ro   ro   rp   Úvisit_enum_call_expr«  ó   z%TransformVisitor.visit_enum_call_exprrO   r5   c                 C  r  rƒ   )rO   r²   r…   ro   ro   rp   Úvisit_typeddict_expr®  râ   z%TransformVisitor.visit_typeddict_exprr=   c                 C  r  rƒ   )r=   r¡   r…   ro   ro   rp   Úvisit__promote_expr±  râ   z$TransformVisitor.visit__promote_exprrJ   c                 C  rÝ   rƒ   )rJ   r¡   r…   ro   ro   rp   Úvisit_temp_node´  rÑ   z TransformVisitor.visit_temp_nodec                 C  s   |  | ¡}| |¡ |S rƒ   )rœ   r’   r¯   ro   ro   rp   rr   ·  s   

zTransformVisitor.nodec                 C  ó&   |  | ¡}t|tƒsJ ‚| |¡ |S rƒ   )rœ   r¼   r1   r’   r¯   ro   ro   rp   Úmypyfile¼  ó   

zTransformVisitor.mypyfilerÃ   r   c                 C  r—  rƒ   )rœ   r¼   r   r’   )rn   rÃ   r€   ro   ro   rp   rÃ   Â  r™  zTransformVisitor.exprr¬   rF   c                 C  r—  rƒ   )rœ   r¼   rF   r’   )rn   r¬   r€   ro   ro   rp   r¬   È  r™  zTransformVisitor.stmtr  r\   c                 C  r—  rƒ   )rœ   r¼   r\   r’   )rn   r  r€   ro   ro   rp   r  Î  r™  zTransformVisitor.patternúExpression | Nonec                 C  ó   |r|   |¡S d S rƒ   rÂ   )rn   rÃ   ro   ro   rp   rÈ   Ø  ó   
zTransformVisitor.optional_exprrŸ   c                 C  s   |   |¡}|j|_|S rƒ   )rÐ   ru   )rn   rŸ   r€   ro   ro   rp   rŸ   Þ  s   
zTransformVisitor.blockúBlock | Nonec                 C  r›  rƒ   ©rŸ   )rn   rŸ   ro   ro   rp   rê   ã  rœ  zTransformVisitor.optional_blockrz   úlist[Statement]c                   ó   ‡ fdd„|D ƒS )Nc                   r•   ro   )r¬   )rt   r¬   rm   ro   rp   r˜   ê  r™   z/TransformVisitor.statements.<locals>.<listcomp>ro   )rn   rz   ro   rm   rp   rz   é  r“  zTransformVisitor.statementsrÆ   úlist[Expression]c                   r   )Nc                   r•   ro   rÂ   r#  rm   ro   rp   r˜   í  r™   z0TransformVisitor.expressions.<locals>.<listcomp>ro   ©rn   rÆ   ro   rm   rp   rÆ   ì  r“  zTransformVisitor.expressionsúIterable[Expression | None]úlist[Expression | None]c                   r   )Nc                   r•   ro   )rÈ   r#  rm   ro   rp   r˜   ò  r™   z9TransformVisitor.optional_expressions.<locals>.<listcomp>ro   r¢  ro   rm   rp   r  ï  s   z%TransformVisitor.optional_expressionsrø   úlist[Block]c                   r   )Nc                   r•   ro   rž  )rt   rŸ   rm   ro   rp   r˜   õ  r™   z+TransformVisitor.blocks.<locals>.<listcomp>ro   )rn   rø   ro   rm   rp   rø   ô  r“  zTransformVisitor.blocksr   úlist[NameExpr]c                   r   )Nc                   r•   ro   r:  )rt   r   rm   ro   rp   r˜   ø  r™   z*TransformVisitor.names.<locals>.<listcomp>ro   )rn   r   ro   rm   rp   r   ÷  r“  zTransformVisitor.namesúIterable[NameExpr | None]úlist[NameExpr | None]c                 C  s2   g }|D ]}|r|  |  |¡¡ q|  d ¡ q|S rƒ   )Úappendr  )rn   r   r­   r   ro   ro   rp   r  ú  s   zTransformVisitor.optional_namesr¡   rd   c                 C  s   |S rƒ   ro   ©rn   r¡   ro   ro   rp   r¡     s   zTransformVisitor.typeúType | Nonec                 C  r›  rƒ   r  rª  ro   ro   rp   r      rœ  zTransformVisitor.optional_typer  ú
list[Type]c                   r   )Nc                   r•   ro   r  )rt   r¡   rm   ro   rp   r˜     r™   z*TransformVisitor.types.<locals>.<listcomp>ro   )rn   r  ro   rm   rp   r    r“  zTransformVisitor.typesN)rh   ri   )rr   r1   rh   r1   )rr   r'   rh   r'   )rr   r)   rh   r)   )rr   r(   rh   r(   )rŒ   r   rh   r   )rr   r"   rh   r"   )rr   r,   rh   r,   )r€   r#   r±   r#   rh   ri   )rr   r9   rh   r9   )rr   r   rh   r   )rr   r%   rh   r%   )rr   r6   rh   r6   )rr   r   rh   r   )rr   r   rh   r   )rr   rS   rh   rS   )rr   r   rh   r   )rr   r   rh   r   )rr   r7   rh   r7   )rr   rT   rh   rT   )rr   r!   rh   r!   )rr   r@   rh   r@   )rr   r	   rh   r	   )rr   r   rh   r   )rr   r&   rh   r&   )rr   r   rh   r   )rr   r   rh   r   )rr   r<   rh   r<   )rr   r>   rh   r>   )rr   rK   rh   rK   )rr   rU   rh   rU   )r  rX   rh   rX   )r  r[   rh   r[   )r  r`   rh   r`   )r  r^   rh   r^   )r  r]   rh   r]   )r  r_   rh   r_   )r  rZ   rh   rZ   )r  rY   rh   rY   )r.  r/   rh   r/   )rr   rE   rh   rE   )rr   r+   rh   r+   )rr   rG   rh   rG   )rr   r   rh   r   )rr   r    rh   r    )rr   r   rh   r   )rr   r   rh   r   )rr   r3   rh   r3   )rr   r0   rh   r0   )r€   r?   r±   r?   rh   ri   )rr   rW   rh   rW   )rr   rV   rh   rV   )rr   r   rh   r   )rr   r   rh   r   )rr   r8   rh   r8   )rr   r   rh   r   )rr   r   rh   r   )rr   r
   rh   r
   )rr   rA   rh   rA   )rr   rH   rh   rH   )rr   r   rh   r   )rr   rR   rh   rR   )rr   r.   rh   r.   )rr   r   rh   r   )rr   rL   rh   rL   )rr   rC   rh   rC   )rr   r*   rh   r*   )rr   rN   rh   rN   )rr   r-   rh   r-   )rr   rB   rh   rB   )rr   r   rh   r   )rr   r$   rh   r$   )rr   rD   rh   rD   )rr   r   rh   r   )rr   rP   rh   rP   )rr   r;   rh   r;   )rr   rQ   rh   rQ   )rr   rM   rh   rM   )rr   r4   rh   r4   )rr   r2   rh   r2   )rr   r   rh   r   )rr   rO   rh   r5   )rr   r=   rh   r=   )rr   rJ   rh   rJ   )rr   r5   rh   r5   )rÃ   r   rh   r   )r¬   rF   rh   rF   )r  r\   rh   r\   )rÃ   rš  rh   rš  )rŸ   r   rh   r   )rŸ   r  rh   r  )rz   rŸ  rh   rŸ  )rÆ   r¡  rh   r¡  )rÆ   r£  rh   r¤  )rø   r¥  rh   r¥  )r   r¦  rh   r¦  )r   r§  rh   r¨  )r¡   rd   rh   rd   )r¡   r«  rh   r«  )r  r¬  rh   r¬  )lÚ__name__Ú
__module__Ú__qualname__Ú__doc__rq   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-  r2  r3  r4  r5  r6  r7  r8  r9  r;  r  r@  r<  rD  rE  rF  rL  rP  rU  rW  rX  rY  r[  r\  r]  r^  r`  ra  rb  rf  rd  rk  rm  rz  r{  rh  r  r„  r‰  rŠ  rŒ  re  r  r‘  r’  r”  r•  r–  rr   r˜  rÃ   r¬   r  rÈ   rŸ   rê   rz   rÆ   r  rø   r   r  r¡   r    r  ro   ro   ro   rp   rg   o   sÔ    
,	
		
	
	

	rg   c                      s,   e Zd ZdZddd„Zd‡ fd
d„Z‡  ZS )rš   z—This traverser creates mappings from nested FuncDefs to placeholder FuncDefs.

    The placeholders will later be replaced with transformed nodes.
    Útransformerrg   rh   ri   c                 C  s
   || _ d S rƒ   )r±  )rn   r±  ro   ro   rp   rq     râ   zFuncMapInitializer.__init__rr   r"   c                   s8   || j jvrt|j|j|jd ƒ| j j|< tƒ  |¡ d S rƒ   )r±  rl   r"   r   rž   r›   Úsuperr®   r…   ©Ú	__class__ro   rp   r®     s
   ÿz!FuncMapInitializer.visit_func_def)r±  rg   rh   ri   )rr   r"   rh   ri   )r­  r®  r¯  r°  rq   r®   Ú__classcell__ro   ro   r³  rp   rš     s    
rš   N)pr°  Ú
__future__r   Útypingr   r   r   Ú
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#   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   Úmypy.patternsrX   rY   rZ   r[   r\   r]   r^   r_   r`   Úmypy.traverserra   Ú
mypy.typesrb   rc   rd   Ú	mypy.utilre   Úmypy.visitorrf   rg   rš   ro   ro   ro   rp   Ú<module>   s"    þR ,T     '