
    &e7>                        U d Z ddlZddlZddlZddlZddlZddlmZmZm	Z	 ddl
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 dd	lmZ dd
lmZ ddlmZ erddlmZ  ee          Z ee!d<   dZ"ee!d<    G d d          Z#dededdfdZ$d Z%d Z&d Z'd Z(d Z)d Z* ej+        d          Z,d Z-d Z.d Z/d  Z0d! Z1d" Z2d# Z3d$ Z4d% Z5d*d'Z6d( Z7d) Z8dS )+z@Allows us to create and absorb changes (aka Deltas) to elements.    N)TYPE_CHECKINGAnycast)Final)
get_logger)	DocString)Member)gather_metrics)__file__)Secrets)is_mem_address_str)DeltaGeneratorLOGGER)z
(element,  CONFUSING_STREAMLIT_SIG_PREFIXESc                   \    e Zd Z ed          efdeddfd            Zedd            ZdS )		HelpMixinhelpobjreturnr   c                 t    t                      }t          ||           | j                            d|          S )u  Display help and other information for a given object.

        Depending on the type of object that is passed in, this displays the
        object's name, type, value, signature, docstring, and member variables,
        methods — as well as the values/docstring of members and methods.

        Parameters
        ----------
        obj : any
            The object whose information should be displayed. If left
            unspecified, this call will display help for Streamlit itself.

        Example
        -------

        Don't remember how to initialize a dataframe? Try this:

        >>> import streamlit as st
        >>> import pandas
        >>>
        >>> st.help(pandas.DataFrame)

        .. output::
            https://doc-string.streamlit.app/
            height: 700px

        Want to quickly check what data type is output by a certain function?
        Try:

        >>> import streamlit as st
        >>>
        >>> x = my_poorly_documented_function()
        >>> st.help(x)

        Want to quickly inspect an object? No sweat:

        >>> class Dog:
        >>>   '''A typical dog.'''
        >>>
        >>>   def __init__(self, breed, color):
        >>>     self.breed = breed
        >>>     self.color = color
        >>>
        >>>   def bark(self):
        >>>     return 'Woof!'
        >>>
        >>>
        >>> fido = Dog('poodle', 'white')
        >>>
        >>> st.help(fido)

        .. output::
            https://doc-string1.streamlit.app/
            height: 300px

        And if you're using Magic, you can get help for functions, classes,
        and modules without even typing ``st.help``:

        >>> import streamlit as st
        >>> import pandas
        >>>
        >>> # Get help for Pandas read_csv:
        >>> pandas.read_csv
        >>>
        >>> # Get help for Streamlit itself:
        >>> st

        .. output::
            https://doc-string2.streamlit.app/
            height: 700px
        
doc_string)DocStringProto	_marshalldg_enqueue)selfr   doc_string_protos      =lib/python3.11/site-packages/streamlit/elements/doc_string.pyr   zHelpMixin.help0   s;    R *++"C(((w.>???    c                 "    t          d|           S )zGet our DeltaGenerator.r   )r   )r   s    r   r   zHelpMixin.dg}   s     $d+++r   N)r   r   )	__name__
__module____qualname__r
   	streamlitr   r   propertyr    r   r   r   r   /   s        ^F' J@ J@ J@,< J@ J@ J@ J@X , , , X, , ,r   r   r   r   r   c                    t                      }||| _        t          |          }|| _        t	          |          }||| _        t          ||          }||| _        | j        	                    t          |                     dS )zIConstruct a DocString object.

    See DeltaGenerator.help for docs.
    N)_get_variable_namename_get_type_as_strtype_get_docstringr   
_get_valuevaluemembersextend_get_members)r   r   var_nameobj_typeobj_docs	obj_values         r   r   r      s    
 "##H ($$H$c""H&.#3))I!*##L$5$566666r   c                 N    t          | dd           }|r|S t          | dd           S )Nr#   r!   getattr)r   r)   s     r   	_get_namer9      s6     3--D  3
D)))r   c                 $    t          | dd           S )Nr"   r7   r   s    r   _get_moduler<      s    3d+++r   c                    t          j        |           st          |           sd S d}	 t          t          j        |                     }n# t
          $ r d}Y nt          $ r Y d S w xY wd}t          j        t                    5  | j
        dk    }d d d            n# 1 swxY w Y   |r7t          D ]/}|                    |          r|                    |d          } n0|S )N z(...)Fzstreamlit.delta_generator()inspectisclasscallablestr	signature
ValueError	TypeError
contextlibsuppressAttributeErrorr"   r   
startswithreplace)r   sigis_delta_genprefixs       r   _get_signaturerO      sc   ?3  t
C'#C(())      tt L		^	,	, E E~)DDE E E E E E E E E E E E E E E  6 	 	F~~f%% kk&#.. Js)   !A A&	A&%A&BB #B c                 "   t          j        |           }|bt          |           }|t          urJ|t          j        ur<t          j        |           s(t          j        |           st          j        |          }|r|                                S d S N)r@   getdocr+   types
ModuleType
isfunctionismethodstrip)r   r   r3   s      r   r,   r,      s    $$J 99 D   000&s++ 1$S)) 1 !11J "!!!4r   c                  D    t                      } | dS t          |           S )zTry to get the name of the variable in the current line, as set by the user.

    For example:
    foo = bar.Baz(123)
    st.help(foo)

    The name is "foo"
    N) _get_current_line_of_code_as_str _get_variable_name_from_code_str)codes    r   r(   r(      s'     ,--D|t+D111r   c                    t          j        |           }t          |d          s2t          |d          s!|                     d          r
| d d         } | S t	          |          }|sd S t          |          t           j        u r-t          |j                  t           j        u r|j        j	        S nUt          |          t           j
        t           j        t           j        t           j        t           j        t           j        fv rd S |                     d          }t#          |          dk    }|j        }|r|j        dz
  }||         }d }n|d         }t)          |d	d          }|||         S )
Nr   )command_namewrite,
   r   end_col_offset)astparse_is_stcommandendswith_get_stcommand_argr+   	NamedExprtargetNameidConstantNumStrBytesNameConstantEllipsissplitlen
col_offsetlinenor8   )	r[   treearg_node
code_linesis_multilinestart_offsetfirst_lineno
first_line
end_offsets	            r   rZ   rZ      s   9T??D* F333 M7= = = 
 == 	9D!$''H  t 
h3=	(	(   CH,,?%% -
 
h	 
 
 t
 D!!Jz??Q&L&L =*-


  ]
X'7<<
l:-..r   z[\n\r]+c                      t                      } | d S | j        }|sd S d                    |          }t          j        t
          d|                                          S )Nr>   )_get_scriptrunner_framecode_contextjoinresub	_NEWLINESrW   )scriptrunner_framer   code_as_strings      r   rY   rY   L  sc    022!
 t%2L 
 tWW\**N6)R!5!5!7!7888r   c                  z    d } d }t          j                    D ]"}|j         d S |j        t          k    r| } n|} #|S rQ   )r@   stackr   filenameSCRIPTRUNNER_FILENAME)
prev_framer   frames      r   r   r   c  s\    J  
 
 %44>222!+E

r   c                     | j         d         j        }t          |          t          j        urdS t          |j        dd          |k    pt          |j        dd          |k    S )z:Checks whether the AST in tree is a call for command_name.r   Frl   Nattr)bodyr.   r+   rd   Callr8   func)rw   r]   	root_nodes      r   rf   rf   z  sb    	!"I	??ch&&u 		d++|; 	> 		--=r   c                 R    | j         d         j        }|j        r|j        d         S dS )z8Gets the argument node for the st command in tree (AST).r   N)r   r.   args)rw   r   s     r   rh   rh     s.     	!"I~ !~a  4r   c                 p    t          j        |           rdS t          t          |           j                  S )Nclass)r@   rA   rC   r+   r!   r;   s    r   r*   r*     s0    s wtCyy!"""r   c                 @    | sdS |                      d          \  }}}|S )Nr>   ra   )	partition)textleft_s      r   _get_first_liner     s+     r%%JD!QKr   c                     t          j        |           rdS t          j        |           rdS t          |           rdS dS )N      rb   r   )r@   ismodulerA   rB   )r.   s    r   _get_weightr     sI     qu q q1r   c                    t          |           }||S t          |           }|r| }nt          |           }t          |          }t          |          }t	          |          pd}|r|r
| d| | }n| | }||k    rd }|S )Nr>   .)_get_human_readable_valuer9   r+   r<   rO   )r   r2   r5   r)   name_objmodulerL   s          r   r-   r-     s    )#..I S>>D # 99""""F

"
"
(bC ' 	'!//D/#//IIIH 	r   c                 H   t          | t                    rd S t          j        |           s#t          j        |           st          |           rd S t          |           }t          | t                    rt          |          S t          |          rd S t          |          S rQ   )

isinstancer   r@   rA   r   rB   reprrC   _shortenr   )r.   	value_strs     r   r   r     s    %!!  tu !1%!8!8 HUOO tUI% # 	""")$$ tIr   ,  c                 n    |                                  } t          |           |k    r| d |         dz   n| S )Nz...)rW   rt   )slengths     r   r   r     s5    			A!$Q&1WfW:a7r   c                     t          | dd           }|sdS t          j        |          D ]B}t          ||d           }|t          |t                    st          j        |          r dS CdS )N	__class__FT)r8   r@   getmror   r%   isgetsetdescriptor)r   	attr_name	obj_classparent_class
class_attrs        r   _is_computed_propertyr     s    [$//I u  y11  \9d;;
 j(++ 	w/I*/U/U 	44	 5r   c                 t   g }t          |           D ]}|                    d          rt          | |          }|r+t          | j        |          }d}d}t          |          }d }nUt          | |          }	t          |	          }t          |	          }
t          |	          }|
t          |	          }d }nd }|
}|dk    rt                      }||_
        ||_        |t          |          |_        |||_        |                    ||f           |rt!          |d           }d |D             S g S )Nr   r%   r   r   c                 ,    | d         | d         j         fS )Nr   rb   )r)   )xs    r   <lambda>z_get_members.<locals>.<lambda>3  s    AaD!A$)CT r   )keyc                     g | ]\  }}|S r&   r&   ).0r   ms      r   
<listcomp>z _get_members.<locals>.<listcomp>4  s    ---da---r   )dirrJ   r   r8   r   r,   r   r   r*   MemberProtor)   r+   r   r   r.   appendsorted)r   members_for_sortingr   is_computed_valueparent_attrmember_typeweightmember_docsmember_value
attr_valuehuman_readable_valuemembersorted_memberss                r   r1   r1     st   XX +5 +5	$$ 	1#yAA 	4!#-;;K$KF(55KLL i00J ,,F#<Z#H#H *:66K#+,Z88#"3(""!" / < <F#'FL""FF#34444 . 39T9TUUU--n----Ir   )r   )9__doc__rd   rG   r@   r   rS   typingr   r   r   typing_extensionsr   r$   streamlit.loggerr   streamlit.proto.DocString_pb2r   r   r	   r   streamlit.runtime.metrics_utilr
   ,streamlit.runtime.scriptrunner.script_runnerr   r   streamlit.runtime.secretsr   streamlit.string_utilr   streamlit.delta_generatorr   r!   r   __annotations__r   r   r   r9   r<   rO   r,   r(   rZ   compiler   rY   r   rf   rh   r*   r   r   r-   r   r   r   r1   r&   r   r   <module>r      s   G F F 



      				  + + + + + + + + + + # # # # # #     ' ' ' ' ' ' E E E E E E ? ? ? ? ? ? 9 9 9 9 9 9      . - - - - - 4 4 4 4 4 4 9888888 
8$$ $ $ $ +:  % 9 9 9Q, Q, Q, Q, Q, Q, Q, Q,h7 7S 7T 7 7 7 7.* * *$, , ,  B  02 2 2"L/ L/ L/^ BJz""	9 9 9.  .     # # #         F  .8 8 8 8
  *4 4 4 4 4r   