o
    DDix0                     @   s  U d dl 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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZv d dlwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZ d d	lmZmZ d d
lmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ eze{eeeeeee}e|e~exeyfZeedf ed< g e=eqeepemeleneoeXeFeKeHeieOeLeSeeecedebe`eTeaeUeVekeje\egeGeNe]e^e_eteYeseWeveueIeZeMeQeRePeJehe?eBeCeDeAe@e[erefe(e1e2e'ee)eee-ee e*eeee6e8e9e/e.e+e7eeeeeee!e"e#e$e%e&ee5e4e3eeeee,e0eee;e:R Zeedf ed< dedee defddZe dede	ee ef ddfddZe deeef fddZe d/ddZdedeeef fdd Zd!ed"ed#edefd$d%Zd!ee d"edefd&d'Zd(ee dee defd)d*Zdedee dee fd+d,Ze dedee deeef fd-d.ZdS )0    N)	lru_cache)	FrozenSetIteratorMappingOptionalTupleUnion)1convert_arg_assign_comp_forconvert_arglistconvert_argumentconvert_atomconvert_atom_basicconvert_atom_curlybracesconvert_atom_ellipsesconvert_atom_exprconvert_atom_expr_awaitconvert_atom_expr_trailerconvert_atom_parensconvert_atom_squarebracketsconvert_atom_stringconvert_binopconvert_boolopconvert_comp_forconvert_comp_ifconvert_comp_opconvert_comparisonconvert_dictorsetmakerconvert_expression_inputconvert_factorconvert_fstringconvert_fstring_contentconvert_fstring_conversionconvert_fstring_equalityconvert_fstring_exprconvert_fstring_format_specconvert_lambdaconvert_namedexpr_testconvert_not_testconvert_powerconvert_sliceopconvert_star_argconvert_star_exprconvert_subscriptconvert_subscriptlistconvert_sync_comp_forconvert_testconvert_test_nocondconvert_test_or_expr_listconvert_testlist_comp_listconvert_testlist_comp_tupleconvert_trailerconvert_trailer_arglistconvert_trailer_attributeconvert_trailer_subscriptlistconvert_yield_argconvert_yield_expr)convert_file_input)convert_argslistconvert_fpdefconvert_fpdef_assignconvert_fpdef_slashconvert_fpdef_starconvert_fpdef_starstar)1convert_annassignconvert_assert_stmtconvert_assignconvert_asyncable_funcdefconvert_asyncable_stmtconvert_augassignconvert_break_stmtconvert_classdefconvert_compound_stmtconvert_continue_stmtconvert_decoratedconvert_decoratorconvert_decoratorsconvert_del_stmtconvert_dotted_as_nameconvert_dotted_as_namesconvert_dotted_nameconvert_except_clauseconvert_expr_stmtconvert_for_stmtconvert_funcdefconvert_funcdef_annotationconvert_global_stmtconvert_if_stmtconvert_if_stmt_elifconvert_if_stmt_elseconvert_import_as_nameconvert_import_as_namesconvert_import_fromconvert_import_nameconvert_import_relativeconvert_import_stmtconvert_indented_suiteconvert_nonlocal_stmtconvert_parametersconvert_pass_stmtconvert_raise_stmtconvert_return_stmtconvert_simple_stmt_lineconvert_simple_stmt_partialconvert_simple_stmt_suiteconvert_small_stmtconvert_stmtconvert_stmt_inputconvert_suiteconvert_try_stmtconvert_while_stmtconvert_with_itemconvert_with_stmt)convert_ASYNCconvert_AWAITconvert_DEDENTconvert_ENDMARKERconvert_FSTRING_ENDconvert_FSTRING_STARTconvert_FSTRING_STRINGconvert_INDENTconvert_NAMEconvert_NEWLINEconvert_NUMBER
convert_OPconvert_STRING)generate_grammarGrammar)PythonTokenTypes	TokenType)parse_version_stringPythonVersionInfo)get_productions)
AutoConfig)NonterminalConversionTerminalConversion)
Production._TERMINAL_CONVERSIONS_SEQUENCE!_NONTERMINAL_CONVERSIONS_SEQUENCEversionfuture_importsreturnc                 C   s0   g }t | |D ]	}|t| qd|d S )z
    Returns an BNF-like grammar text that `parso.pgen2.generator.generate_grammar` can
    handle.

    While you should generally use `get_grammar` instead, this can be useful for
    debugging the grammar.
    
)get_nonterminal_productionsappendstrjoin)r   r   linesp r   O/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_parser/grammar.pyget_grammar_str  s   r   zGrammar[TokenType]c                 C   s"   t |tr	td}tt| |tS )Nr   )
isinstancer   	frozensetr   r   r   )r   r   r   r   r   get_grammar   s   
r   c                   C   s   dd t D S )zw
    Returns a mapping from terminal type name to the conversion function that should be
    called by the parser.
    c                 S   s"   i | ]}t d |jd|qS )zconvert_(.*)   )rematch__name__group).0fnr   r   r   
<dictcomp>1  s    z,get_terminal_conversions.<locals>.<dictcomp>)r   r   r   r   r   get_terminal_conversions+  s   r   c                     sn   t D ]2} t|  t fdd D r4 d j}d| }| j|kr4td| dd| d| j d	 qd S )
Nc                 3   s     | ]}|j  d  j kV  qdS )r   N)name)r   r   fn_productionsr   r   	<genexpr><  s    z#validate_grammar.<locals>.<genexpr>r   convert_zThe conversion function for 'z' zmust be called 'z', not 'z'.)r   r   allr   r   	Exception)r   production_nameexpected_namer   r   r   validate_grammar8  s   



r   c                 C   sp   | d d dv r| d d t | dd   fS | d d dv r0| d d t | dd   fS td|  d)N   )>=<===!=r   )><&Invalid version comparison specifier '')r   stripr   )r   r   r   r   _get_version_comparisonH  s
     r   requested_versionactual_version
comparisonc                 C   sp   |dkr|| kS |dkr|| kS |dkr|| kS |dkr || kS |dkr(|| kS |dkr0|| k S t d| d)	Nr   r   r   r   r   r   r   r   )r   )r   r   r   r   r   r   _compare_versionsP  s   r   c                 C   sB   | d u rdS |  dD ]}t| \}}t|||s dS qdS )NT,F)splitr   r   r   )r   r   r   r   parsed_versionr   r   r   _should_included  s   r   futurec                 C   s4   | d u rdS | d d dkr| dd  |vS | |v S )NTr   !r   )r   r   r   r   r   _should_include_futurep  s
   r   c                 c   s@    t D ]}t|D ]}t|j| sq	t|j|sq	|V  q	qd S )N)r   r   r   r   r   r   )r   r   
conversion
productionr   r   r   r   {  s   r   c                 C   sb   i }t D ]*}t|D ]#}t|j| sq
t|j|sq
|j|v r(td|j d|||j< q
q|S )z
    Returns a mapping from nonterminal production name to the conversion function that
    should be called by the parser.
    zFound duplicate 'z' production in grammar)r   r   r   r   r   r   r   r   )r   r   conversionsr   fn_productionr   r   r   get_nonterminal_conversions  s   	
r   )r   N)r   	functoolsr   typingr   r   r   r   r   r   %libcst._parser.conversions.expressionr	   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   !libcst._parser.conversions.moduler:   !libcst._parser.conversions.paramsr;   r<   r=   r>   r?   r@   $libcst._parser.conversions.statementrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   $libcst._parser.conversions.terminalsrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   $libcst._parser.parso.pgen2.generatorr   r   !libcst._parser.parso.python.tokenr   r   libcst._parser.parso.utilsr   r   #libcst._parser.production_decoratorr   libcst._parser.types.configr    libcst._parser.types.conversionsr   r   libcst._parser.types.productionr   r   __annotations__r   r   r   r   r   r   r   boolr   r   r   r   r   r   r   r   r   <module>   sH  
 3 <3	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghim





