o
    DD©iõR  ã                   @   sd   d dl mZmZ d dlZd dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ G dd„ de	ƒZdS )	é    )ÚAnyÚCallableN)Úparse_expressionÚparse_statementÚPartialParserConfig)ÚCSTNodeTest)Ú	CodeRange)Údata_providerc                !   @   s:  e Zd Zee e d¡eje d¡e d¡d¡dee	ddƒdœe 
e d¡eje d¡e d¡d¡d	ee	d
dƒdœe e d¡eje d¡e d¡d¡dedœe e e d¡e ¡ e d¡¡eje d¡e d¡d¡dedœe 
e e d¡e ¡ e d¡¡eje d¡e d¡d¡dedœe e e d¡e ¡ e d¡¡eje d¡e d¡d¡dedœe e d¡eje d¡e d¡e ¡ d¡ddd„ dœeje d¡e ¡ e e e e e d¡eje d¡e d¡e ¡ d¡¡f¡f¡e ¡ dddd„ dœe e d¡e eje d¡eje d¡e d¡dg g d¡g¡dedœe e d¡eje d¡e d¡e e d¡¡e e d¡¡e e d ¡¡gd!¡d"ee	dd#ƒdœe e d¡eje d¡e d¡eje d¡e d¡dd$¡d%edœe e d¡eje d¡e d¡e e d¡¡geje d¡e d ¡dd&¡d'edœeje d¡eje d¡e d¡eje d¡e d(¡e d)¡d*ge d+¡e d,¡e d-¡e d.¡d/eje d0¡d1geje d2¡d3gdd4ee	d5d6ƒdœej
e d¡eje d¡e d¡deje d(¡d1eje d)¡d3eje d0¡d1geje d2¡d3gd7d8ee	d5d9ƒdœeje d¡eje d¡e d¡deje d(¡d1eje d)¡d3eje d0¡d1geje d2¡d3gd:d;edœejejde ¡ ge ¡ gdejejde ¡ ge ¡ gdejde ¡ ge ¡ gdejejde ¡ ge ¡ gde d<¡e d<¡d*gejejde ¡ ge ¡ gdejd e ¡ ge ¡ gde d<¡e d<¡e d<¡e d<¡d=e d<¡e d<¡e d<¡e d<¡d>e ¡ ge ¡ gdd?ee	dd@ƒdœe e e d¡eje d¡e d¡d¡e ej e d<¡e d<¡dAe e d¡eje d¡e d ¡d¡¡g¡dBedœe e 
e d¡eje d¡e d¡d¡e ej e d<¡e d<¡dAe 
e d¡eje d¡e d ¡d¡¡g¡dCedœe e e d¡eje d¡e d¡d¡e ej e d<¡e d<¡dAe e d¡eje d¡e d ¡d¡¡g¡dDedœgƒdEe!dFdGfdHdI„ƒZ"edJd„ dKfdLd„ dKfdMd„ dKfdNd„ dOfdPd„ dQfdRd„ dSfdTd„ dUfdVd„ dWfdXd„ dYfdZd„ d[fd\d„ dOfd]d„ dQffƒd^e#g ej$f d_e%dFdGfd`da„ƒZ&dGS )bÚSimpleCompTestÚaÚbÚc©ÚtargetÚiterz(a for b in c))é   r   )r   é   )ÚnodeÚcodeÚparserÚexpected_positionz[a for b in c])r   r   )r   é   z{a for b in c})r   r   r   Úa1Úa2z(a1 + a2 for b in c)z[a1 + a2 for b in c]z{a1 + a2 for b in c})r   r   Úasynchronousz(a async for b in c)c                 C   ó   t | tdddS )Nz3.7©Úpython_version©Úconfig)r   r   ©r   © r!   ú]/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_nodes/tests/test_simple_comp.pyÚ<lambda>R   ó    
ÿzSimpleCompTest.<lambda>Úfoo)r   z*async def foo():
    (a async for b in c)
c                 C   r   )Nz3.6r   r   )r   r   r    r!   r!   r"   r#   p   r$   Úfunc©ÚlparÚrparzfunc(a for b in c)ÚdÚeÚf©r   r   Úifsz(a for b in c if d if e if f))r   é   ©r   r   Úinner_for_inz(a for b in c for d in e))r   r   r.   r1   z(a for b in c if d for e in f)ú	z		)Úwhitespace_beforeÚwhitespace_before_testz  z   z    z     )r   r   r.   r3   Úwhitespace_after_forÚwhitespace_before_inÚwhitespace_after_inú)Úwhitespace_afterz©r3   z!(a  for   b    in     c	if		d))r   é   )r   é   )ÚlbracketÚrbracketr(   r)   z([	a for b in c		]))r   é   )ÚlbraceÚrbracer(   r)   z({	a for b in c		})Ú )r   r   r3   r5   r6   r7   )r   r   r.   r1   r3   r5   r6   r7   z ((a)for(b)in(c)if(d)for(e)in(f)))r   é   )r3   r9   z(a for b in c)is(d for e in f)z[a for b in c]is[d for e in f]z{a for b in c}is{d for e in f}ÚkwargsÚreturnNc                 K   s   | j di |¤Ž d S )Nr!   )Úvalidate_node)ÚselfrD   r!   r!   r"   Ú
test_valid   s     `zSimpleCompTest.test_validc                   C   ó@   t jt  d¡t jt  d¡t  d¡dt  ¡ t  ¡ gt  ¡ gdS ©Nr   r   r   r   r'   )ÚcstÚGeneratorExpÚNameÚCompForÚ	LeftParenÚ
RightParenr!   r!   r!   r"   r#   s  ó    üzunbalanced parensc                   C   rI   rJ   )rK   ÚListComprM   rN   rO   rP   r!   r!   r!   r"   r#   |  rQ   c                   C   rI   rJ   )rK   ÚSetComprM   rN   rO   rP   r!   r!   r!   r"   r#   …  rQ   c                	   C   ó0   t  t  d¡t jt  d¡t  d¡t  d¡d¡S )Nr   r   r   rB   ©r   r   r3   ©rK   rL   rM   rN   ÚSimpleWhitespacer!   r!   r!   r"   r#   Ž  ó    ýþz2Must have at least one space before 'for' keyword.c                
   C   s6   t  t  d¡t jt  d¡t  d¡t  ¡ t  d¡d¡S )Nr   r   r   rB   ©r   r   r   r3   ©rK   rL   rM   rN   ÚAsynchronousrW   r!   r!   r!   r"   r#   ™  s    üþz4Must have at least one space before 'async' keyword.c                	   C   rT   )Nr   r   r   rB   )r   r   r5   rV   r!   r!   r!   r"   r#   ¥  rX   z1Must have at least one space after 'for' keyword.c                	   C   rT   )Nr   r   r   rB   )r   r   r6   rV   r!   r!   r!   r"   r#   °  rX   z1Must have at least one space before 'in' keyword.c                	   C   rT   )Nr   r   r   rB   )r   r   r7   rV   r!   r!   r!   r"   r#   »  rX   z0Must have at least one space after 'in' keyword.c                   C   óB   t  t  d¡t jt  d¡t  d¡t jt  d¡t  d¡dgd¡S )Nr   r   r   r*   rB   r:   r-   ©rK   rL   rM   rN   ÚCompIfrW   r!   r!   r!   r"   r#   Æ  ó    þÿýþz1Must have at least one space before 'if' keyword.c                   C   r\   )Nr   r   r   r*   rB   )r4   r-   r]   r!   r!   r!   r"   r#   Ö  r_   z0Must have at least one space after 'if' keyword.c                   C   sH   t  t  d¡t jt  d¡t  d¡t jt  d¡t  d¡t  d¡dd¡S )	Nr   r   r   r*   r+   rB   rU   r0   rV   r!   r!   r!   r"   r#   æ  s    ýýþc                   C   sN   t  t  d¡t jt  d¡t  d¡t jt  d¡t  d¡t  ¡ t  d¡dd¡S )	Nr   r   r   r*   r+   rB   rY   r0   rZ   r!   r!   r!   r"   r#   õ  s    üýþÚget_nodeÚexpected_rec                 C   s   |   ||¡ d S )N)Úassert_invalid)rG   r`   ra   r!   r!   r"   Útest_invalidp  s    zSimpleCompTest.test_invalid)'Ú__name__Ú
__module__Ú__qualname__r	   rK   rL   rM   rN   r   r   rR   rS   ÚBinaryOperationÚAddr[   ÚFunctionDefÚ
ParametersÚIndentedBlockÚSimpleStatementLineÚExprÚCallÚArgr^   rW   rO   rP   ÚLeftSquareBracketÚRightSquareBracketÚLeftCurlyBraceÚRightCurlyBraceÚ
ComparisonÚComparisonTargetÚIsr   rH   r   ÚCSTNodeÚstrrc   r!   r!   r!   r"   r
      s¸    ÿú
 ÿú
 ÿû	þú
þú
þú
ýþöýþÿÿÿÿÿëçüÿÿþñýýþñÿýþ
ôÿüþóýÿóÿîçÿÿÿöïÿÿÿöðÿÿÿûÿ	ÿÿöá!Ü&×-þþþûÿûìþþþûÿûìþþþûÿûì  ºÿ  _ù
ù
ù
÷	ö÷÷÷òòóò üÿ ÿÿþr
   )Útypingr   r   ÚlibcstrK   r   r   r   Úlibcst._nodes.tests.baser   Úlibcst.metadatar   Úlibcst.testing.utilsr	   r
   r!   r!   r!   r"   Ú<module>   s   