o
    7šfb[  ã                   @  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                   @  sp  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d(d*d+„Zd)d-d.„Zd*d0d1„Zd+d3d4„Zd,d6d7„Zd-d9d:„Zd.d<d=„Zd/d?d@„Zd0dBdC„Zd1dEdF„Zd2dHdI„Zd3dKdL„Zd4dNdO„Zd5dQdR„Zd6dTdU„Zd7dWdX„Zd8dZd[„Zd9d]d^„Zd:d`da„Zd;dcdd„Z d<dfdg„Z!d=didj„Z"d>dldm„Z#d?dodp„Z$d@drds„Z%dAdudv„Z&dBdxdy„Z'dCd{d|„Z(dDd~d„Z)dEdd‚„Z*dFd„d…„Z+dGd‡dˆ„Z,dHdŠd‹„Z-dIddŽ„Z.dJdd‘„Z/dKd“d”„Z0	•dLdMddž„Z1dNd d¡„Z2dOd£d¤„Z3dPd¦d§„Z4dQd©dª„Z5dRd¬d­„Z6dSd¯d°„Z7dTd²d³„Z8dUdµd¶„Z9dVd¸d¹„Z:dWd»d¼„Z;dXd¾d¿„Z<dYdÁdÂ„Z=dZdÄ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dadÙdÚ„ZEdbdÜdÝ„ZFdcdßdà„ZGdddâdã„ZHdedådæ„ZIdfdèdé„ZJdgdëdì„ZKdhdîdï„ZLdidñdò„ZMdjdôdõ„ZNdkd÷dø„ZOdldúdû„ZPdmdýdþ„ZQdnd d„ZRdodd„ZSdpdd„ZTdqd	d
„ZUdrdd„ZVdsdd„ZWdtdd„ZXdudd„ZYdvdd„ZZdwdd„Z[dxdd„Z\d•S (y  Ú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   úE/home/ertert/spirit/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 }|rY| d|f¡ |jrb| |j¡ |jrj| 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Úis_generatorÚextendÚbody)r   r   ÚargsÚextraÚargr:   Úar   r   r   Úfunc_helperE   s0   
€

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>r   s   € z*StrConv.visit_mypy_file.<locals>.<genexpr>)ÚdefsÚis_bomÚinsertÚpathÚreplaceÚosÚsepÚignored_linesr<   ÚjoinÚsortedr1   ©r   r   rI   r   r   r   Úvisit_mypy_filee   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:ú(rO   ú))Úidsr<   r.   rZ   )r   r   rI   r"   Úas_idr   r   r   Úvisit_importu   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 )Nr_   zImportFrom:r`   Ú.z, [rO   ú]))Únamesr<   r.   Úrelativer"   rZ   )r   r   rI   Ú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:r`   rf   ra   )r.   ri   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:   )rP   rH   r   r   r   Ú	<setcomp>   ó    z)StrConv.visit_func_def.<locals>.<setcomp>é   zMaxPos(ra   éÿÿÿÿÚAbstractÚStaticÚClassÚProperty)rJ   rT   rj   r9   Úlenr   r)   Ú	ARG_NAMEDÚARG_NAMED_OPTÚmax_posÚabstract_statusÚIS_ABSTRACTÚIMPLICITLY_ABSTRACTÚ	is_staticÚis_classÚis_propertyr1   )r   r   rI   Ú	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   rt   rv   rw   )ÚitemsÚcopyrB   rT   Úimplr€   r   r1   r\   r   r   r   Úvisit_overloaded_func_defœ   s   
z!StrConv.visit_overloaded_func_defúmypy.nodes.ClassDefc              	     sD  |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¡ ˆ  ||¡S )Nrs   r   úbuiltins.objectÚBaseTypeÚBaseTypeExprÚTypeVarsz
Metaclass(ra   Ú
Decoratorsz	Promote([ú,c                 3  s    | ]}ˆ   |¡V  qd S r   )r   )rP   Úp©r   r   r   rQ   ¹   s   € z*StrConv.visit_class_def.<locals>.<genexpr>rg   Ú	TupleTypeÚFallbackToAny)rj   rR   rE   Úbase_type_exprsÚinfoÚbasesry   rB   ÚfullnamerT   Ú	type_varsÚ	metaclassr   Ú
decoratorsÚ_promoterZ   Ú
tuple_typeÚfallback_to_anyr1   r\   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ÚVarr`   ra   )r.   rj   )r   r   Úlstr   r   r   Ú	visit_varÀ   s   
zStrConv.visit_varúmypy.nodes.GlobalDeclc                 C  ó   |   |jg|¡S r   ©r1   rh   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   rE   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 )Nrs   ÚLvaluesr   )ry   Úlvaluesr<   ÚrvaluerB   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·   rE   Ú	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_typerD   r·   rE   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Ã   )Úrangery   r·   r<   rE   rÄ   r1   ©r   r   rI   Ú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)rE   Úis_starr<   rÒ   ry   Ú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Ò   ry   r·   ÚtargetÚunanalyzed_typer1   rE   rÓ   r   r   r   Úvisit_with_stmt1  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Ò   ry   Úpatternsr<   ÚguardsÚbodiesrE   r1   rÓ   r   r   r   Úvisit_match_stmt=  s   zStrConv.visit_match_stmtúmypy.nodes.IntExprc                 C  ó   d|j › dS )NzIntExpr(ra   ©Úvaluer#   r   r   r   Úvisit_int_exprJ  r´   zStrConv.visit_int_exprúmypy.nodes.StrExprc                 C  ó   d|   |j¡› dS )NzStrExpr(ra   ©Ústr_reprr  r#   r   r   r   Úvisit_str_exprM  rã   zStrConv.visit_str_exprúmypy.nodes.BytesExprc                 C  r  )Nz
BytesExpr(ra   r	  r#   r   r   r   Úvisit_bytes_exprP  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>T  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  U  rr   )ÚreÚsub)r   r  r   r   r   r
  S  s   zStrConv.str_reprúmypy.nodes.FloatExprc                 C  r  )Nz
FloatExpr(ra   r  r#   r   r   r   Úvisit_float_exprW  r´   zStrConv.visit_float_exprúmypy.nodes.ComplexExprc                 C  r  )NzComplexExpr(ra   r  r#   r   r   r   Úvisit_complex_exprZ  r´   zStrConv.visit_complex_exprúmypy.nodes.EllipsisExprc                 C  s   dS )NÚEllipsisr   r#   r   r   r   Úvisit_ellipsis]  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 = r`   ra   )Úpretty_namerj   r:   r˜   Úis_inferred_defÚis_special_formÚnodeÚ
isinstancer   r)   r¡   Úis_finalÚfinal_valuer   ©r   r   Úprettyr   r   r   Úvisit_name_exprc  s   ÿzStrConv.visit_name_exprNrj   r:   r˜   ú
str | Noner"  Ú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(   r%  r   r)   ÚMypyFileÚGDEFÚLDEFÚMDEF)r   rj   r:   r˜   r"  r,  Únr"   r   r   r   r!  k  s(   õ	øûÿzStrConv.pretty_nameúmypy.nodes.MemberExprc                 C  s.   |   |j|j|j|j|j¡}|  |j|g|¡S r   )r!  rj   r:   r˜   r"  r$  r1   r·   r(  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<   rF   rz   Ú	arg_namesrA   ÚRuntimeErrorÚcalleer1   )r   r   rF   rG   rÔ   r:   rI   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   )r<  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·   rB   r#   r   r   r   Úvisit_cast_expr±  rã   zStrConv.visit_cast_exprúmypy.nodes.AssertTypeExprc                 C  rà   r   rL  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   )rP   ÚkÚvr   r   r   Ú
<listcomp>È  s    z+StrConv.visit_dict_expr.<locals>.<listcomp>rY  r#   r   r   r   Úvisit_dict_exprÇ  r°   zStrConv.visit_dict_exprúmypy.nodes.SetExprc                 C  r²   r   rY  r#   r   r   r   Úvisit_set_exprÊ  r´   zStrConv.visit_set_exprúmypy.nodes.TupleExprc                 C  r²   r   rY  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   )r<  r   r1   ÚbaserÊ   r#   r   r   r   Úvisit_index_exprÐ  s   zStrConv.visit_index_exprúmypy.nodes.SuperExprc                 C  rà   r   )r1   rj   Ú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)ÚValuesr‹   úUpperBound(ra   )r   Úvariancer)   Ú	COVARIANTÚCONTRAVARIANTÚvaluesr   Úis_named_instanceÚupper_boundr   r1   ©r   r   r   rI   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   rn  ro  r‹   rq  ra   ©
r   rr  r)   rs  rt  r   rv  rw  r   r1   rx  r   r   r   Úvisit_paramspec_expré  ó   

zStrConv.visit_paramspec_exprúmypy.nodes.TypeVarTupleExprc                 C  r{  r|  r}  rx  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(ra   )r   r$  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:r`   rO   ra   )r.   r–   rj   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:r`   rO   ra   )r.   r–   rj   r†   r#   r   r   r   Úvisit_enum_call_expr  ro   zStrConv.visit_enum_call_exprúmypy.nodes.TypedDictExprc                 C  s   d|j › d|jj› dS )NzTypedDictExpr:r`   ra   )r.   r–   rj   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:r`   ra   )r.   r   rB   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:r`   rO   ra   )r.   rj   r1   Úold_typer#   r   r   r   Úvisit_newtype_expr  s   (zStrConv.visit_newtype_exprúmypy.nodes.LambdaExprc                 C  s   |   |¡}|  ||¡S r   )rJ   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_expr  s   zStrConv.visit_generator_exprúmypy.nodes.ListComprehensionc                 C  r¥   r   ©r1   Ú	generatorr#   r   r   r   Úvisit_list_comprehension  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_expr%  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>rs   )Úbegin_indexÚ	end_indexÚstrider1   r\   r   r   r   Úvisit_slice_expr(  s   zStrConv.visit_slice_exprúmypy.nodes.TempNodec                 C  r¥   r   )r1   rB   r#   r   r   r   Úvisit_temp_node0  r¨   zStrConv.visit_temp_nodeúmypy.patterns.AsPatternc                 C  rà   r   )r1   Úpatternrj   r#   r   r   r   Úvisit_as_pattern3  rã   zStrConv.visit_as_patternúmypy.patterns.OrPatternc                 C  r²   r   ©r1   rþ   r#   r   r   r   Úvisit_or_pattern6  r´   zStrConv.visit_or_patternúmypy.patterns.ValuePatternc                 C  r¥   r   r¶   r#   r   r   r   Úvisit_value_pattern9  r¨   zStrConv.visit_value_patternúmypy.patterns.SingletonPatternc                 C  r¥   r   )r1   r  r#   r   r   r   Úvisit_singleton_pattern<  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_patternB  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Ò   ry   Úkeysr<   ru  Úrestr1   rÓ   r   r   r   Úvisit_mapping_patternE  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_refry   Úpositionalsr<   rÒ   Úkeyword_keysÚkeyword_valuesr1   rÓ   r   r   r   Úvisit_class_patternN  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   rK   r   r   )r   r^   r   r   )r   re   r   r   )r   rm   r   r   )r   rp   r   r   )r   r…   r   r   )r   rŠ   r   r   )r   r    r   r   )r   r¤   r   r   )r   r©   r   r   )r   r«   r   r   )r   r±   r   r   )r   rµ   r   r   )r   r¹   r   r   )r   r¾   r   r   )r   rÂ   r   r   )r   rÆ   r   r   )r   rÍ   r   r   )r   rÏ   r   r   )r   rÖ   r   r   )r   rÛ   r   r   )r   rÝ   r   r   )r   rß   r   r   )r   rä   r   r   )r   rç   r   r   )r   ré   r   r   )r   rë   r   r   )r   ró   r   r   )r   rù   r   r   )r   r  r   r   )r   r  r   r   )r   r  r   r   )r  r   r   r   )r   r  r   r   )r   r  r   r   )r   r  r   r   )r   r  r   r   )r   r   r   r   r   )rj   r   r:   r!   r˜   r+  r"  r   r,  r-  r   r   )r   r4  r   r   )r   r6  r   r   )r   r8  r   r   )r   r:  r   r   )r   rC  r   r   )r   rG  r   r   )r   rK  r   r   )r   rN  r   r   )r   rP  r   r   )r   rT  r   r   )r   rV  r   r   )r   rX  r   r   )r   r[  r   r   )r   r`  r   r   )r   rb  r   r   )r   rd  r   r   )r   rg  r   r   )r   rj  r   r   )r   rm  r   r   )r   rz  r   r   )r   r€  r   r   )r   r‚  r   r   )r   r„  r   r   )r   r†  r   r   )r   rˆ  r   r   )r   rŠ  r   r   )r   rŒ  r   r   )r   r  r   r   )r   r‘  r   r   )r   r™  r   r   )r   r  r   r   )r   rŸ  r   r   )r   r¢  r   r   )r   r¨  r   r   )r   r­  r   r   )r   r¯  r   r   )r   r²  r   r   )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   rJ   r]   rd   rl   rn   r„   r‰   rŸ   r£   r§   rª   r¯   r³   r¸   r½   rÁ   rÅ   rÌ   rÎ   rÕ   rÙ   rÜ   rÞ   râ   ræ   rè   rê   rò   rø   r  r  r  r  r
  r  r  r  r  r*  r!  r5  r7  r9  rB  rF  rJ  rM  rO  rS  rU  rW  rZ  r_  ra  rc  rf  ri  rl  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
      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   r`   Nrs   é   )r   rt   ra   Ú
)r   rÓ  r   r<   r%  Úlistr/   ÚtupleÚindentr   r)   ÚNoder   r   r   r   rZ   )r)   r0   rÒ  rÓ  r   rI   r3  r  r   r   r   r/   X  s0   
€

ÿ€
r/   r  r3  Úintc                 C  s$   d| |  } |   ddd|  ¡} | S )z>Indent all the lines in s (separated by newlines) by n spaces.ú rÕ  )rV   )r  r3  r   r   r   rØ  }  s   rØ  )r)   r*   r0   r+  rÒ  r
   r   r   )r  r   r3  rÚ  r   r   )rÐ  Ú
__future__r   rW   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&        
I%