o
    ³2úhÑš  ã                   @   sˆ   d dl Z ddlT d dlmZ d dlmZ G dd„ deƒZdee j	j
d ƒ ZG d	d
„ d
eƒZdZdZee ZG dd„ deƒZdd„ ZdS )é    Né   )Ú*)Úcontextmanager©Ú	printablec                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚnullcontextNc                 C   s
   || _ d S ©N©Úenter_result)Úselfr
   © r   úH/var/www/html/chatgem/venv/lib/python3.10/site-packages/gast/unparser.pyÚ__init__;   s   
znullcontext.__init__c                 C   s   | j S r   r	   ©r   r   r   r   Ú	__enter__>   s   znullcontext.__enter__c                 G   s   d S r   r   )r   Úexcinfor   r   r   Ú__exit__A   s   znullcontext.__exit__r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   :   s    
r   Ú1ec                   @   sX   e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZeZd
ZdZdZdZdZdZdZdZdZdS )Ú_Precedencez5Precedence table that originated from python grammar.r   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   N)r   r   r   Ú__doc__ÚTUPLEÚYIELDÚTESTÚORÚANDÚNOTÚCMPÚEXPRÚBORÚBXORÚBANDÚSHIFTÚARITHÚTERMÚFACTORÚPOWERÚAWAITÚATOMr   r   r   r   r   I   s(    r   )ú'ú")z"""z'''c                       s4  e Zd ZdZdúdd„Zdd„ Zdd„ Zd	d
„ Zdûdd„Zdd„ Z	dd„ Z
edd„ ƒZedüdd„ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Z‡ fd%d&„Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!d=d>„ Z"d?d@„ Z#dAdB„ Z$dCdD„ Z%dEdF„ Z&dGdH„ Z'dIdJ„ Z(dKdL„ Z)dMdN„ Z*dOdP„ Z+dQdR„ Z,dSdT„ Z-dUdV„ Z.dWdX„ Z/dYdZ„ Z0d[d\„ Z1d]d^„ Z2d_d`„ Z3dadb„ Z4dcdd„ Z5dedf„ Z6dgdh„ Z7didj„ Z8dkdl„ Z9dmdn„ Z:dodp„ Z;dqdr„ Z<dsdt„ Z=dudv„ Z>dwdx„ Z?e@dfdydz„ZAe@fd{d|„ZBd}d~„ ZCdd€„ ZDdd‚„ ZEdƒd„„ ZFd…d†„ ZGd‡dˆ„ ZHd‰dŠ„ ZId‹dŒ„ ZJddŽ„ ZKdd„ ZLd‘d’„ ZMd“d”„ ZNd•d–„ ZOd—d˜„ ZPd™dš„ ZQd›dœ„ ZRddž„ ZSdŸd „ ZTd¡d¢„ ZUd£d¤d¥d¦d§œZVeWjXeWjYeWjYeWjYd¨œZZd©dª„ Z[d¥d¦d«d¬d­d®d¯d°d±d²d³d´dµd¶œZ\eWj]eWj]eWj^eWj^eWj^eWj^eWj_eWj_eWj`eWjaeWjbeWj^eWjcd·œZdeed¸ƒZfd¹dº„ Zgd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅœ
ZhdÆdÇ„ ZidÈdÉdÊœZjeWjkeWjldËœZmdÌdÍ„ ZndÎdÏ„ ZodÐdÑ„ ZpdÒdÓ„ ZqdÔdÕ„ ZrdÖd×„ ZsdØdÙ„ ZtdÚdÛ„ ZudÜdÝ„ ZvdÞdß„ Zwdàdá„ Zxdâdã„ Zydädå„ Zzdædç„ Z{dèdé„ Z|dêdë„ Z}dìdí„ Z~dîdï„ Zdðdñ„ Z€dòdó„ Zdôdõ„ Z‚död÷„ Zƒdødù„ Z„‡  Z…S )ýÚ	_UnparserzMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded.Fc                 C   s(   g | _ g | _i | _i | _d| _|| _d S )Nr   )Ú_sourceÚ_bufferÚ_precedencesÚ_type_ignoresÚ_indentÚ_avoid_backslashes)r   rC   r   r   r   r   j   s   
z_Unparser.__init__c                 C   sJ   t |ƒ}z|t|ƒƒ W n
 ty   Y dS w |D ]	}|ƒ  ||ƒ qdS )z7Call f on each item in seq, calling inter() in between.N)ÚiterÚnextÚStopIteration)r   ÚinterÚfÚseqÚxr   r   r   Ú
interleaver   s   ÿ
þz_Unparser.interleavec                    s@   t |ƒdkr||d ƒ ˆ  d¡ dS ˆ  ‡ fdd„||¡ dS )z§Traverse and separate the given *items* with a comma and append it to
        the buffer. If *items* is a single item sequence, a trailing comma
        will be added.r   r   ú,c                      ó
   ˆ   d¡S ©Nú, ©Úwriter   r   r   r   Ú<lambda>†   ó   
 z&_Unparser.items_view.<locals>.<lambda>N)ÚlenrQ   rK   )r   Ú	traverserÚitemsr   r   r   Ú
items_view~   s   z_Unparser.items_viewc                 C   s   | j r
|  d¡ dS dS )z8Adds a newline if it isn't the start of generated sourceÚ
N)r>   rQ   r   r   r   r   Úmaybe_newlineˆ   s   ÿz_Unparser.maybe_newlineÚ c                 C   s    |   ¡  |  d| j | ¡ dS )zXIndent a piece of text and append it, according to the current
        indentation levelz    N)rY   rQ   rB   ©r   Útextr   r   r   Úfill   s   z_Unparser.fillc                 C   s   | j  |¡ dS )zAppend a piece of textN)r>   Úappendr[   r   r   r   rQ   “   s   z_Unparser.writec                 C   s   | j  |¡ d S r   )r?   r^   r[   r   r   r   Úbuffer_writer—   ó   z_Unparser.buffer_writerc                 C   s   d  | j¡}| j ¡  |S )NrZ   )Újoinr?   Úclear©r   Úvaluer   r   r   Úbufferš   s   
z_Unparser.bufferNc                 c   s@    |   d¡ |r|   |¡ |  jd7  _dV  |  jd8  _dS )a  A context manager for preparing the source for blocks. It adds
        the character':', increases the indentation on enter and decreases
        the indentation on exit. If *extra* is given, it will be directly
        appended after the colon character.
        ú:r   N)rQ   rB   )r   Úextrar   r   r   Úblock    s   €

z_Unparser.blockc                 c   s     |   |¡ dV  |   |¡ dS )z‡A context manager for preparing the source for expressions. It adds
        *start* to the buffer and enters, after exit it adds *end*.NrP   )r   ÚstartÚendr   r   r   Údelimit®   s   €
z_Unparser.delimitc                 C   s   |r|   ||¡S tƒ S r   )rk   r   )r   ri   rj   Ú	conditionr   r   r   Ú
delimit_if·   s   z_Unparser.delimit_ifc                 C   s   |   dd|  |¡|k¡S )z,Shortcut to adding precedence related parensú(ú))rm   Úget_precedence)r   Ú
precedenceÚnoder   r   r   Úrequire_parens½   s   z_Unparser.require_parensc                 C   s   | j  |tj¡S r   )r@   Úgetr   r+   ©r   rr   r   r   r   rp   Á   r`   z_Unparser.get_precedencec                 G   s   |D ]}|| j |< qd S r   )r@   )r   rq   Únodesrr   r   r   r   Úset_precedenceÄ   s   ÿz_Unparser.set_precedencec                 C   sd   t |ttttfƒrt|jƒdk rdS |jd }t |tƒsdS |j}t |t	ƒr.t |jt
ƒr0|S dS dS )z«If a docstring node is found in the body of the *node* parameter,
        return that docstring node, None otherwise.

        Logic mirrored from ``_PyAST_GetDocString``.r   Nr   )Ú
isinstanceÚAsyncFunctionDefÚFunctionDefÚClassDefÚModulerT   ÚbodyÚExprrd   ÚConstantÚstrru   r   r   r   Úget_raw_docstringÈ   s   ÿ

ÿz_Unparser.get_raw_docstringc                 C   s*   | j  |j¡p	|j}|d urd |¡S d S )Nz # type: {})rA   rt   ÚlinenoÚtype_commentÚformat)r   rr   Úcommentr   r   r   Úget_type_commentØ   s   
ÿz_Unparser.get_type_commentc                    s6   t |tƒr|D ]}|  |¡ qd S tt| ƒ |¡ d S r   )rx   ÚlistÚtraverseÚsuperr=   Úvisit)r   rr   Úitem©Ú	__class__r   r   rˆ   Ý   s
   
ÿz_Unparser.traversec                 C   s   g | _ |  |¡ d | j ¡S )z‚Outputs a source code string that, if converted back to an ast
        (using ast.parse) will generate an AST equivalent to *node*rZ   )r>   rˆ   ra   ru   r   r   r   rŠ   ç   s   
z_Unparser.visitc                 C   s@   |   |¡}|r|  |¡ |  |jdd … ¡ d S |  |j¡ d S )Nr   )r   Ú_write_docstringrˆ   r}   )r   rr   Ú	docstringr   r   r   Ú"_write_docstring_and_traverse_bodyî   s
   

z,_Unparser._write_docstring_and_traverse_bodyc                 C   s*   dd„ |j D ƒ| _|  |¡ | j ¡  d S )Nc                 S   s   i | ]
}|j d  |j¡“qS )zignore{})r‚   r„   Útag)Ú.0Úignorer   r   r   Ú
<dictcomp>÷   s    ÿÿz*_Unparser.visit_Module.<locals>.<dictcomp>)Útype_ignoresrA   r   rb   ru   r   r   r   Úvisit_Moduleö   s
   þ
z_Unparser.visit_Modulec                    s`   ˆ   dd¡ ˆ  ‡ fdd„ˆ j|j¡ W d   ƒ n1 sw   Y  ˆ  d¡ ˆ  |j¡ d S )Nrn   ro   c                      rM   rN   rP   r   r   r   r   rR     rS   z._Unparser.visit_FunctionType.<locals>.<lambda>ú -> )rk   rK   rˆ   ÚargtypesrQ   Úreturnsru   r   r   r   Úvisit_FunctionTypeþ   s   ÿÿ
z_Unparser.visit_FunctionTypec                 C   s(   |   ¡  |  tj|j¡ |  |j¡ d S r   )r]   rw   r   r*   rd   rˆ   ru   r   r   r   Ú
visit_Expr  s   z_Unparser.visit_Exprc                 C   sj   |   tj|¡$ |  tj|j|j¡ |  |j¡ |  d¡ |  |j¡ W d   ƒ d S 1 s.w   Y  d S )Nz := )	rs   r   r)   rw   r:   Útargetrd   rˆ   rQ   ru   r   r   r   Úvisit_NamedExpr  s   
"üz_Unparser.visit_NamedExprc                    ó(   ˆ   d¡ ˆ  ‡ fdd„ˆ j|j¡ d S )Nzimport c                      rM   rN   rP   r   r   r   r   rR     rS   z(_Unparser.visit_Import.<locals>.<lambda>)r]   rK   rˆ   Únamesru   r   r   r   Úvisit_Import  ó   
z_Unparser.visit_Importc                    sT   ˆ   d¡ ˆ  d|j ¡ |jrˆ  |j¡ ˆ  d¡ ˆ  ‡ fdd„ˆ j|j¡ d S )Nzfrom Ú.z import c                      rM   rN   rP   r   r   r   r   rR     rS   z,_Unparser.visit_ImportFrom.<locals>.<lambda>)r]   rQ   ÚlevelÚmodulerK   rˆ   rŸ   ru   r   r   r   Úvisit_ImportFrom  s   

z_Unparser.visit_ImportFromc                 C   sT   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ |  |¡}|r(|  |¡ d S d S )Nú = )r]   Útargetsrˆ   rQ   rd   r†   )r   rr   rœ   rƒ   r   r   r   Úvisit_Assign  s   


ÿz_Unparser.visit_Assignc                 C   sB   |   ¡  |  |j¡ |  d| j|jjj  d ¡ |  |j¡ d S )Nú z= )	r]   rˆ   rœ   rQ   ÚbinopÚopr   r   rd   ru   r   r   r   Úvisit_AugAssign)  s   z_Unparser.visit_AugAssignc                 C   sŒ   |   ¡  |  dd|j ot|jtƒ¡ |  |j¡ W d   ƒ n1 s$w   Y  |  d¡ |  |j¡ |j	rD|  d¡ |  |j	¡ d S d S )Nrn   ro   ú: r¦   )
r]   rm   Úsimplerx   rœ   ÚNamerˆ   rQ   Ú
annotationrd   ru   r   r   r   Úvisit_AnnAssign/  s    ÿ

þz_Unparser.visit_AnnAssignc                 C   s.   |   d¡ |jr|  d¡ |  |j¡ d S d S )NÚreturnr©   )r]   rd   rQ   rˆ   ru   r   r   r   Úvisit_Return9  s
   

þz_Unparser.visit_Returnc                 C   ó   |   d¡ d S )NÚpass©r]   ru   r   r   r   Ú
visit_Pass?  ó   z_Unparser.visit_Passc                 C   r´   )NÚbreakr¶   ru   r   r   r   Úvisit_BreakB  r¸   z_Unparser.visit_Breakc                 C   r´   )NÚcontinuer¶   ru   r   r   r   Úvisit_ContinueE  r¸   z_Unparser.visit_Continuec                    rž   )Nzdel c                      rM   rN   rP   r   r   r   r   rR   J  rS   z(_Unparser.visit_Delete.<locals>.<lambda>)r]   rK   rˆ   r§   ru   r   r   r   Úvisit_DeleteH  r¡   z_Unparser.visit_Deletec                 C   s:   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ d S d S )Nzassert rO   )r]   rˆ   ÚtestÚmsgrQ   ru   r   r   r   Úvisit_AssertL  s   

þz_Unparser.visit_Assertc                    rž   )Nzglobal c                      rM   rN   rP   r   r   r   r   rR   U  rS   z(_Unparser.visit_Global.<locals>.<lambda>©r]   rK   rQ   rŸ   ru   r   r   r   Úvisit_GlobalS  r¡   z_Unparser.visit_Globalc                    rž   )Nz	nonlocal c                      rM   rN   rP   r   r   r   r   rR   Y  rS   z*_Unparser.visit_Nonlocal.<locals>.<lambda>rÁ   ru   r   r   r   Úvisit_NonlocalW  r¡   z_Unparser.visit_Nonlocalc                 C   óz   |   tj|¡, |  d¡ |jr+|  d¡ |  tj|j¡ |  |j¡ W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S )NÚawaitr©   )rs   r   r9   rQ   rd   rw   r:   rˆ   ru   r   r   r   Úvisit_Await[  ó   

û"þz_Unparser.visit_Awaitc                 C   rÄ   )NÚyieldr©   )rs   r   r*   rQ   rd   rw   r:   rˆ   ru   r   r   r   Úvisit_Yieldc  rÇ   z_Unparser.visit_Yieldc                 C   sh   |   tj|¡# |  d¡ |jstdƒ‚|  tj|j¡ |  |j¡ W d   ƒ d S 1 s-w   Y  d S )Nzyield from z-Node can't be used without a value attribute.)	rs   r   r*   rQ   rd   Ú
ValueErrorrw   r:   rˆ   ru   r   r   r   Úvisit_YieldFromk  s   
"ûz_Unparser.visit_YieldFromc                 C   s\   |   d¡ |js|jrtdƒ‚d S |  d¡ |  |j¡ |jr,|  d¡ |  |j¡ d S d S )NÚraisez*Node can't use cause without an exception.r©   z from )r]   ÚexcÚcauserÊ   rQ   rˆ   ru   r   r   r   Úvisit_Raises  s   


þz_Unparser.visit_Raisec                 C   sæ   |   d¡ |  ¡  |  |j¡ W d   ƒ n1 sw   Y  |jD ]}|  |¡ q"|jrL|   d¡ |  ¡  |  |j¡ W d   ƒ n1 sGw   Y  |jrq|   d¡ |  ¡  |  |j¡ W d   ƒ d S 1 sjw   Y  d S d S )NÚtryÚelseÚfinally)r]   rh   rˆ   r}   ÚhandlersÚorelseÚ	finalbody)r   rr   Úexr   r   r   Ú	visit_Try  s"   

ÿ


ÿ

"ÿþz_Unparser.visit_Tryc                 C   s~   |   d¡ |jr|  d¡ |  |j¡ |jr"|  d¡ |  |jj¡ |  ¡  |  |j¡ W d   ƒ d S 1 s8w   Y  d S )NÚexceptr©   ú as )r]   ÚtyperQ   rˆ   ÚnameÚidrh   r}   ru   r   r   r   Úvisit_ExceptHandlerŽ  s   



"ÿz_Unparser.visit_ExceptHandlerc                 C   s  |   ¡  |jD ]}|  d¡ |  |¡ q|  d|j ¡ t|dƒr'|  |j¡ | jdd|j	p0|j
d4 d}|j	D ]}|rC|  d¡ nd	}|  |¡ q9|j
D ]}|rX|  d¡ nd	}|  |¡ qNW d   ƒ n1 sjw   Y  |  ¡  |  |¡ W d   ƒ d S 1 s„w   Y  d S )
Nú@zclass Útype_paramsrn   ro   )rl   FrO   T)rY   Údecorator_listr]   rˆ   rÛ   ÚhasattrÚ_type_params_helperrß   rm   ÚbasesÚkeywordsrQ   rh   r   )r   rr   ÚdecoÚcommaÚer   r   r   Úvisit_ClassDef™  s0   




ûø
"ÿz_Unparser.visit_ClassDefc                 C   ó   |   |d¡ d S )NÚdef©Ú_function_helperru   r   r   r   Úvisit_FunctionDef³  r`   z_Unparser.visit_FunctionDefc                 C   ré   )Nz	async defrë   ru   r   r   r   Úvisit_AsyncFunctionDef¶  r`   z _Unparser.visit_AsyncFunctionDefc                 C   sì   |   ¡  |jD ]}|  d¡ |  |¡ q|d |j }|  |¡ t|dƒr+|  |j¡ |  dd¡ |  |j	¡ W d   ƒ n1 sBw   Y  |j
rU|  d¡ |  |j
¡ | j|  |¡d |  |¡ W d   ƒ d S 1 sow   Y  d S )NrÞ   r©   rß   rn   ro   r—   ©rg   )rY   rà   r]   rˆ   rÛ   rá   râ   rß   rk   Úargsr™   rQ   rh   r†   r   )r   rr   Úfill_suffixrå   Údef_strr   r   r   rì   ¹  s"   



ÿ
"ÿz_Unparser._function_helperc                    sf   |d ur/t |ƒdkr1ˆ  dd¡ ˆ  ‡ fdd„ˆ j|¡ W d   ƒ d S 1 s(w   Y  d S d S d S )Nr   ú[ú]c                      rM   rN   rP   r   r   r   r   rR   Í  rS   z/_Unparser._type_params_helper.<locals>.<lambda>)rT   rk   rK   rˆ   )r   rß   r   r   r   râ   Ê  s
   "ÿÿz_Unparser._type_params_helperc                 C   s0   |   |j¡ |jr|   d¡ |  |j¡ d S d S ©Nr­   )rQ   rÛ   Úboundrˆ   ru   r   r   r   Úvisit_TypeVarÏ  ó
   
þz_Unparser.visit_TypeVarc                 C   ó   |   d|j ¡ d S ©Nr   ©rQ   rÛ   ru   r   r   r   Úvisit_TypeVarTupleÕ  ó   z_Unparser.visit_TypeVarTuplec                 C   rù   ©Nú**rû   ru   r   r   r   Úvisit_ParamSpecØ  rý   z_Unparser.visit_ParamSpecc                 C   s<   |   d¡ |  |j¡ |  |j¡ |  d¡ |  |j¡ d S )Nztype r¦   )r]   rˆ   rÛ   râ   rß   rQ   rd   ru   r   r   r   Úvisit_TypeAliasÛ  s
   

z_Unparser.visit_TypeAliasc                 C   ó   |   d|¡ d S )Nzfor ©Ú_for_helperru   r   r   r   Ú	visit_Forâ  r`   z_Unparser.visit_Forc                 C   r  )Nz
async for r  ru   r   r   r   Úvisit_AsyncForå  r`   z_Unparser.visit_AsyncForc                 C   s¸   |   |¡ |  |j¡ |  d¡ |  |j¡ | j|  |¡d |  |j¡ W d   ƒ n1 s0w   Y  |jrZ|   d¡ |  ¡  |  |j¡ W d   ƒ d S 1 sSw   Y  d S d S )Nú in rï   rÑ   )	r]   rˆ   rœ   rQ   rD   rh   r†   r}   rÔ   )r   r]   rr   r   r   r   r  è  s   

ÿ

"ÿþz_Unparser._for_helperc                 C   s4  |   d¡ |  |j¡ |  ¡  |  |j¡ W d   ƒ n1 s w   Y  |jrst|jƒdkrst|jd tƒrs|jd }|   d¡ |  |j¡ |  ¡  |  |j¡ W d   ƒ n1 s\w   Y  |jrst|jƒdkrst|jd tƒs7|jr˜|   d¡ |  ¡  |  |j¡ W d   ƒ d S 1 s‘w   Y  d S d S )Nzif r   r   zelif rÑ   )	r]   rˆ   r¾   rh   r}   rÔ   rT   rx   ÚIfru   r   r   r   Úvisit_Ifô  s&   

ÿ$


ÿ$ü

"ÿþz_Unparser.visit_Ifc                 C   s˜   |   d¡ |  |j¡ |  ¡  |  |j¡ W d   ƒ n1 s w   Y  |jrJ|   d¡ |  ¡  |  |j¡ W d   ƒ d S 1 sCw   Y  d S d S )Nzwhile rÑ   )r]   rˆ   r¾   rh   r}   rÔ   ru   r   r   r   Úvisit_While  s   

ÿ

"ÿþz_Unparser.visit_Whilec                    óh   ˆ   d¡ ˆ  ‡ fdd„ˆ j|j¡ ˆ jˆ  |¡d ˆ  |j¡ W d   ƒ d S 1 s-w   Y  d S )Nzwith c                      rM   rN   rP   r   r   r   r   rR     rS   z&_Unparser.visit_With.<locals>.<lambda>rï   ©r]   rK   rˆ   rV   rh   r†   r}   ru   r   r   r   Ú
visit_With  ó
   
"ÿz_Unparser.visit_Withc                    r  )Nzasync with c                      rM   rN   rP   r   r   r   r   rR     rS   z+_Unparser.visit_AsyncWith.<locals>.<lambda>rï   r  ru   r   r   r   Úvisit_AsyncWith  r  z_Unparser.visit_AsyncWithc                    sâ   ‡ fdd„}d  t|ˆƒ¡‰|}dˆv rdd„ |D ƒ}‡fdd„|D ƒ}|sAtˆƒ‰t‡fdd	„|D ƒˆd
 ƒ}ˆdd… |gfS ˆrm|j‡fdd„d |d
 d
 ˆd krmt|d
 ƒdksaJ ‚ˆdd… d ˆd  ‰ˆ|fS )z‹Helper for writing string literals, minimizing escapes.
        Returns the tuple (string literal to write, possible quote types).
        c                    s>   ˆ s| dv r| S | dkst dd„ | D ƒƒs|  d¡ d¡S | S )Nz
	ú\c                 s   s    | ]}|t v V  qd S r   r   )r’   Úccr   r   r   Ú	<genexpr>(  s   € zE_Unparser._str_literal_helper.<locals>.escape_char.<locals>.<genexpr>Úunicode_escapeÚascii)ÚallÚencodeÚdecode)Úc)Úescape_special_whitespacer   r   Úescape_char"  s
   z2_Unparser._str_literal_helper.<locals>.escape_charrZ   rX   c                 S   s   g | ]}|t v r|‘qS r   )Ú_MULTI_QUOTES©r’   Úqr   r   r   Ú
<listcomp>/  ó    z1_Unparser._str_literal_helper.<locals>.<listcomp>c                    s   g | ]}|ˆ vr|‘qS r   r   r  ©Úescaped_stringr   r   r  0  r  c                 3   s     | ]}ˆ d  |v r|V  qdS )r   Nr   r  )Ústringr   r   r  6  s   € z0_Unparser._str_literal_helper.<locals>.<genexpr>r   r   éÿÿÿÿc                    s   | d ˆ d kS )Nr   r#  r   )r  r   r   r   rR   :  s    z/_Unparser._str_literal_helper.<locals>.<lambda>)Úkeyr   Nr  )ra   ÚmapÚreprrE   ÚsortrT   )r   r"  Úquote_typesr  r  Úpossible_quotesÚquoter   )r  r!  r"  r   Ú_str_literal_helper  s    
z_Unparser._str_literal_helperc                 C   s0   | j ||d\}}|d }|  d ||¡¡ dS )zKWrite string literal value with a best effort attempt to avoid backslashes.©r(  r   ú	{0}{1}{0}N)r+  rQ   r„   )r   r"  r(  Ú
quote_typer   r   r   Ú_write_str_avoiding_backslashesB  s   z)_Unparser._write_str_avoiding_backslashesc           	      C   sÐ   |   d¡ | jr|  || j¡ |  | j¡ d S g }|jD ]}t| dt|ƒj	 ƒ}||| jƒ | 
| jt|tƒf¡ qg }t}|D ]\}}| j|||d\}}| 
|¡ q@d |¡}|d }|   d ||¡¡ d S )NrH   Ú	_fstring_)r(  r  rZ   r   r-  )rQ   rC   Ú_fstring_JoinedStrr_   r/  re   ÚvaluesÚgetattrrÚ   r   r^   rx   r   Ú_ALL_QUOTESr+  ra   r„   )	r   rr   re   rd   ÚmethÚ
new_bufferr(  Úis_constantr.  r   r   r   Úvisit_JoinedStrH  s*   


þ
z_Unparser.visit_JoinedStrc                 C   s(   |   d¡ |  || j¡ |  | j¡ d S )NrH   )rQ   Ú_fstring_FormattedValuer_   r/  re   ru   r   r   r   Úvisit_FormattedValueg  s   
z_Unparser.visit_FormattedValuec                 C   s.   |j D ]}t| dt|ƒj ƒ}|||ƒ qd S )Nr0  )r2  r3  rÚ   r   )r   rr   rQ   rd   r5  r   r   r   r1  l  s   
þz_Unparser._fstring_JoinedStrc                 C   s6   t |jtƒs
tdƒ‚|j dd¡ dd¡}||ƒ d S )Nz.Constants inside JoinedStr should be a string.Ú{z{{Ú}z}})rx   rd   r€   rÊ   Úreplace)r   rr   rQ   rd   r   r   r   Ú_fstring_Constantq  s   z_Unparser._fstring_Constantc                 C   sÎ   |dƒ t | ƒdd}| tjd |j¡ | |j¡}| d¡r$|dƒ d|v r,tdƒ‚||ƒ |jdkrIt	|jƒ}|d	vrBtd
ƒ‚|d 
|¡ƒ |jra|dƒ t| dt |jƒj ƒ}||j|ƒ |dƒ d S )Nr;  T)rC   r   r©   r  z5Unable to avoid backslash in f-string expression partr#  ÚsrazUnknown f-string conversion.z!{}rf   r0  r<  )rÚ   rw   r   r+   rd   rŠ   Ú
startswithrÊ   Ú
conversionÚchrr„   Úformat_specr3  r   )r   rr   rQ   ÚunparserÚexprrA  r5  r   r   r   r9  w  s&   


z!_Unparser._fstring_FormattedValuec                 C   ó   |   |j¡ d S r   )rQ   rÜ   ru   r   r   r   Ú
visit_NameŒ  r`   z_Unparser.visit_Namec                 C   s0   |   ¡  |jdkr|  d¡ | j|jtd d S )NÚur,  )r]   ÚkindrQ   r/  rd   r  ru   r   r   r   rŽ     s   

z_Unparser._write_docstringc                 C   sf   t |ttfƒr|  t|ƒ dt¡ dd t¡¡¡ d S | jr*t |t	ƒr*|  
|¡ d S |  t|ƒ¡ d S )NÚinfÚnanz	({0}-{0}))rx   ÚfloatÚcomplexrQ   r&  r=  Ú_INFSTRr„   rC   r€   r/  rc   r   r   r   Ú_write_constant•  s   ýz_Unparser._write_constantc                 C   sŠ   |j }t|tƒr(|  dd¡ |  | j|¡ W d   ƒ d S 1 s!w   Y  d S |tu r3|  d¡ d S |jdkr=|  d¡ |  |j ¡ d S )Nrn   ro   ú...rH  )	rd   rx   Útuplerk   rW   rO  ÚEllipsisrQ   rI  )r   rr   rd   r   r   r   Úvisit_Constant£  s   
"ÿ

z_Unparser.visit_Constantc                    óL   ˆ   dd¡ ˆ  ‡ fdd„ˆ j|j¡ W d   ƒ d S 1 sw   Y  d S )Nró   rô   c                      rM   rN   rP   r   r   r   r   rR   ±  rS   z&_Unparser.visit_List.<locals>.<lambda>)rk   rK   rˆ   Úeltsru   r   r   r   Ú
visit_List¯  s   "ÿz_Unparser.visit_Listc                 C   óT   |   dd¡ |  |j¡ |jD ]}|  |¡ qW d   ƒ d S 1 s#w   Y  d S )Nró   rô   ©rk   rˆ   ÚeltÚ
generators©r   rr   Úgenr   r   r   Úvisit_ListComp³  ó   
ÿ"þz_Unparser.visit_ListCompc                 C   rW  ©Nrn   ro   rX  r[  r   r   r   Úvisit_GeneratorExp¹  r^  z_Unparser.visit_GeneratorExpc                 C   rW  )Nr;  r<  rX  r[  r   r   r   Úvisit_SetComp¿  r^  z_Unparser.visit_SetCompc                 C   sj   |   dd¡% |  |j¡ |  d¡ |  |j¡ |jD ]}|  |¡ qW d   ƒ d S 1 s.w   Y  d S )Nr;  r<  r­   )rk   rˆ   r$  rQ   rd   rZ  r[  r   r   r   Úvisit_DictCompÅ  s   

ÿ"üz_Unparser.visit_DictCompc                 C   s   |j r	|  d¡ n|  d¡ |  tj|j¡ |  |j¡ |  d¡ | jtjd |jg|j	¢R Ž  |  |j¡ |j	D ]}|  d¡ |  |¡ q9d S )Nz async for z for r  r   ú if )
Úis_asyncrQ   rw   r   r)   rœ   rˆ   r+   rD   Úifs)r   rr   Ú	if_clauser   r   r   Úvisit_comprehensionÍ  s   



þz_Unparser.visit_comprehensionc                 C   s”   |   tj|¡9 |  tjd |j|j¡ |  |j¡ |  d¡ |  |j¡ |  d¡ |  tj|j¡ |  |j¡ W d   ƒ d S 1 sCw   Y  d S )Nr   rc  z else )	rs   r   r+   rw   r}   r¾   rˆ   rQ   rÔ   ru   r   r   r   Úvisit_IfExpÛ  s   

"ùz_Unparser.visit_IfExpc                    s`   |j r)ˆ  dd¡ ˆ  ‡ fdd„ˆ j|j ¡ W d   ƒ d S 1 s"w   Y  d S ˆ  d¡ d S )Nr;  r<  c                      rM   rN   rP   r   r   r   r   rR   è  rS   z%_Unparser.visit_Set.<locals>.<lambda>z{*()})rU  rk   rK   rˆ   rQ   ru   r   r   r   Ú	visit_Setå  s
   "ÿz_Unparser.visit_Setc                    sl   ‡ fdd„‰‡ ‡fdd„}ˆ   dd¡ ˆ  ‡ fdd„|t|j|jƒ¡ W d   ƒ d S 1 s/w   Y  d S )	Nc                    s"   ˆ   | ¡ ˆ  d¡ ˆ   |¡ d S rõ   ©rˆ   rQ   )ÚkÚvr   r   r   Úwrite_key_value_pairï  s   

z2_Unparser.visit_Dict.<locals>.write_key_value_pairc                    sD   | \}}|d u rˆ   d¡ ˆ  tj|¡ ˆ  |¡ d S ˆ||ƒ d S rþ   )rQ   rw   r   r0   rˆ   )r‹   rk  rl  ©r   rm  r   r   Ú
write_itemô  s   
z(_Unparser.visit_Dict.<locals>.write_itemr;  r<  c                      rM   rN   rP   r   r   r   r   rR     rS   z&_Unparser.visit_Dict.<locals>.<lambda>)rk   rK   ÚzipÚkeysr2  )r   rr   ro  r   rn  r   Ú
visit_Dictî  s   ÿ"ÿz_Unparser.visit_Dictc                 C   sB   |   dd¡ |  | j|j¡ W d   ƒ d S 1 sw   Y  d S r_  )rk   rW   rˆ   rU  ru   r   r   r   Úvisit_Tuple  s   "ÿz_Unparser.visit_Tupleú~Únotú+ú-)ÚInvertÚNotÚUAddÚUSub)ru  rt  rv  rw  c                 C   s„   | j |jjj }| j| }|  ||¡% |  |¡ |tjur#|  d¡ |  	||j
¡ |  |j
¡ W d   ƒ d S 1 s;w   Y  d S )Nr©   )Úunopr«   r   r   Úunop_precedencers   rQ   r   r7   rw   Úoperandrˆ   )r   rr   ÚoperatorÚoperator_precedencer   r   r   Úvisit_UnaryOp  s   



"ùz_Unparser.visit_UnaryOpr   rÞ   ú/ú%ú<<ú>>ú|ú^ú&ú//rÿ   )ÚAddÚSubÚMultÚMatMultÚDivÚModÚLShiftÚRShiftÚBitOrÚBitXorÚBitAndÚFloorDivÚPow)rv  rw  r   rÞ   r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rÿ   )rÿ   c                 C   s´   | j |jjj }| j| }|  ||¡= || jv r |d }|}n|}|d }|  ||j¡ |  	|j¡ |  
d |¡¡ |  ||j¡ |  	|j¡ W d   ƒ d S 1 sSw   Y  d S )Nr   ú {} )rª   r«   r   r   Úbinop_precedencers   Úbinop_rassocrw   Úleftrˆ   rQ   r„   Úright)r   rr   r  r€  Úleft_precedenceÚright_precedencer   r   r   Úvisit_BinOp=  s   

"ôz_Unparser.visit_BinOpz==z!=ú<z<=ú>z>=Úiszis notÚinznot in)
ÚEqÚNotEqÚLtÚLtEÚGtÚGtEÚIsÚIsNotÚInÚNotInc                 C   sœ   |   tj|¡= | jtjd |jg|j¢R Ž  |  |j¡ t|j|jƒD ]\}}|  	d| j
|jj  d ¡ |  |¡ q$W d   ƒ d S 1 sGw   Y  d S )Nr   r©   )rs   r   r/   rw   rš  Úcomparatorsrˆ   rp  ÚopsrQ   Úcmpopsr   r   )r   rr   Úorç   r   r   r   Úvisit_Compare[  s   þ"ýz_Unparser.visit_CompareÚandÚor)ÚAndÚOr)r²  r³  c                    s„   ˆj |jjj }ˆj| g‰ ‡ ‡fdd„}ˆ ˆ d |¡ d |¡‰ˆ ‡‡fdd„||j¡ W d   ƒ d S 1 s;w   Y  d S )Nc                    s.   ˆ d  d7  < ˆ  ˆ d | ¡ ˆ | ¡ d S )Nr   r   )rw   rˆ   )rr   )r€  r   r   r   Úincreasing_level_traversej  s   z9_Unparser.visit_BoolOp.<locals>.increasing_level_traverser   r—  c                      s
   ˆ  ˆ ¡S r   rP   r   )Úsr   r   r   rR   q  rS   z(_Unparser.visit_BoolOp.<locals>.<lambda>)	Úboolopsr«   r   r   Úboolop_precedencers   r„   rK   r2  )r   rr   r  r¶  r   )r€  r·  r   r   Úvisit_BoolOpf  s   
"þz_Unparser.visit_BoolOpc                 C   sZ   |   tj|j¡ |  |j¡ t|jtƒr t|jjtƒr |  d¡ |  d¡ |  |j	¡ d S )Nr©   r¢   )
rw   r   r:   rd   rˆ   rx   r   ÚintrQ   Úattrru   r   r   r   Úvisit_Attributes  s   

z_Unparser.visit_Attributec                 C   s¦   |   tj|j¡ |  |j¡ |  dd¡5 d}|jD ]}|r$|  d¡ nd}|  |¡ q|jD ]}|r9|  d¡ nd}|  |¡ q/W d   ƒ d S 1 sLw   Y  d S )Nrn   ro   FrO   T)	rw   r   r:   Úfuncrˆ   rk   rð   rQ   rä   )r   rr   ræ   rç   r   r   r   Ú
visit_Call~  s    

û"øz_Unparser.visit_Callc                 C   s   dd„ }|   tj|j¡ |  |j¡ |  dd¡& ||jƒr(|  | j|jj¡ n|  |j¡ W d   ƒ d S W d   ƒ d S 1 sAw   Y  d S )Nc                 S   s&   t | tƒo| jotdd„ | jD ƒƒ S )Nc                 s   s    | ]}t |tƒV  qd S r   )rx   ÚStarred)r’   rY  r   r   r   r  ˜  s   € zE_Unparser.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)rx   ÚTuplerU  Úany)Úslice_valuer   r   r   Úis_simple_tuple‘  s
   
ÿýz2_Unparser.visit_Subscript.<locals>.is_simple_tupleró   rô   )	rw   r   r:   rd   rˆ   rk   ÚslicerW   rU  )r   rr   rÄ  r   r   r   Úvisit_Subscript  s   

ü"þz_Unparser.visit_Subscriptc                 C   s*   |   d¡ |  tj|j¡ |  |j¡ d S rú   )rQ   rw   r   r0   rd   rˆ   ru   r   r   r   Úvisit_Starred£  s   
z_Unparser.visit_Starredc                 C   r´   )NrP  rP   ru   r   r   r   Úvisit_Ellipsis¨  r¸   z_Unparser.visit_Ellipsisc                 C   sR   |j r	|  |j ¡ |  d¡ |jr|  |j¡ |jr'|  d¡ |  |j¡ d S d S )Nrf   )Úlowerrˆ   rQ   ÚupperÚstepru   r   r   r   Úvisit_Slice«  s   

þz_Unparser.visit_Slicec                 C   sZ   |   d¡ |  |j¡ |  ¡  |jD ]}|  |¡ qW d   ƒ d S 1 s&w   Y  d S )Nzmatch )r]   rˆ   Úsubjectrh   Úcases)r   rr   Úcaser   r   r   Úvisit_Matchµ  s   


ÿ"ÿz_Unparser.visit_Matchc                 C   s2   |   |jj¡ |jr|   d¡ |  |j¡ d S d S rõ   )rQ   ÚargrÜ   r°   rˆ   ru   r   r   r   Ú	visit_arg¼  s
   
þz_Unparser.visit_argc           	      C   sž  d}|j |j }d gt|ƒt|jƒ  |j }tt||ƒdƒD ]/\}}|\}}|r,d}n|  d¡ |  |¡ |rB|  d¡ |  |¡ |t|j ƒkrN|  d¡ q|jsU|j	r~|rZd}n|  d¡ |  d¡ |jr~|  |jj
¡ |jjr~|  d¡ |  |jj¡ |j	r£t|j	|jƒD ]\}}|  d¡ |  |¡ |r¢|  d¡ |  |¡ qˆ|jrË|r«d}n|  d¡ |  d	|jj
 ¡ |jjrÍ|  d¡ |  |jj¡ d S d S d S )
NTr   FrO   ú=z, /r   r­   rÿ   )Úposonlyargsrð   rT   ÚdefaultsÚ	enumeraterp  rQ   rˆ   ÚvarargÚ
kwonlyargsrÜ   r°   Úkw_defaultsÚkwarg)	r   rr   ÚfirstÚall_argsrÕ  ÚindexÚelementsÚaÚdr   r   r   Úvisit_argumentsÂ  sV   




€






€

øz_Unparser.visit_argumentsc                 C   s<   |j d u r|  d¡ n|  |j ¡ |  d¡ |  |j¡ d S )Nrÿ   rÓ  )rÑ  rQ   rˆ   rd   ru   r   r   r   Úvisit_keywordõ  s
   

z_Unparser.visit_keywordc                 C   sp   |   tj|¡' |  d¡ |  |j¡ |  d¡ |  tj|j¡ |  |j¡ W d   ƒ d S 1 s1w   Y  d S )Nzlambda r­   )rs   r   r+   rQ   rˆ   rð   rw   r}   ru   r   r   r   Úvisit_Lambdaý  s   

"ûz_Unparser.visit_Lambdac                 C   s*   |   |j¡ |jr|   d|j ¡ d S d S ©NrÙ   )rQ   rÛ   Úasnameru   r   r   r   Úvisit_alias  s   ÿz_Unparser.visit_aliasc                 C   s0   |   |j¡ |jr|  d¡ |   |j¡ d S d S rä  )rˆ   Úcontext_exprÚoptional_varsrQ   ru   r   r   r   Úvisit_withitem
  rø   z_Unparser.visit_withitemc                 C   sl   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |  ¡  |  |j¡ W d   ƒ d S 1 s/w   Y  d S )Nzcase rc  )r]   rˆ   ÚpatternÚguardrQ   rh   r}   ru   r   r   r   Úvisit_match_case  s   


"ÿz_Unparser.visit_match_casec                 C   rF  r   )rˆ   rd   ru   r   r   r   Úvisit_MatchValue  r`   z_Unparser.visit_MatchValuec                 C   rF  r   )rO  rd   ru   r   r   r   Úvisit_MatchSingleton  r`   z_Unparser.visit_MatchSingletonc                    rT  )Nró   rô   c                      rM   rN   rP   r   r   r   r   rR   "  rS   z/_Unparser.visit_MatchSequence.<locals>.<lambda>)rk   rK   rˆ   Úpatternsru   r   r   r   Úvisit_MatchSequence  s
   ÿ"ÿz_Unparser.visit_MatchSequencec                 C   s&   |j }|d u r	d}|  d |¡¡ d S )NÚ_z*{})rÛ   rQ   r„   )r   rr   rÛ   r   r   r   Úvisit_MatchStar%  s   z_Unparser.visit_MatchStarc              
      s¢   ‡ fdd„}ˆ   dd¡; |j}ˆ  ‡ fdd„|t||jdd¡ |j}|d ur?|r/ˆ  d	¡ ˆ  d
 |¡¡ W d   ƒ d S W d   ƒ d S 1 sJw   Y  d S )Nc                    s*   | \}}ˆ   |¡ ˆ  d¡ ˆ   |¡ d S rõ   rj  )Úpairrk  Úpr   r   r   Úwrite_key_pattern_pair,  s   

z<_Unparser.visit_MatchMapping.<locals>.write_key_pattern_pairr;  r<  c                      rM   rN   rP   r   r   r   r   rR   5  rS   z._Unparser.visit_MatchMapping.<locals>.<lambda>T©ÚstrictrO   z**{})rk   rq  rK   rp  rï  ÚrestrQ   r„   )r   rr   rõ  rq  rø  r   r   r   Úvisit_MatchMapping+  s    
ý
õ"øz_Unparser.visit_MatchMappingc              
      sÂ   ˆ   tj|j¡ ˆ  |j¡ ˆ  dd¡C |j}ˆ  ‡ fdd„ˆ j|¡ |j}|rO‡ fdd„}|r6ˆ  	d¡ ˆ  ‡ fdd„|t
||jd	d
¡ W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S )Nrn   ro   c                      rM   rN   rP   r   r   r   r   rR   E  rS   z,_Unparser.visit_MatchClass.<locals>.<lambda>c                    s&   | \}}ˆ   d |¡¡ ˆ  |¡ d S )Nz{}=)rQ   r„   rˆ   )ró  r¼  rê  r   r   r   Úwrite_attr_patternI  s   z6_Unparser.visit_MatchClass.<locals>.write_attr_patternrO   c                      rM   rN   rP   r   r   r   r   rR   Q  rS   Trö  )rw   r   r:   Úclsrˆ   rk   rï  rK   Ú	kwd_attrsrQ   rp  Úkwd_patterns)r   rr   rï  Úattrsrú  r   r   r   Úvisit_MatchClass?  s(   ÿ

ýò"úz_Unparser.visit_MatchClassc                 C   sœ   |j }|j}|d u r|  d¡ d S |d u r|  |j ¡ d S |  tj|¡  |  tj|j¡ |  |j¡ |  d 	|j ¡¡ W d   ƒ d S 1 sGw   Y  d S )Nrñ  z as {})
rÛ   rê  rQ   rs   r   r+   rw   r1   rˆ   r„   )r   rr   rÛ   rê  r   r   r   Úvisit_MatchAsV  s   "ýz_Unparser.visit_MatchAsc                    sh   ˆ   tj|¡# ˆ jtjd g|j¢R Ž  ˆ  ‡ fdd„ˆ j|j¡ W d   ƒ d S 1 s-w   Y  d S )Nr   c                      rM   )Nz | rP   r   r   r   r   rR   f  rS   z)_Unparser.visit_MatchOr.<locals>.<lambda>)rs   r   r1   rw   rï  rK   rˆ   ru   r   r   r   Úvisit_MatchOrc  s   "þz_Unparser.visit_MatchOr)F)rZ   r   )†r   r   r   r(   r   rK   rW   rY   r]   rQ   r_   Úpropertyre   r   rh   rk   rm   rs   rp   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	  r
  r  r  r4  r+  r/  r8  r:  r1  r>  r9  rG  rŽ   rO  rS  rV  r]  r`  ra  rb  rg  rh  ri  rr  rs  r|  r   r.   r7   r}  r  rª   r5   r6   r4   r1   r2   r3   r8   r˜  Ú	frozensetr™  rž  r¯  r±  r¸  r-   r,   r¹  rº  r½  r¿  rÆ  rÇ  rÈ  rÌ  rÐ  rÒ  rá  râ  rã  ræ  ré  rì  rí  rî  rð  rò  rù  rÿ  r   r  Ú__classcell__r   r   rŒ   r   r=   e   s>   





	



ÿ&
	üóóö

3	r=   c                 C   s   t ƒ }| | ¡S r   )r=   rŠ   )Úast_objrD  r   r   r   Úunparseh  s   
r  )ÚsysrZ   Ú
contextlibr   r"  r   Úobjectr   r&  Ú
float_infoÚ
max_10_exprN  r   Ú_SINGLE_QUOTESr  r4  ÚNodeVisitorr=   r  r   r   r   r   Ú<module>   s(   3        