o
     wi_4                     @   s  d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ eddddeddddeddddeddddeddddedddddedee defddZ eddedd dedee defd!d"Z!ed#d$ed%d&dedee defd'd(Z"ed)d*ed+d,dedee defd-d.Z#ed/d0ed1d2dedee defd3d4Z$ed5d6ed7d6dedee defd8d9Z%d:S );    )AnyListOptionalSequenceUnion)CSTLogicError)PartialParserSyntaxError)MaybeSentinel)
AnnotationNameParam
Parameters
ParamSlash	ParamStar)AssignEqualComma)grouper)with_production)ParserConfig)ParamStarPartial) parse_parenthesizable_whitespacetypedargslistaW  (
      (tfpdef_assign (',' tfpdef_assign)* ',' tfpdef_posind [',' [ tfpdef_assign (
            ',' tfpdef_assign)* [',' [
            tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]]
          | tfpdef_starstar [',']]]
      | tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]]
      | tfpdef_starstar [',']]] )
    |  (tfpdef_assign (',' tfpdef_assign)* [',' [
       tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]]
      | tfpdef_starstar [',']]]
      | tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]]
      | tfpdef_starstar [','])
    )z>=3.8)versionz(tfpdef_assign (',' tfpdef_assign)* [',' [tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]] | tfpdef_starstar [',']]]| tfpdef_star (',' tfpdef_assign)* [',' [tfpdef_starstar [',']]] | tfpdef_starstar [','])z>=3.6,<=3.7z(tfpdef_assign (',' tfpdef_assign)* [',' [tfpdef_star (',' tfpdef_assign)* [',' tfpdef_starstar] | tfpdef_starstar]]| tfpdef_star (',' tfpdef_assign)* [',' tfpdef_starstar] | tfpdef_starstar)z<=3.5varargslistaE  vfpdef_assign (',' vfpdef_assign)* ',' vfpdef_posind [',' [ (vfpdef_assign (',' vfpdef_assign)* [',' [
            vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]]
          | vfpdef_starstar [',']]]
      | vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]]
      | vfpdef_starstar [',']) ]] | (vfpdef_assign (',' vfpdef_assign)* [',' [
            vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]]
          | vfpdef_starstar [',']]]
      | vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]]
      | vfpdef_starstar [',']
    )z(vfpdef_assign (',' vfpdef_assign)* [',' [vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]] | vfpdef_starstar [',']]]| vfpdef_star (',' vfpdef_assign)* [',' [vfpdef_starstar [',']]] | vfpdef_starstar [','])z(vfpdef_assign (',' vfpdef_assign)* [',' [vfpdef_star (',' vfpdef_assign)* [',' vfpdef_starstar] | vfpdef_starstar]]| vfpdef_star (',' vfpdef_assign)* [',' vfpdef_starstar] | vfpdef_starstar)configchildrenreturnc                    s$  g t jg dt jg  d dttt  dtttf dttt  f fdd}}t|dD ]<\}}|d u rMt|t	rGt
d|||}q6tt| |jt| |jd	}t|t	ri||t|d
}q6|||j|d
}q6ttrt dkrt
dtttt dS )NFcurrent_paramparamr   c                    s  t |tr| u r| } | S tdt |tr0| u r,tdkr,|g } | S tdt |jtr\|jdkr\|jd u r\| u rMsM| | S |  u rX | | S t	dt |jtr|jdkr|jd ur| u ryd| | S |  u r | | S tdt |jtr|jdkr|jd u r| u r| } | S td	t |jtr|jd
kr|jd u r| d ur|d } | S tdt
d)NzBCannot have multiple star ('*') markers in a single argument list.r   zCCannot have multiple slash ('/') markers in a single argument list. z@Cannot have a non-default argument following a default argument.Tz3Cannot have any arguments after a kwargs expansion.*zNExpected a keyword argument but found a starred positional argument expansion.z**zVMultiple starred keyword argument expansions are not allowed in a single argument listzLogic error!)
isinstancer   
ValueErrorr   lenstarstrdefaultappendr   r   )r   r   kwonly_paramsparamsposonly_indposonly_paramsseen_defaultstar_arg
star_kwarg ^/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/libcst/_parser/conversions/params.py	add_paramj   sz   

Y
J 
>
<



,
*

z#convert_argslist.<locals>.add_param   z/Named (keyword) arguments must follow a bare *.whitespace_beforewhitespace_after)commar   )r,   r+   r*   r.   r)   r/   )r	   DEFAULTr   r   r   r   r   r   r!   r   r   r   r   r5   r6   with_changesr#   r   tuple)r   r   r2   current	parameterr7   r0   r(   r1   convert_argslist   sZ   F


j
	
	r=   tfpdef_starz'*' [tfpdef]vfpdef_starz'*' [vfpdef]c                 C   s8   t |dkr|\}t S |\}}|j|jt| |jdS )N   r$   whitespace_after_star)r#   r   r9   stringr   r6   )r   r   r$   r   r0   r0   r1   convert_fpdef_star  s   rD   tfpdef_starstarz'**' tfpdefvfpdef_starstarz'**' vfpdefc                 C   s    |\}}|j |jt| |jdS )NrA   )r9   rC   r   r6   )r   r   starstarr   r0   r0   r1   convert_fpdef_starstar  s   rH   tfpdef_assignztfpdef ['=' test]vfpdef_assignzvfpdef ['=' test]c                 C   sH   t |dkr|\}|S |\}}}|jtt| |jt| |jd|jdS )Nr@   r4   )equalr&   )r#   r9   r   r   r5   r6   value)r   r   childr   rK   r&   r0   r0   r1   convert_fpdef_assign)  s   
rN   tfpdefzNAME [':' test]vfpdefNAMEc                 C   sf   t |dkr|\}t|j}d }n|\}}}t|j}tt| |jt| |j|jd}td||d dS )Nr@   )whitespace_before_indicatorwhitespace_after_indicator
annotationr   )r$   namerT   r&   )	r#   r   rC   r
   r   r5   r6   rL   r   )r   r   rM   namenoderT   rU   colontypehintr0   r0   r1   convert_fpdef>  s    



rY   tfpdef_posindz'/'vfpdef_posindc                 C   s   t  S )N)r   )r   r   r0   r0   r1   convert_fpdef_slashW  s   r\   N)&typingr   r   r   r   r   libcstr   libcst._exceptionsr   libcst._maybe_sentinelr	   libcst._nodes.expressionr
   r   r   r   r   r   libcst._nodes.opr   r   libcst._parser.custom_itertoolsr   #libcst._parser.production_decoratorr   libcst._parser.types.configr   libcst._parser.types.partialsr    libcst._parser.whitespace_parserr   r=   rD   rH   rN   rY   r\   r0   r0   r0   r1   <module>   s    		
		 /
"