
    &e"                     |    U d dl Z d dlmZ d dlmZ dZeed<   d Z	 dd	Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd ZdS )    N)Final)config__streamlitmagic__MAGIC_MODULE_NAMEc                 r    t          j        | |d          }t          ||           }t          |d|          S )a  Modifies the code to support magic Streamlit commands.

    Parameters
    ----------
    code : str
        The Python code.
    script_path : str
        The path to the script file.

    Returns
    -------
    ast.Module
        The syntax tree for the code.

    execT)is_rootfile_ends_in_semicolon)astparse_does_file_end_in_semicolon_modify_ast_subtree)codescript_pathtreer
   s       Dlib/python3.11/site-packages/streamlit/runtime/scriptrunner/magic.py	add_magicr      sF    " 9T;//D8tDDd3I       bodyFc                    t          | |          }t          |          D ]\  }}t          |          }|t          j        u sT|t          j        u sF|t          j        u s8|t          j        u s*|t          j        u s|t          j	        u s|t          j
        u rt          |           |t          j        u rA|j        D ]8}t          |          t          j        t          j        hv rt          |           9|t          j        u r_t          |j                  D ]\  }	}t          |          |j        |	<   t          |d          }
|
j        |_        t          |           C|t          j        u r!t          |           t          |d           r|t          j        u r?t'          ||t          |           ||t)          |          dz
  k    |          }|||_        |rt-          |            t          j        |            | S )z;Parses magic commands and modifies the given AST (sub)tree.	finalbody)	body_attrorelse   )parent_typer	   is_last_exprr
   )getattr	enumeratetyper   FunctionDefWithForWhileAsyncFunctionDef	AsyncWithAsyncForr   ClassDefr   Tryhandlersr   IfExpr_get_st_write_from_exprlenvalue_insert_import_statementfix_missing_locations)r   r   r	   r
   r   inode	node_type
inner_nodejfinally_noder.   s               r   r   r   5   s   
 4##DT?? 2# 2#4JJ	 ((CH$$CG##CI%%C000CM))CL((%%%% #,&&"i 4 4

##9M'NNN'
3334 #'!!!*4=!9!9 C C:#6z#B#Ba  .t{KKKL)3DN%%%%
 #&  %%%h//// #(""+ JJ3t99q=0'=  E  "
 ' &&&d###Kr   c                 \   t                      }| j        rOt          | j        d                   t          j        t          j        hv r| j                            d|           dS t          | j                  dk    rt          | j        d                   t          j        u rnt          | j        d         j
                  rOt          | j        d                   t          j        t          j        hv r| j                            d|           dS | j                            d|           dS )z>Insert Streamlit import statement at the top(ish) of the tree.r   r      N)_build_st_import_statementr   r   r   
ImportFromImportinsertr-   r+   _is_string_constant_noder.   )r   	st_imports     r   r/   r/   y   s    +,,I y 'T$)A,''CNCJ+GGG	I&&&&& 	DI1#(**(1);<< + 13>3:">>>	I&&&&& 		I&&&&&r   c                  `    t          j        t          j        dt                    g          S )z>Build AST node for `import magic_funcs as __streamlitmagic__`.z*streamlit.runtime.scriptrunner.magic_funcs)nameasname)names)r   r;   aliasr    r   r   r9   r9      s:    :IA(  
   r   c           
          t          j        t          j        dt          j        t          t          j                              t          j                              | g dd          S )zBBuild AST node for `__streamlitmagic__.transparent_write(*nodes)`.transparent_write)idctx)attrr.   rH   N)funcargskeywordskwargsstarargs)r   Call	AttributeNamer   Load)nodess    r   _build_st_write_callrT      sb    8]$(/SXZZ@@@


 
 

 
 
 
 
r   c                    t          | j                  t          j        u rt	          |||          sd S t          | j        ||          rt          |          sd S t          | j                  t          j        u s t          | j                  t          j        u rd S t          | j                  t          j	        u rd S t          | j                  t          j
        u r| j        j        }t          |          }nt          | j                  t          j        u r| j        g}t          |          }nOt          | j                  t          j        u r| j        g}t          |          }n| j        g}t          |          }|S N)r   r.   r   rO   _is_displayable_last_expr_is_docstring_node*_should_display_docstring_like_node_anywayYield	YieldFromAwaitTupleeltsrT   StrrQ   )r2   r1   r   r	   r   r
   rK   st_writes           r   r,   r,      sp    DJ38##,E5- -# t 
A{  8AA t DJ39$$TZ(8(8CM(I(It DJ39$$t
 DJ39$$z'-- 
dj		SW	$	$
|'-- 
dj		SX	%	%
|'-- 
|'--Or   c                 n    t          |           t          j        u ot          | j                  t          u S rV   )r   r   Constantr.   str)r2   s    r   r=   r=      s)    ::%A$tz*:*:c*AAr   c                 v    |dk    o3t          |           o$|t          j        t          j        t          j        hv S )Nr   )r=   r   r    r$   Module)r2   
node_indexr   s      r   rX   rX      s;    a 	O$T**	OCOS-A3:NNr   c                     d}t          j        d          rdt          | j        d         dd           }|F|                    d          |dz
           }|                    d                              d          }|S )	NF"magic.displayLastExprIfNoSemicolon
end_lineno
r    ;)r   
get_optionr   r   splitstripendswith)r   r   r
   last_line_numlast_line_strs        r   r   r      s    " =>> L	"|TBB$ JJt,,]Q->?M%2%8%8%=%=%F%Fs%K%K"!!r   c                 8    |o| o| ot          j        d          S )Nrh   r   rn   )r	   r   r
   s      r   rW   rW      s:     	 	D	D '&		D BCC
r   c                 .    t          j        d          o| S )Nzmagic.displayRootDocStringru   )r	   s    r   rY   rY     s    9::FwFr   )r   FF)r   typing_extensionsr   	streamlitr   r   __annotations__r   r   r/   r9   rT   r,   r=   rX   r   rW   rY   rD   r   r   <module>rz      s   



 # # # # # #      
 0 5 / / /  6 CHA A A AH' ' '6	 	 	  3 3 3lB B B  " " "  G G G G Gr   