
    g#                        U d dl mZ d dlZd dlZd dlmZmZ d dlmZ dZ	de
d<   ddZ	 	 	 d	 	 	 	 	 	 	 dd	Zdd
Zd Zd Zd ZddZddZddZ	 	 	 	 	 	 	 	 ddZddZy)    )annotationsN)AnyFinal)config__streamlitmagic__r   MAGIC_MODULE_NAMEc                h    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       Y/var/www/openai/venv/lib/python3.12/site-packages/streamlit/runtime/scriptrunner/magic.py	add_magicr      s:    " 99T;/D8tDd3I K    c                   t        | |      }t        |      D ]?  \  }}t        |      }|t        j                  u s6|t        j
                  u s$|t        j                  u s|t        j                  u rt        |       f|t        j                  u s$|t        j                  u s|t        j                  u rt        |       t        |d       |t        j                  u rJ|j                  D ]9  }t        |      t        j                  t        j                  hv s/t        |       ; |t        j                  u s%t        j                   dk\  rU|t        j"                  u rCt        |       t        |d       t        |d       |j$                  D ]  }	t        |	        |t        j&                  u rt        |       t        |d       t        j                   dk\  r0|t        j(                  u r|j*                  D ]  }
t        |
        |t        j,                  u st/        ||t        |       ||t1        |      dz
  k(  |      }|9||_        B |rt5        |        t        j6                  |        y)	z;Parses magic commands and modifies the given AST (sub)tree.orelse)      	finalbody)	body_attr)r   
      )parent_typer   is_last_exprr   N)getattr	enumeratetyper   FunctionDefWithAsyncFunctionDef	AsyncWithr   ForWhileAsyncForClassDefbodyTrysysversion_infoTryStarhandlersIfMatchcases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handler_node	case_noder8   s               r   r   r   9   s    4#DT?4J	 (CHH$C000CMM)%  I$:i3<<>W%h/ #,,&"ii

#9M9M'NN'
3 ( #''!'I,D%<9 $#L1 !. #&& %h/(Y#))-C!ZZ	#I. ( #(("+ J3t9q=0'=E  "
} #@  &d#r   c                   t               }| j                  rUt        | j                  d         t        j                  t        j
                  hv r| j                  j                  d|       yt        | j                        dkD  rt        | j                  d         t        j                  u rwt        | j                  d   j                        rUt        | j                  d         t        j                  t        j
                  hv r| j                  j                  d|       y| j                  j                  d|       y)z>Insert Streamlit import statement at the top(ish) of the tree.r   r      N)_build_st_import_statementr,   r#   r   
ImportFromImportinsertr7   r5   _is_string_constant_noder8   )r   	st_imports     r   r9   r9      s     +,I yyT$))A,'CNNCJJ+GG		I& 	DII1#((*(1););<13>>3::">>		I& 			I&r   c                 b    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   rE   aliasr    r   r   rC   rC      s*    ::IIA(
 r   c           
         t        j                  t        j                  dt        j                  t        t        j
                               t        j
                               | g       S )zBBuild AST node for `__streamlitmagic__.transparent_write(*nodes)`.transparent_write)idctx)attrr8   rR   )funcargskeywords)r   Call	AttributeNamer   Load)nodess    r   _build_st_write_callr\      sH    88]]$((/SXXZ@


  r   c                6   t        | j                        t        j                  u rt	        |||      sy t        | j                  ||      rt        |      sy t        | j                        t        j                  u s%t        | j                        t        j                  u ry t        | j                        t        j                  u ry t        | j                        t        j                  u r| j                  j                  n| j                  g}t        |      S N)r#   r8   r   rW   _is_displayable_last_expr_is_docstring_node*_should_display_docstring_like_node_anywayYield	YieldFromAwaitTupleeltsr\   )r<   r;   r   r   r    r   rU   s          r   r6   r6      s     DJJ388#,E5-  

A{8A DJJ399$TZZ(8CMM(I DJJ399$
 #4::.#));4::??$**D%%r   c                n    t        | t        j                        xr t        | j                  t              S r^   )
isinstancer   Constantr8   str)r<   s    r   rG   rG      s#    dCLL)IjS.IIr   c                    |dk(  xr> t        |       xr1 |t        j                  t        j                  t        j                  hv S )Nr   )rG   r   r$   r&   Module)r<   
node_indexr   s      r   r`   r`      s?    a 	O$T*	OCOOS-A-A3::NNr   c                   d}t        j                  d      rlt        | j                        dk(  ryt	        | j                  d   dd       }|7|j                  d      |dz
     }|j                  d      j                  d	      }|S )
NF"magic.displayLastExprIfNoSemicolonr   
end_lineno
r    ;)r   
get_optionr7   r,   r!   splitstripendswith)r   r   r   last_line_numlast_line_strs        r   r   r      s    " =>tyy>Q		"|TB$!%D!1-!2C!DM%2%8%8%=%F%Fs%K"!!r   c                F    |xr | xr | xr t        j                  d      S )Nro   r   ru   )r   r    r   s      r   r_   r_      s:     	 	D	D '&		D BC
r   c                4    t        j                  d      xr | S )Nzmagic.displayRootDocStringr|   )r   s    r   ra   ra     s    9:FwFr   )r   rj   r   rj   returnr   )r,   FF)r   r   r   rj   r   boolr   r   )r   r   r~   None)r~   r   )r   rj   r~   r   )r   r   r    r   r   r   r~   r   )r   r   r~   r   )
__future__r   r   r.   typingr   r   	streamlitr   r   __annotations__r   r   r9   rC   r\   r6   rG   r`   r   r_   ra   rN   r   r   <module>r      s    # 
 
  
 0 5 /< #(	N$
N$N$ N$ !	N$b'6	
!&HJ"$!%?C	 Gr   