o
    ØÝ2g_  ã                   @  s¤   d Z ddlmZ ddlZddlZddlmZmZmZ ddl	Z
ddlmZ ddlmZmZ ddlmZ er<ddlZ
ddlZ
G dd	„ d	ee ƒZddd„Zddd„ZdS )z*Conversion of parse tree nodes to strings.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚSequence)ÚOptions)ÚIdMapperÚ
short_type)ÚNodeVisitorc                   @  s’  e Zd ZdZg d¢Zddœ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d0d*d+„Zd1d-d.„Zd2d0d1„Zd3d3d4„Zd4d6d7„Zd5d9d:„Zd6d<d=„Zd7d?d@„Zd8dBdC„Zd9dEdF„Zd:dHdI„Zd;dKdL„Zd<dNdO„Zd=dQdR„Zd>dTdU„Zd?dWdX„Zd@dZd[„ZdAd]d^„ZdBd`da„ZdCdcdd„Z dDdfdg„Z!dEdidj„Z"dFdldm„Z#dGdodp„Z$dHdrds„Z%dIdudv„Z&dJdxdy„Z'dKd{d|„Z(dLd€d„Z)dMdƒd„„Z*dNd†d‡„Z+dOd‰dŠ„Z,dPdŒd„Z-dQdd„Z.dRd’d“„Z/dSd•d–„Z0dTd˜d™„Z1dUd›dœ„Z2	dVdWd¥d¦„Z3dXd¨d©„Z4dYd«d¬„Z5dZd®d¯„Z6d[d±d²„Z7d\d´dµ„Z8d]d·d¸„Z9d^dºd»„Z:d_d½d¾„Z;d`dÀdÁ„Z<dadÃdÄ„Z=dbdÆdÇ„Z>dcdÉdÊ„Z?dddÌdÍ„Z@dedÏdÐ„ZAdfdÒdÓ„ZBdgdÕdÖ„ZCdhdØdÙ„ZDdidÛdÜ„ZEdjdÞdß„ZFdkdádâ„ZGdldädå„ZHdmdçdè„ZIdndêdë„ZJdodídî„ZKdpdðdñ„ZLdqdódô„ZMdrdöd÷„ZNdsdùdú„ZOdtdüdý„ZPdudÿd „ZQdvdd„ZRdwdd„ZSdxdd	„ZTdydd„ZUdz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^dS (ƒ  ÚStrConvzîVisitor for converting a node to a human-readable string.

    For example, an MypyFile node from program '1' is converted into
    something like this:

      MypyFile:1(
        fnam
        ExpressionStmt:1(
          IntExpr(1)))
    )ÚoptionsÚshow_idsÚ	id_mapperF)r   r   Úboolr   r   ÚreturnÚNonec                C  s&   || _ || _d | _|rtƒ | _d S d S ©N)r   r   r   r   )Úselfr   r   © r   úD/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/strconv.pyÚ__init__!   s   ÿzStrConv.__init__Útúmypy.types.TypeÚstrc                 C  s"   dd l }| |jj| j| jd¡S )Nr   )r   r   )Ú
mypy.typesÚacceptÚtypesÚTypeStrVisitorr   r   )r   r   Úmypyr   r   r   Ústringify_type(   s   zStrConv.stringify_typeÚoÚobjectú
int | Nonec                 C  s   | j r	| j  |¡S d S r   )r   Úid©r   r   r   r   r   Úget_id-   s   zStrConv.get_idc                 C  s   | j rd|  |¡› dS dS )Nú<ú>Ú )r   r$   r#   r   r   r   Ú	format_id2   s   zStrConv.format_idÚnodesúSequence[object]Úobjúmypy.nodes.Contextc                 C  sL   t |ƒd t|jƒ }| jr | jdusJ ‚|d|  |¡› d7 }t||| ƒS )zåConvert a list of items to a multiline pretty-printed string.

        The tag is produced from the type name of obj and its line
        number. See mypy.util.dump_tagged for a description of the nodes
        argument.
        ú:Nr%   r&   )r   r   Úliner   r   r$   Údump_tagged)r   r)   r+   Útagr   r   r   Údump8   s
   zStrConv.dumpúmypy.nodes.FuncItemúlist[object]c                 C  s  g }g }|j D ]F}|j}| ¡ r| |j¡ q| ¡ r.|jdus"J ‚| d|j|jgf¡ q|tjj	kr>| d|jgf¡ q|tjj
krM| d|jgf¡ qg }|jra|jD ]
}| |  |¡¡ qV|rj| d|f¡ |jrs| |j¡ |jr{| d¡ | |¡ | |j¡ |S )zþReturn a list in a format suitable for dump() that represents the
        arguments and the body of a function. The caller can then decorate the
        array with information specific to methods, global functions or
        anonymous functions.
        NÚdefaultÚVarArgÚ
DictVarArgÚArgsÚ	Generator)Ú	argumentsÚkindÚis_requiredÚappendÚvariableÚis_optionalÚinitializerr   r)   ÚARG_STARÚ	ARG_STAR2Ú	type_argsÚ
type_paramÚtypeÚis_generatorÚextendÚbody)r   r   ÚargsÚextraÚargr:   ÚaÚpr   r   r   Úfunc_helperE   s6   
€


zStrConv.func_helperúmypy.nodes.MypyFilec                 C  sr   |j g}|jr| dd¡ |jdkr| d|j tjd¡¡ |jr3| dd 	dd„ t
|jƒD ƒ¡ ¡ |  ||¡S )	Nr   ÚBOMÚmainú/zIgnoredLines(%s)ú, c                 s  s    | ]}t |ƒV  qd S r   )r   )Ú.0r.   r   r   r   Ú	<genexpr>u   s   € z*StrConv.visit_mypy_file.<locals>.<genexpr>)ÚdefsÚis_bomÚinsertÚpathÚreplaceÚosÚsepÚignored_linesr<   ÚjoinÚsortedr1   ©r   r   rK   r   r   r   Úvisit_mypy_fileh   s   
$zStrConv.visit_mypy_fileúmypy.nodes.Importc                 C  sV   g }|j D ]\}}|d ur| |› d|› ¡ q| |¡ qd|j› dd |¡› dS )Nú : zImport:ú(rR   ú))Úidsr<   r.   r]   )r   r   rK   r"   Úas_idr   r   r   Úvisit_importx   s   zStrConv.visit_importúmypy.nodes.ImportFromc                 C  sh   g }|j D ]\}}|d ur| |› d|› ¡ q| |¡ qd|j› dd|j |j › dd |¡› dS )Nrb   zImportFrom:rc   Ú.z, [rR   ú]))Únamesr<   r.   Úrelativer"   r]   )r   r   rK   ÚnameÚas_namer   r   r   Úvisit_import_from   s   ,zStrConv.visit_import_fromúmypy.nodes.ImportAllc                 C  s    d|j › dd|j |j › dS )Nz
ImportAll:rc   ri   rd   )r.   rl   r"   r#   r   r   r   Úvisit_import_allŠ   ó    zStrConv.visit_import_allúmypy.nodes.FuncDefc                 C  s¾   |   |¡}| d|j¡ dd„ |jD ƒ}t|tjjtjjh@ ƒdkr-| dd|j	› d¡ |j
tjjtjjfv r>| dd¡ |jrG| dd	¡ |jrP| dd
¡ |jrY| dd¡ |  ||¡S )Nr   c                 S  s   h | ]}|j ’qS r   )r:   )rS   rJ   r   r   r   Ú	<setcomp>’   ó    z)StrConv.visit_func_def.<locals>.<setcomp>é   zMaxPos(rd   éÿÿÿÿÚAbstractÚStaticÚClassÚProperty)rM   rW   rm   r9   Úlenr   r)   Ú	ARG_NAMEDÚARG_NAMED_OPTÚmax_posÚabstract_statusÚIS_ABSTRACTÚIMPLICITLY_ABSTRACTÚ	is_staticÚis_classÚis_propertyr1   )r   r   rK   Ú	arg_kindsr   r   r   Úvisit_func_def   s   
zStrConv.visit_func_defúmypy.nodes.OverloadedFuncDefc                 C  sb   |j  ¡ }|jr| d|j¡ |jr| d|j¡ |jr"| dd¡ |jr+| dd¡ |  ||¡S )Nr   rw   ry   rz   )ÚitemsÚcopyrD   rW   Úimplrƒ   r„   r1   r_   r   r   r   Úvisit_overloaded_func_defŸ   s   
z!StrConv.visit_overloaded_func_defúmypy.nodes.ClassDefc              	     sl  |j |jjg}|jr7|jr.|jjr.t|jjƒdks#|jjd jjdkr-| 	dd|jjf¡ n	| 	dd|jf¡ |j
rC| 	dd|j
f¡ |jrT| 	dd|j ˆ ¡› d¡ |jr`| 	dd	|jf¡ |jr}|jjr}| 	dd
d ‡ fdd„|jjD ƒ¡› d¡ |jr|jjr| 	dd|jjgf¡ |jrœ|jjrœ| 	dd¡ |jr°t|jƒD ]}| 	dˆ  |¡¡ q¤ˆ  ||¡S )Nrv   r   úbuiltins.objectÚBaseTypeÚBaseTypeExprÚTypeVarsz
Metaclass(rd   Ú
Decoratorsz	Promote([ú,c                 3  s    | ]}ˆ   |¡V  qd S r   )r   )rS   rL   ©r   r   r   rT   ¼   s   € z*StrConv.visit_class_def.<locals>.<genexpr>rj   Ú	TupleTypeÚFallbackToAny)rm   rU   rG   Úbase_type_exprsÚinfoÚbasesr|   rD   ÚfullnamerW   Ú	type_varsÚ	metaclassr   Ú
decoratorsÚ_promoter]   Ú
tuple_typeÚfallback_to_anyrB   ÚreversedrC   r1   ©r   r   rK   rL   r   r”   r   Úvisit_class_def«   s.   $€,zStrConv.visit_class_defúmypy.nodes.Varc                 C  s(   d}|j dk r	d}d| d |j d S )Nr'   r   z:nilÚVarrc   rd   )r.   rm   )r   r   Úlstr   r   r   Ú	visit_varÆ   s   
zStrConv.visit_varúmypy.nodes.GlobalDeclc                 C  ó   |   |jg|¡S r   ©r1   rk   r#   r   r   r   Úvisit_global_declÎ   ó   zStrConv.visit_global_declúmypy.nodes.NonlocalDeclc                 C  r©   r   rª   r#   r   r   r   Úvisit_nonlocal_declÑ   r¬   zStrConv.visit_nonlocal_declúmypy.nodes.Decoratorc                 C  ó   |   |j|j|jg|¡S r   )r1   Úvarr   Úfuncr#   r   r   r   Úvisit_decoratorÔ   ó   zStrConv.visit_decoratorúmypy.nodes.Blockc                 C  ó   |   |j|¡S r   )r1   rG   r#   r   r   r   Úvisit_blockÙ   ó   zStrConv.visit_blockúmypy.nodes.ExpressionStmtc                 C  r©   r   ©r1   Úexprr#   r   r   r   Úvisit_expression_stmtÜ   r¬   zStrConv.visit_expression_stmtúmypy.nodes.AssignmentStmtc                 C  sV   g }t |jƒdkrd|jfg}n|jd g}| |j¡ |jr%| |j¡ |  ||¡S )Nrv   ÚLvaluesr   )r|   Úlvaluesr<   ÚrvaluerD   r1   r_   r   r   r   Úvisit_assignment_stmtß   s   zStrConv.visit_assignment_stmtú!mypy.nodes.OperatorAssignmentStmtc                 C  r°   r   )r1   ÚopÚlvaluerÀ   r#   r   r   r   Úvisit_operator_assignment_stmtê   r´   z&StrConv.visit_operator_assignment_stmtúmypy.nodes.WhileStmtc                 C  s0   |j |jg}|jr| d|jjf¡ |  ||¡S )NÚElse)r»   rG   Ú	else_bodyr<   r1   r_   r   r   r   Úvisit_while_stmtí   s   zStrConv.visit_while_stmtúmypy.nodes.ForStmtc                 C  sh   g }|j r
| d¡ | |j¡ |jr| |j¡ | |j|jg¡ |jr.| d|jjf¡ |  ||¡S )N©ÚAsyncr'   rÇ   )	Úis_asyncr<   ÚindexÚ
index_typerF   r»   rG   rÈ   r1   r_   r   r   r   Úvisit_for_stmtó   s   
zStrConv.visit_for_stmtúmypy.nodes.ReturnStmtc                 C  r©   r   rº   r#   r   r   r   Úvisit_return_stmtÿ   r¬   zStrConv.visit_return_stmtúmypy.nodes.IfStmtc                 C  sn   g }t t|jƒƒD ]}| d|j| gf¡ | d|j| jf¡ q	|js+|  ||¡S |  |d|jjfg|¡S )NÚIfÚThenrÇ   )Úranger|   r»   r<   rG   rÈ   r1   ©r   r   rK   Úir   r   r   Úvisit_if_stmt  s   zStrConv.visit_if_stmtúmypy.nodes.BreakStmtc                 C  ó   |   g |¡S r   ©r1   r#   r   r   r   Úvisit_break_stmt  ó   zStrConv.visit_break_stmtúmypy.nodes.ContinueStmtc                 C  rÛ   r   rÜ   r#   r   r   r   Úvisit_continue_stmt  rÞ   zStrConv.visit_continue_stmtúmypy.nodes.PassStmtc                 C  rÛ   r   rÜ   r#   r   r   r   Úvisit_pass_stmt  rÞ   zStrConv.visit_pass_stmtúmypy.nodes.RaiseStmtc                 C  ó   |   |j|jg|¡S r   )r1   r»   Ú	from_exprr#   r   r   r   Úvisit_raise_stmt  ó   zStrConv.visit_raise_stmtúmypy.nodes.AssertStmtc                 C  s.   |j d ur|  |j|j g|¡S |  |jg|¡S r   )Úmsgr1   r»   r#   r   r   r   Úvisit_assert_stmt  s   
zStrConv.visit_assert_stmtúmypy.nodes.AwaitExprc                 C  r©   r   rº   r#   r   r   r   Úvisit_await_expr  r¬   zStrConv.visit_await_exprúmypy.nodes.DelStmtc                 C  r©   r   rº   r#   r   r   r   Úvisit_del_stmt"  r¬   zStrConv.visit_del_stmtúmypy.nodes.TryStmtc                 C  s¢   |j g}|jr| d¡ tt|jƒƒD ]}| |j| ¡ |j| r*| |j| ¡ | |j| ¡ q|jr?| d|jj f¡ |j	rK| d|j	j f¡ |  
||¡S )NÚ*rÇ   ÚFinally)rG   Úis_starr<   rÖ   r|   Úvarsr   ÚhandlersrÈ   Úfinally_bodyr1   r×   r   r   r   Úvisit_try_stmt%  s   

zStrConv.visit_try_stmtúmypy.nodes.WithStmtc                 C  s„   g }|j r
| d¡ tt|jƒƒD ]}| d|j| gf¡ |j| r.| d|j| gf¡ q|jr8| |j¡ |  ||jg |¡S )NrË   ÚExprÚTarget)	rÍ   r<   rÖ   r|   r»   ÚtargetÚunanalyzed_typer1   rG   r×   r   r   r   Úvisit_with_stmt7  s   

€zStrConv.visit_with_stmtúmypy.nodes.MatchStmtc                 C  sx   |j g}tt|jƒƒD ]*}| d|j| gf¡ |j| d ur*| d|j| gf¡ | d|j| jf¡ q|  ||¡S )NÚPatternÚGuardÚBody)	ÚsubjectrÖ   r|   Úpatternsr<   ÚguardsÚbodiesrG   r1   r×   r   r   r   Úvisit_match_stmtC  s   zStrConv.visit_match_stmtúmypy.nodes.TypeAliasStmtc                 C  s<   |j g}|jD ]
}| |  |¡¡ q| |j¡ |  ||¡S r   )rm   rB   r<   rC   Úvaluer1   r¢   r   r   r   Úvisit_type_alias_stmtL  s
   
zStrConv.visit_type_alias_stmtrL   úmypy.nodes.TypeParamú	list[Any]c                 C  sr   g }|j tjjkrd}n|j tjjkrd}nd}| ||j ¡ |jr)| |j¡ |jr4| d|jf¡ d|fgS )Nz**rð   r'   ÚValuesÚ	TypeParam)	r:   r   r)   ÚPARAM_SPEC_KINDÚTYPE_VAR_TUPLE_KINDr<   rm   Úupper_boundÚvalues)r   rL   rK   Úprefixr   r   r   rC   S  s   
zStrConv.type_paramúmypy.nodes.IntExprc                 C  ó   d|j › dS )NzIntExpr(rd   ©r  r#   r   r   r   Úvisit_int_exprf  r¸   zStrConv.visit_int_exprúmypy.nodes.StrExprc                 C  ó   d|   |j¡› dS )NzStrExpr(rd   ©Ústr_reprr  r#   r   r   r   Úvisit_str_expri  rç   zStrConv.visit_str_exprúmypy.nodes.BytesExprc                 C  r  )Nz
BytesExpr(rd   r  r#   r   r   r   Úvisit_bytes_exprl  rç   zStrConv.visit_bytes_exprÚsc                 C  s$   t  ddd„ |¡}t  ddd„ |¡S )Nz\\u[0-9a-fA-F]{4}c                 S  s   d|   d¡ S )Nú\r   )Úgroup©Úmr   r   r   Ú<lambda>p  s    z"StrConv.str_repr.<locals>.<lambda>z[^\x20-\x7e]c                 S  s   dt |  d¡ƒ S )Nz\u%.4xr   )Úordr  r   r   r   r   r"  q  ru   )ÚreÚsub)r   r  r   r   r   r  o  s   zStrConv.str_reprúmypy.nodes.FloatExprc                 C  r  )Nz
FloatExpr(rd   r  r#   r   r   r   Úvisit_float_exprs  r¸   zStrConv.visit_float_exprúmypy.nodes.ComplexExprc                 C  r  )NzComplexExpr(rd   r  r#   r   r   r   Úvisit_complex_exprv  r¸   zStrConv.visit_complex_exprúmypy.nodes.EllipsisExprc                 C  s   dS )NÚEllipsisr   r#   r   r   r   Úvisit_ellipsisy  s   zStrConv.visit_ellipsisúmypy.nodes.StarExprc                 C  r©   r   rº   r#   r   r   r   Úvisit_star_expr|  r¬   zStrConv.visit_star_exprúmypy.nodes.NameExprc                 C  s`   |   |j|j|j|jp|j|j¡}t|jtj	j
ƒr&|jjr&|d|jj› 7 }t|ƒd | d S )Nz = rc   rd   )Úpretty_namerm   r:   rš   Úis_inferred_defÚis_special_formÚnodeÚ
isinstancer   r)   r¥   Úis_finalÚfinal_valuer   ©r   r   Úprettyr   r   r   Úvisit_name_expr  s   ÿzStrConv.visit_name_exprNrm   r:   rš   ú
str | Noner1  Útarget_nodeúmypy.nodes.Node | Nonec                 C  sÂ   |}|r|d7 }|r|   |¡}nd}t|tjjƒr#||kr#||7 }|S |tjjks/||kr;|r;|d|› |› d7 }|S |tjjkrK|d|› d7 }|S |tjjkr[|d|› d7 }|S ||7 }|S )Nrð   r'   z [ú]z [lz [m)r(   r4  r   r)   ÚMypyFileÚGDEFÚLDEFÚMDEF)r   rm   r:   rš   r1  r;  Únr"   r   r   r   r0  ‡  s(   õ	øûÿzStrConv.pretty_nameúmypy.nodes.MemberExprc                 C  s.   |   |j|j|j|j|j¡}|  |j|g|¡S r   )r0  rm   r:   rš   r1  r3  r1   r»   r7  r   r   r   Úvisit_member_expr¥  s   zStrConv.visit_member_exprúmypy.nodes.YieldExprc                 C  r©   r   rº   r#   r   r   r   Úvisit_yield_expr©  r¬   zStrConv.visit_yield_exprúmypy.nodes.YieldFromExprc                 C  s(   |j r|  |j  | ¡g|¡S |  g |¡S r   )r»   r1   r   r#   r   r   r   Úvisit_yield_from_expr¬  s   zStrConv.visit_yield_from_exprúmypy.nodes.CallExprc                 C  sä   |j r	|j  | ¡S g }g }t|jƒD ]P\}}|tjjtjjfv r4| |j	| ¡ |tjjkr3| d¡ q|tjj
krJ| d|j| |j	| gf¡ q|tjjkr\| d|j	| gf¡ qtd|› ƒ‚|jd|fg}|  || |¡S )Nr5   ÚKwArgsr6   zunknown kind r7   )Úanalyzedr   Ú	enumerater†   r   r)   ÚARG_POSr@   r<   rH   r}   Ú	arg_namesrA   ÚRuntimeErrorÚcalleer1   )r   r   rH   rI   rØ   r:   rK   r   r   r   Úvisit_call_expr²  s"   
€ zStrConv.visit_call_exprúmypy.nodes.OpExprc                 C  s*   |j r	|j  | ¡S |  |j|j|jg|¡S r   )rK  r   r1   rÃ   ÚleftÚrightr#   r   r   r   Úvisit_op_exprÅ  s   zStrConv.visit_op_exprúmypy.nodes.ComparisonExprc                 C  rä   r   )r1   Ú	operatorsÚoperandsr#   r   r   r   Úvisit_comparison_exprÊ  rç   zStrConv.visit_comparison_exprúmypy.nodes.CastExprc                 C  rä   r   ©r1   r»   rD   r#   r   r   r   Úvisit_cast_exprÍ  rç   zStrConv.visit_cast_exprúmypy.nodes.AssertTypeExprc                 C  rä   r   r[  r#   r   r   r   Úvisit_assert_type_exprÐ  rç   zStrConv.visit_assert_type_exprúmypy.nodes.RevealExprc                 C  s.   |j tjjkr|  |jg|¡S |  |jg|¡S r   )r:   r   r)   ÚREVEAL_TYPEr1   r»   Úlocal_nodesr#   r   r   r   Úvisit_reveal_exprÓ  s   zStrConv.visit_reveal_exprúmypy.nodes.AssignmentExprc                 C  rä   r   )r1   rú   r  r#   r   r   r   Úvisit_assignment_exprÚ  rç   zStrConv.visit_assignment_exprúmypy.nodes.UnaryExprc                 C  rä   r   )r1   rÃ   r»   r#   r   r   r   Úvisit_unary_exprÝ  rç   zStrConv.visit_unary_exprúmypy.nodes.ListExprc                 C  r¶   r   ©r1   r‰   r#   r   r   r   Úvisit_list_exprà  r¸   zStrConv.visit_list_exprúmypy.nodes.DictExprc                 C  s   |   dd„ |jD ƒ|¡S )Nc                 S  s   g | ]\}}||g‘qS r   r   )rS   ÚkÚvr   r   r   Ú
<listcomp>ä  s    z+StrConv.visit_dict_expr.<locals>.<listcomp>rh  r#   r   r   r   Úvisit_dict_exprã  r´   zStrConv.visit_dict_exprúmypy.nodes.SetExprc                 C  r¶   r   rh  r#   r   r   r   Úvisit_set_expræ  r¸   zStrConv.visit_set_exprúmypy.nodes.TupleExprc                 C  r¶   r   rh  r#   r   r   r   Úvisit_tuple_expré  r¸   zStrConv.visit_tuple_exprúmypy.nodes.IndexExprc                 C  s&   |j r	|j  | ¡S |  |j|jg|¡S r   )rK  r   r1   ÚbaserÎ   r#   r   r   r   Úvisit_index_exprì  s   zStrConv.visit_index_exprúmypy.nodes.SuperExprc                 C  rä   r   )r1   rm   Úcallr#   r   r   r   Úvisit_super_exprñ  rç   zStrConv.visit_super_exprúmypy.nodes.TypeApplicationc                 C  s   |   |jd|jfg|¡S )NÚTypes)r1   r»   r   r#   r   r   r   Úvisit_type_applicationô  r´   zStrConv.visit_type_applicationúmypy.nodes.TypeVarExprc                 C  sˆ   dd l }g }|j|jjkr|dg7 }|j|jjkr|dg7 }|jr)|d|jfg7 }|j |jd¡s>|d|  	|j¡› dg7 }|  
||¡S )Nr   úVariance(COVARIANT)úVariance(CONTRAVARIANT)r  rŽ   úUpperBound(rd   )r   Úvariancer)   Ú	COVARIANTÚCONTRAVARIANTr  r   Úis_named_instancer  r   r1   ©r   r   r   rK   r   r   r   Úvisit_type_var_expr÷  s   

zStrConv.visit_type_var_exprúmypy.nodes.ParamSpecExprc                 C  ór   dd l }g }|j|jjkr|dg7 }|j|jjkr|dg7 }|j |jd¡s3|d|  |j¡› dg7 }|  	||¡S ©Nr   r}  r~  rŽ   r  rd   ©
r   r€  r)   r  r‚  r   rƒ  r  r   r1   r„  r   r   r   Úvisit_paramspec_expr  ó   

zStrConv.visit_paramspec_exprúmypy.nodes.TypeVarTupleExprc                 C  r‡  rˆ  r‰  r„  r   r   r   Úvisit_type_var_tuple_expr  r‹  z!StrConv.visit_type_var_tuple_exprúmypy.nodes.TypeAliasExprc                 C  s   d|   |jj¡› dS )NzTypeAliasExpr(rd   )r   r3  rú   r#   r   r   r   Úvisit_type_alias_expr  s   zStrConv.visit_type_alias_exprúmypy.nodes.NamedTupleExprc                 C  s>   d|j › d|jj› d|jjd ur|  |jj¡› dS d › dS )NzNamedTupleExpr:rc   rR   rd   )r.   r˜   rm   rŸ   r   r#   r   r   r   Úvisit_namedtuple_expr   s   >zStrConv.visit_namedtuple_exprúmypy.nodes.EnumCallExprc                 C  s    d|j › d|jj› d|j› dS )NzEnumCallExpr:rc   rR   rd   )r.   r˜   rm   r‰   r#   r   r   r   Úvisit_enum_call_expr#  rr   zStrConv.visit_enum_call_exprúmypy.nodes.TypedDictExprc                 C  s   d|j › d|jj› dS )NzTypedDictExpr:rc   rd   )r.   r˜   rm   r#   r   r   r   Úvisit_typeddict_expr&  r´   zStrConv.visit_typeddict_exprúmypy.nodes.PromoteExprc                 C  s   d|j › d|  |j¡› dS )NzPromoteExpr:rc   rd   )r.   r   rD   r#   r   r   r   Úvisit__promote_expr)  s   zStrConv.visit__promote_exprúmypy.nodes.NewTypeExprc              	   C  s(   d|j › d|j› d|  |jg|¡› dS )NzNewTypeExpr:rc   rR   rd   )r.   rm   r1   Úold_typer#   r   r   r   Úvisit_newtype_expr,  s   (zStrConv.visit_newtype_exprúmypy.nodes.LambdaExprc                 C  s   |   |¡}|  ||¡S r   )rM   r1   r_   r   r   r   Úvisit_lambda_expr/  s   
zStrConv.visit_lambda_exprúmypy.nodes.GeneratorExprc                 C  s.   t |jƒr|jnd }|  |j|j|j|g|¡S r   )ÚanyÚ	condlistsr1   Ú	left_exprÚindicesÚ	sequences©r   r   rŸ  r   r   r   Úvisit_generator_expr3  s   zStrConv.visit_generator_exprúmypy.nodes.ListComprehensionc                 C  r©   r   ©r1   Ú	generatorr#   r   r   r   Úvisit_list_comprehension7  r¬   z StrConv.visit_list_comprehensionúmypy.nodes.SetComprehensionc                 C  r©   r   r¦  r#   r   r   r   Úvisit_set_comprehension:  r¬   zStrConv.visit_set_comprehensionú"mypy.nodes.DictionaryComprehensionc                 C  s2   t |jƒr|jnd }|  |j|j|j|j|g|¡S r   )rž  rŸ  r1   Úkeyr  r¡  r¢  r£  r   r   r   Úvisit_dictionary_comprehension=  s   z&StrConv.visit_dictionary_comprehensionúmypy.nodes.ConditionalExprc                 C  s   |   d|jgf|j|jg|¡S )NÚ	Condition)r1   ÚcondÚif_exprÚ	else_exprr#   r   r   r   Úvisit_conditional_exprA  s   zStrConv.visit_conditional_exprúmypy.nodes.SliceExprc                 C  s<   |j |j|jg}|d sd|d< |d sd|d< |  ||¡S )Nr   z<empty>rv   )Úbegin_indexÚ	end_indexÚstrider1   r_   r   r   r   Úvisit_slice_exprD  s   zStrConv.visit_slice_exprúmypy.nodes.TempNodec                 C  r©   r   )r1   rD   r#   r   r   r   Úvisit_temp_nodeL  r¬   zStrConv.visit_temp_nodeúmypy.patterns.AsPatternc                 C  rä   r   )r1   Úpatternrm   r#   r   r   r   Úvisit_as_patternO  rç   zStrConv.visit_as_patternúmypy.patterns.OrPatternc                 C  r¶   r   ©r1   r  r#   r   r   r   Úvisit_or_patternR  r¸   zStrConv.visit_or_patternúmypy.patterns.ValuePatternc                 C  r©   r   rº   r#   r   r   r   Úvisit_value_patternU  r¬   zStrConv.visit_value_patternúmypy.patterns.SingletonPatternc                 C  r©   r   )r1   r  r#   r   r   r   Úvisit_singleton_patternX  r¬   zStrConv.visit_singleton_patternúmypy.patterns.SequencePatternc                 C  r¶   r   r¿  r#   r   r   r   Úvisit_sequence_pattern[  r¸   zStrConv.visit_sequence_patternúmypy.patterns.StarredPatternc                 C  r©   r   )r1   Úcapturer#   r   r   r   Úvisit_starred_pattern^  r¬   zStrConv.visit_starred_patternúmypy.patterns.MappingPatternc                 C  sl   g }t t|jƒƒD ]}| d|j| gf¡ | d|j| gf¡ q	|jd ur0| d|jgf¡ |  ||¡S )NÚKeyÚValueÚRest)rÖ   r|   Úkeysr<   r  Úrestr1   r×   r   r   r   Úvisit_mapping_patterna  s   
zStrConv.visit_mapping_patternúmypy.patterns.ClassPatternc                 C  sd   |j g}t|jƒdkr| d|jf¡ tt|jƒƒD ]}| d|j| |j| gf¡ q|  ||¡S )Nr   ÚPositionalsÚKeyword)Ú	class_refr|   Úpositionalsr<   rÖ   Úkeyword_keysÚkeyword_valuesr1   r×   r   r   r   Úvisit_class_patternj  s    zStrConv.visit_class_pattern)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   r   r3   )r   rN   r   r   )r   ra   r   r   )r   rh   r   r   )r   rp   r   r   )r   rs   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   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  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   )rm   r   r:   r!   rš   r:  r1  r   r;  r<  r   r   )r   rC  r   r   )r   rE  r   r   )r   rG  r   r   )r   rI  r   r   )r   rR  r   r   )r   rV  r   r   )r   rZ  r   r   )r   r]  r   r   )r   r_  r   r   )r   rc  r   r   )r   re  r   r   )r   rg  r   r   )r   rj  r   r   )r   ro  r   r   )r   rq  r   r   )r   rs  r   r   )r   rv  r   r   )r   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   )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   )_Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   r   r$   r(   r1   rM   r`   rg   ro   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  rC   r  r  r  r  r'  r)  r,  r.  r9  r0  rD  rF  rH  rQ  rU  rY  r\  r^  rb  rd  rf  ri  rn  rp  rr  ru  rx  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¼    #			ú	r
   r)   r*   r0   r:  Ústr_convr   r   c              
   C  s  ddl m}m} g }|r| |d ¡ | D ]c}t|tƒr(|r'| t|d|ƒ¡ qt|tƒr@t|d |d |ƒ}| t|dƒ¡ qt|t	j
jƒrS| t| |¡dƒ¡ qt||ƒrj| t| ||j|jd¡dƒ¡ q|durx| tt|ƒdƒ¡ q|rƒ|d  d	7  < d
 |¡S )aX  Convert an array into a pretty-printed multiline string representation.

    The format is
      tag(
        item1..
        itemN)
    Individual items are formatted like this:
     - arrays are flattened
     - pairs (str, array) are converted recursively, so that str is the tag
     - other items are converted to strings and indented
    r   )ÚTyper   rc   Nrv   é   )r   rw   rd   Ú
)r   rß  r   r<   r4  Úlistr/   ÚtupleÚindentr   r)   ÚNoder   r   r   r   r]   )r)   r0   rÞ  rß  r   rK   rB  r  r   r   r   r/   t  s0   
€

ÿ€
r/   r  rB  Úintc                 C  s$   d| |  } |   ddd|  ¡} | S )z>Indent all the lines in s (separated by newlines) by n spaces.ú rá  )rY   )r  rB  r   r   r   rä  ™  s   rä  )r)   r*   r0   r:  rÞ  r
   r   r   )r  r   rB  ræ  r   r   )rÜ  Ú
__future__r   rZ   r$  Útypingr   r   r   Ú
mypy.nodesr   Úmypy.optionsr   Ú	mypy.utilr   r   Úmypy.visitorr	   Úmypy.patternsr   r   r
   r/   rä  r   r   r   r   Ú<module>   s&        
e%