o
    DDiȟ                     @   s   d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ G dd deZd	ed
ejfddZG dd deZdS )    )CallableOptionalN)parse_expression)CSTNodeTest)	CodeRange)data_providerc                   @   s  e Zd Zeee eddfeejee	dee	dfdedddeejee	dee	dfej
edd	d
edddeejee	dee	dfdeddfeejeje	deddeje	deddfdeddfeejee	deje	deddfdeddfeejeje	deddee	dfdeddfeejee	dee	dfeje	deddee	deje	deddfdeddfeejeje	deddeje	deddfeje	deddee	deje	deddfdeddfeejee	dee	deje	deddeje	deddfeje	deddee	deje	deddfdedded d!feejee	d"d#edd$feejee	d"eje	deddee	deje	deddfd%edd&feejee	dee	deje	deddeje	deddfee	d"eje	deddee	deje	deddfd'edd(feejee	d)d*edd+feejee	d"ee	d)d,edd-fejejedd	fed.e ejedd	edejedd/fd0d1ed2d3ff	4d_d5ejd6ed7ee d8d4fd9d:Zed;d< d=fd>d< d?fd@d< dAfdBd< dAfdCd< dAfdDd< dEfdFd< dGfdHd< dIfdJd< dKfdLd< dMfdNd< dMfdOd< dMfdPd< dQfdRd< dSfdTd< dUfdVd< dUfdWd< dUfdXd< dUfdYd< dUfdZd< dUffd[eg ejf d\ed8d4fd]d^Zd4S )`LambdaCreationTest5	lambda: 5barbazposonly_paramslambda bar, baz, /: 5nodecode whitespace_afterr   posonly_indzlambda bar, baz, / : 5paramslambda bar, baz: 5"one"defaultlambda bar = "one", baz = 5: 5lambda bar, baz = 5: 5kwonly_paramslambda *, bar = "one", baz: 5firstsecondbiz"two")r   r!   9lambda first, second, *, bar = "one", baz, biz = "two": 51.01.5Elambda first = 1.0, second = 1.5, *, bar = "one", baz, biz = "two": 5thirdfourthTlambda first, second, third = 1.0, fourth = 1.5, *, bar = "one", baz, biz = "two": 5)   r   )r.   T   r   star_arglambda *params: 5r1   r!   0lambda *params, bar = "one", baz, biz = "two": 5r   r1   r!   Zlambda first, second, third = 1.0, fourth = 1.5, *params, bar = "one", baz, biz = "two": 5kwparams
star_kwarglambda **kwparams: 5r1   r9   lambda *params, **kwparams: 5  whitespace_before)lparwhitespace_after_lambdar   colonbodyrpar( lambda  : 5 ))r.      )r.      Nr   r   positionreturnc                 C   s   | j |||d d S )N)expected_position)validate_nodeselfr   r   rH    rN   X/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_nodes/tests/test_lambda.py
test_valid   s    uzLambdaCreationTest.test_validc                   C   2   t jt jt t dfdt dt  fdS )Nargr   r	   )r@   )cstLambda
ParametersParamNameInteger	LeftParenrN   rN   rN   rO   <lambda>	  
    zLambdaCreationTest.<lambda>zleft paren without right parenc                   C   rQ   )NrR   r   r	   )rD   )rS   rT   rU   rV   rW   rX   
RightParenrN   rN   rN   rO   rZ     r[   zright paren without left parenc                   C   2   t jt jt t dfdt dt ddS )NrR   r   r	    rA   rS   rT   rU   rV   rW   rX   SimpleWhitespacerN   rN   rN   rO   rZ     r[   zat least one space after lambdac                   C   r]   )NrR   r   r	   r^   r_   r`   rN   rN   rN   rO   rZ   !  r[   c                   C   s<   t jt jt jt dt ddfdt dt ddS )NrR   r	   r   r   r^   r_   r`   rN   rN   rN   rO   rZ   )  s    c                   C   s.   t t jt jt dt  ddt dS )Nr   )equalr8   r	   )rS   rT   rU   rV   rW   AssignEqualrX   rN   rN   rN   rO   rZ   3  s    z3Must have a default when specifying an AssignEqual.c                   C   *   t t jt jt ddddt dS )Nr   z***starr8   r	   rS   rT   rU   rV   rW   rX   rN   rN   rN   rO   rZ   <      z0Must specify either '', '\*' or '\*\*' for star.c                	   C   s@   t t jt jt dt ddt t dfdt dS )Nr   r   r   r   r	   rS   rT   rU   rV   rW   SimpleStringrX   rN   rN   rN   rO   rZ   C  s    zCCannot have param without defaults following a param with defaults.c                   C   s   t t jt  dt dS )Nr0   r	   )rS   rT   rU   	ParamStarrX   rN   rN   rN   rO   rZ   Q  s    z9Must have at least one kwonly param if ParamStar is used.c                   C   ,   t t jt jt dddfdt dS )Nr   *re   r   r	   rg   rN   rN   rN   rO   rZ   W  s    zExpecting a star prefix of ''c                   C   s4   t t jt jt dt dddfdt dS )Nr   r   rm   )r   rf   r   r	   ri   rN   rN   rN   rO   rZ   ^  s    	c                   C   rl   )Nr   rm   re   r    r	   rg   rN   rN   rN   rO   rZ   m  s    c                   C   rd   )Nr   **re   r0   r	   rg   rN   rN   rN   rO   rZ   v  rh   zExpecting a star prefix of '\*'c                   C   rd   )Nr   rm   re   r8   r	   rg   rN   rN   rN   rO   rZ   }  rh   z!Expecting a star prefix of '\*\*'c                	   C   B   t jt jt jt dt t ddfdt dt ddS )NrR   str
annotationr   r	   r^   r_   rS   rT   rU   rV   rW   
AnnotationrX   ra   rN   rN   rN   rO   rZ         z*Lambda params cannot have type annotationsc                	   C   ro   )NrR   rp   rq   r   r	   r^   r_   rs   rN   rN   rN   rO   rZ     ru   c                
   C   sJ   t jt jt jt dt dt t ddfdt dt ddS )NrR   r	   rp   )r   rr   r   r^   r_   )rS   rT   rU   rV   rW   rX   rt   ra   rN   rN   rN   rO   rZ     s    	c                	   C   @   t jt jt jt dt t dddt dt ddS )NrR   rp   rq   r0   r	   r^   r_   rs   rN   rN   rN   rO   rZ         c                	   C   ro   )NrR   rp   rq   r    r	   r^   r_   rs   rN   rN   rN   rO   rZ     ru   c                	   C   rv   )NrR   rp   rq   r8   r	   r^   r_   rs   rN   rN   rN   rO   rZ     rw   get_nodeexpected_rec                 C   s   |  || d S N)assert_invalid)rM   rx   ry   rN   rN   rO   test_invalid  s    XzLambdaCreationTest.test_invalidrz   )__name__
__module____qualname__r   rS   rT   rU   rX   rV   rW   
ParamSlashra   rj   Floatr   rY   Colonr\   CSTNoderp   r   rP   r   r|   rN   rN   rN   rO   r      s0   					  s				

		  Ur   r   rI   c                 C   s   t j| t jdddS )Nz3.8)python_version)config)rS   r   PartialParserConfig)r   rN   rN   rO   _parse_expression_force_38  s   r   c                   @   s	  e Zd Zeee eddfejejeje	ddej
edddeje	ddd	fd
ededddfejejeje	dede dej
edddeje	dede ddfd
ededddfejejeje	ddej
edddeje	dede ddfd
ededddfejeje eje	dede dej
edddeje	ddd	fdededddfejejeje	ddej
edddeje	ddej
edddfe eje	dede dej
edddeje	ddej
edddeje	dede ddfdededddfejejeje	dede dej
edddeje	dede dej
edddfe eje	dede dej
edddeje	ddej
edddeje	dede ddfdededddfejejeje	ddej
edddeje	ddej
edddeje	dede dej
edddeje	dede dej
edddfe eje	dede dej
edddeje	ddej
edddeje	dede ddfdededddfejejeje	d d!d	d"ededdd#fejejeje	d d!ej
edddeje	dede dej
edddeje	ddej
edddeje	dede ddfdededdd$fejejeje	ddej
edddeje	ddej
edddeje	dede dej
edddeje	dede dej
edddfeje	d d!ej
edddeje	dede dej
edddeje	ddej
edddeje	dede ddfdededdd%fejejeje	d&d'd	d(ededdd)fejejeje	d d!ej
edddeje	d&d'd	d*ededdd+fejejeddfe ejed,edd-edejedd.fd/d0fejejeje	d1d!d	d"ededdd2fejejeje	d3d'd	d(ededdd4fejejeje
ededd5eje	d1dd	gdededdd6fejeje ed7e d8eje	d9e	d9edd:d;d<ff	=dId>ejd?ed@ee dAd=fdBdCZeejejeje	ddej
edddeje	ddej
edddfe dDededddEdFf	=dId>ejd?ed@ee dAd=fdGdHZd=S )JLambdaParserTestr	   r
   r   r^   r   r   )rf   commar   re   r   r_   r   r   )r   rb   rf   r   )r   rb   rf   r   r   r3   r"   r#   r$   r%   r&   r5   r'   r(   r)   r*   r+   r,   r-   r   rm   r0   r2   r4   r6   r7   rn   r8   r:   r;   r<   r=   )r?   r   r>   )r@   r   rB   rC   rD   rE   argszlambda*args: 5kwargszlambda**kwargs: 5)r   zlambda*,args: 5rN   )r   rC   rB   _)targetiterr?   )eltfor_inz[lambda:()for _ in _]Nr   r   rH   rI   c                 C      |  ||t| d S rz   )rK   r   rL   rN   rN   rO   rP     s      kzLambdaParserTest.test_validr   r   r   c                 C   r   rz   )rK   r   rL   rN   rN   rO   test_valid_38  s   "zLambdaParserTest.test_valid_38rz   )r}   r~   r   r   rS   rT   rU   rX   rV   rW   Commara   rj   rc   rk   r   rY   r   r\   ListCompTupleCompForr   rp   r   r   rP   r   r   rN   rN   rN   rO   r     s   			+/4		/38	"	=AF
	#(	"	AEJ
		      i r   )typingr   r   libcstrS   r   libcst._nodes.tests.baser   libcst.metadatar   libcst.testing.utilsr   r   rp   BaseExpressionr   r   rN   rN   rN   rO   <module>   s      T