o
    «i e—  ã                   @   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   ú</var/www/myenv/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                       s  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:e;dfdodp„Z<e;fdqdr„Z=dsdt„ Z>dudv„ Z?dwdx„ Z@dydz„ ZAd{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šd›dœdœZQeRjSeRjTeRjTeRjTdžœZUdŸd „ ZVd›dœd¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬œZWeRjXeRjXeRjYeRjYeRjYeRjYeRjZeRjZeRj[eRj\eRj]eRjYeRj^d­œZ_e`d®ƒZad¯d°„ Zbd±d²d³d´dµd¶d·d¸d¹dºd»œ
Zcd¼d½„ Zdd¾d¿dÀœZeeRjfeRjgdÁœZhdÂdÃ„ ZidÄdÅ„ ZjdÆdÇ„ ZkdÈdÉ„ ZldÊdË„ 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‡  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 ¡ | jdd|jp%|jd4 d}|jD ]}|r8|  d¡ nd}|  |¡ q.|jD ]}|rM|  d¡ nd}|  |¡ qCW d   ƒ n1 s_w   Y  |  	¡  |  
|¡ W d   ƒ d S 1 syw   Y  d S )	Nú@zclass rn   ro   )rl   FrO   T)rY   Údecorator_listr]   rˆ   rÛ   rm   ÚbasesÚkeywordsrQ   rh   r   )r   rr   ÚdecoÚcommaÚer   r   r   Úvisit_ClassDef™  s,   



ûø
"ÿ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 }|  |¡ |  dd¡ |  |j¡ W d   ƒ n1 s7w   Y  |jrJ|  d¡ |  |j¡ | j	|  
|¡d |  |¡ W d   ƒ d S 1 sdw   Y  d S )NrÞ   r©   rn   ro   r—   ©rg   )rY   rß   r]   rˆ   rÛ   rk   Úargsr™   rQ   rh   r†   r   )r   rr   Úfill_suffixrâ   Údef_strr   r   r   ré   ·  s   


ÿ
"ÿz_Unparser._function_helperc                 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    r  c                 3   s     | ]}ˆ d  |v r|V  qdS )r   Nr   r
  )Ústringr   r   r     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_backslashes&  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_JoinedStr,  s*   


þ
z_Unparser.visit_JoinedStrc                 C   s(   |   d¡ |  || j¡ |  | j¡ d S )NrH   )rQ   Ú_fstring_FormattedValuer_   r  re   ru   r   r   r   Úvisit_FormattedValueK  s   
z_Unparser.visit_FormattedValuec                 C   s.   |j D ]}t| dt|ƒj ƒ}|||ƒ qd S )Nr  )r   r!  rÚ   r   )r   rr   rQ   rd   r#  r   r   r   r  P  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_ConstantU  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   r  r*  )rÚ   rw   r   r+   rd   rŠ   Ú
startswithrÊ   Ú
conversionÚchrr„   Úformat_specr!  r   )r   rr   rQ   ÚunparserÚexprr/  r#  r   r   r   r'  [  s&   


z!_Unparser._fstring_FormattedValuec                 C   ó   |   |j¡ d S r   )rQ   rÜ   ru   r   r   r   Ú
visit_Namep  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  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_constanty  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   ú...r6  )	rd   rx   Útuplerk   rW   r=  ÚEllipsisrQ   r7  )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 )Nú[ú]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 )NrC  rD  ©rk   rˆ   ÚeltÚ
generators©r   rr   Úgenr   r   r   Úvisit_ListComp—  ó   
ÿ"þz_Unparser.visit_ListCompc                 C   rG  ©Nrn   ro   rH  rK  r   r   r   Úvisit_GeneratorExp  rN  z_Unparser.visit_GeneratorExpc                 C   rG  )Nr)  r*  rH  rK  r   r   r   Úvisit_SetComp£  rN  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   rJ  rK  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   rS  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{*()})rE  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 ©Nr­   ©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 )Nú**)rQ   rw   r   r0   rˆ   )r‹   r\  r]  ©r   r^  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Úkeysr   )r   rr   ra  r   r`  r   Ú
visit_DictÒ  s   ÿ"ÿz_Unparser.visit_Dictc                 C   sB   |   dd¡ |  | j|j¡ W d   ƒ d S 1 sw   Y  d S rO  )rk   rW   rˆ   rE  ru   r   r   r   Úvisit_Tupleè  s   "ÿz_Unparser.visit_Tupleú~Únotú+ú-)ÚInvertÚNotÚUAddÚUSub)rg  rf  rh  ri  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)rh  ri  r   rÞ   rt  ru  rv  rw  rx  ry  rz  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   rq  rr  Ú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ˆ   rb  Ú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   )rr  r   r   r   Úincreasing_level_traverseN  s   z9_Unparser.visit_BoolOp.<locals>.increasing_level_traverser   r‰  c                      s
   ˆ  ˆ ¡S r   rP   r   )Úsr   r   r   rR   U  rS   z(_Unparser.visit_BoolOp.<locals>.<lambda>)	Úboolopsr«   r   r   Úboolop_precedencers   r„   rK   r   )r   rr   rq  r¨  r   )rr  r©  r   r   Úvisit_BoolOpJ  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_AttributeW  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_Callb  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’   rI  r   r   r   r   |  s   € zE_Unparser.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)rx   ÚTuplerE  Úany)Úslice_valuer   r   r   Úis_simple_tupleu  s
   
ÿýz2_Unparser.visit_Subscript.<locals>.is_simple_tuplerC  rD  )	rw   r   r:   rd   rˆ   rk   ÚslicerW   rE  )r   rr   r¶  r   r   r   Úvisit_Subscriptt  s   

ü"þz_Unparser.visit_Subscriptc                 C   s*   |   d¡ |  tj|j¡ |  |j¡ d S )Nr   )rQ   rw   r   r0   rd   rˆ   ru   r   r   r   Úvisit_Starred‡  s   
z_Unparser.visit_Starredc                 C   r´   )Nr>  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 rZ  )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Ú	enumeraterb  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î  s
   
þ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 rS  )r]   rˆ   ÚpatternÚguardrQ   rh   r}   ru   r   r   r   Úvisit_match_caseô  s   


"ÿz_Unparser.visit_match_casec                 C   r4  r   )rˆ   rd   ru   r   r   r   Úvisit_MatchValueý  r`   z_Unparser.visit_MatchValuec                 C   r4  r   )r=  rd   ru   r   r   r   Úvisit_MatchSingleton   r`   z_Unparser.visit_MatchSingletonc                    rB  )NrC  rD  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 rZ  r[  )Úpairr\  Ú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     rS   z._Unparser.visit_MatchMapping.<locals>.<lambda>T©ÚstrictrO   z**{})rk   rc  rK   rb  rá  ÚrestrQ   r„   )r   rr   rç  rc  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   )  rS   z,_Unparser.visit_MatchClass.<locals>.<lambda>c                    s&   | \}}ˆ   d |¡¡ ˆ  |¡ d S )Nz{}=)rQ   r„   rˆ   )rå  r®  rÜ  r   r   r   Úwrite_attr_pattern-  s   z6_Unparser.visit_MatchClass.<locals>.write_attr_patternrO   c                      rM   rN   rP   r   r   r   r   rR   5  rS   Trè  )rw   r   r:   Úclsrˆ   rk   rá  rK   Ú	kwd_attrsrQ   rb  Ú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_MatchAs:  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   J  rS   z)_Unparser.visit_MatchOr.<locals>.<lambda>)rs   r   r1   rw   rá  rK   rˆ   ru   r   r   r   Úvisit_MatchOrG  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(  r  r,  r'  r5  rŽ   r=  rA  rF  rM  rP  rQ  rR  rW  rX  rY  rd  re  rn  r   r.   r7   ro  rs  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   s4   


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